Author: adconrad
Date: 2014-04-12 07:45:41 +0000 (Sat, 12 Apr 2014)
New Revision: 6015

Modified:
   
glibc-package/branches/eglibc-2.19/debian/patches/arm64/submitted-setcontext.diff
Log:
Replace arm64 setcontext patch with new version from Will

Modified: 
glibc-package/branches/eglibc-2.19/debian/patches/arm64/submitted-setcontext.diff
===================================================================
--- 
glibc-package/branches/eglibc-2.19/debian/patches/arm64/submitted-setcontext.diff
   2014-04-10 18:40:56 UTC (rev 6014)
+++ 
glibc-package/branches/eglibc-2.19/debian/patches/arm64/submitted-setcontext.diff
   2014-04-12 07:45:41 UTC (rev 6015)
@@ -1,13 +1,20 @@
 https://sourceware.org/ml/libc-alpha/2014-04/msg00006.html
 
- sysdeps/unix/sysv/linux/aarch64/setcontext.S | 139 +++++++++++++++++----------
- 1 file changed, 88 insertions(+), 51 deletions(-)
+2014-04-01  Will Newton  <[email protected]>
 
+       [BZ #16629]
+       * sysdeps/unix/sysv/linux/aarch64/setcontext.S (__setcontext):
+       Re-implement to restore registers in user code and avoid
+       rt_sigreturn system call.
+---
+ sysdeps/unix/sysv/linux/aarch64/setcontext.S | 147 +++++++++++++++++----------
+ 2 files changed, 95 insertions(+), 58 deletions(-)
+
 Index: eglibc-2.19/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S
 ===================================================================
 --- eglibc-2.19.orig/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S        
2150-05-09 09:36:21.925789000 +0000
 +++ eglibc-2.19/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S     
2150-05-09 09:36:48.235789000 +0000
-@@ -22,63 +22,100 @@
+@@ -22,68 +22,105 @@
  #include "ucontext_i.h"
  #include "ucontext-internal.h"
  
@@ -15,17 +22,11 @@
 +/*  int __setcontext (const ucontext_t *ucp)
  
 -      .text
-+  Restores the machine context in UCP and thereby resumes execution
-+  in that context.
- 
+-
 -ENTRY(__setcontext)
-+  This implementation is intended to be used for *synchronous* context
-+  switches only.  Therefore, it does not have to restore anything
-+  other than the PRESERVED state.  */
- 
+-
 -      /* Create a signal frame on the stack:
-+      .text
- 
+-
 -              fp
 -              lr
 -              ...
@@ -43,10 +44,15 @@
 -      /* Allocate space for the sigcontext.  */
 -      mov     w3, #((RT_SIGFRAME_SIZE + SP_ALIGN_SIZE) & SP_ALIGN_MASK)
 -      sub     sp, sp, x3
--
++  Restores the machine context in UCP and thereby resumes execution
++  in that context.
+ 
 -      /* Compute the base address of the ucontext structure.  */
 -      add     x1, sp, #RT_SIGFRAME_UCONTEXT
--
++  This implementation is intended to be used for *synchronous* context
++  switches only.  Therefore, it does not have to restore anything
++  other than the PRESERVED state.  */
+ 
 -      /* Only ucontext is required in the frame, *copy* it in.  */
 -
 -#if UCONTEXT_SIZE % 16
@@ -59,16 +65,18 @@
 -      stp     x3, x4, [x1], #16
 -      sub     x2, x2, 1
 -      cbnz    x2, 0b
-+ENTRY(__setcontext)
-+      /* Save a copy of UCP.  */
-+      mov     x9, x0
++      .text
  
 -      /* rt_sigreturn () -- no arguments, sp points to struct rt_sigframe.  */
 -      mov     x8, SYS_ify (rt_sigreturn)
++ENTRY (__setcontext)
++      /* Save a copy of UCP.  */
++      mov     x9, x0
++
 +      /* Set the signal mask with
 +         rt_sigprocmask (SIG_SETMASK, mask, NULL, _NSIG/8).  */
 +      mov     x0, #SIG_SETMASK
-+      ldr     x1, [x9, UCONTEXT_SIGMASK]
++      add     x1, x9, #UCONTEXT_SIGMASK
 +      mov     x2, #0
 +      mov     x3, #_NSIG8
 +      mov     x8, SYS_ify (rt_sigprocmask)
@@ -83,35 +91,36 @@
 -      cfi_adjust_cfa_offset (16)
 -      cfi_restore (x29)
 -      cfi_restore (x30)
+-      b       C_SYMBOL_NAME(__syscall_error)
+-
 +      cbz     x0, 1f
-       b       C_SYMBOL_NAME(__syscall_error)
--
++      b       C_SYMBOL_NAME (__syscall_error)
 +1:
 +      /* Restore the general purpose registers.  */
 +      mov     x0, x9
-+      cfi_def_cfa(x0, 0)
-+      cfi_offset(x18, oX0 + 18 * SZREG)
-+      cfi_offset(x19, oX0 + 19 * SZREG)
-+      cfi_offset(x20, oX0 + 20 * SZREG)
-+      cfi_offset(x21, oX0 + 21 * SZREG)
-+      cfi_offset(x22, oX0 + 22 * SZREG)
-+      cfi_offset(x23, oX0 + 23 * SZREG)
-+      cfi_offset(x24, oX0 + 24 * SZREG)
-+      cfi_offset(x25, oX0 + 25 * SZREG)
-+      cfi_offset(x26, oX0 + 26 * SZREG)
-+      cfi_offset(x27, oX0 + 27 * SZREG)
-+      cfi_offset(x28, oX0 + 28 * SZREG)
-+      cfi_offset(x29, oX0 + 29 * SZREG)
-+      cfi_offset(x30, oX0 + 30 * SZREG)
++      cfi_def_cfa (x0, 0)
++      cfi_offset (x18, oX0 + 18 * SZREG)
++      cfi_offset (x19, oX0 + 19 * SZREG)
++      cfi_offset (x20, oX0 + 20 * SZREG)
++      cfi_offset (x21, oX0 + 21 * SZREG)
++      cfi_offset (x22, oX0 + 22 * SZREG)
++      cfi_offset (x23, oX0 + 23 * SZREG)
++      cfi_offset (x24, oX0 + 24 * SZREG)
++      cfi_offset (x25, oX0 + 25 * SZREG)
++      cfi_offset (x26, oX0 + 26 * SZREG)
++      cfi_offset (x27, oX0 + 27 * SZREG)
++      cfi_offset (x28, oX0 + 28 * SZREG)
++      cfi_offset (x29, oX0 + 29 * SZREG)
++      cfi_offset (x30, oX0 + 30 * SZREG)
 +
-+      cfi_offset( d8, oV0 + 8 * SZVREG)
-+      cfi_offset( d9, oV0 + 9 * SZVREG)
-+      cfi_offset(d10, oV0 + 10 * SZVREG)
-+      cfi_offset(d11, oV0 + 11 * SZVREG)
-+      cfi_offset(d12, oV0 + 12 * SZVREG)
-+      cfi_offset(d13, oV0 + 13 * SZVREG)
-+      cfi_offset(d14, oV0 + 14 * SZVREG)
-+      cfi_offset(d15, oV0 + 15 * SZVREG)
++      cfi_offset ( d8, oV0 + 8 * SZVREG)
++      cfi_offset ( d9, oV0 + 9 * SZVREG)
++      cfi_offset (d10, oV0 + 10 * SZVREG)
++      cfi_offset (d11, oV0 + 11 * SZVREG)
++      cfi_offset (d12, oV0 + 12 * SZVREG)
++      cfi_offset (d13, oV0 + 13 * SZVREG)
++      cfi_offset (d14, oV0 + 14 * SZVREG)
++      cfi_offset (d15, oV0 + 15 * SZVREG)
 +      ldp     x18, x19, [x0, oX0 + 18 * SZREG]
 +      ldp     x20, x21, [x0, oX0 + 20 * SZREG]
 +      ldp     x22, x23, [x0, oX0 + 22 * SZREG]
@@ -158,3 +167,13 @@
  PSEUDO_END (__setcontext)
  weak_alias (__setcontext, setcontext)
  
+-ENTRY(__startcontext)
++ENTRY (__startcontext)
+       mov     x0, x19
+       cbnz    x0, __setcontext
+-1:    b       HIDDEN_JUMPTARGET(_exit)
+-END(__startcontext)
++1:    b       HIDDEN_JUMPTARGET (_exit)
++END (__startcontext)
+-- 
+1.8.1.4


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: https://lists.debian.org/[email protected]

Reply via email to