diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2012-05-10 14:51:22 -0700 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2012-05-10 15:57:24 -0700 |
commit | 5d5722e8ac22253bdc819da2d676d9900da0c533 (patch) | |
tree | 5da1821658c8038709f264e4d6b7e096e80bb7eb | |
parent | be971a2b1c7828d94c41edd5cd22c1d9dcef1b6e (diff) | |
download | glibc-5d5722e8ac22253bdc819da2d676d9900da0c533.tar.gz |
Hurd: Fix value of __libc_stack_end
-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
@@ -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), |