mirror of
https://github.com/golang/go
synced 2024-11-23 20:30:04 -07:00
cmd/internal/objabi: fix the bug of shrinking SymType down to a uint8
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>
This commit is contained in:
parent
5088b64b07
commit
b2363ee9f6
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user