mirror of https://github.com/golang/go.git
runtime/internal/startlinetest: work around shared buildmode linking issue
The runtime/internal/startlinetest package contains a call to a function defined in runtime_test. Generally this is fine as this package is only linked in for runtime_test. Except that for "go install -buildmode=shared std", which include all packages in std, including this test-only internal package. In this mode, the caller is included in the linking but the callee is not, causing linking error. Work around it by calling runtime_test.callerStartLine via a function pointer. The function pointer is only set in runtime_test. In the shared std build, the function pointer will not be set, and this is fine. Fixes #57334. Change-Id: I7d871c50ce6599c6ea2802cf6e14bb749deab220 Reviewed-on: https://go-review.googlesource.com/c/go/+/458696 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com>
This commit is contained in:
parent
18baca6765
commit
de6abd7889
|
|
@ -8,3 +8,6 @@ package startlinetest
|
|||
// Defined in func_amd64.s, this is a trivial assembly function that calls
|
||||
// runtime_test.callerStartLine.
|
||||
func AsmFunc() int
|
||||
|
||||
// Provided by runtime_test.
|
||||
var CallerStartLine func(bool) int
|
||||
|
|
|
|||
|
|
@ -23,5 +23,6 @@
|
|||
TEXT ·AsmFunc<ABIInternal>(SB),NOSPLIT,$8-0
|
||||
NO_LOCAL_POINTERS
|
||||
MOVQ $0, AX // wantInlined
|
||||
CALL runtime_test·callerStartLine<ABIInternal>(SB)
|
||||
MOVQ ·CallerStartLine(SB), DX
|
||||
CALL (DX)
|
||||
RET
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ import (
|
|||
// is only tested on amd64 to avoid the need for a proliferation of per-arch
|
||||
// copies of this function.
|
||||
func TestStartLineAsm(t *testing.T) {
|
||||
startlinetest.CallerStartLine = callerStartLine
|
||||
|
||||
const wantLine = 23
|
||||
got := startlinetest.AsmFunc()
|
||||
if got != wantLine {
|
||||
|
|
|
|||
Loading…
Reference in New Issue