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.
This commit is contained in:
Ian Lance Taylor 1998-03-25 00:06:23 +00:00
parent 44a8b274cf
commit e4dee78c68
5 changed files with 42 additions and 3 deletions

View File

@ -1,3 +1,16 @@
Tue Mar 24 19:00:11 1998 Ian Lance Taylor <ian@cygnus.com>
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 <ian@cygnus.com>
* Makefile.in: Rebuild with automake 1.2e.

View File

@ -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);
}

View File

@ -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 */

View File

@ -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

View File

@ -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);