summary refs log tree commit diff
path: root/elf
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-03-06 09:51:56 +0000
committerUlrich Drepper <drepper@redhat.com>2004-03-06 09:51:56 +0000
commit4df8c11d26a29bc3a6116a9125cdfdca3cd517bb (patch)
tree610d76b0b4ab15d392f7b8077fd597e54154ef0c /elf
parent42af49f875e2d0a8cdcf575fbd3a06c12be6468e (diff)
downloadglibc-4df8c11d26a29bc3a6116a9125cdfdca3cd517bb.tar.gz
glibc-4df8c11d26a29bc3a6116a9125cdfdca3cd517bb.tar.xz
glibc-4df8c11d26a29bc3a6116a9125cdfdca3cd517bb.zip
Update.
	* configure.in: Recognize --enable-bind-now.
	* elf/dynamic-link.h (elf_get_dynamic_info): Allow bind-now flags
	in ld.so.
	* Makerules (LDFLAGS-c.so): Add -z now if so configured.
	* elf/Makefile ($(objpfx)ld.so): Likewise.
	* config.make.in (bind-now): New definition.
Diffstat (limited to 'elf')
-rw-r--r--elf/Makefile8
-rw-r--r--elf/dynamic-link.h8
2 files changed, 10 insertions, 6 deletions
diff --git a/elf/Makefile b/elf/Makefile
index 42a2279a72..b1bd6f47d9 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1995-2002, 2003 Free Software Foundation, Inc.
+# Copyright (C) 1995-2002, 2003, 2004 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -256,16 +256,18 @@ $(objpfx)librtld.os: $(objpfx)dl-allobjs.os $(objpfx)rtld-libc.a
 
 generated += librtld.map librtld.mk rtld-libc.a librtld.os.map
 
+z-now-yes = -Wl,-z,now
+
 $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map)
 	@rm -f $@.lds
-	$(LINK.o) -nostdlib -nostartfiles -shared			\
+	$(LINK.o) -nostdlib -nostartfiles -shared $(z-now-$(bind-now))	\
 		  $(LDFLAGS-rtld) -Wl,-z,defs -Wl,--verbose 2>&1 |	\
 		  LC_ALL=C \
 		  sed -e '/^=========/,/^=========/!d;/^=========/d'	\
 		      -e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \
 		  > $@.lds
 	$(LINK.o) -nostdlib -nostartfiles -shared -o $@			\
-		  $(LDFLAGS-rtld) -Wl,-z,defs				\
+		  $(LDFLAGS-rtld) -Wl,-z,defs $(z-now-$(bind-now))	\
 		  $(filter-out $(map-file),$^) $(load-map-file)		\
 		  -Wl,-soname=$(rtld-installed-name) -T $@.lds
 	rm -f $@.lds
diff --git a/elf/dynamic-link.h b/elf/dynamic-link.h
index 199e1bac5c..5d48b16511 100644
--- a/elf/dynamic-link.h
+++ b/elf/dynamic-link.h
@@ -159,10 +159,12 @@ elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp)
     assert (info[DT_RELENT]->d_un.d_val == sizeof (ElfW(Rel)));
 #endif
 #ifdef RTLD_BOOTSTRAP
+  /* Only the bind now flags are allowed.  */
+  assert (info[VERSYMIDX (DT_FLAGS_1)] == NULL
+	  || info[VERSYMIDX (DT_FLAGS_1)]->d_un.d_val == DF_1_NOW);
+  assert (info[DT_FLAGS] == NULL
+	  || info[DT_FLAGS]->d_un.d_val == DF_BIND_NOW);
   /* Flags must not be set for ld.so.  */
-  assert (info[DT_FLAGS] == NULL);
-  assert (info[VERSYMIDX (DT_FLAGS_1)] == NULL);
-  /* The dynamic linker should have none of these set.  */
   assert (info[DT_RUNPATH] == NULL);
   assert (info[DT_RPATH] == NULL);
 #else