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

Reply via email to