Skip to content

Commit

Permalink
cmd/link: fix StackCheckOutput on AIX
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
aclements authored and gopherbot committed Apr 20, 2022
1 parent a2f7d9d commit 5834024
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 11 deletions.
2 changes: 1 addition & 1 deletion src/cmd/link/internal/ld/stackcheck.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
19 changes: 9 additions & 10 deletions src/cmd/link/internal/ld/stackcheck_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
package ld

import (
"cmd/internal/objabi"
"cmd/internal/sys"
"fmt"
"internal/testenv"
"os"
"os/exec"
"regexp"
"strconv"
"testing"
)

Expand All @@ -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 {
Expand All @@ -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(
Expand All @@ -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 {
Expand Down

0 comments on commit 5834024

Please sign in to comment.