Page MenuHomeFreeBSD

D60588.id.diff
No OneTemporary

D60588.id.diff

diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -187,7 +187,7 @@
bool);
static char *origin_subst(Obj_Entry *, const char *);
static bool obj_resolve_origin(Obj_Entry *obj);
-static void preinit_main(void);
+static void preinit_main(RtldLockState *lockstate);
static void rtld_recalc_bind_not(const char *);
static void rtld_recalc_dangerous_ld_env(void);
static void rtld_recalc_debug(const char *);
@@ -1005,7 +1005,7 @@
rtld_exit_ptr = rtld_exit;
if (obj_main->crt_no_init)
- preinit_main();
+ preinit_main(&lockstate);
objlist_call_init(&initlist, &lockstate);
_r_debug_postinit(&obj_main->linkmap);
objlist_clear(&initlist);
@@ -3122,7 +3122,7 @@
}
static void
-preinit_main(void)
+preinit_main(RtldLockState *lockstate)
{
uintptr_t *preinit_addr;
int index;
@@ -3131,6 +3131,7 @@
if (preinit_addr == NULL)
return;
+ lock_release(rtld_bind_lock, lockstate);
for (index = 0; index < obj_main->preinit_array_num; index++) {
if (preinit_addr[index] != 0 && preinit_addr[index] != 1) {
dbg("calling preinit function for %s at %p",
@@ -3140,6 +3141,7 @@
call_init_pointer(obj_main, preinit_addr[index]);
}
}
+ wlock_acquire(rtld_bind_lock, lockstate);
}
/*

File Metadata

Mime Type
text/plain
Expires
Sun, Oct 11, 7:14 PM (13 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40610555
Default Alt Text
D60588.id.diff (1 KB)

Event Timeline