aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/nm/nm.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-12-10 11:32:48 -0800
committerRuss Cox <rsc@golang.org>2010-12-10 11:32:48 -0800
commit4324a31376c30aea31bba688bbc674dcc24c7413 (patch)
treeb3662f7dfa8a46b623bc4418956cdf97119ac07f /src/cmd/nm/nm.c
parent71bd053ada2ec6ac5c8d37855e772ca7ec7fba04 (diff)
downloadgo-4324a31376c30aea31bba688bbc674dcc24c7413.tar.xz
nm: silently ignore .o files in .a files
Update #1334. R=r CC=golang-dev https://golang.org/cl/3553041
Diffstat (limited to 'src/cmd/nm/nm.c')
-rw-r--r--src/cmd/nm/nm.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/cmd/nm/nm.c b/src/cmd/nm/nm.c
index e57492d184..845b6c773a 100644
--- a/src/cmd/nm/nm.c
+++ b/src/cmd/nm/nm.c
@@ -126,31 +126,34 @@ void
doar(Biobuf *bp)
{
int offset, size, obj;
- char membername[SARNAME];
+ char name[SARNAME];
multifile = 1;
for (offset = Boffset(bp);;offset += size) {
- size = nextar(bp, offset, membername);
+ size = nextar(bp, offset, name);
if (size < 0) {
error("phase error on ar header %d", offset);
return;
}
if (size == 0)
return;
- if (strcmp(membername, symname) == 0)
+ if (strcmp(name, symname) == 0)
continue;
obj = objtype(bp, 0);
if (obj < 0) {
+ // perhaps foreign object
+ if(strlen(name) > 2 && strcmp(name+strlen(name)-2, ".o") == 0)
+ return;
error("inconsistent file %s in %s",
- membername, filename);
+ name, filename);
return;
}
if (!readar(bp, obj, offset+size, 1)) {
error("invalid symbol reference in file %s",
- membername);
+ name);
return;
}
- filename = membername;
+ filename = name;
nsym=0;
objtraverse(psym, 0);
printsyms(symptr, nsym);