mirror of
https://github.com/void-linux/void-packages.git
synced 2025-06-16 03:53:51 +02:00
62 lines
2.3 KiB
Diff
62 lines
2.3 KiB
Diff
From 8b3caa41b9cb82651e72a0c87aa56719c134000e Mon Sep 17 00:00:00 2001
|
|
From: John David Anglin <dave.anglin@bell.net>
|
|
Date: Mon, 20 Feb 2017 20:31:57 -0500
|
|
Subject: 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
|
|
|
|
(cherry picked from commit 5d20a49aaccef5ef7adac93d5ca159f6b7ba0105)
|
|
|
|
diff --git a/ChangeLog b/ChangeLog
|
|
index 8aaf9f825d..d8ed2e4d90 100644
|
|
--- 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-02 Florian Weimer <fweimer@redhat.com>
|
|
|
|
[BZ #21015]
|
|
diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h
|
|
index 339c7bb771..787b95f502 100644
|
|
--- a/sysdeps/hppa/dl-machine.h
|
|
+++ b/sysdeps/hppa/dl-machine.h
|
|
@@ -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" \
|
|
--
|
|
2.13.1
|
|
|