Skip to content

Commit 2ee2c62

Browse files
committed
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 <[email protected]> Reviewed-by: Andrew G. Morgan <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]> Run-TryBot: Tobias Klauser <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent 9df93e4 commit 2ee2c62

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/runtime/sys_linux_arm.s

+8-8
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,8 @@ noswitch:
269269

270270
MOVW $CLOCK_REALTIME, R0
271271
MOVW $8(R13), R1 // timespec
272-
MOVW runtime·vdsoClockgettimeSym(SB), R11
273-
CMP $0, R11
272+
MOVW runtime·vdsoClockgettimeSym(SB), R2
273+
CMP $0, R2
274274
B.EQ fallback
275275

276276
// Store g on gsignal's stack, so if we receive a signal
@@ -292,15 +292,15 @@ noswitch:
292292
MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
293293
MOVW g, (R6)
294294

295-
BL (R11)
295+
BL (R2)
296296

297297
MOVW $0, R1
298298
MOVW R1, (R6) // clear g slot, R6 is unchanged by C code
299299

300300
JMP finish
301301

302302
nosaveg:
303-
BL (R11)
303+
BL (R2)
304304
JMP finish
305305

306306
fallback:
@@ -347,8 +347,8 @@ noswitch:
347347

348348
MOVW $CLOCK_MONOTONIC, R0
349349
MOVW $8(R13), R1 // timespec
350-
MOVW runtime·vdsoClockgettimeSym(SB), R11
351-
CMP $0, R11
350+
MOVW runtime·vdsoClockgettimeSym(SB), R2
351+
CMP $0, R2
352352
B.EQ fallback
353353

354354
// Store g on gsignal's stack, so if we receive a signal
@@ -370,15 +370,15 @@ noswitch:
370370
MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
371371
MOVW g, (R6)
372372

373-
BL (R11)
373+
BL (R2)
374374

375375
MOVW $0, R1
376376
MOVW R1, (R6) // clear g slot, R6 is unchanged by C code
377377

378378
JMP finish
379379

380380
nosaveg:
381-
BL (R11)
381+
BL (R2)
382382
JMP finish
383383

384384
fallback:

0 commit comments

Comments
 (0)