hppa: Fix setting of __libc_stack_end

The binutils package was recently changed to fix -z relro support on hppa.
See ld/21000 for details:
https://sourceware.org/bugzilla/show_bug.cgi?id=21000

This exposed a problem with the _dl_start_user function in the RTLD_START
define.  We need to set __libc_stack_end before it is made read only.  For
this, we need to define DL_STACK_END.  The offset of 0x160 gives the same
stack end as the code in _dl_start_user.

A build log with the attached patch is here:
https://buildd.debian.org/status/fetch.php?pkg=glibc&arch=hppa&ver=2.24-9&stamp=1487639205&raw=0
This commit is contained in:
John David Anglin 2017-02-20 20:31:57 -05:00 committed by Mike Frysinger
parent 3ab2021fea
commit 5d20a49aac
2 changed files with 9 additions and 5 deletions

View file

@ -1,3 +1,8 @@
2017-03-15 John David Anglin <danglin@gcc.gnu.org>
* sysdeps/hppa/dl-machine.h (DL_STACK_END): Define.
(RTLD_START): Don't record stack end address in _dl_start_user.
2017-03-15 Alexey Neyman <stilor@att.net>
[BZ #21088]

View file

@ -302,6 +302,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
#define ARCH_LA_PLTENTER hppa_gnu_pltenter
#define ARCH_LA_PLTEXIT hppa_gnu_pltexit
/* Adjust DL_STACK_END to get value we want in __libc_stack_end. */
#define DL_STACK_END(cookie) \
((void *) (((long) (cookie)) + 0x160))
/* Initial entry point code for the dynamic linker.
The C function `_dl_start' is the real entry point;
its return value is the user program's entry point. */
@ -401,11 +405,6 @@ asm ( \
/* Save the entry point in %r3. */ \
" copy %ret0,%r3\n" \
\
/* Remember the lowest stack address. */ \
" addil LT'__libc_stack_end,%r19\n" \
" ldw RT'__libc_stack_end(%r1),%r20\n" \
" stw %sp,0(%r20)\n" \
\
/* See if we were called as a command with the executable file \
name as an extra leading argument. */ \
" addil LT'_dl_skip_args,%r19\n" \