]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
hppa: Fix setting of __libc_stack_end
authorJohn David Anglin <dave.anglin@bell.net>
Tue, 21 Feb 2017 01:31:57 +0000 (20:31 -0500)
committerMike Frysinger <vapier@gentoo.org>
Wed, 15 Mar 2017 20:37:16 +0000 (13:37 -0700)
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

ChangeLog
sysdeps/hppa/dl-machine.h

index 48d285f49c33cae3fdd51334a5625fc13fbd7872..f8b2e60bd6eb3ab9728f346b4b239db54f4b6d57 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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]
index 339c7bb771298b93a0c500d2ba25c4a61a1d1610..787b95f5022e0094e630eaad73e5296eedf8d284 100644 (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"                                \