* core.c (core_sym_class): Ignore symbols without BSF_FUNCTION
authorJeff Law <law@redhat.com>
Mon, 25 Dec 1995 04:32:29 +0000 (04:32 +0000)
committerJeff Law <law@redhat.com>
Mon, 25 Dec 1995 04:32:29 +0000 (04:32 +0000)
        set if ignore_non_function is set.
        * gprof.h (ignore_non_functions): Declare.
        * gprof.c (ignore_non_functions): Define.
        (long_options): Add "ignore-non-functions".
        (usage): Add new options.
        (main): Recognize "-D" and "--ignore-non-functions" option.
So we can get more accurate information on Solaris, HPUX and other
systems that can uniquely identify function symbols.

gprof/ChangeLog
gprof/core.c
gprof/gprof.c
gprof/gprof.h
gprof/gprof.texi

index e8a93504b6f936f0d56546ec598bb4d1f243be65..2e2a7266d0a220f69e5ffcaac7fa9912899b5cf5 100644 (file)
@@ -1,3 +1,13 @@
+Sun Dec 24 21:32:27 1995  Jeffrey A Law  (law@cygnus.com)
+
+       * core.c (core_sym_class): Ignore symbols without BSF_FUNCTION
+       set if ignore_non_function is set.
+       * gprof.h (ignore_non_functions): Declare.
+       * gprof.c (ignore_non_functions): Define.
+       (long_options): Add "ignore-non-functions".
+       (usage): Add new options.
+       (main): Recognize "-D" and "--ignore-non-functions" option.
+
 Tue Nov 21 13:24:39 1995  Ken Raeburn  <raeburn@cygnus.com>
 
        * Makefile.in (.m.c): Strip out directory name from function
index 19c6e590f99cabf9316b74c413d09dc6bce645cd..aa6012a8e9ef0f5f4d36ca70bf7e0cee69054a5d 100644 (file)
@@ -179,6 +179,12 @@ DEFUN (core_sym_class, (sym), asymbol * sym)
     {
       return 0;
     }
+
+  /* If the object file supports marking of function symbols, then we can
+     zap anything that doesn't have BSF_FUNCTION set.  */
+  if (ignore_non_functions && (sym->flags & BSF_FUNCTION) == 0)
+    return 0;
+
   return 't';                  /* it's a static text symbol */
 }
 
index 5da3180a93e2b39be01a5c2ba98adf94aaac7dc6..0f9dd85f7c1b64941b9bb94f82ed2c57a2d46287 100644 (file)
@@ -50,6 +50,7 @@ bool ignore_zeros = TRUE;
 bool line_granularity = FALSE;
 bool print_descriptions = TRUE;
 bool print_path = FALSE;
+bool ignore_non_functions = FALSE;
 File_Format file_format = FF_AUTO;
 
 bool first_output = TRUE;
@@ -76,6 +77,7 @@ static struct option long_options[] =
 {
   {"line", no_argument, 0, 'l'},
   {"no-static", no_argument, 0, 'a'},
+  {"ignore-non-functions", no_argument, 0, 'D'},
 
     /* output styles: */
 
@@ -129,7 +131,7 @@ static void
 DEFUN (usage, (stream, status), FILE * stream AND int status)
 {
   fprintf (stream, "\
-Usage: %s [-[abchilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n\
+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\
@@ -138,7 +140,7 @@ Usage: %s [-[abchilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\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]\n\
+       [--version] [--width=n] [--ignore-non-functions]\n\
        [image-file] [profile-file...]\n",
           whoami);
   done (status);
@@ -156,7 +158,7 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
   xmalloc_set_program_name (whoami);
 
   while ((ch = getopt_long (argc, argv,
-       "aA::bBcCd::e:E:f:F:hiI:J::k:lLm:n::N::O:p::P::q::Q::st:Tvw:xyzZ::",
+       "aA::bBcCdD::e:E:f:F:hiI:J::k:lLm:n::N::O:p::P::q::Q::st:Tvw:xyzZ::",
                            long_options, 0))
         != EOF)
     {
@@ -206,6 +208,9 @@ DEFUN (main, (argc, argv), int argc AND char **argv)
          printf ("%s: debugging not supported; -d ignored\n", whoami);
 #endif /* DEBUG */
          break;
+       case 'D':
+         ignore_non_functions = TRUE;
+         break;
        case 'E':
          sym_id_add (optarg, EXCL_TIME);
        case 'e':
index e4177a9a0bbb9586188175ddb1610b36cf86ae9e..94fee0dff39e0980369846681d94ff3f545dc877 100644 (file)
@@ -128,6 +128,8 @@ extern bool ignore_zeros;   /* ignore unused symbols/files */
 extern bool line_granularity;  /* function or line granularity? */
 extern bool print_descriptions;        /* output profile description */
 extern bool print_path;                /* print path or just filename? */
+extern bool ignore_non_functions;/* Ignore non-function symbols.  */
+
 extern File_Format file_format;        /* requested file format */
 
 extern bool first_output;      /* no output so far? */
index ba05b594d659446a6e829f85b85f2e159db83e1c..1bf63156f3f8d537f26a66d384aa3155935ebafe 100644 (file)
@@ -294,6 +294,12 @@ function that was loaded directly before it in the executable file.
 @c This is compatible with Unix @code{gprof}, but a bad idea.  
 This option affects both the flat profile and the call graph.
 
+@item -D
+The @samp{-D} option causes @code{gprof} to ignore symbols which
+are not known to be functions.  This option will give more accurate
+profile data on systems where it is supported (Solaris and HPUX for
+example).
+
 @item -e @var{function_name}
 The @samp{-e @var{function}} option tells @code{gprof} to not print
 information about the function @var{function_name} (and its