* SUCH DAMAGE.
*/
-#include "libiberty.h"
#include "gprof.h"
+#include "libiberty.h"
+#include "bfdver.h"
#include "search_list.h"
#include "source.h"
#include "symtab.h"
#include "demangle.h"
#include "getopt.h"
-static void usage PARAMS ((FILE *, int)) ATTRIBUTE_NORETURN;
-int main PARAMS ((int, char **));
+static void usage (FILE *, int) ATTRIBUTE_NORETURN;
const char *whoami;
const char *function_mapping_file;
int output_width = 80;
bfd_boolean bsd_style_output = FALSE;
bfd_boolean demangle = TRUE;
-bfd_boolean discard_underscores = TRUE;
bfd_boolean ignore_direct_calls = FALSE;
bfd_boolean ignore_static_funcs = FALSE;
bfd_boolean ignore_zeros = TRUE;
static char *gmon_name = GMONNAME; /* profile filename */
-bfd *abfd;
-
/*
* Functions that get excluded by default:
*/
{
"_gprof_mcount", "mcount", "_mcount", "__mcount", "__mcount_internal",
"__mcleanup",
- "<locore>", "<hicore>",
0
};
static void
-usage (stream, status)
- FILE *stream;
- int status;
+usage (FILE *stream, int status)
{
fprintf (stream, _("\
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[=STYLE]] [--no-demangle]\n\
+ [--demangle[=STYLE]] [--no-demangle] [@FILE]\n\
[image-file] [profile-file...]\n"),
whoami);
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
done (status);
}
int
-main (argc, argv)
- int argc;
- char **argv;
+main (int argc, char **argv)
{
char **sp, *str;
Sym **cg = 0;
#if defined (HAVE_SETLOCALE)
setlocale (LC_CTYPE, "");
#endif
+#ifdef ENABLE_NLS
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
+#endif
whoami = argv[0];
xmalloc_set_program_name (whoami);
+ expandargv (&argc, &argv);
+
while ((ch = getopt_long (argc, argv,
- "aA::bBcCd::De:E:f:F:hiI:J::k:lLm:n::N::O:p::P::q::Q::st:Tvw:xyzZ::",
+ "aA::bBcC::d::De:E:f:F:hiI:J::k:lLm:n:N:O:p::P::q::Q::rR:st:Tvw:xyzZ::",
long_options, 0))
!= EOF)
{
break;
case 'v':
/* This output is intended to follow the GNU standards document. */
- printf (_("GNU gprof %s\n"), VERSION);
+ printf (_("GNU gprof %s\n"), BFD_VERSION_STRING);
printf (_("Based on BSD gprof, copyright 1983 Regents of the University of California.\n"));
printf (_("\
This program is free software. This program has absolutely no warranty.\n"));
/* --sum implies --line, otherwise we'd lose basic block counts in
gmon.sum */
if (output_style & STYLE_SUMMARY_FILE)
- {
- line_granularity = 1;
- }
+ line_granularity = 1;
/* append value of GPROF_PATH to source search list if set: */
str = (char *) getenv ("GPROF_PATH");
if (str)
- {
- search_list_append (&src_search_list, str);
- }
+ search_list_append (&src_search_list, str);
if (optind < argc)
- {
- a_out_name = argv[optind++];
- }
+ a_out_name = argv[optind++];
+
if (optind < argc)
- {
- gmon_name = argv[optind++];
- }
+ gmon_name = argv[optind++];
- /*
- * Turn off default functions:
- */
+ /* Turn off default functions. */
for (sp = &default_excluded_list[0]; *sp; sp++)
{
sym_id_add (*sp, EXCL_TIME);
sym_id_add (*sp, EXCL_FLAT);
}
- /*
- * For line-by-line profiling, also want to keep those
- * functions off the flat profile:
- */
- if (line_granularity)
- for (sp = &default_excluded_list[0]; *sp; sp++)
- sym_id_add (*sp, EXCL_FLAT);
-
/* Read symbol table from core file. */
core_init (a_out_name);
{
gmon_out_read (gmon_name);
if (optind < argc)
- {
- gmon_name = argv[optind];
- }
+ gmon_name = argv[optind];
}
while (optind++ < argc);
}
- /*
- * If user did not specify output style, try to guess something
- * reasonable:
- */
+ /* If user did not specify output style, try to guess something
+ reasonable. */
if (output_style == 0)
{
if (gmon_input & (INPUT_HISTOGRAM | INPUT_CALL_GRAPH))
- output_style = STYLE_FLAT_PROFILE | STYLE_CALL_GRAPH;
+ {
+ if (gmon_input & INPUT_HISTOGRAM)
+ output_style |= STYLE_FLAT_PROFILE;
+ if (gmon_input & INPUT_CALL_GRAPH)
+ output_style |= STYLE_CALL_GRAPH;
+ }
else
output_style = STYLE_EXEC_COUNTS;
done (1);
}
- /* output whatever user whishes to see: */
-
+ /* Output whatever user whishes to see. */
if (cg && (output_style & STYLE_CALL_GRAPH) && bsd_style_output)
{
- cg_print (cg); /* print the dynamic profile */
+ /* Print the dynamic profile. */
+ cg_print (cg);
}
if (output_style & STYLE_FLAT_PROFILE)
{
- hist_print (); /* print the flat profile */
+ /* Print the flat profile. */
+ hist_print ();
}
if (cg && (output_style & STYLE_CALL_GRAPH))
{
if (!bsd_style_output)
{
- cg_print (cg); /* print the dynamic profile */
+ /* Print the dynamic profile. */
+ cg_print (cg);
}
cg_print_index ();
}
if (output_style & STYLE_EXEC_COUNTS)
- {
- print_exec_counts ();
- }
-
+ print_exec_counts ();
+
if (output_style & STYLE_ANNOTATED_SOURCE)
- {
- print_annotated_source ();
- }
+ print_annotated_source ();
+
if (output_style & STYLE_FUNCTION_ORDER)
- {
- cg_print_function_ordering ();
- }
+ cg_print_function_ordering ();
+
if (output_style & STYLE_FILE_ORDER)
- {
- cg_print_file_ordering ();
- }
+ cg_print_file_ordering ();
+
return 0;
}
void
-done (status)
- int status;
+done (int status)
{
exit (status);
}