Page MenuHomeFreeBSD

D8625.1794801246.diff
No OneTemporary

Authored By
Unknown
Size
1 KB
Referenced Files
None
Subscribers
None

D8625.1794801246.diff

Index: libexec/rtld-elf/mips/reloc.c
===================================================================
--- libexec/rtld-elf/mips/reloc.c
+++ libexec/rtld-elf/mips/reloc.c
@@ -240,10 +240,17 @@
Elf_Addr *got = obj->pltgot;
const Elf_Sym *def;
const Obj_Entry *defobj;
+ Elf_Addr *where;
Elf_Addr target;
+ RtldLockState lockstate;
+ rlock_acquire(rtld_bind_lock, &lockstate);
+ if (sigsetjmp(lockstate.env, 0) != 0)
+ lock_upgrade(rtld_bind_lock, &lockstate);
+
+ where = &got[obj->local_gotno + reloff - obj->gotsym];
def = find_symdef(reloff, obj, &defobj, SYMLOOK_IN_PLT, NULL,
- NULL);
+ &lockstate);
if (def == NULL)
rtld_die();
@@ -251,9 +258,9 @@
dbg("bind now/fixup at %s sym # %jd in %s --> was=%p new=%p",
obj->path,
(intmax_t)reloff, defobj->strtab + def->st_name,
- (void *)got[obj->local_gotno + reloff - obj->gotsym],
- (void *)target);
- got[obj->local_gotno + reloff - obj->gotsym] = target;
+ (void *)*where, (void *)target);
+ *where = target;
+ lock_release(rtld_bind_lock, &lockstate);
return (Elf_Addr)target;
}

File Metadata

Mime Type
text/plain
Expires
Mon, Nov 16, 3:54 AM (11 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41758722
Default Alt Text
D8625.1794801246.diff (1 KB)

Event Timeline