diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd/nm/nm.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/src/cmd/nm/nm.c b/src/cmd/nm/nm.c index b5e1ca0b6..820942426 100644 --- a/src/cmd/nm/nm.c +++ b/src/cmd/nm/nm.c @@ -299,6 +299,37 @@ psym(Sym *s, void* p) symptr[nsym++] = s; } +const char *skipnames[] = { + "bss", + "data", + "ebss", + "edata", + "egcbss", + "egcdata", + "enoptrbss", + "enoptrdata", + "epclntab", + "erodata", + "esymtab", + "etext", + "etypelink", + "noptrbss", + "noptrdata", + "rodata", + "text", +}; + +int +skipsize(char *name) +{ + int i; + + for(i=0; i<nelem(skipnames); i++) + if(strcmp(skipnames[i], name) == 0) + return 1; + return 0; +} + void printsyms(Sym **symptr, long nsym) { @@ -332,12 +363,12 @@ printsyms(Sym **symptr, long nsym) Bprint(&bout, "%*llux ", wid, s->value); else Bprint(&bout, "%*s ", wid, ""); - if(Sflag) { + if(Sflag && !skipsize(cp)) { vlong siz; siz = 0; for(j=i+1; j<nsym; j++) { - if(symptr[j]->type != 'a' && symptr[j]->type != 'p') { + if(!skipsize(symptr[j]->name) && symptr[j]->type != 'a' && symptr[j]->type != 'p') { siz = symptr[j]->value - s->value; break; } |