From 5d5722e8ac22253bdc819da2d676d9900da0c533 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Thu, 10 May 2012 14:51:22 -0700 Subject: [PATCH] Hurd: Fix value of __libc_stack_end --- ChangeLog | 10 ++++++++++ sysdeps/generic/ldsodefs.h | 6 +++++- sysdeps/mach/hurd/dl-sysdep.h | 5 +++-- 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 + + * 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 [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), -- 2.43.5