diff options
Diffstat (limited to 'elf/rtld.c')
-rw-r--r-- | elf/rtld.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/elf/rtld.c b/elf/rtld.c index ad325d4c10..a359167f8a 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -857,6 +857,14 @@ rtld_lock_default_unlock_recursive (void *lock) __rtld_lock_default_unlock_recursive (lock); } #endif +#if PTHREAD_IN_LIBC +/* Dummy implementation. See __rtld_mutex_init. */ +static int +rtld_mutex_dummy (pthread_mutex_t *lock) +{ + return 0; +} +#endif static void @@ -1148,6 +1156,10 @@ dl_main (const ElfW(Phdr) *phdr, GL(dl_rtld_lock_recursive) = rtld_lock_default_lock_recursive; GL(dl_rtld_unlock_recursive) = rtld_lock_default_unlock_recursive; #endif +#if PTHREAD_IN_LIBC + ___rtld_mutex_lock = rtld_mutex_dummy; + ___rtld_mutex_unlock = rtld_mutex_dummy; +#endif /* The explicit initialization here is cheaper than processing the reloc in the _rtld_local definition's initializer. */ @@ -2363,6 +2375,9 @@ dl_main (const ElfW(Phdr) *phdr, loader. */ __rtld_malloc_init_real (main_map); + /* Likewise for the locking implementation. */ + __rtld_mutex_init (); + /* Mark all the objects so we know they have been already relocated. */ for (struct link_map *l = main_map; l != NULL; l = l->l_next) { @@ -2468,6 +2483,9 @@ dl_main (const ElfW(Phdr) *phdr, at this point. */ __rtld_malloc_init_real (main_map); + /* Likewise for the locking implementation. */ + __rtld_mutex_init (); + RTLD_TIMING_VAR (start); rtld_timer_start (&start); |