1
0
mirror of https://github.com/golang/go synced 2024-11-12 09:50:21 -07:00

runtime: fix cgo_topofstack to save clobbered registers

Fixes #8816

At least, I hope it does.

TBR=rsc
CC=golang-codereviews
https://golang.org/cl/153730043
This commit is contained in:
Keith Randall 2014-09-28 23:52:08 -07:00
parent f6fc14094a
commit e1364a6d0e

View 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