]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: avoid clobbering C callee-save register in cgoSigtramp
authorBryan C. Mills <bcmills@google.com>
Wed, 11 Jan 2017 22:39:41 +0000 (17:39 -0500)
committerIan Lance Taylor <iant@golang.org>
Thu, 12 Jan 2017 00:06:32 +0000 (00:06 +0000)
Use R11 (a caller-saved temp register) instead of RBX (a callee-saved
register).

I believe this only affects linux/amd64, since it is the only platform
with a non-trivial cgoSigtramp implementation.

Updates #18328.

Change-Id: I3d35c4512624184d5a8ece653fa09ddf50e079a2
Reviewed-on: https://go-review.googlesource.com/35068
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/sys_linux_amd64.s

index 839df164068f0c302cf4329ea956ce53c343893c..6ddcb30ae204ddfa5e2f639cf4968646c44c223a 100644 (file)
@@ -330,9 +330,9 @@ sigtrampnog:
        // Lock sigprofCallersUse.
        MOVL    $0, AX
        MOVL    $1, CX
-       MOVQ    $runtime·sigprofCallersUse(SB), BX
+       MOVQ    $runtime·sigprofCallersUse(SB), R11
        LOCK
-       CMPXCHGL        CX, 0(BX)
+       CMPXCHGL        CX, 0(R11)
        JNZ     sigtramp  // Skip stack trace if already locked.
 
        // Jump to the traceback function in runtime/cgo.