Commit 2f7b57e9 authored by Hiroshi Ioka's avatar Hiroshi Ioka Committed by Ian Lance Taylor

cmd/nm: accept macho files which don't have symbol table in the archive

After https://golang.org/cl/64793, we started to include Mach-O object
files which don't have symbol table into cgo archive.
However, toolchains didn't handle those files yet.

Fixes #21959

Change-Id: Ibb2f6492f1fa59368f2dfd4cff19783997539875
Reviewed-on: https://go-review.googlesource.com/65170Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent dd5a86f1
...@@ -30,7 +30,7 @@ func openMacho(r io.ReaderAt) (rawFile, error) { ...@@ -30,7 +30,7 @@ func openMacho(r io.ReaderAt) (rawFile, error) {
func (f *machoFile) symbols() ([]Sym, error) { func (f *machoFile) symbols() ([]Sym, error) {
if f.macho.Symtab == nil { if f.macho.Symtab == nil {
return nil, fmt.Errorf("missing symbol table") return nil, nil
} }
// Build sorted list of addresses of all symbols. // Build sorted list of addresses of all symbols.
......
...@@ -110,15 +110,19 @@ func nm(file string) { ...@@ -110,15 +110,19 @@ func nm(file string) {
entries := f.Entries() entries := f.Entries()
var found bool
for _, e := range entries { for _, e := range entries {
syms, err := e.Symbols() syms, err := e.Symbols()
if err != nil { if err != nil {
errorf("reading %s: %v", file, err) errorf("reading %s: %v", file, err)
} }
if len(syms) == 0 { if len(syms) == 0 {
errorf("reading %s: no symbols", file) continue
} }
found = true
switch *sortOrder { switch *sortOrder {
case "address": case "address":
sort.Slice(syms, func(i, j int) bool { return syms[i].Addr < syms[j].Addr }) sort.Slice(syms, func(i, j int) bool { return syms[i].Addr < syms[j].Addr })
...@@ -155,5 +159,9 @@ func nm(file string) { ...@@ -155,5 +159,9 @@ func nm(file string) {
} }
} }
if !found {
errorf("reading %s: no symbols", file)
}
w.Flush() w.Flush()
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment