]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix cgo_topofstack to save clobbered registers
authorKeith Randall <khr@golang.org>
Mon, 29 Sep 2014 06:52:08 +0000 (23:52 -0700)
committerKeith Randall <khr@golang.org>
Mon, 29 Sep 2014 06:52:08 +0000 (23:52 -0700)
Fixes #8816

At least, I hope it does.

TBR=rsc
CC=golang-codereviews
https://golang.org/cl/153730043

src/runtime/asm_arm.s

index 06bd0751dbe56721af127a57016f530c81e5b2b7..36fb022f9518e1269fa7a9709061f8272171ad35 100644 (file)
@@ -1303,9 +1303,17 @@ yieldloop:
 
 // Called from cgo wrappers, this function returns g->m->curg.stack.hi.
 // Must obey the gcc calling convention.
-TEXT _cgo_topofstack(SB),NOSPLIT,$0
+TEXT _cgo_topofstack(SB),NOSPLIT,$8
+       // R11 and g register are clobbered by load_g.  They are
+       // callee-save in the gcc calling convention, so save them here.
+       MOVW    R11, saveR11-4(SP)
+       MOVW    g, saveG-8(SP)
+       
        BL      runtimeĀ·load_g(SB)
        MOVW    g_m(g), R0
        MOVW    m_curg(R0), R0
        MOVW    (g_stack+stack_hi)(R0), R0
+       
+       MOVW    saveG-8(SP), g
+       MOVW    saveR11-4(SP), R11
        RET