mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/internal/obj: Fix generation of assembly with -S
We can't drop Prog entries when we want to print disassembly. Added a test for -S. Fixes #14515 Change-Id: I44c72f70f7a3919acc01c559d30335d26669e76f Reviewed-on: https://go-review.googlesource.com/19930 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
8d94b9b820
commit
c747fce242
2 changed files with 56 additions and 3 deletions
|
|
@ -12,6 +12,7 @@ import (
|
|||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
|
|
@ -62,3 +63,53 @@ func main() {
|
|||
log.Fatalf("scanf code not removed from helloworld")
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure -S prints assembly code. See issue 14515.
|
||||
func TestDashS(t *testing.T) {
|
||||
testenv.MustHaveGoBuild(t)
|
||||
|
||||
// Make a directory to work in.
|
||||
dir, err := ioutil.TempDir("", "issue14515-")
|
||||
if err != nil {
|
||||
log.Fatalf("could not create directory: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
// Create source.
|
||||
src := path.Join(dir, "test.go")
|
||||
f, err := os.Create(src)
|
||||
if err != nil {
|
||||
log.Fatalf("could not create source file: %v", err)
|
||||
}
|
||||
f.Write([]byte(`
|
||||
package main
|
||||
import "fmt"
|
||||
func main() {
|
||||
fmt.Println("hello world")
|
||||
}
|
||||
`))
|
||||
f.Close()
|
||||
|
||||
// Compile source.
|
||||
cmd := exec.Command("go", "build", "-gcflags", "-S", src)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Fatalf("could not build target: %v", err)
|
||||
}
|
||||
|
||||
patterns := []string{
|
||||
// It is hard to look for actual instructions in an
|
||||
// arch-independent way. So we'll just look for
|
||||
// pseudo-ops that are arch-independent.
|
||||
"\tTEXT\t",
|
||||
"\tFUNCDATA\t",
|
||||
"\tPCDATA\t",
|
||||
}
|
||||
outstr := string(out)
|
||||
for _, p := range patterns {
|
||||
if !strings.Contains(outstr, p) {
|
||||
println(outstr)
|
||||
panic("can't find pattern " + p)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue