* gen-c-prog.awk: New awk script, lightly changed from
authorPer Bothner <per@bothner.com>
Tue, 6 Oct 1992 00:57:18 +0000 (00:57 +0000)
committerPer Bothner <per@bothner.com>
Tue, 6 Oct 1992 00:57:18 +0000 (00:57 +0000)
previously deleted make-c-prog.awk.  Converts a text file
to a c function that prints that text.
* flat_bl.m, fsf_callg_bl.m, bsd_callg_bl.m:  New files.
Inputs to gen-c-prog.awk, containing text describing
gprof output.
* blurbs.c:  Removed.  Use *_bl.c instead.
* Makefile.in: Use gen-cprog.awk to generate *_bl.c files
from *_bl.m files.  Also, improve *clean rules.
* printgprof.c (printgprof):  Usw new function names from *_bl.c.

gprof/.Sanitize
gprof/ChangeLog
gprof/Makefile.in
gprof/bsd_callg_bl.m [new file with mode: 0644]
gprof/flat_bl.m [new file with mode: 0644]
gprof/fsf_callg_bl.m [new file with mode: 0644]
gprof/gen-c-prog.awk [new file with mode: 0644]
gprof/printgprof.c

index 2afc0bb..25209f6 100644 (file)
@@ -27,12 +27,15 @@ Things-to-keep:
 ChangeLog
 Makefile.in
 arcs.c
-blurbs.c
+bsd_callg_bl.m
 config
 configure.in
 dfn.c
 dummy.c
 dummy.h
+flat_bl.m
+fsf_callg_bl.m
+gen-c-prog.awk
 gmon.h
 gprof.1
 gprof.c
index 4277dfc..913df00 100644 (file)
@@ -1,3 +1,17 @@
+Mon Oct  5 17:50:16 1992  Per Bothner  (bothner@cygnus.com)
+
+       * gen-c-prog.awk:  New awk script, lightly changed from
+       previously deleted make-c-prog.awk.  Converts a text file
+       to a c function that prints that text.
+       * flat_bl.m, fsf_callg_bl.m, bsd_callg_bl.m:  New files.
+       Inputs to gen-c-prog.awk, containing text describing
+       gprof output.
+       * blurbs.c:  Removed.  Use *_bl.c instead.
+       * Makefile.in: Use gen-cprog.awk to generate *_bl.c files
+       from *_bl.m files.  Also, improve *clean rules.
+       * printgprof.c (printgprof):  Usw new function names from *_bl.c.
+       
+
 Sun Aug 30 19:54:53 1992  Per Bothner  (bothner@rtl.cygnus.com)
 
        * gprof.h, gprof.c, printfgprof.c:  Add support for two
index 26ef25a..ef09ae7 100644 (file)
@@ -26,16 +26,30 @@ SRCS=       gprof.c arcs.c dfn.c lookup.c $(MACHINE).c hertz.c \
        printgprof.c printlist.c
 LIBS = ../bfd/libbfd.a ../libiberty/libiberty.a
 
-OBJS=  blurbs.o gprof.o arcs.o dfn.o lookup.o $(MACHINE).o hertz.o \
-       printgprof.o printlist.o
+OBJS=  gprof.o arcs.o dfn.o lookup.o $(MACHINE).o hertz.o \
+       printgprof.o printlist.o \
+       flat_bl.o bsd_callg_bl.o fsf_callg_bl.o
+
+# Files that can be generated, but should be included in distribution.
+DISTSTUFF = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
 
 CFLAGS=        
 .c.o:
        $(CC) -c $(CFLAGS) -I$(srcdir) -I$(srcdir)/../include -DMACHINE_H=\"$(MACHINE).h\" $(TCFLAGS) $(HCFLAGS) $<
 
-all:   $(PROG)
+all:   diststuff $(PROG)
 
 .PHONY: check info install-info
+.SUFFIXES: .m
+
+.m.c:
+       awk -f $(srcdir)/gen-c-prog.awk > ./$*.c \
+           FUNCTION=`(echo $*|sed -e 's/_bl//')`_blurb \
+           FILE=$*.m $(srcdir)/$*.m
+
+diststuff: $(DISTSTUFF)
+       
+
 check:
 info:
 install-info:
@@ -53,8 +67,14 @@ install: all
 $(PROG):       $(OBJS)
        $(CC) $(CFLAGS) $(OBJS) -o $(PROG) $(LIBS)
 
-clean:
-       -rm -f $(OBJS) core gprof nohup.out
+mostlyclean:
+       -rm -f *.o core gprof nohup.out
+clean: mostlyclean
+       -rm -f gprof
+distclean: clean
+       -rm -f config.status Makefile
+realclean: distclean
+       -rm -f $(DISTSTUFF)
 
 Makefile : Makefile.in
        sh config.status
@@ -69,4 +89,6 @@ $(MACHINE).o: $(MACHINE).c
 hertz.o: hertz.c
 printgprof.o: printgprof.c
 printlist.o: printlist.c
-blurbs.o: blurbs.c
+flat_bl.o: flat_bl.c
+bsd_callg_bl.o: bsd_callg_bl.c
+fsf_callg_bl.o: fsf_callg_bl.c
diff --git a/gprof/bsd_callg_bl.m b/gprof/bsd_callg_bl.m
new file mode 100644 (file)
index 0000000..533c96c
--- /dev/null
@@ -0,0 +1,108 @@
+
+
+
+call graph profile:
+          The sum of self and descendents is the major sort
+          for this listing.
+
+          function entries:
+
+index     the index of the function in the call graph
+          listing, as an aid to locating it (see below).
+
+%time     the percentage of the total time of the program
+          accounted for by this function and its
+          descendents.
+
+self      the number of seconds spent in this function
+          itself.
+
+descendents
+          the number of seconds spent in the descendents of
+          this function on behalf of this function.
+
+called    the number of times this function is called (other
+          than recursive calls).
+
+self      the number of times this function calls itself
+          recursively.
+
+name      the name of the function, with an indication of
+          its membership in a cycle, if any.
+
+index     the index of the function in the call graph
+          listing, as an aid to locating it.
+
+
+
+          parent listings:
+
+self*     the number of seconds of this function's self time
+          which is due to calls from this parent.
+
+descendents*
+          the number of seconds of this function's
+          descendent time which is due to calls from this
+          parent.
+
+called**  the number of times this function is called by
+          this parent.  This is the numerator of the
+          fraction which divides up the function's time to
+          its parents.
+
+total*    the number of times this function was called by
+          all of its parents.  This is the denominator of
+          the propagation fraction.
+
+parents   the name of this parent, with an indication of the
+          parent's membership in a cycle, if any.
+
+index     the index of this parent in the call graph
+          listing, as an aid in locating it.
+
+
+
+          children listings:
+
+self*     the number of seconds of this child's self time
+          which is due to being called by this function.
+
+descendent*
+          the number of seconds of this child's descendent's
+          time which is due to being called by this
+          function.
+
+called**  the number of times this child is called by this
+          function.  This is the numerator of the
+          propagation fraction for this child.
+
+total*    the number of times this child is called by all
+          functions.  This is the denominator of the
+          propagation fraction.
+
+children  the name of this child, and an indication of its
+          membership in a cycle, if any.
+
+index     the index of this child in the call graph listing,
+          as an aid to locating it.
+
+
+
+          * these fields are omitted for parents (or
+          children) in the same cycle as the function.  If
+          the function (or child) is a member of a cycle,
+          the propagated times and propagation denominator
+          represent the self time and descendent time of the
+          cycle as a whole.
+
+          ** static-only parents and children are indicated
+          by a call count of 0.
+
+
+
+          cycle listings:
+          the cycle as a whole is listed with the same
+          fields as a function entry.  Below it are listed
+          the members of the cycle, and their contributions
+          to the time and call counts of the cycle.
+\f
diff --git a/gprof/flat_bl.m b/gprof/flat_bl.m
new file mode 100644 (file)
index 0000000..6fc3340
--- /dev/null
@@ -0,0 +1,28 @@
+
+ %         the percentage of the total running time of the
+time       program used by this function.
+
+cumulative a running sum of the number of seconds accounted
+ seconds   for by this function and those listed above it.
+
+ self      the number of seconds accounted for by this
+seconds    function alone.  This is the major sort for this
+           listing.
+
+calls      the number of times this function was invoked, if
+           this function is profiled, else blank.
+ self      the average number of milliseconds spent in this
+ms/call    function per call, if this function is profiled,
+          else blank.
+
+ total     the average number of milliseconds spent in this
+ms/call    function and its descendents per call, if this 
+          function is profiled, else blank.
+
+name       the name of the function.  This is the minor sort
+           for this listing. The index shows the location of
+          the function in the gprof listing. If the index is
+          in parenthesis it shows where it would appear in
+          the gprof listing if it were to be printed.
+\f
diff --git a/gprof/fsf_callg_bl.m b/gprof/fsf_callg_bl.m
new file mode 100644 (file)
index 0000000..7e16821
--- /dev/null
@@ -0,0 +1,83 @@
+
+ This table describes the call tree of the program, and was sorted by
+ the total amount of time spent in each function and its children.
+
+ Each entry in this table consists of several lines.  The line with the
+ index number at the left hand margin lists the current function.
+ The lines above it list the functions that called this function,
+ and the lines below it list the functions this one called.
+ This line lists:
+     index     A unique number given to each element of the table.
+               Index numbers are sorted numerically.
+               The index number is printed next to every function name so
+               it is easier to look up where the function in the table.
+
+     % time    This is the percentage of the `total' time that was spent
+               in this function and its children.  Note that due to
+               different viewpoints, functions excluded by options, etc,
+               these numbers will NOT add up to 100%.
+
+     self      This is the total amount of time spent in this function.
+
+     children  This is the total amount of time propagated into this
+               function by its children.
+
+     called    This is the number of times the function was called.
+               If the function called itself recursively, the number
+               only includes non-recursive calls, and is followed by
+               a `+' and the number of recursive calls.
+
+     name      The name of the current function.  The index number is
+               printed after it.  If the function is a member of a
+               cycle, the cycle number is printed between the
+               function's name and the index number.
+
+
+ For the function's parents, the fields have the following meanings:
+
+     self      This is the amount of time that was propagated directly
+               from the function into this parent.
+
+     children  This is the amount of time that was propagated from
+               the function's children into this parent.
+
+     called    This is the number of times this parent called the
+               function `/' the total number of times the function
+               was called.  Recursive calls to the function are not
+               included in the number after the `/'.
+
+     name      This is the name of the parent.  The parent's index
+               number is printed after it.  If the parent is a
+               member of a cycle, the cycle number is printed between
+               the name and the index number.
+
+ If the parents of the function cannot be determined, the word
+ `<spontaneous>' is printed in the `name' field, and all the other
+ fields are blank.
+
+ For the function's children, the fields have the following meanings:
+
+     self      This is the amount of time that was propagated directly
+               from the child into the function.
+
+     children  This is the amount of time that was propagated from the
+               child's children to the function.
+
+     called    This is the number of times the function called
+               this child `/' the total number of times the child
+               was called.  Recursive calls by the child are not
+               listed in the number after the `/'.
+
+     name      This is the name of the child.  The child's index
+               number is printed after it.  If the child is a
+               member of a cycle, the cycle number is printed
+               between the name and the index number.
+
+ If there are any cycles (circles) in the call graph, there is an
+ entry for the cycle-as-a-whole.  This entry shows who called the
+ cycle (as parents) and the members of the cycle (as children.)
+ The `+' recursive calls entry shows the number of function calls that
+ were internal to the cycle, and the calls entry for each member shows,
+ for that member, how many times it was called from other members of
+ the cycle.
+
diff --git a/gprof/gen-c-prog.awk b/gprof/gen-c-prog.awk
new file mode 100644 (file)
index 0000000..cccf428
--- /dev/null
@@ -0,0 +1,26 @@
+NR == 1        {
+    FS="\"";
+    print "/* ==> Do not modify this file!!  It is created automatically"
+    printf "   from %s using the make-c-prog.awk script.  <== */\n\n", FILE
+    print "#include <stdio.h>"
+}
+
+       {
+         if (curfun != FUNCTION)
+           {
+             if (curfun)
+               print "}"
+             curfun = FUNCTION
+             print ""
+             print "void";
+             printf "%s (file)\n", FUNCTION
+             print "     FILE *file;";
+             print "{";
+           }
+         printf "  fputs (\"";
+         for (i = 1; i < NF; i++)
+           printf "%s\\\"", $i;
+         printf "%s\\n\", file);\n", $NF;
+}
+
+END    { print "}" }
index 868d647..e8d5582 100644 (file)
@@ -212,7 +212,7 @@ printgprof(timesortnlp)
         *      Print out the structured profiling list
         */
     if ( bflag && bsd_style_output ) {
-       callg_blurb(stdout);
+       bsd_callg_blurb(stdout);
     }
     gprofheader();
     for ( index = 0 ; index < nname + ncycle ; index ++ ) {
@@ -246,7 +246,7 @@ printgprof(timesortnlp)
     }
     cfree( timesortnlp );
     if ( bflag && !bsd_style_output) {
-       callg_blurb(stdout);
+       fsf_callg_blurb(stdout);
     }
 }