From 2ee2c6232c3cb7e2927b964701a81c1591c410db Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Mon, 30 Dec 2019 11:26:17 -0500 Subject: [PATCH] runtime: don't use R11 in nanotime1/walltime1 on ARM R11 a.k.a. REGTMP is the temp register used by the assembler. It may be clobbered if the assembler needs to synthesize instructions. In particular, in nanotime1/walltime1, the load of global variable runtime.iscgo clobbers it. So, avoid using R11 to hold a long-lived value. Fixes #36309. Change-Id: Iec2ab9d664532cad8fbf58da17f580e64a744f62 Reviewed-on: https://go-review.googlesource.com/c/go/+/212641 Reviewed-by: Tobias Klauser Reviewed-by: Andrew G. Morgan Reviewed-by: Ian Lance Taylor Run-TryBot: Tobias Klauser TryBot-Result: Gobot Gobot --- src/runtime/sys_linux_arm.s | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/runtime/sys_linux_arm.s b/src/runtime/sys_linux_arm.s index 8908b1bf23d3..e103da56dc57 100644 --- a/src/runtime/sys_linux_arm.s +++ b/src/runtime/sys_linux_arm.s @@ -269,8 +269,8 @@ noswitch: MOVW $CLOCK_REALTIME, R0 MOVW $8(R13), R1 // timespec - MOVW runtime·vdsoClockgettimeSym(SB), R11 - CMP $0, R11 + MOVW runtime·vdsoClockgettimeSym(SB), R2 + CMP $0, R2 B.EQ fallback // Store g on gsignal's stack, so if we receive a signal @@ -292,7 +292,7 @@ noswitch: MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo MOVW g, (R6) - BL (R11) + BL (R2) MOVW $0, R1 MOVW R1, (R6) // clear g slot, R6 is unchanged by C code @@ -300,7 +300,7 @@ noswitch: JMP finish nosaveg: - BL (R11) + BL (R2) JMP finish fallback: @@ -347,8 +347,8 @@ noswitch: MOVW $CLOCK_MONOTONIC, R0 MOVW $8(R13), R1 // timespec - MOVW runtime·vdsoClockgettimeSym(SB), R11 - CMP $0, R11 + MOVW runtime·vdsoClockgettimeSym(SB), R2 + CMP $0, R2 B.EQ fallback // Store g on gsignal's stack, so if we receive a signal @@ -370,7 +370,7 @@ noswitch: MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo MOVW g, (R6) - BL (R11) + BL (R2) MOVW $0, R1 MOVW R1, (R6) // clear g slot, R6 is unchanged by C code @@ -378,7 +378,7 @@ noswitch: JMP finish nosaveg: - BL (R11) + BL (R2) JMP finish fallback: