diff --git a/src/cmd/internal/goobj/read.go b/src/cmd/internal/goobj/read.go
index 587274401b8aef798d087e4b287d98243fce9662..b6c90d3bd7bbe9ad76d19b7623a80f2f0c0eadb0 100644
--- a/src/cmd/internal/goobj/read.go
+++ b/src/cmd/internal/goobj/read.go
@@ -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)
diff --git a/src/cmd/internal/objabi/doc.go b/src/cmd/internal/objabi/doc.go
index dc37817a618931b021655c9da865c3521644455b..7bd5ff63e562c7a47ab73e18f3ab7c8bde2db242 100644
--- a/src/cmd/internal/objabi/doc.go
+++ b/src/cmd/internal/objabi/doc.go
@@ -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
diff --git a/src/cmd/objdump/objdump_test.go b/src/cmd/objdump/objdump_test.go
index 91adde3eb3ced05ff64de31839b1fbbc347fd64c..47e51df3392f001dece0f2b807010ee14d614f5b 100644
--- a/src/cmd/objdump/objdump_test.go
+++ b/src/cmd/objdump/objdump_test.go
@@ -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)
+	}
+}