* resolution of eCos-vs.-sky merge conflict!
[deliverable/binutils-gdb.git] / gprof / gprof.c
index 0f9dd85f7c1b64941b9bb94f82ed2c57a2d46287..efb16b39df601168e8253be52f83d2c84e8dacc0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1983 Regents of the University of California.
+ * Copyright (c) 1983, 1998 Regents of the University of California.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
 #include "call_graph.h"
 #include "cg_arcs.h"
 #include "cg_print.h"
-#include "core.h"
+#include "corefile.h"
 #include "gmon_io.h"
 #include "hertz.h"
 #include "hist.h"
 #include "source.h"
 #include "sym_ids.h"
 
-#define VERSION "2.6"
-
 const char *whoami;
+const char *function_mapping_file;
 const char *a_out_name = A_OUTNAME;
 long hz = HZ_WRONG;
 
@@ -43,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;
@@ -56,8 +56,8 @@ File_Format file_format = FF_AUTO;
 bool first_output = TRUE;
 
 char copyright[] =
-"@(#) Copyright (c) 1983 Regents of the University of California.\n\
- All rights reserved.\n";
+ N_("@(#) Copyright (c) 1983 Regents of the University of California.\n\
+ All rights reserved.\n");
 
 static char *gmon_name = GMONNAME;     /* profile filename */
 
@@ -68,11 +68,18 @@ bfd *abfd;
  */
 static char *default_excluded_list[] =
 {
-  "_gprof_mcount", "mcount", "_mcount", "__mcleanup",
+  "_gprof_mcount", "mcount", "_mcount", "__mcount", "__mcount_internal",
+  "__mcleanup",
   "<locore>", "<hicore>",
   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'},
@@ -89,12 +96,16 @@ static struct option long_options[] =
   {"no-graph", optional_argument, 0, 'Q'},
   {"exec-counts", optional_argument, 0, 'C'},
   {"no-exec-counts", optional_argument, 0, 'Z'},
+  {"function-ordering", no_argument, 0, 'r'},
+  {"file-ordering", required_argument, 0, 'R'},
   {"file-info", no_argument, 0, 'i'},
   {"sum", no_argument, 0, 's'},
 
     /* 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'},
@@ -130,19 +141,23 @@ static struct option long_options[] =
 static void
 DEFUN (usage, (stream, status), FILE * stream AND int status)
 {
-  fprintf (stream, "\
+  fprintf (stream, _("\
 Usage: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n\
        [-d[num]] [-k from/to] [-m min-count] [-t table-length]\n\
        [--[no-]annotated-source[=name]] [--[no-]exec-counts[=name]]\n\
        [--[no-]flat-profile[=name]] [--[no-]graph[=name]]\n\
        [--[no-]time=name] [--all-lines] [--brief] [--debug[=level]]\n\
+       [--function-ordering] [--file-ordering]\n\
        [--directory-path=dirs] [--display-unused-functions]\n\
        [--file-format=name] [--file-info] [--help] [--line] [--min-count=n]\n\
        [--no-static] [--print-path] [--separate-files]\n\
        [--static-call-graph] [--sum] [--table-length=len] [--traditional]\n\
        [--version] [--width=n] [--ignore-non-functions]\n\
-       [image-file] [profile-file...]\n",
+       [--demangle] [--no-demangle]\n\
+       [image-file] [profile-file...]\n"),
           whoami);
+  if (status == 0)
+    fprintf (stream, _("Report bugs to bug-gnu-utils@gnu.org\n"));
   done (status);
 }
 
@@ -154,6 +169,12 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
   Sym **cg = 0;
   int ch, user_specified = 0;
 
+#ifdef HAVE_SETLOCALE
+  setlocale (LC_MESSAGES, "");
+#endif
+  bindtextdomain (PACKAGE, LOCALEDIR);
+  textdomain (PACKAGE);
+
   whoami = argv[0];
   xmalloc_set_program_name (whoami);
 
@@ -205,7 +226,7 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
            }
          DBG (ANYDEBUG, printf ("[main] debug-level=0x%x\n", debug_level));
 #ifndef DEBUG
-         printf ("%s: debugging not supported; -d ignored\n", whoami);
+         printf (_("%s: debugging not supported; -d ignored\n"), whoami);
 #endif /* DEBUG */
          break;
        case 'D':
@@ -258,7 +279,7 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
          print_path = TRUE;
          break;
        case 'm':
-         bb_min_calls = atoi (optarg);
+         bb_min_calls = (unsigned long) strtoul (optarg, (char **) NULL, 10);
          break;
        case 'n':
          sym_id_add (optarg, INCL_TIME);
@@ -282,7 +303,7 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
              file_format = FF_PROF;
              break;
            default:
-             fprintf (stderr, "%s: unknown file format %s\n",
+             fprintf (stderr, _("%s: unknown file format %s\n"),
                       optarg, whoami);
              done (1);
            }
@@ -322,6 +343,15 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
          output_style |= STYLE_CALL_GRAPH;
          user_specified |= STYLE_CALL_GRAPH;
          break;
+       case 'r':
+         output_style |= STYLE_FUNCTION_ORDER;
+         user_specified |= STYLE_FUNCTION_ORDER;
+         break;
+       case 'R':
+         output_style |= STYLE_FILE_ORDER;
+         user_specified |= STYLE_FILE_ORDER;
+         function_mapping_file = optarg;
+         break;
        case 'Q':
          if (optarg)
            {
@@ -356,7 +386,11 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
          bsd_style_output = TRUE;
          break;
        case 'v':
-         printf ("%s version %s\n", whoami, VERSION);
+         /* This output is intended to follow the GNU standards document.  */
+         printf (_("GNU gprof %s\n"), VERSION);
+         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"));
          done (0);
        case 'w':
          output_width = atoi (optarg);
@@ -386,11 +420,33 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
            }
          user_specified |= STYLE_ANNOTATED_SOURCE;
          break;
+       case OPTION_DEMANGLE:
+         demangle = TRUE;
+         break;
+       case OPTION_NO_DEMANGLE:
+         demangle = FALSE;
+         break;
        default:
          usage (stderr, 1);
        }
     }
 
+  /* Don't allow both ordering options, they modify the arc data in-place.  */
+  if ((user_specified & STYLE_FUNCTION_ORDER)
+      && (user_specified & STYLE_FILE_ORDER))
+    {
+      fprintf (stderr,_("\
+%s: Only one of --function-ordering and --file-ordering may be specified.\n"),
+              whoami);
+      done (1);
+    }
+
+  /* --sum implies --line, otherwise we'd lose b-b counts in gmon.sum */
+  if (output_style & STYLE_SUMMARY_FILE)
+    {
+      line_granularity = 1;
+    }
+
   /* append value of GPROF_PATH to source search list if set: */
   str = (char *) getenv ("GPROF_PATH");
   if (str)
@@ -414,7 +470,7 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
     {
       sym_id_add (*sp, EXCL_TIME);
       sym_id_add (*sp, EXCL_GRAPH);
-#ifdef __osf__
+#ifdef __alpha__
       sym_id_add (*sp, EXCL_FLAT);
 #endif
     }
@@ -479,7 +535,7 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
       while (optind++ < argc);
 #else
       fprintf (stderr,
-              "%s: sorry, file format `prof' is not yet supported\n",
+              _("%s: sorry, file format `prof' is not yet supported\n"),
               whoami);
       done (1);
 #endif
@@ -540,14 +596,14 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
   if ((output_style & STYLE_FLAT_PROFILE)
       && !(gmon_input & INPUT_HISTOGRAM))
     {
-      fprintf (stderr, "%s: gmon.out file is missing histogram\n", whoami);
+      fprintf (stderr, _("%s: gmon.out file is missing histogram\n"), whoami);
       done (1);
     }
 
   if ((output_style & STYLE_CALL_GRAPH) && !(gmon_input & INPUT_CALL_GRAPH))
     {
       fprintf (stderr,
-              "%s: gmon.out file is missing call-graph data\n", whoami);
+              _("%s: gmon.out file is missing call-graph data\n"), whoami);
       done (1);
     }
 
@@ -581,6 +637,14 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
     {
       print_annotated_source ();
     }
+  if (output_style & STYLE_FUNCTION_ORDER)
+    {
+      cg_print_function_ordering ();
+    }
+  if (output_style & STYLE_FILE_ORDER)
+    {
+      cg_print_file_ordering ();
+    }
   return 0;
 }
 
This page took 0.031909 seconds and 4 git commands to generate.