diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-01-11 19:42:21 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-01-11 19:42:21 +0000 |
commit | 7e36861e77d7edde557ebf1172271e922c9a51ff (patch) | |
tree | 86c517e9026f21bdea117f9eaf8c1c38c0615f15 /sysdeps/unix/sysv/linux | |
parent | 3bbddbe4a37ebd5e015fea42065db59966444224 (diff) | |
download | glibc-7e36861e77d7edde557ebf1172271e922c9a51ff.tar.gz glibc-7e36861e77d7edde557ebf1172271e922c9a51ff.tar.xz glibc-7e36861e77d7edde557ebf1172271e922c9a51ff.zip |
Update.
2001-01-11 H.J. Lu <hjl@gnu.org> * elf/dl-libc.c (do_dlopen): Move DL_STATIC_INIT to ... * elf/dl-open.c (_dl_open): Here. * sysdeps/unix/sysv/linux/ia64/dl-static.c (_dl_static_lock): Make it static. (_dl_static_init): Initialize the variables every time when possible. * sysdeps/unix/sysv/linux/ia64/ldsodefs.h (DL_STATIC_INIT): Undefine it first.
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/dl-static.c | 18 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/ldsodefs.h | 1 |
2 files changed, 7 insertions, 12 deletions
diff --git a/sysdeps/unix/sysv/linux/ia64/dl-static.c b/sysdeps/unix/sysv/linux/ia64/dl-static.c index 7d6eab8a7b..19cb97d675 100644 --- a/sysdeps/unix/sysv/linux/ia64/dl-static.c +++ b/sysdeps/unix/sysv/linux/ia64/dl-static.c @@ -40,7 +40,7 @@ _dl_var_init (void *array[]) #else #include <bits/libc-lock.h> -__libc_lock_define_initialized_recursive (, _dl_static_lock) +__libc_lock_define_initialized_recursive (static, _dl_static_lock) static void *variables[] = { @@ -54,22 +54,16 @@ _dl_static_init (struct link_map *map) const ElfW(Sym) *ref; lookup_t loadbase; void (*f) (void *[]); - static int done = 0; __libc_lock_lock (_dl_static_lock); - if (done) - { - __libc_lock_unlock (_dl_static_lock); - return; - } - - done = 1; - loadbase = _dl_lookup_symbol ("_dl_var_init", map, &ref, map->l_local_scope, 0, 1); - f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); - f (variables); + if (ref != NULL) + { + f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); + f (variables); + } __libc_lock_unlock (_dl_static_lock); } diff --git a/sysdeps/unix/sysv/linux/ia64/ldsodefs.h b/sysdeps/unix/sysv/linux/ia64/ldsodefs.h index 2c74a07619..34fb9e886c 100644 --- a/sysdeps/unix/sysv/linux/ia64/ldsodefs.h +++ b/sysdeps/unix/sysv/linux/ia64/ldsodefs.h @@ -27,6 +27,7 @@ /* We need special support to initialize DSO loaded for statically linked binaries. */ extern void _dl_static_init (struct link_map *map); +#undef DL_STATIC_INIT #define DL_STATIC_INIT(map) _dl_static_init (map) #endif /* ldsodefs.h */ |