summaryrefslogtreecommitdiff
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)
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