aboutsummaryrefslogtreecommitdiff
path: root/elf/dl-open.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-05-11 13:00:20 +0000
committerUlrich Drepper <drepper@redhat.com>1999-05-11 13:00:20 +0000
commit12b5b6b7f78ea111e89bbf638294a5413c791072 (patch)
tree2667efe9abc4443d7fe0350feed47d839ff7970c /elf/dl-open.c
parent5ac3d2173cc6a11535e1694a12f9f11e877c36ea (diff)
downloadglibc-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.c9
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)