]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: fix StackCheckOutput on AIX
authorAustin Clements <austin@google.com>
Wed, 20 Apr 2022 16:24:09 +0000 (12:24 -0400)
committerGopher Robot <gobot@golang.org>
Wed, 20 Apr 2022 20:02:07 +0000 (20:02 +0000)
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 <austin@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Austin Clements <austin@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/link/internal/ld/stackcheck.go
src/cmd/link/internal/ld/stackcheck_test.go

index 520e4d67b5d19165a0fd6e90ff01e0a2ae59fe8d..f0e13670681c77055653a4e7ecddcda739b04419 100644 (file)
@@ -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)
                }
index 21dbf2b3fd451746002ab25cdc2bd27a730fde31..2089badbe91a71b3d32909ecdb67d66949beee5f 100644 (file)
@@ -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 {