summaryrefslogtreecommitdiff
path: root/src/cmd/objdump/objdump_test.go
diff options
context:
space:
mode:
authorLorenzo Masini <rugginoso@develer.com>2017-03-08 16:45:23 +0100
committerBrad Fitzpatrick <bradfitz@golang.org>2017-04-05 06:20:40 +0000
commit476f55fd8aec65cb1bd3417dd1c8c583c9e385d8 (patch)
tree07c94082c60b96ddf1595abe8f0cdbcf81c1c75c /src/cmd/objdump/objdump_test.go
parentacc1f47299620bb558a21e4144b7535fd904f377 (diff)
downloadgo-git-476f55fd8aec65cb1bd3417dd1c8c583c9e385d8.tar.gz
cmd/objdump: print Go code alongside assembly
Added -S flag to print go source file line above corresponding disassembly: $ go tool objdump -S -s main.main fmthello TEXT main.main(SB) /home/rugginoso/Documents/src/go/src/cmd/objdump/testdata/fmthello.go func main() { 0x47d450 64488b0c25f8ffffff FS MOVQ FS:0xfffffff8, CX 0x47d459 483b6110 CMPQ 0x10(CX), SP 0x47d45d 7631 JBE 0x47d490 0x47d45f 4883ec18 SUBQ $0x18, SP 0x47d463 48896c2410 MOVQ BP, 0x10(SP) 0x47d468 488d6c2410 LEAQ 0x10(SP), BP Println("hello, world") 0x47d46d 488d0563b00200 LEAQ 0x2b063(IP), AX 0x47d474 48890424 MOVQ AX, 0(SP) 0x47d478 48c74424080c000000 MOVQ $0xc, 0x8(SP) 0x47d481 e81a000000 CALL main.Println(SB) } 0x47d486 488b6c2410 MOVQ 0x10(SP), BP 0x47d48b 4883c418 ADDQ $0x18, SP 0x47d48f c3 RET func main() { 0x47d490 e8ebf1fcff CALL runtime.morestack_noctxt(SB) 0x47d495 ebb9 JMP main.main(SB) Execution time: $ time go tool objdump testdata/fmthello > /dev/null real 0m0.430s user 0m0.440s sys 0m0.000s $ time go tool objdump -S testdata/fmthello > /dev/null real 0m0.471s user 0m0.476s sys 0m0.012s Fixes #18245 Change-Id: I9b2f8338f9ee443c1352efd270d3ba85e3dd9b78 Reviewed-on: https://go-review.googlesource.com/37953 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/objdump/objdump_test.go')
-rw-r--r--src/cmd/objdump/objdump_test.go43
1 files changed, 32 insertions, 11 deletions
diff --git a/src/cmd/objdump/objdump_test.go b/src/cmd/objdump/objdump_test.go
index 419be6717a..91adde3eb3 100644
--- a/src/cmd/objdump/objdump_test.go
+++ b/src/cmd/objdump/objdump_test.go
@@ -57,24 +57,18 @@ func buildObjdump() error {
}
var x86Need = []string{
- "fmthello.go:6",
- "TEXT main.main(SB)",
"JMP main.main(SB)",
"CALL main.Println(SB)",
"RET",
}
var armNeed = []string{
- "fmthello.go:6",
- "TEXT main.main(SB)",
//"B.LS main.main(SB)", // TODO(rsc): restore; golang.org/issue/9021
"BL main.Println(SB)",
"RET",
}
var ppcNeed = []string{
- "fmthello.go:6",
- "TEXT main.main(SB)",
"BR main.main(SB)",
"CALL main.Println(SB)",
"RET",
@@ -91,7 +85,7 @@ var target = flag.String("target", "", "test disassembly of `goos/goarch` binary
// binary for the current system (only) and test that objdump
// can handle that one.
-func testDisasm(t *testing.T, flags ...string) {
+func testDisasm(t *testing.T, printCode bool, flags ...string) {
goarch := runtime.GOARCH
if *target != "" {
f := strings.Split(*target, "/")
@@ -114,9 +108,15 @@ func testDisasm(t *testing.T, flags ...string) {
t.Fatalf("go build fmthello.go: %v\n%s", err, out)
}
need := []string{
- "fmthello.go:6",
"TEXT main.main(SB)",
}
+
+ if printCode {
+ need = append(need, ` Println("hello, world")`)
+ } else {
+ need = append(need, "fmthello.go:6")
+ }
+
switch goarch {
case "amd64", "386":
need = append(need, x86Need...)
@@ -126,7 +126,16 @@ func testDisasm(t *testing.T, flags ...string) {
need = append(need, ppcNeed...)
}
- out, err = exec.Command(exe, "-s", "main.main", hello).CombinedOutput()
+ args = []string{
+ "-s", "main.main",
+ hello,
+ }
+
+ if printCode {
+ args = append([]string{"-S"}, args...)
+ }
+
+ out, err = exec.Command(exe, args...).CombinedOutput()
if err != nil {
t.Fatalf("objdump fmthello.exe: %v\n%s", err, out)
}
@@ -153,7 +162,19 @@ func TestDisasm(t *testing.T) {
case "s390x":
t.Skipf("skipping on %s, issue 15255", runtime.GOARCH)
}
- testDisasm(t)
+ testDisasm(t, false)
+}
+
+func TestDisasmCode(t *testing.T) {
+ switch runtime.GOARCH {
+ case "arm64":
+ t.Skipf("skipping on %s, issue 10106", runtime.GOARCH)
+ case "mips", "mipsle", "mips64", "mips64le":
+ t.Skipf("skipping on %s, issue 12559", runtime.GOARCH)
+ case "s390x":
+ t.Skipf("skipping on %s, issue 15255", runtime.GOARCH)
+ }
+ testDisasm(t, true)
}
func TestDisasmExtld(t *testing.T) {
@@ -178,5 +199,5 @@ func TestDisasmExtld(t *testing.T) {
if !build.Default.CgoEnabled {
t.Skip("skipping because cgo is not enabled")
}
- testDisasm(t, "-ldflags=-linkmode=external")
+ testDisasm(t, false, "-ldflags=-linkmode=external")
}