mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
* 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.
This commit is contained in:
parent
c116445e02
commit
3d3e494e4c
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
108
gprof/bsd_callg_bl.m
Normal file
108
gprof/bsd_callg_bl.m
Normal file
@ -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.
|
||||
|
28
gprof/flat_bl.m
Normal file
28
gprof/flat_bl.m
Normal file
@ -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.
|
||||
|
83
gprof/fsf_callg_bl.m
Normal file
83
gprof/fsf_callg_bl.m
Normal file
@ -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.
|
||||
|
26
gprof/gen-c-prog.awk
Normal file
26
gprof/gen-c-prog.awk
Normal file
@ -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 "}" }
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user