From ca70c918920b26ae1b88afb7d7a82748677d354f Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 29 Sep 2014 21:23:52 -0400 Subject: [PATCH] [release-branch.go1.3] runtime: hide cgocallback_gofunc calling cgocallbackg from linker The linker error at http://build.golang.org/log/42c57ff6b57ab36f6622417108bb5697e4d36fa7 is a false positive: cgocallback_gofunc is invoked on the g0 stack, as explained in its comments, and then it switches to the m->curg stack to invoke cgocallbackg. Checking the stacksplit sequence on the g0 stack doesn't make sense, nor does carrying a check that starts on the g0 stack over to the curg stack. Change the code to use an indirect call so that the linker stacksplit check does not follow through it. LGTM=bradfitz, adg R=golang-codereviews, bradfitz, adg CC=golang-codereviews, iant, r https://golang.org/cl/146510043 --- src/pkg/runtime/asm_amd64.s | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pkg/runtime/asm_amd64.s b/src/pkg/runtime/asm_amd64.s index 3c7eaf3433..2e28866098 100644 --- a/src/pkg/runtime/asm_amd64.s +++ b/src/pkg/runtime/asm_amd64.s @@ -784,7 +784,8 @@ havem: MOVQ BP, -8(DI) LEAQ -(8+8)(DI), SP MOVQ R8, 0(SP) - CALL runtime·cgocallbackg(SB) + MOVQ $runtime·cgocallbackg(SB), AX // hide function call from linker + CALL AX MOVQ 0(SP), R8 // Restore g->sched (== m->curg->sched) from saved values. -- 2.50.0