From e4dee78c688fd87281a90b429988438883018089 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 25 Mar 1998 00:06:23 +0000 Subject: [PATCH] Add --demangle and --no-demangle options: * gprof.h (demangle): Declare. * gprof.c (demangle): New global variable. (OPTION_DEMANGLE, OPTION_NO_DEMANGLE): Define. (long_options): Add "demangle" and "no-demangle". (usage): Mention --demangle and --no-demangle. (main): Handle OPTION_DEMANGLE and OPTION_NO_DEMANGLE. * utils.c (print_name_only): Only demangle symbol name if demangle is true. * gprof.texi (Output Options): Document new options. --- gprof/ChangeLog | 13 +++++++++++++ gprof/gprof.c | 16 ++++++++++++++++ gprof/gprof.h | 1 + gprof/gprof.texi | 6 ++++++ gprof/utils.c | 9 ++++++--- 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/gprof/ChangeLog b/gprof/ChangeLog index 2e0fe3f35ca..0139b1d1739 100644 --- a/gprof/ChangeLog +++ b/gprof/ChangeLog @@ -1,3 +1,16 @@ +Tue Mar 24 19:00:11 1998 Ian Lance Taylor + + Add --demangle and --no-demangle options: + * gprof.h (demangle): Declare. + * gprof.c (demangle): New global variable. + (OPTION_DEMANGLE, OPTION_NO_DEMANGLE): Define. + (long_options): Add "demangle" and "no-demangle". + (usage): Mention --demangle and --no-demangle. + (main): Handle OPTION_DEMANGLE and OPTION_NO_DEMANGLE. + * utils.c (print_name_only): Only demangle symbol name if demangle + is true. + * gprof.texi (Output Options): Document new options. + Fri Mar 20 19:21:56 1998 Ian Lance Taylor * Makefile.in: Rebuild with automake 1.2e. diff --git a/gprof/gprof.c b/gprof/gprof.c index 5cc08ceac6b..c1abf3823ce 100644 --- a/gprof/gprof.c +++ b/gprof/gprof.c @@ -42,6 +42,7 @@ int debug_level = 0; int output_style = 0; int output_width = 80; bool bsd_style_output = FALSE; +bool demangle = TRUE; bool discard_underscores = TRUE; bool ignore_direct_calls = FALSE; bool ignore_static_funcs = FALSE; @@ -73,6 +74,12 @@ static char *default_excluded_list[] = 0 }; +/* Codes used for the long options with no short synonyms. 150 isn't + special; it's just an arbitrary non-ASCII char value. */ + +#define OPTION_DEMANGLE (150) +#define OPTION_NO_DEMANGLE (OPTION_DEMANGLE + 1) + static struct option long_options[] = { {"line", no_argument, 0, 'l'}, @@ -97,6 +104,8 @@ static struct option long_options[] = /* various options to affect output: */ {"all-lines", no_argument, 0, 'x'}, + {"demangle", no_argument, 0, OPTION_DEMANGLE}, + {"no-demangle", no_argument, 0, OPTION_NO_DEMANGLE}, {"directory-path", required_argument, 0, 'I'}, {"display-unused-functions", no_argument, 0, 'z'}, {"min-count", required_argument, 0, 'm'}, @@ -144,6 +153,7 @@ Usage: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n\ [--no-static] [--print-path] [--separate-files]\n\ [--static-call-graph] [--sum] [--table-length=len] [--traditional]\n\ [--version] [--width=n] [--ignore-non-functions]\n\ + [--demangle] [--no-demangle]\n\ [image-file] [profile-file...]\n", whoami); if (status == 0) @@ -404,6 +414,12 @@ This program is free software. This program has absolutely no warranty.\n"); } user_specified |= STYLE_ANNOTATED_SOURCE; break; + case OPTION_DEMANGLE: + demangle = TRUE; + break; + case OPTION_NO_DEMANGLE: + demangle = FALSE; + break; default: usage (stderr, 1); } diff --git a/gprof/gprof.h b/gprof/gprof.h index 20eb108afeb..92e6c86e273 100644 --- a/gprof/gprof.h +++ b/gprof/gprof.h @@ -112,6 +112,7 @@ extern int debug_level; /* debug level */ extern int output_style; extern int output_width; /* controls column width in index */ extern bool bsd_style_output; /* as opposed to FSF style output */ +extern bool demangle; /* demangle symbol names? */ extern bool discard_underscores; /* discard leading underscores? */ extern bool ignore_direct_calls; /* don't count direct calls */ extern bool ignore_static_funcs; /* suppress static functions */ diff --git a/gprof/gprof.texi b/gprof/gprof.texi index 4c22c9aa8fd..6a61fc09b49 100644 --- a/gprof/gprof.texi +++ b/gprof/gprof.texi @@ -477,6 +477,12 @@ are annotated. If this option is specified, every line in a basic-block is annotated by repeating the annotation for the first line. This behavior is similar to @code{tcov}'s @samp{-a}. +@item --demangle +@itemx --no-demangle +These options control whether C++ symbol names should be demangled when +printing output. The default is to demangle symbols. The +@code{--no-demangle} option may be used to turn off demangling. + @end table @node Analysis Options,Miscellaneous Options,Output Options,Invoking diff --git a/gprof/utils.c b/gprof/utils.c index 2402fe4ee62..a0e69b13b68 100644 --- a/gprof/utils.c +++ b/gprof/utils.c @@ -42,10 +42,13 @@ DEFUN (print_name_only, (self), Sym * self) { name++; } - demangled = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS); - if (demangled) + if (demangle) { - name = demangled; + demangled = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS); + if (demangled) + { + name = demangled; + } } } printf ("%s", name); -- 2.30.2