about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--NEWS22
-rw-r--r--ports/ChangeLog.aarch646
-rw-r--r--ports/sysdeps/aarch64/dl-trampoline.S28
3 files changed, 41 insertions, 15 deletions
diff --git a/NEWS b/NEWS
index fa19722fce..35eceffbf6 100644
--- a/NEWS
+++ b/NEWS
@@ -12,17 +12,17 @@ Version 2.19
   156, 387, 431, 832, 926, 2801, 4772, 6786, 6787, 6807, 6810, 7003, 9954,
   10253, 10278, 11087, 11157, 11214, 12100, 12486, 13028, 13982, 13985,
   14029, 14032, 14120, 14143, 14155, 14547, 14699, 14752, 14876, 14910,
-  15004, 15048, 15089, 15218, 15268, 15277, 15308, 15362, 15374, 15400,
-  15425, 15427, 15483, 15522, 15531, 15532, 15593, 15601, 15608, 15609,
-  15610, 15632, 15640, 15670, 15672, 15680, 15681, 15723, 15734, 15735,
-  15736, 15748, 15749, 15754, 15760, 15763, 15764, 15797, 15799, 15825,
-  15843, 15844, 15847, 15849, 15855, 15856, 15857, 15859, 15867, 15886,
-  15887, 15890, 15892, 15893, 15895, 15897, 15901, 15905, 15909, 15915,
-  15917, 15919, 15921, 15923, 15939, 15941, 15948, 15963, 15966, 15985,
-  15988, 15997, 16032, 16034, 16036, 16037, 16038, 16041, 16055, 16071,
-  16072, 16074, 16077, 16078, 16103, 16112, 16143, 16144, 16146, 16150,
-  16151, 16153, 16167, 16172, 16195, 16214, 16245, 16271, 16274, 16283,
-  16289, 16314, 16316, 16330, 16338.
+  15004, 15048, 15089, 15128, 15218, 15268, 15277, 15308, 15362, 15374,
+  15400, 15425, 15427, 15483, 15522, 15531, 15532, 15593, 15601, 15608,
+  15609, 15610, 15632, 15640, 15670, 15672, 15680, 15681, 15723, 15734,
+  15735, 15736, 15748, 15749, 15754, 15760, 15763, 15764, 15797, 15799,
+  15825, 15843, 15844, 15847, 15849, 15855, 15856, 15857, 15859, 15867,
+  15886, 15887, 15890, 15892, 15893, 15895, 15897, 15901, 15905, 15909,
+  15915, 15917, 15919, 15921, 15923, 15939, 15941, 15948, 15963, 15966,
+  15985, 15988, 15997, 16032, 16034, 16036, 16037, 16038, 16041, 16055,
+  16071, 16072, 16074, 16077, 16078, 16103, 16112, 16143, 16144, 16146,
+  16150, 16151, 16153, 16167, 16172, 16195, 16214, 16245, 16271, 16274,
+  16283, 16289, 16314, 16316, 16330, 16338.
 
 * The public headers no longer use __unused nor __block.  This change is to
   support compiling programs that are derived from BSD sources and use
diff --git a/ports/ChangeLog.aarch64 b/ports/ChangeLog.aarch64
index b1f6729386..279a2272c1 100644
--- a/ports/ChangeLog.aarch64
+++ b/ports/ChangeLog.aarch64
@@ -1,3 +1,9 @@
+2013-12-18  Marcus Shawcroft  <marcus.shawcroft@linaro.org>
+
+	[BZ #15128]
+	* sysdeps/aarch64/dl-trampoline.S (_dl_runtime_resolve): Save and
+	restore q0-q7.
+
 2013-12-17  Marcus Shawcroft  <marcus.shawcroft@linaro.org>
 
 	* sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h
diff --git a/ports/sysdeps/aarch64/dl-trampoline.S b/ports/sysdeps/aarch64/dl-trampoline.S
index 94c69a0e2d..923ca76afc 100644
--- a/ports/sysdeps/aarch64/dl-trampoline.S
+++ b/ports/sysdeps/aarch64/dl-trampoline.S
@@ -41,7 +41,7 @@ _dl_runtime_resolve:
 	cfi_rel_offset (lr, 8)
 
 	/* Save arguments.  */
-	stp	x8, x9, [sp, #-80]!
+	stp	x8, x9, [sp, #-(80+8*16)]!
 	cfi_adjust_cfa_offset (80)
 	cfi_rel_offset (x8, 0)
 	cfi_rel_offset (x9, 8)
@@ -62,11 +62,27 @@ _dl_runtime_resolve:
 	cfi_rel_offset (x0, 64)
 	cfi_rel_offset (x1, 72)
 
+	stp	q0, q1, [sp, #(80+0*16)]
+	cfi_rel_offset (q0, 80+0*16)
+	cfi_rel_offset (q1, 80+1*16)
+
+	stp	q2, q3, [sp, #(80+2*16)]
+	cfi_rel_offset (q0, 80+2*16)
+	cfi_rel_offset (q1, 80+3*16)
+
+	stp	q4, q5, [sp, #(80+4*16)]
+	cfi_rel_offset (q0, 80+4*16)
+	cfi_rel_offset (q1, 80+5*16)
+
+	stp	q6, q7, [sp, #(80+6*16)]
+	cfi_rel_offset (q0, 80+6*16)
+	cfi_rel_offset (q1, 80+7*16)
+
 	/* Get pointer to linker struct.  */
 	ldr	x0, [ip0, #-8]
 
 	/* Prepare to call _dl_fixup().  */
-	ldr	x1, [sp, 80]	/* Recover &PLTGOT[n] */
+	ldr	x1, [sp, 80+8*16]	/* Recover &PLTGOT[n] */
 
 	sub     x1, x1, ip0
 	add     x1, x1, x1, lsl #1
@@ -81,12 +97,16 @@ _dl_runtime_resolve:
 	mov	ip0, x0
 
 	/* Get arguments and return address back.  */
+	ldp	q0, q1, [sp, #(80+0*16)]
+	ldp	q2, q3, [sp, #(80+2*16)]
+	ldp	q4, q5, [sp, #(80+4*16)]
+	ldp	q6, q7, [sp, #(80+6*16)]
 	ldp	x0, x1, [sp, #64]
 	ldp	x2, x3, [sp, #48]
 	ldp	x4, x5, [sp, #32]
 	ldp	x6, x7, [sp, #16]
-	ldp	x8, x9, [sp], #80
-	cfi_adjust_cfa_offset (-80)
+	ldp	x8, x9, [sp], #(80+8*16)
+	cfi_adjust_cfa_offset (-(80+8*16))
 
 	ldp	ip1, lr, [sp], #16
 	cfi_adjust_cfa_offset (-16)