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)