diff options
author | Roland McGrath <roland@gnu.org> | 2005-02-16 19:57:14 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2005-02-16 19:57:14 +0000 |
commit | 7cd274587760436effbfce65cfdbd51f761acd67 (patch) | |
tree | 8620654b8197c81aded8a206680e53b4294baccf /elf | |
parent | aa29d418cf3ee21f906247b6ab49e8aab6fd19dc (diff) |
Updated to fedora-glibc-2_3-20050216T1256
Diffstat (limited to 'elf')
-rw-r--r-- | elf/Makefile | 12 | ||||
-rw-r--r-- | elf/dl-load.c | 22 | ||||
-rw-r--r-- | elf/ldconfig.c | 2 | ||||
-rw-r--r-- | elf/ldd.bash.in | 4 | ||||
-rw-r--r-- | elf/rtld.c | 4 | ||||
-rw-r--r-- | elf/sprof.c | 2 |
6 files changed, 30 insertions, 16 deletions
diff --git a/elf/Makefile b/elf/Makefile index 028be25b2d..72a037f8e3 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -72,7 +72,7 @@ distribute := rtld-Rules \ tst-tlsmod1.c tst-tlsmod2.c tst-tlsmod3.c tst-tlsmod4.c \ tst-tlsmod5.c tst-tlsmod6.c tst-tlsmod7.c tst-tlsmod8.c \ tst-tlsmod9.c tst-tlsmod10.c tst-tlsmod11.c \ - tst-tlsmod12.c tst-tls10.h tst-alignmod.c \ + tst-tlsmod12.c tst-tls10.h tst-alignmod.c tst-alignmod2.c \ circlemod1.c circlemod1a.c circlemod2.c circlemod2a.c \ circlemod3.c circlemod3a.c nodlopenmod2.c \ tls-macros.h \ @@ -153,7 +153,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \ restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \ circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8 \ tst-tls10 tst-tls11 tst-tls12 tst-tls13 tst-tls14 tst-align \ - $(tests-execstack-$(have-z-execstack)) tst-dlmodcount \ + tst-align2 $(tests-execstack-$(have-z-execstack)) tst-dlmodcount \ tst-dlopenrpath tst-deep1 tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 # reldep9 test-srcs = tst-pathopt @@ -186,7 +186,8 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ circlemod3 circlemod3a \ reldep8mod1 reldep8mod2 reldep8mod3 \ reldep9mod1 reldep9mod2 reldep9mod3 \ - tst-alignmod $(modules-execstack-$(have-z-execstack)) \ + tst-alignmod tst-alignmod2 \ + $(modules-execstack-$(have-z-execstack)) \ tst-dlopenrpathmod tst-deep1mod1 tst-deep1mod2 tst-deep1mod3 \ tst-dlmopen1mod ifeq (yes,$(have-initfini-array)) @@ -668,9 +669,12 @@ $(objpfx)tst-tls14: $(objpfx)tst-tlsmod14a.so $(libdl) $(objpfx)tst-tls14.out:$(objpfx)tst-tlsmod14b.so CFLAGS-tst-align.c = $(stack-align-test-flags) +CFLAGS-tst-align2.c = $(stack-align-test-flags) CFLAGS-tst-alignmod.c = $(stack-align-test-flags) +CFLAGS-tst-alignmod2.c = $(stack-align-test-flags) $(objpfx)tst-align: $(libdl) $(objpfx)tst-align.out: $(objpfx)tst-alignmod.so +$(objpfx)tst-align2: $(objpfx)tst-alignmod2.so ifdef libdl $(objpfx)tst-tls9-static: $(common-objpfx)dlfcn/libdl.a @@ -732,6 +736,8 @@ $(objpfx)tst-pie1: $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \ -o $@ $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so \ $(common-objpfx)libc_nonshared.a + +generated += tst-pie1 tst-pie1.out tst-pie1.o endif check-textrel-CFLAGS = -O -Wall -D_XOPEN_SOURCE=600 -D_BSD_SOURCE diff --git a/elf/dl-load.c b/elf/dl-load.c index eb1a7919fb..ab1080e51f 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -36,6 +36,7 @@ #include <dl-osinfo.h> #include <stackinfo.h> #include <caller.h> +#include <sysdep.h> #include <dl-dst.h> @@ -105,13 +106,11 @@ ELF_PREFERRED_ADDRESS_DATA; int __stack_prot attribute_hidden attribute_relro - = (PROT_READ|PROT_WRITE #if _STACK_GROWS_DOWN && defined PROT_GROWSDOWN - |PROT_GROWSDOWN + = PROT_GROWSDOWN; #elif _STACK_GROWS_UP && defined PROT_GROWSUP - |PROT_GROWSUP + = PROT_GROWSUP; #endif - ); /* Type for the buffer we put the ELF header and hopefully the program @@ -1327,12 +1326,16 @@ cannot allocate TLS data structures for initial thread"); if (__builtin_expect (__check_caller (RETURN_ADDRESS (0), allow_ldso|allow_libc) == 0, 0)) - __stack_prot |= PROT_EXEC; + __stack_prot |= PROT_READ|PROT_WRITE|PROT_EXEC; __mprotect ((void *) p, s, PROT_READ); } else #endif - __stack_prot |= PROT_EXEC; + __stack_prot |= PROT_READ|PROT_WRITE|PROT_EXEC; + +#ifdef check_consistency + check_consistency (); +#endif errval = (*GL(dl_make_stack_executable_hook)) (stack_endp); if (errval) @@ -1788,7 +1791,12 @@ open_path (const char *name, size_t namelen, int preloaded, must not be freed using the general free() in libc. */ if (sps->malloced) free (sps->dirs); - sps->dirs = (void *) -1; +#ifdef HAVE_Z_RELRO + /* rtld_search_dirs is attribute_relro, therefore avoid writing + into it. */ + if (sps != &rtld_search_dirs) +#endif + sps->dirs = (void *) -1; } return -1; diff --git a/elf/ldconfig.c b/elf/ldconfig.c index f8504fb95e..d7075ccdc9 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -279,7 +279,7 @@ print_version (FILE *stream, struct argp_state *state) Copyright (C) %s Free Software Foundation, Inc.\n\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ -"), "2004"); +"), "2005"); fprintf (stream, gettext ("Written by %s.\n"), "Andreas Jaeger"); } diff --git a/elf/ldd.bash.in b/elf/ldd.bash.in index 4d7c33c728..4587efd1cb 100644 --- a/elf/ldd.bash.in +++ b/elf/ldd.bash.in @@ -1,5 +1,5 @@ #! @BASH@ -# Copyright (C) 1996-2001, 2002, 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 1996-2004, 2005 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 @@ -39,7 +39,7 @@ while test $# -gt 0; do printf $"Copyright (C) %s Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -" "2004" +" "2005" printf $"Written by %s and %s. " "Roland McGrath" "Ulrich Drepper" exit 0 diff --git a/elf/rtld.c b/elf/rtld.c index ee7291477f..55a2b8a9ea 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -1412,9 +1412,9 @@ ERROR: ld.so: object '%s' from %s cannot be preloaded: ignored.\n", { if (! l->l_addr) l->l_addr = ph->p_vaddr; - else if (ph->p_vaddr + ph->p_memsz >= l->l_map_end) + if (ph->p_vaddr + ph->p_memsz >= l->l_map_end) l->l_map_end = ph->p_vaddr + ph->p_memsz; - else if ((ph->p_flags & PF_X) + if ((ph->p_flags & PF_X) && ph->p_vaddr + ph->p_memsz >= l->l_text_end) l->l_text_end = ph->p_vaddr + ph->p_memsz; } diff --git a/elf/sprof.c b/elf/sprof.c index afe3955ad8..686a003bb0 100644 --- a/elf/sprof.c +++ b/elf/sprof.c @@ -357,7 +357,7 @@ Copyright (C) %s Free Software Foundation, Inc.\n\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ "), - "2004"); + "2005"); fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); } |