olga / rpms / glibc

Forked from rpms/glibc 5 years ago
Clone

Blame SOURCES/glibc-rh1335925-4.patch

ce426f
Backport of this upstream commit, with ports/ readded to the path.
ce426f
ce426f
commit 2b1d7148e3664eeb177ae2fc91bf282d75da7623
ce426f
Author: Szabolcs Nagy <nsz@port70.net>
ce426f
Date:   Mon Jul 6 12:46:43 2015 +0100
ce426f
ce426f
    [AArch64] make setcontext etc functions consistent with the kernel
ce426f
    
ce426f
    since
ce426f
    https://sourceware.org/ml/libc-alpha/2014-04/msg00006.html
ce426f
    setcontext etc is no longer tied to the kernel use of ucontext.
ce426f
    
ce426f
    in that patch the ucontext reserved space is not used consistently
ce426f
    with the kernel abi: the d8,d9 pair is saved in the slot of q8.
ce426f
    
ce426f
    this is ok (*context functions work together), but probably not
ce426f
    desirable (ucontexts created by the kernel and getcontext are
ce426f
    subtly different).
ce426f
    
ce426f
    the fix just replaces dN with qN in the save/restore code, which
ce426f
    does a bit more than needed (saves/restores the top half of qN that
ce426f
    is not callee saved), but this should not be an issue (and avoids
ce426f
    having to deal with endianness).
ce426f
    
ce426f
    (kernel fpsimd context layout: the first 64bit contains 0x210 the fpsimd
ce426f
    context size and 0x46508001 the FPSIMD_MAGIC, the second 64bit is for
ce426f
    fpsr and fpcr, and the rest is the 128bit q0..q31 registers).
ce426f
    
ce426f
    given d8=8.1, d9=9.1,... d15=15.1, the context created by getcontext is
ce426f
    
ce426f
    current:
ce426f
    
ce426f
    (gdb) x/40xg ctx.uc_mcontext.__reserved
ce426f
    0x410df0 <ctx+464>:     0x0000021046508001      0x0000000000000000
ce426f
    0x410e00 <ctx+480>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e10 <ctx+496>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e20 <ctx+512>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e30 <ctx+528>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e40 <ctx+544>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e50 <ctx+560>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e60 <ctx+576>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e70 <ctx+592>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e80 <ctx+608>:     0x4020333333333333      0x4022333333333333
ce426f
    0x410e90 <ctx+624>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410ea0 <ctx+640>:     0x4024333333333333      0x4026333333333333
ce426f
    0x410eb0 <ctx+656>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410ec0 <ctx+672>:     0x4028333333333333      0x402a333333333333
ce426f
    0x410ed0 <ctx+688>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410ee0 <ctx+704>:     0x402c333333333333      0x402e333333333333
ce426f
    0x410ef0 <ctx+720>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410f00 <ctx+736>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410f10 <ctx+752>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410f20 <ctx+768>:     0x0000000000000000      0x0000000000000000
ce426f
    
ce426f
    fixed:
ce426f
    
ce426f
    (gdb) x/40xg ctx.uc_mcontext.__reserved
ce426f
    0x410d70 <ctx+464>:     0x0000021046508001      0x0000000000000000
ce426f
    0x410d80 <ctx+480>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410d90 <ctx+496>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410da0 <ctx+512>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410db0 <ctx+528>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410dc0 <ctx+544>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410dd0 <ctx+560>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410de0 <ctx+576>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410df0 <ctx+592>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e00 <ctx+608>:     0x4020333333333333      0x0000000000000000
ce426f
    0x410e10 <ctx+624>:     0x4022333333333333      0x0000000000000000
ce426f
    0x410e20 <ctx+640>:     0x4024333333333333      0x0000000000000000
ce426f
    0x410e30 <ctx+656>:     0x4026333333333333      0x0000000000000000
ce426f
    0x410e40 <ctx+672>:     0x4028333333333333      0x0000000000000000
ce426f
    0x410e50 <ctx+688>:     0x402a333333333333      0x0000000000000000
ce426f
    0x410e60 <ctx+704>:     0x402c333333333333      0x0000000000000000
ce426f
    0x410e70 <ctx+720>:     0x402e333333333333      0x0000000000000000
ce426f
    0x410e80 <ctx+736>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410e90 <ctx+752>:     0x0000000000000000      0x0000000000000000
ce426f
    0x410ea0 <ctx+768>:     0x0000000000000000      0x0000000000000000
ce426f
    
ce426f
    2015-07-06  Szabolcs Nagy  <szabolcs.nagy@arm.com>
ce426f
    
ce426f
    	* sysdeps/unix/sysv/linux/aarch64/getcontext.S (__getcontext): Use q
ce426f
    	registers instead of d ones so the layout is kernel abi compatible.
ce426f
    	* sysdeps/unix/sysv/linux/aarch64/setcontext.S (__setcontext): Likewise.
ce426f
    	* sysdeps/unix/sysv/linux/aarch64/swapcontext.S (__swapcontext):
ce426f
    	Likewise.# Please enter the commit message for your changes. Lines starting
ce426f
ce426f
diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S b/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S
ce426f
index adf8037..b72436f 100644
ce426f
--- a/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S
ce426f
+++ b/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S
ce426f
@@ -69,10 +69,10 @@ ENTRY(__getcontext)
ce426f
 
ce426f
 	/* Fill in the FP SIMD context.  */
ce426f
 	add	x3, x2, #oV0 + 8 * SZVREG
ce426f
-	stp	 d8,  d9, [x3], # 2 * SZVREG
ce426f
-	stp	d10, d11, [x3], # 2 * SZVREG
ce426f
-	stp	d12, d13, [x3], # 2 * SZVREG
ce426f
-	stp	d14, d15, [x3], # 2 * SZVREG
ce426f
+	stp	 q8,  q9, [x3], # 2 * SZVREG
ce426f
+	stp	q10, q11, [x3], # 2 * SZVREG
ce426f
+	stp	q12, q13, [x3], # 2 * SZVREG
ce426f
+	stp	q14, q15, [x3], # 2 * SZVREG
ce426f
 
ce426f
 	add	x3, x2, oFPSR
ce426f
 
ce426f
diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S b/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S
ce426f
index ae67581..8d926f7 100644
ce426f
--- a/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S
ce426f
+++ b/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S
ce426f
@@ -97,10 +97,10 @@ ENTRY (__setcontext)
ce426f
 
ce426f
 	/* Restore the FP SIMD context.  */
ce426f
 	add	x3, x2, #oV0 + 8 * SZVREG
ce426f
-	ldp	 d8,  d9, [x3], #2 * SZVREG
ce426f
-	ldp	d10, d11, [x3], #2 * SZVREG
ce426f
-	ldp	d12, d13, [x3], #2 * SZVREG
ce426f
-	ldp	d14, d15, [x3], #2 * SZVREG
ce426f
+	ldp	 q8,  q9, [x3], #2 * SZVREG
ce426f
+	ldp	q10, q11, [x3], #2 * SZVREG
ce426f
+	ldp	q12, q13, [x3], #2 * SZVREG
ce426f
+	ldp	q14, q15, [x3], #2 * SZVREG
ce426f
 
ce426f
 	add	x3, x2, oFPSR
ce426f
 
ce426f
diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S b/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S
ce426f
index f62fc11..05ad8d3 100644
ce426f
--- a/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S
ce426f
+++ b/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S
ce426f
@@ -54,10 +54,10 @@ ENTRY(__swapcontext)
ce426f
 
ce426f
 	/* Fill in the FP SIMD context.  */
ce426f
 	add	x3, x2, #oV0 + 8 * SZVREG
ce426f
-	stp	 d8,  d9, [x3], #2 * SZVREG
ce426f
-	stp	d10, d11, [x3], #2 * SZVREG
ce426f
-	stp	d12, d13, [x3], #2 * SZVREG
ce426f
-	stp	d14, d15, [x3], #2 * SZVREG
ce426f
+	stp	 q8,  q9, [x3], #2 * SZVREG
ce426f
+	stp	q10, q11, [x3], #2 * SZVREG
ce426f
+	stp	q12, q13, [x3], #2 * SZVREG
ce426f
+	stp	q14, q15, [x3], #2 * SZVREG
ce426f
 
ce426f
 	add	x3, x2, #oFPSR
ce426f