Commit 00061219 authored by Russ Cox's avatar Russ Cox

cmd/nm: make -S listing a bit more accurate

Hide container symbols like text and etext so that
the individual pieces inside are shown instead.
For example, if text and main.init have the same
address, it was a toss-up which name was printed.

R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/13722046
parent 30ecb4cd
...@@ -299,6 +299,37 @@ psym(Sym *s, void* p) ...@@ -299,6 +299,37 @@ psym(Sym *s, void* p)
symptr[nsym++] = s; 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 void
printsyms(Sym **symptr, long nsym) printsyms(Sym **symptr, long nsym)
{ {
...@@ -332,12 +363,12 @@ printsyms(Sym **symptr, long nsym) ...@@ -332,12 +363,12 @@ printsyms(Sym **symptr, long nsym)
Bprint(&bout, "%*llux ", wid, s->value); Bprint(&bout, "%*llux ", wid, s->value);
else else
Bprint(&bout, "%*s ", wid, ""); Bprint(&bout, "%*s ", wid, "");
if(Sflag) { if(Sflag && !skipsize(cp)) {
vlong siz; vlong siz;
siz = 0; siz = 0;
for(j=i+1; j<nsym; j++) { 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; siz = symptr[j]->value - s->value;
break; break;
} }
......
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