r5915 - in glibc-package/branches/eglibc-2.18/debian: . patches patches/arm
Author: adconrad
Date: 2014-01-14 22:17:19 +0000 (Tue, 14 Jan 2014)
New Revision: 5915
Added:
glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm-pointer-mangle-frame.diff
glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm__longjmp-thumb.diff
glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm__sigsetjmp-thumb.diff
Modified:
glibc-package/branches/eglibc-2.18/debian/changelog
glibc-package/branches/eglibc-2.18/debian/patches/series
Log:
* debian/patches/arm/cvs-arm__{longjmp,sigsetjmp}-thumb.diff: Pull patch
from upstream to allow building longjmp and sigsetjmp code with Thumb.
* debian/patches/arm/cvs-arm-pointer-mangle-frame.diff: Upstream diff to
no longer apply pointer encryption to the frame pointer (LP: #1268937)
Modified: glibc-package/branches/eglibc-2.18/debian/changelog
===================================================================
--- glibc-package/branches/eglibc-2.18/debian/changelog 2014-01-13 16:21:26 UTC (rev 5914)
+++ glibc-package/branches/eglibc-2.18/debian/changelog 2014-01-14 22:17:19 UTC (rev 5915)
@@ -2,6 +2,10 @@
[ Adam Conrad ]
* debian/patches/hurd-i386/libpthread_version.diff: Remove stderr vomit.
+ * debian/patches/arm/cvs-arm__{longjmp,sigsetjmp}-thumb.diff: Pull patch
+ from upstream to allow building longjmp and sigsetjmp code with Thumb.
+ * debian/patches/arm/cvs-arm-pointer-mangle-frame.diff: Upstream diff to
+ no longer apply pointer encryption to the frame pointer (LP: #1268937)
[ Aurelien Jarno ]
* debian/testsuite-checking/expected-results-mips*: Update following
Added: glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm-pointer-mangle-frame.diff
===================================================================
--- glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm-pointer-mangle-frame.diff (rev 0)
+++ glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm-pointer-mangle-frame.diff 2014-01-14 22:17:19 UTC (rev 5915)
@@ -0,0 +1,104 @@
+commit 2f10c4d6901e7a4c4ad294cc5bb8ece6547f4f62
+Author: Will Newton <will.newton@linaro.org>
+Date: Tue Dec 10 16:26:38 2013 +0000
+
+ ARM: Don't apply pointer encryption to the frame pointer
+
+ The frame pointer register is rarely used for that purpose on ARM and
+ applications that look at the contents of the jmp_buf may be relying
+ on reading an unencrypted value. For example, Ruby uses the contents
+ of jmp_buf to find the root set for garbage collection so relies on
+ this pointer value being unencrypted. Without this patch the Ruby
+ testsuite fails with a segmentation fault.
+
+ ports/ChangeLog.arm:
+
+ 2013-01-14 Will Newton <will.newton@linaro.org>
+
+ * sysdeps/arm/__longjmp.S: Don't apply pointer encryption
+ to fp register.
+ * sysdeps/arm/setjmp.S: Likewise.
+ * sysdeps/arm/include/bits/setjmp.h (JMP_BUF_REGLIST): Add
+ fp to register list, remove a4.
+ * sysdeps/unix/sysv/linux/arm/sysdep.h (PTR_MANGLE_LOAD):
+ New macro.
+
+diff --git a/ports/sysdeps/arm/__longjmp.S b/ports/sysdeps/arm/__longjmp.S
+index 1503923..27c57a1 100644
+--- a/ports/sysdeps/arm/__longjmp.S
++++ b/ports/sysdeps/arm/__longjmp.S
+@@ -41,14 +41,12 @@ ENTRY (__longjmp)
+ sfi_sp sfi_breg ip, \
+ ldmia \B!, JMP_BUF_REGLIST
+ #ifdef PTR_DEMANGLE
+- PTR_DEMANGLE (fp, a4, a3, a2)
+ ldr a4, [ip], #4
+- PTR_DEMANGLE2 (a4, a4, a3)
++ PTR_DEMANGLE (a4, a4, a3, a2)
+ mov sp, a4
+ ldr a4, [ip], #4
+ PTR_DEMANGLE2 (lr, a4, a3)
+ #else
+- mov fp, a4
+ ldr sp, [ip], #4
+ ldr lr, [ip], #4
+ #endif
+diff --git a/ports/sysdeps/arm/include/bits/setjmp.h b/ports/sysdeps/arm/include/bits/setjmp.h
+index 2f50245..220dfe8 100644
+--- a/ports/sysdeps/arm/include/bits/setjmp.h
++++ b/ports/sysdeps/arm/include/bits/setjmp.h
+@@ -26,9 +26,8 @@
+
+ #ifndef _ISOMAC
+ /* Register list for a ldm/stm instruction to load/store
+- the general registers from a __jmp_buf. The a4 register
+- contains fp at this point. */
+-# define JMP_BUF_REGLIST {a4, v1-v6, sl}
++ the general registers from a __jmp_buf. */
++# define JMP_BUF_REGLIST {v1-v6, sl, fp}
+
+ /* Index of __jmp_buf where the sp register resides. */
+ # define __JMP_BUF_SP 8
+diff --git a/ports/sysdeps/arm/setjmp.S b/ports/sysdeps/arm/setjmp.S
+index 9665707..b0b45ed 100644
+--- a/ports/sysdeps/arm/setjmp.S
++++ b/ports/sysdeps/arm/setjmp.S
+@@ -23,9 +23,7 @@
+
+ ENTRY (__sigsetjmp)
+ #ifdef PTR_MANGLE
+- PTR_MANGLE (a4, fp, a3, ip)
+-#else
+- mov a4, fp
++ PTR_MANGLE_LOAD (a3, ip)
+ #endif
+ mov ip, r0
+
+diff --git a/ports/sysdeps/unix/sysv/linux/arm/sysdep.h b/ports/sysdeps/unix/sysv/linux/arm/sysdep.h
+index 11d0a11..dcd9919 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/sysdep.h
++++ b/ports/sysdeps/unix/sysv/linux/arm/sysdep.h
+@@ -439,8 +439,10 @@ __local_syscall_error: \
+ #if (defined NOT_IN_libc && defined IS_IN_rtld) || \
+ (!defined SHARED && (!defined NOT_IN_libc || defined IS_IN_libpthread))
+ # ifdef __ASSEMBLER__
++# define PTR_MANGLE_LOAD(guard, tmp) \
++ LDST_PCREL(ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard_local));
+ # define PTR_MANGLE(dst, src, guard, tmp) \
+- LDST_PCREL(ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard_local)); \
++ PTR_MANGLE_LOAD(guard, tmp); \
+ PTR_MANGLE2(dst, src, guard)
+ /* Use PTR_MANGLE2 for efficiency if guard is already loaded. */
+ # define PTR_MANGLE2(dst, src, guard) \
+@@ -457,8 +459,10 @@ extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
+ # endif
+ #else
+ # ifdef __ASSEMBLER__
++# define PTR_MANGLE_LOAD(guard, tmp) \
++ LDST_GLOBAL(ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard));
+ # define PTR_MANGLE(dst, src, guard, tmp) \
+- LDST_GLOBAL(ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard)); \
++ PTR_MANGLE_LOAD(guard, tmp); \
+ PTR_MANGLE2(dst, src, guard)
+ /* Use PTR_MANGLE2 for efficiency if guard is already loaded. */
+ # define PTR_MANGLE2(dst, src, guard) \
Added: glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm__longjmp-thumb.diff
===================================================================
--- glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm__longjmp-thumb.diff (rev 0)
+++ glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm__longjmp-thumb.diff 2014-01-14 22:17:19 UTC (rev 5915)
@@ -0,0 +1,68 @@
+commit 6d9b9a67af7f49151191a4c7c406ca6be89855ec
+Author: Will Newton <will.newton@linaro.org>
+Date: Wed Sep 25 10:14:20 2013 +0100
+
+ ARM: Allow building __longjmp as Thumb.
+
+ Convert __longjmp code to allow building as Thumb.
+
+ ports/ChangeLog.arm:
+
+ 2013-10-04 Will Newton <will.newton@linaro.org>
+
+ * sysdeps/arm/__longjmp.S (NO_THUMB): Remove define.
+ (__longjmp): Use Thumb supported instructions.
+ * sysdeps/unix/sysv/linux/arm/____longjmp_chk.S (NO_THUMB):
+ Remove define.
+
+2013-10-04 Will Newton <will.newton@linaro.org>
+
+ * sysdeps/arm/__longjmp.S (NO_THUMB): Remove define.
+ (__longjmp): Use Thumb supported instructions.
+ * sysdeps/unix/sysv/linux/arm/____longjmp_chk.S (NO_THUMB):
+ Remove define.
+
+diff --git a/ports/sysdeps/arm/__longjmp.S b/ports/sysdeps/arm/__longjmp.S
+index 2b1f7f4..894c121 100644
+--- a/ports/sysdeps/arm/__longjmp.S
++++ b/ports/sysdeps/arm/__longjmp.S
+@@ -16,8 +16,6 @@
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+-/* ??? Needs more rearrangement for the LDM to handle thumb mode. */
+-#define NO_THUMB
+ #include <sysdep.h>
+ #include <bits/setjmp.h>
+ #include <rtld-global-offsets.h>
+@@ -28,6 +26,7 @@
+ ENTRY (__longjmp)
+ mov ip, r0
+ movs r0, r1 /* get the return value in place */
++ it eq
+ moveq r0, #1 /* can't let setjmp() return zero! */
+
+ #ifdef CHECK_SP
+@@ -44,7 +43,8 @@ ENTRY (__longjmp)
+ #ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (fp, a4, a3, a2)
+ ldr a4, [ip], #4
+- PTR_DEMANGLE2 (sp, a4, a3)
++ PTR_DEMANGLE2 (a4, a4, a3)
++ mov sp, a4
+ ldr a4, [ip], #4
+ PTR_DEMANGLE2 (lr, a4, a3)
+ #else
+diff --git a/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S b/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S
+index 6ee7a1a..6777ef6 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S
++++ b/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S
+@@ -15,8 +15,6 @@
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+-/* ??? Needs more rearrangement for the LDM to handle thumb mode. */
+-#define NO_THUMB
+ #include <sysdep.h>
+
+ .section .rodata.str1.1,"aMS",%progbits,1
Added: glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm__sigsetjmp-thumb.diff
===================================================================
--- glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm__sigsetjmp-thumb.diff (rev 0)
+++ glibc-package/branches/eglibc-2.18/debian/patches/arm/cvs-arm__sigsetjmp-thumb.diff 2014-01-14 22:17:19 UTC (rev 5915)
@@ -0,0 +1,38 @@
+commit 41bc5e09352ca838e1787f3109dcf4b4ae85986a
+Author: Will Newton <will.newton@linaro.org>
+Date: Wed Sep 25 10:17:28 2013 +0100
+
+ ARM: Allow building __sigsetjmp as Thumb.
+
+ Convert __sigsetjmp code to allow building as Thumb.
+
+ ports/ChangeLog.arm:
+
+ 2013-10-04 Will Newton <will.newton@linaro.org>
+
+ * sysdeps/arm/setjmp.S (NO_THUMB): Remove define.
+ (__sigsetjmp): Use Thumb supported instructions.
+
+diff --git a/ports/sysdeps/arm/setjmp.S b/ports/sysdeps/arm/setjmp.S
+index b38b919..fedd994 100644
+--- a/ports/sysdeps/arm/setjmp.S
++++ b/ports/sysdeps/arm/setjmp.S
+@@ -16,8 +16,6 @@
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+-/* ??? Needs more rearrangement for the STM to handle thumb mode. */
+-#define NO_THUMB
+ #include <sysdep.h>
+ #include <bits/setjmp.h>
+ #include <rtld-global-offsets.h>
+@@ -35,7 +33,8 @@ ENTRY (__sigsetjmp)
+ sfi_breg ip, \
+ stmia \B!, JMP_BUF_REGLIST
+ #ifdef PTR_MANGLE
+- PTR_MANGLE2 (a4, sp, a3)
++ mov a4, sp
++ PTR_MANGLE2 (a4, a4, a3)
+ str a4, [ip], #4
+ PTR_MANGLE2 (a4, lr, a3)
+ str a4, [ip], #4
Modified: glibc-package/branches/eglibc-2.18/debian/patches/series
===================================================================
--- glibc-package/branches/eglibc-2.18/debian/patches/series 2014-01-13 16:21:26 UTC (rev 5914)
+++ glibc-package/branches/eglibc-2.18/debian/patches/series 2014-01-14 22:17:19 UTC (rev 5915)
@@ -56,6 +56,9 @@
arm/unsubmitted-ldso-multilib.diff
arm/cvs-ifunc-hwcap-fix.diff
arm/cvs-arm-pointer-mangling.diff
+arm/cvs-arm__longjmp-thumb.diff
+arm/cvs-arm__sigsetjmp-thumb.diff
+arm/cvs-arm-pointer-mangle-frame.diff
arm64/cvs-arm64-sigcontext.diff
arm64/cvs-arm64-relocs.diff
Reply to: