Hurd: Fix value of __libc_stack_end

This commit is contained in:
Samuel Thibault 2012-05-10 14:51:22 -07:00 committed by Roland McGrath
parent be971a2b1c
commit 5d5722e8ac
4 changed files with 20 additions and 3 deletions

View File

@ -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> 2012-05-10 Thomas Schwinge <thomas@schwinge.name>
[BZ #3748] [BZ #3748]

View File

@ -717,7 +717,11 @@ rtld_hidden_proto (_dl_make_stack_executable)
might use the variable which results in copy relocations on some might use the variable which results in copy relocations on some
platforms. But this does not matter, ld.so can always use the local platforms. But this does not matter, ld.so can always use the local
copy. */ 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) rtld_hidden_proto (__libc_stack_end)
/* Parameters passed to the dynamic linker. */ /* Parameters passed to the dynamic linker. */

View File

@ -1,5 +1,5 @@
/* System-specific settings for dynamic linker code. Hurd version. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -24,7 +24,8 @@
#define RTLD_PRIVATE_ERRNO 0 #define RTLD_PRIVATE_ERRNO 0
#ifdef SHARED #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. */ libc initializer for using cthreads might write into it. */
# define DL_ARGV_NOT_RELRO 1 # define DL_ARGV_NOT_RELRO 1
# define LIBC_STACK_END_NOT_RELRO 1
#endif #endif

View File

@ -214,6 +214,8 @@ init (int *data)
void switch_stacks (void); void switch_stacks (void);
__libc_stack_end = newsp;
/* Copy per-thread variables from that temporary /* Copy per-thread variables from that temporary
area onto the new cthread stack. */ area onto the new cthread stack. */
memcpy (__hurd_threadvar_location_from_sp (0, newsp), memcpy (__hurd_threadvar_location_from_sp (0, newsp),