From: Austin Clements Date: Wed, 20 Apr 2022 16:24:09 +0000 (-0400) Subject: cmd/link: fix StackCheckOutput on AIX X-Git-Tag: go1.19beta1~619 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=58340240576a9ad254d90da4570e5e6afb913959;p=gostls13.git cmd/link: fix StackCheckOutput on AIX This test forces GOARCH to amd64, but currently uses the default GOOS. This works on every OS that supports amd64, which is every OS we support except AIX. Hence, on AIX this fails with an unsupported GOOS/GOARCH combination. Fix this by forcing GOOS to linux. Fixes #52451. Change-Id: I9321dd6386c7ef0fe2b47d77ed900aafc53f2a46 Reviewed-on: https://go-review.googlesource.com/c/go/+/401334 Run-TryBot: Austin Clements Reviewed-by: Bryan Mills Auto-Submit: Austin Clements TryBot-Result: Gopher Robot --- diff --git a/src/cmd/link/internal/ld/stackcheck.go b/src/cmd/link/internal/ld/stackcheck.go index 520e4d67b5..f0e1367068 100644 --- a/src/cmd/link/internal/ld/stackcheck.go +++ b/src/cmd/link/internal/ld/stackcheck.go @@ -101,7 +101,7 @@ func (ctxt *Link) doStackCheck() { // the same function multiple times at different // depths, but lets us find all paths. for _, root := range roots { - ctxt.Errorf(root, "nosplit stack overflow") + ctxt.Errorf(root, "nosplit stack over %d byte limit", limit) chain := []stackCheckChain{{stackCheckEdge{0, root}, false}} sc.report(root, limit, &chain) } diff --git a/src/cmd/link/internal/ld/stackcheck_test.go b/src/cmd/link/internal/ld/stackcheck_test.go index 21dbf2b3fd..2089badbe9 100644 --- a/src/cmd/link/internal/ld/stackcheck_test.go +++ b/src/cmd/link/internal/ld/stackcheck_test.go @@ -5,13 +5,12 @@ package ld import ( - "cmd/internal/objabi" - "cmd/internal/sys" "fmt" "internal/testenv" "os" "os/exec" "regexp" + "strconv" "testing" ) @@ -24,7 +23,7 @@ func TestStackCheckOutput(t *testing.T) { cmd := exec.Command(testenv.GoToolPath(t), "build", "-o", os.DevNull, "./testdata/stackcheck") // The rules for computing frame sizes on all of the // architectures are complicated, so just do this on amd64. - cmd.Env = append(os.Environ(), "GOARCH=amd64") + cmd.Env = append(os.Environ(), "GOARCH=amd64", "GOOS=linux") outB, err := cmd.CombinedOutput() if err == nil { @@ -34,13 +33,13 @@ func TestStackCheckOutput(t *testing.T) { t.Logf("linker output:\n%s", out) - // Construct expected stanzas - arch := sys.ArchAMD64 - call := 0 - if !arch.HasLR { - call = arch.RegSize + // Get expected limit. + limitRe := regexp.MustCompile("nosplit stack over ([0-9]+) byte limit") + m := limitRe.FindStringSubmatch(out) + if m == nil { + t.Fatalf("no overflow errors in output") } - limit := objabi.StackLimit - call + limit, _ := strconv.Atoi(m[1]) wantMap := map[string]string{ "main.startSelf": fmt.Sprintf( @@ -67,7 +66,7 @@ func TestStackCheckOutput(t *testing.T) { } // Parse stanzas - stanza := regexp.MustCompile(`^(.*): nosplit stack overflow\n(.*\n(?: .*\n)*)`) + stanza := regexp.MustCompile(`^(.*): nosplit stack over [0-9]+ byte limit\n(.*\n(?: .*\n)*)`) // Strip comments from cmd/go out = regexp.MustCompile(`(?m)^#.*\n`).ReplaceAllString(out, "") for len(out) > 0 {