From 4df8c11d26a29bc3a6116a9125cdfdca3cd517bb Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 6 Mar 2004 09:51:56 +0000 Subject: 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. --- elf/Makefile | 8 +++++--- elf/dynamic-link.h | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) (limited to 'elf') 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 -- cgit 1.4.1