about summary refs log tree commit diff
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.gz
glibc-12b5b6b7f78ea111e89bbf638294a5413c791072.tar.xz
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)