diff options
author | Ulrich Drepper <drepper@redhat.com> | 1999-05-11 13:00:20 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1999-05-11 13:00:20 +0000 |
commit | 12b5b6b7f78ea111e89bbf638294a5413c791072 (patch) | |
tree | 2667efe9abc4443d7fe0350feed47d839ff7970c /elf/dl-open.c | |
parent | 5ac3d2173cc6a11535e1694a12f9f11e877c36ea (diff) | |
download | glibc-12b5b6b7f78ea111e89bbf638294a5413c791072.tar glibc-12b5b6b7f78ea111e89bbf638294a5413c791072.tar.gz glibc-12b5b6b7f78ea111e89bbf638294a5413c791072.tar.bz2 glibc-12b5b6b7f78ea111e89bbf638294a5413c791072.zip |
Update.
1999-05-11 Ulrich Drepper <drepper@cygnus.com>
* elf/Versions (ld.so) [GLIBC_2.1.1]: Add _dl_lazy.
* elf/dl-open.c (_dl_open_worker): Only relocate newly loaded objects
lazily if LD_BIND_NOW is not set.
* elf/dl-support.c (_dl_lazy): New variable.
(non_dynamic_init): Set _dl_lazy according to LD_BIND_NOW envvar.
* elf/rtld.c (_dl_lazy): new global variable.
( dl_main): Remove lazy, replace it by _dl_lazy.
1999-05-06 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* locale/setlocale.c (new_composite_name): Check also whether the
first category name differs.
1999-05-11 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ftime.c: Use the bsd implementation, not
the generic one.
1999-05-11 Philip Blundell <pb@nexus.co.uk>
* sysdeps/generic/bits/socket.h (struct sockaddr_storage): New
structure; storage suitable for any socket address.
* sysdeps/unix/sysv/linux/bits/socket.h (struct sockaddr_storage):
Likewise.
* sysdeps/unix/sysv/linux/mips/bits/socket.h (struct
sockaddr_storage): Likewise.
* inet/netinet/in.h: Use ULONG_MAX not ~0 to test for a 64-bit
platform.
Diffstat (limited to 'elf/dl-open.c')
-rw-r--r-- | elf/dl-open.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/elf/dl-open.c b/elf/dl-open.c index 9a3c0939d8..b6c79b41ef 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -46,6 +46,8 @@ extern char **__libc_argv; extern char **__environ; +extern int _dl_lazy; /* Do we do lazy relocations? */ + /* Undefine the following for debugging. */ /* #define SCOPE_DEBUG 1 */ #ifdef SCOPE_DEBUG @@ -85,6 +87,7 @@ dl_open_worker (void *a) struct r_debug *r; unsigned int global_add; const char *dst; + int lazy; /* Maybe we have to expand a DST. */ dst = strchr (file, '$'); @@ -145,6 +148,9 @@ dl_open_worker (void *a) show_scope (new); #endif + /* Only do lazy relocation if `LD_BIND_NOW' is not set. */ + lazy = (mode & RTLD_BINDING_MASK) == RTLD_LAZY && _dl_lazy; + /* Relocate the objects loaded. We do this in reverse order so that copy relocs of earlier objects overwrite the data written by later objects. */ @@ -173,8 +179,7 @@ dl_open_worker (void *a) } else #endif - _dl_relocate_object (l, l->l_scope, - (mode & RTLD_BINDING_MASK) == RTLD_LAZY, 0); + _dl_relocate_object (l, l->l_scope, lazy, 0); } if (l == new) |