From 6ef10b261c58b240692aba71c0be2e012e65d94b Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 16 Sep 2013 20:27:57 -0400 Subject: 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://codereview.appspot.com/13722046 --- src/cmd/nm/nm.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'src') 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; ivalue); else Bprint(&bout, "%*s ", wid, ""); - if(Sflag) { + if(Sflag && !skipsize(cp)) { vlong siz; siz = 0; for(j=i+1; jtype != '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; } -- cgit v1.2.1