_dl_static_init: Remove nested locking.

This function is now called from dl_open_worker with the GL(dl_load_lock)
lock held and no longer needs local protection.  GL(dl_load_lock) also
correctly protects _dl_lookup_symbol_x called here that relies on the
caller to have serialized access to the data structures it uses.
This commit is contained in:
Maciej W. Rozycki 2013-06-27 11:15:51 +01:00
parent cbe7d24bb4
commit fe114d2064
4 changed files with 14 additions and 14 deletions

View File

@ -1,3 +1,10 @@
2013-06-27 Maciej W. Rozycki <macro@codesourcery.com>
* sysdeps/unix/sysv/linux/ia64/dl-static.c: Do not include
<bits/libc-lock.h>.
(_dl_static_lock): Remove variable.
(_dl_static_init): Remove _dl_static_lock locking.
2013-06-15 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist: Update.

View File

@ -1,3 +1,10 @@
2013-06-27 Maciej W. Rozycki <macro@codesourcery.com>
* sysdeps/unix/sysv/linux/mips/dl-static.c: Do not include
<bits/libc-lock.h>.
(_dl_static_lock): Remove variable.
(_dl_static_init): Remove _dl_static_lock locking.
2013-06-15 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/mips/mips32/nptl/libpthread.abilist:

View File

@ -35,9 +35,6 @@ _dl_var_init (void *array[])
}
#else
#include <bits/libc-lock.h>
__libc_lock_define_initialized_recursive (static, _dl_static_lock)
static void *variables[] =
{
@ -52,8 +49,6 @@ _dl_static_init (struct link_map *map)
lookup_t loadbase;
void (*f) (void *[]);
__libc_lock_lock_recursive (_dl_static_lock);
loadbase = _dl_lookup_symbol_x ("_dl_var_init", map, &ref,
map->l_local_scope, NULL, 0, 1, NULL);
if (ref != NULL)
@ -61,8 +56,6 @@ _dl_static_init (struct link_map *map)
f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
f (variables);
}
__libc_lock_unlock_recursive (_dl_static_lock);
}
#endif

View File

@ -33,9 +33,6 @@ _dl_var_init (void *array[])
}
#else
#include <bits/libc-lock.h>
__libc_lock_define_initialized_recursive (static, _dl_static_lock)
static void *variables[] =
{
@ -64,8 +61,6 @@ _dl_static_init (struct link_map *l)
void (*f) (void *[]);
size_t i;
__libc_lock_lock_recursive (_dl_static_lock);
loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope,
NULL, 0, 1, NULL);
@ -84,8 +79,6 @@ _dl_static_init (struct link_map *l)
f (variables);
_dl_protect_relro (rtld_map);
}
__libc_lock_unlock_recursive (_dl_static_lock);
}
#endif