diff options
author | Per Bothner <per@bothner.com> | 1992-08-31 03:34:15 +0000 |
---|---|---|
committer | Per Bothner <per@bothner.com> | 1992-08-31 03:34:15 +0000 |
commit | dc1d1ca5e89e49f1d0b5bfd417769fc0fcc170a6 (patch) | |
tree | bdfc8e51ad1a61831cc15c8b158e3864a22de607 /gprof/gprof.c | |
parent | 3402b1cff22f615e896aa8d0dd2792e910479b78 (diff) | |
download | gdb-dc1d1ca5e89e49f1d0b5bfd417769fc0fcc170a6.zip gdb-dc1d1ca5e89e49f1d0b5bfd417769fc0fcc170a6.tar.gz gdb-dc1d1ca5e89e49f1d0b5bfd417769fc0fcc170a6.tar.bz2 |
* gprof.h, gprof.c, printfgprof.c: Add support for two
output styles: The default is similar to the old FSF gprof,
while -T sets the variable bsd_style_output, which causes
output matching Berkeley's gprof. The biggest differences
are that with the FSF style output, the flat profile comes
before the call graph; numbers come before explanations;
and there is less gratuitous white space.
* gprof.h, gprof.c, printfgprof.c: New discard_underscores
variable causes discarding of initial underscores when
printing symbol names. It is set unless there is a "main"
symbol (without an underscore).
* printfgprof.c: New function printnameonly(), called
by printname(). It handles stripping of initial '_',
as well as C++ name-demangling.
* gprof.callg, gprof.flat, make-c-prog.awk: Removed.
It is just as convenient to edit blurbs.c directly.
* Makefile.in: Removed rule for making blurbs.c.
* blurbs.c: This is now a true source file (as opposed
to being generated from gprof.callg and gprof.flat).
Change style to use one long string literal, instead of
one literal per output line. Add FSF-style blurb for call graph.
Diffstat (limited to 'gprof/gprof.c')
-rw-r--r-- | gprof/gprof.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/gprof/gprof.c b/gprof/gprof.c index 5061efa..6994d8f 100644 --- a/gprof/gprof.c +++ b/gprof/gprof.c @@ -38,6 +38,9 @@ char *whoami = "gprof"; */ char *defaultEs[] = { "mcount" , "__mcleanup" , 0 }; +int discard_underscores = 1; /* Should we discard initial underscores? */ +int bsd_style_output = 0; /* As opposed to FSF style output */ + main(argc, argv) int argc; char **argv; @@ -102,6 +105,9 @@ main(argc, argv) case 's': sflag = TRUE; break; + case 'T': /* "Traditional" output format */ + bsd_style_output = 1; + break; case 'z': zflag = TRUE; break; @@ -165,14 +171,14 @@ main(argc, argv) * assemble the dynamic profile */ timesortnlp = doarcs(); - /* - * print the dynamic profile - */ - printgprof( timesortnlp ); - /* - * print the flat profile - */ - printprof(); + + if (bsd_style_output) { + printgprof( timesortnlp ); /* print the dynamic profile */ + printprof(); /* print the flat profile */ + } else { + printprof(); /* print the flat profile */ + printgprof( timesortnlp ); /* print the dynamic profile */ + } /* * print the index */ @@ -230,7 +236,7 @@ bfd *abfd; i = get_symtab_upper_bound (abfd); /* This will probably give us more * than we need, but that's ok. */ - syms = (asymbol**)malloc (i); + syms = (asymbol**)xmalloc (i); nosyms = bfd_canonicalize_symtab (abfd, syms); nname = 0; @@ -265,8 +271,16 @@ bfd *abfd; # endif DEBUG continue; } + /* Symbol offsets are always section-relative. */ npe->value = syms[i]->value + syms[i]->section->vma; npe->name = syms[i]->name; + + /* If we see "main" without an initial '_', we assume + names are *not* prefixed by '_'. */ + if (npe->name[0] == 'm' && discard_underscores + && strcmp(npe->name, "main") == 0) + discard_underscores = 0; + # ifdef DEBUG if ( debug & AOUTDEBUG ) { printf( "[getsymtab] %d %s 0x%08x\n" , |