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.new...@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.new...@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.new...@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.new...@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.new...@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.new...@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.new...@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 -- To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1w3cir-0002p7...@moszumanska.debian.org