From 32843f948c896c825b38465b5495044f9f6cb298 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Mon, 25 Dec 1995 04:32:29 +0000 Subject: * 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. So we can get more accurate information on Solaris, HPUX and other systems that can uniquely identify function symbols. --- gprof/ChangeLog | 10 ++++++++++ gprof/core.c | 6 ++++++ gprof/gprof.c | 11 ++++++++--- gprof/gprof.h | 2 ++ gprof/gprof.texi | 6 ++++++ 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/gprof/ChangeLog b/gprof/ChangeLog index e8a9350..2e2a726 100644 --- a/gprof/ChangeLog +++ b/gprof/ChangeLog @@ -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 * Makefile.in (.m.c): Strip out directory name from function diff --git a/gprof/core.c b/gprof/core.c index 19c6e59..aa6012a 100644 --- a/gprof/core.c +++ b/gprof/core.c @@ -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 */ } diff --git a/gprof/gprof.c b/gprof/gprof.c index 5da3180..0f9dd85 100644 --- a/gprof/gprof.c +++ b/gprof/gprof.c @@ -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': diff --git a/gprof/gprof.h b/gprof/gprof.h index e4177a9..94fee0d 100644 --- a/gprof/gprof.h +++ b/gprof/gprof.h @@ -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? */ diff --git a/gprof/gprof.texi b/gprof/gprof.texi index ba05b59..1bf6315 100644 --- a/gprof/gprof.texi +++ b/gprof/gprof.texi @@ -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 -- cgit v1.1