mirror of git://sourceware.org/git/glibc.git
_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:
parent
cbe7d24bb4
commit
fe114d2064
|
@ -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>
|
2013-06-15 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist: Update.
|
* sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist: Update.
|
||||||
|
|
|
@ -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>
|
2013-06-15 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/mips/mips32/nptl/libpthread.abilist:
|
* sysdeps/unix/sysv/linux/mips/mips32/nptl/libpthread.abilist:
|
||||||
|
|
|
@ -35,9 +35,6 @@ _dl_var_init (void *array[])
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#include <bits/libc-lock.h>
|
|
||||||
|
|
||||||
__libc_lock_define_initialized_recursive (static, _dl_static_lock)
|
|
||||||
|
|
||||||
static void *variables[] =
|
static void *variables[] =
|
||||||
{
|
{
|
||||||
|
@ -52,8 +49,6 @@ _dl_static_init (struct link_map *map)
|
||||||
lookup_t loadbase;
|
lookup_t loadbase;
|
||||||
void (*f) (void *[]);
|
void (*f) (void *[]);
|
||||||
|
|
||||||
__libc_lock_lock_recursive (_dl_static_lock);
|
|
||||||
|
|
||||||
loadbase = _dl_lookup_symbol_x ("_dl_var_init", map, &ref,
|
loadbase = _dl_lookup_symbol_x ("_dl_var_init", map, &ref,
|
||||||
map->l_local_scope, NULL, 0, 1, NULL);
|
map->l_local_scope, NULL, 0, 1, NULL);
|
||||||
if (ref != NULL)
|
if (ref != NULL)
|
||||||
|
@ -61,8 +56,6 @@ _dl_static_init (struct link_map *map)
|
||||||
f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
|
f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
|
||||||
f (variables);
|
f (variables);
|
||||||
}
|
}
|
||||||
|
|
||||||
__libc_lock_unlock_recursive (_dl_static_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -33,9 +33,6 @@ _dl_var_init (void *array[])
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#include <bits/libc-lock.h>
|
|
||||||
|
|
||||||
__libc_lock_define_initialized_recursive (static, _dl_static_lock)
|
|
||||||
|
|
||||||
static void *variables[] =
|
static void *variables[] =
|
||||||
{
|
{
|
||||||
|
@ -64,8 +61,6 @@ _dl_static_init (struct link_map *l)
|
||||||
void (*f) (void *[]);
|
void (*f) (void *[]);
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
__libc_lock_lock_recursive (_dl_static_lock);
|
|
||||||
|
|
||||||
loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope,
|
loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope,
|
||||||
NULL, 0, 1, NULL);
|
NULL, 0, 1, NULL);
|
||||||
|
|
||||||
|
@ -84,8 +79,6 @@ _dl_static_init (struct link_map *l)
|
||||||
f (variables);
|
f (variables);
|
||||||
_dl_protect_relro (rtld_map);
|
_dl_protect_relro (rtld_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
__libc_lock_unlock_recursive (_dl_static_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue