[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: