diff options
Diffstat (limited to 'elf')
-rw-r--r-- | elf/Makefile | 8 | ||||
-rw-r--r-- | elf/dynamic-link.h | 8 |
2 files changed, 10 insertions, 6 deletions
diff --git a/elf/Makefile b/elf/Makefile index 42a2279..b1bd6f4 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 199e1ba..5d48b16 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 |