|
Kyle McMartin |
b66a135 |
diff --git a/sysdeps/aarch64/dl-tlsdesc.S b/sysdeps/aarch64/dl-tlsdesc.S
|
|
Kyle McMartin |
b66a135 |
index ded5471..7d28496 100644
|
|
Kyle McMartin |
b66a135 |
--- a/sysdeps/aarch64/dl-tlsdesc.S
|
|
Kyle McMartin |
b66a135 |
+++ b/sysdeps/aarch64/dl-tlsdesc.S
|
|
Kyle McMartin |
b66a135 |
@@ -140,7 +140,7 @@ _dl_tlsdesc_undefweak:
|
|
Kyle McMartin |
b66a135 |
cfi_startproc
|
|
Kyle McMartin |
b66a135 |
.align 2
|
|
Kyle McMartin |
b66a135 |
_dl_tlsdesc_dynamic:
|
|
Kyle McMartin |
b66a135 |
-# define NSAVEXREGPAIRS 2
|
|
Kyle McMartin |
b66a135 |
+# define NSAVEXREGPAIRS 3
|
|
Kyle McMartin |
b66a135 |
stp x29, x30, [sp,#-(32+16*NSAVEXREGPAIRS)]!
|
|
Kyle McMartin |
b66a135 |
cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS)
|
|
Kyle McMartin |
b66a135 |
mov x29, sp
|
|
Kyle McMartin |
b66a135 |
@@ -151,6 +151,10 @@ _dl_tlsdesc_dynamic:
|
|
Kyle McMartin |
b66a135 |
stp x1, x2, [sp, #32+16*0]
|
|
Kyle McMartin |
b66a135 |
stp x3, x4, [sp, #32+16*1]
|
|
Kyle McMartin |
b66a135 |
|
|
Kyle McMartin |
b66a135 |
+ /* Work around GCC rescheduling compares across tlsdesc calls. */
|
|
Kyle McMartin |
b66a135 |
+ mrs x30, nzcv
|
|
Kyle McMartin |
b66a135 |
+ stp xzr, x30, [sp, #32+16*2]
|
|
Kyle McMartin |
b66a135 |
+
|
|
Kyle McMartin |
b66a135 |
mrs x4, tpidr_el0
|
|
Siddhesh Poyarekar |
6223dbf |
/* The ldar here happens after the load from [x0] at the call site
|
|
Siddhesh Poyarekar |
6223dbf |
(that is generated by the compiler as part of the TLS access ABI),
|
|
Kyle McMartin |
b66a135 |
@@ -169,6 +173,8 @@ _dl_tlsdesc_dynamic:
|
|
Kyle McMartin |
b66a135 |
1:
|
|
Kyle McMartin |
b66a135 |
ldp x1, x2, [sp, #32+16*0]
|
|
Kyle McMartin |
b66a135 |
ldp x3, x4, [sp, #32+16*1]
|
|
Kyle McMartin |
b66a135 |
+ ldp xzr, x30, [sp, #32+16*2]
|
|
Kyle McMartin |
b66a135 |
+ msr nzcv, x30
|
|
Kyle McMartin |
b66a135 |
|
|
Kyle McMartin |
b66a135 |
ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS)
|
|
Siddhesh Poyarekar |
6223dbf |
cfi_adjust_cfa_offset (-32-16*NSAVEXREGPAIRS)
|