]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/objabi: fix the bug of shrinking SymType down to a uint8
authorWei Xiao <wei.xiao@arm.com>
Tue, 9 May 2017 08:25:13 +0000 (16:25 +0800)
committerCherry Zhang <cherryyz@google.com>
Tue, 16 May 2017 12:26:10 +0000 (12:26 +0000)
Previous CL (cmd/internal/objabi: shrink SymType down to a uint8) shrinks
SymType down to a uint8 but forgot making according change in goobj.

Fixes #20296
Also add a test to catch such Goobj format inconsistency bug

Change-Id: Ib43dd7122cfcacf611a643814e95f8c5a924941f
Reviewed-on: https://go-review.googlesource.com/42971
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/internal/goobj/read.go
src/cmd/internal/objabi/doc.go
src/cmd/objdump/objdump_test.go

index 587274401b8aef798d087e4b287d98243fce9662..b6c90d3bd7bbe9ad76d19b7623a80f2f0c0eadb0 100644 (file)
@@ -507,7 +507,7 @@ func (r *objReader) parseObject(prefix []byte) error {
                        break
                }
 
-               typ := r.readInt()
+               typ := r.readByte()
                s := &Sym{SymID: r.readSymID()}
                r.p.Syms = append(r.p.Syms, s)
                s.Kind = objabi.SymKind(typ)
index dc37817a618931b021655c9da865c3521644455b..7bd5ff63e562c7a47ab73e18f3ab7c8bde2db242 100644 (file)
@@ -56,7 +56,7 @@
 // Each symbol is laid out as the following fields:
 //
 //     - byte 0xfe (sanity check for synchronization)
-//     - type [int]
+//     - type [byte]
 //     - name & version [symref index]
 //     - flags [int]
 //             1<<0 dupok
index 91adde3eb3ced05ff64de31839b1fbbc347fd64c..47e51df3392f001dece0f2b807010ee14d614f5b 100644 (file)
@@ -201,3 +201,50 @@ func TestDisasmExtld(t *testing.T) {
        }
        testDisasm(t, false, "-ldflags=-linkmode=external")
 }
+
+func TestDisasmGoobj(t *testing.T) {
+       switch runtime.GOARCH {
+       case "arm":
+               t.Skipf("skipping on %s, issue 19811", 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)
+       }
+
+       hello := filepath.Join(tmp, "hello.o")
+       args := []string{"tool", "compile", "-o", hello}
+       args = append(args, "testdata/fmthello.go")
+       out, err := exec.Command(testenv.GoToolPath(t), args...).CombinedOutput()
+       if err != nil {
+               t.Fatalf("go tool compile fmthello.go: %v\n%s", err, out)
+       }
+       need := []string{
+               "main(SB)",
+               "fmthello.go:6",
+       }
+
+       args = []string{
+               "-s", "main",
+               hello,
+       }
+
+       out, err = exec.Command(exe, args...).CombinedOutput()
+       if err != nil {
+               t.Fatalf("objdump fmthello.o: %v\n%s", err, out)
+       }
+
+       text := string(out)
+       ok := true
+       for _, s := range need {
+               if !strings.Contains(text, s) {
+                       t.Errorf("disassembly missing '%s'", s)
+                       ok = false
+               }
+       }
+       if !ok {
+               t.Logf("full disassembly:\n%s", text)
+       }
+}