diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 6 | ||||
-rw-r--r-- | sysdeps/mach/hurd/dl-sysdep.h | 5 | ||||
-rw-r--r-- | sysdeps/mach/hurd/i386/init-first.c | 2 |
4 files changed, 20 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index fea15ee5dd..1ae3593ae9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-05-10 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * sysdeps/generic/ldsodefs.h [LIBC_STACK_END_NOT_RELRO] + (__libc_stack_end): Do not use attribute_relro. + * sysdeps/mach/hurd/dl-sysdep.h (LIBC_STACK_END_NOT_RELRO): Define. + * sysdeps/mach/hurd/i386/init-first.c (init): Update __libc_stack_end + to libthread-provided value. + * sysdeps/mach/hurd/dl-sysdep.c (__libc_stack_end): Do not use + attribute_relro. + 2012-05-10 Thomas Schwinge <thomas@schwinge.name> [BZ #3748] diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 602b429cea..e071015cee 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -717,7 +717,11 @@ rtld_hidden_proto (_dl_make_stack_executable) might use the variable which results in copy relocations on some platforms. But this does not matter, ld.so can always use the local copy. */ -extern void *__libc_stack_end attribute_relro; +extern void *__libc_stack_end +#ifndef LIBC_STACK_END_NOT_RELRO + attribute_relro +#endif + ; rtld_hidden_proto (__libc_stack_end) /* Parameters passed to the dynamic linker. */ diff --git a/sysdeps/mach/hurd/dl-sysdep.h b/sysdeps/mach/hurd/dl-sysdep.h index 671b241839..c64a39d924 100644 --- a/sysdeps/mach/hurd/dl-sysdep.h +++ b/sysdeps/mach/hurd/dl-sysdep.h @@ -1,5 +1,5 @@ /* System-specific settings for dynamic linker code. Hurd version. - Copyright (C) 2002, 2005 Free Software Foundation, Inc. + Copyright (C) 2002-2012 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 @@ -24,7 +24,8 @@ #define RTLD_PRIVATE_ERRNO 0 #ifdef SHARED -/* _dl_argv cannot be attribute_relro, because the stack-switching +/* _dl_argv and __libc_stack_end cannot be attribute_relro, because the stack-switching libc initializer for using cthreads might write into it. */ # define DL_ARGV_NOT_RELRO 1 +# define LIBC_STACK_END_NOT_RELRO 1 #endif diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c index f4bf624680..fa4e3d9f6e 100644 --- a/sysdeps/mach/hurd/i386/init-first.c +++ b/sysdeps/mach/hurd/i386/init-first.c @@ -214,6 +214,8 @@ init (int *data) void switch_stacks (void); + __libc_stack_end = newsp; + /* Copy per-thread variables from that temporary area onto the new cthread stack. */ memcpy (__hurd_threadvar_location_from_sp (0, newsp), |