aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gprof/.Sanitize5
-rw-r--r--gprof/ChangeLog14
-rw-r--r--gprof/Makefile.in34
-rw-r--r--gprof/bsd_callg_bl.m108
-rw-r--r--gprof/flat_bl.m28
-rw-r--r--gprof/fsf_callg_bl.m83
-rw-r--r--gprof/gen-c-prog.awk26
-rw-r--r--gprof/printgprof.c4
8 files changed, 293 insertions, 9 deletions
diff --git a/gprof/.Sanitize b/gprof/.Sanitize
index 2afc0bb..25209f6 100644
--- a/gprof/.Sanitize
+++ b/gprof/.Sanitize
@@ -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
diff --git a/gprof/ChangeLog b/gprof/ChangeLog
index 4277dfc..913df00 100644
--- a/gprof/ChangeLog
+++ b/gprof/ChangeLog
@@ -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
diff --git a/gprof/Makefile.in b/gprof/Makefile.in
index 26ef25a..ef09ae7 100644
--- a/gprof/Makefile.in
+++ b/gprof/Makefile.in
@@ -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
index 0000000..533c96c
--- /dev/null
+++ b/gprof/bsd_callg_bl.m
@@ -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.
+
diff --git a/gprof/flat_bl.m b/gprof/flat_bl.m
new file mode 100644
index 0000000..6fc3340
--- /dev/null
+++ b/gprof/flat_bl.m
@@ -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.
+
diff --git a/gprof/fsf_callg_bl.m b/gprof/fsf_callg_bl.m
new file mode 100644
index 0000000..7e16821
--- /dev/null
+++ b/gprof/fsf_callg_bl.m
@@ -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
index 0000000..cccf428
--- /dev/null
+++ b/gprof/gen-c-prog.awk
@@ -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 "}" }
diff --git a/gprof/printgprof.c b/gprof/printgprof.c
index 868d647..e8d5582 100644
--- a/gprof/printgprof.c
+++ b/gprof/printgprof.c
@@ -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);
}
}