don't install gprof.{callg,flat}, install the man page, get the new
man page from progressive (the one that uses -man macros)
This commit is contained in:
parent
d24bf980a0
commit
ea2b679c90
3 changed files with 122 additions and 140 deletions
|
@ -1,3 +1,11 @@
|
|||
Sun Jul 19 17:34:01 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
|
||||
|
||||
* Makefile.in: removed installation of the now useless
|
||||
call.{flag,callg} files.
|
||||
|
||||
* gprof.1: now uses the standard man macros instead of the new BSD
|
||||
mandoc macros.
|
||||
|
||||
Sun Jul 12 19:06:00 1992 John Gilmore (gnu at cygnus.com)
|
||||
|
||||
* configure.in: Remove host section, expand target section.
|
||||
|
|
|
@ -26,14 +26,14 @@ 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 \
|
||||
OBJS= blurbs.o gprof.o arcs.o dfn.o lookup.o $(MACHINE).o hertz.o \
|
||||
printgprof.o printlist.o
|
||||
|
||||
CFLAGS=
|
||||
.c.o:
|
||||
$(CC) -c $(CFLAGS) -I$(srcdir) -I$(srcdir)/../include -DMACHINE_H=\"${MACHINE}.h\" ${TCFLAGS} ${HCFLAGS} $<
|
||||
$(CC) -c $(CFLAGS) -I$(srcdir) -I$(srcdir)/../include -DMACHINE_H=\"$(MACHINE).h\" $(TCFLAGS) $(HCFLAGS) $<
|
||||
|
||||
all: ${PROG}
|
||||
all: $(PROG)
|
||||
|
||||
.PHONY: check info install-info
|
||||
check:
|
||||
|
@ -41,19 +41,17 @@ info:
|
|||
install-info:
|
||||
|
||||
install: all
|
||||
$(INSTALL_DATA) ${srcdir}/gprof.flat ${DESTDIR}$(datadir)
|
||||
$(INSTALL_DATA) ${srcdir}/gprof.callg ${DESTDIR}$(datadir)
|
||||
# $(INSTALL_DATA) $(srcdir)/gprof.1 $(man1dir)/gprof.1
|
||||
$(INSTALL_PROGRAM) $(PROG) ${DESTDIR}$(bindir)
|
||||
$(INSTALL_DATA) $(srcdir)/gprof.1 $(man1dir)/gprof.1
|
||||
$(INSTALL_PROGRAM) $(PROG) $(bindir)
|
||||
|
||||
$(PROG): $(OBJS)
|
||||
$(CC) $(CFLAGS) $(OBJS) -o $(PROG) $(LIBS)
|
||||
|
||||
# Make blurbs.c from gprof.callg and gprof.flat
|
||||
blurbs.c: ${srcdir}/gprof.callg ${srcdir}/gprof.flat ${srcdir}/make-c-prog.awk
|
||||
awk -f ${srcdir}/make-c-prog.awk > ./blurbs.c \
|
||||
FUNCTION=flat_blurb ${srcdir}/gprof.flat \
|
||||
FUNCTION=callg_blurb ${srcdir}/gprof.callg \
|
||||
blurbs.c: $(srcdir)/gprof.callg $(srcdir)/gprof.flat $(srcdir)/make-c-prog.awk
|
||||
awk -f $(srcdir)/make-c-prog.awk > ./blurbs.c \
|
||||
FUNCTION=flat_blurb $(srcdir)/gprof.flat \
|
||||
FUNCTION=callg_blurb $(srcdir)/gprof.callg \
|
||||
|
||||
clean:
|
||||
-rm -f $(OBJS) core gprof nohup.out
|
||||
|
@ -67,7 +65,7 @@ gprof.o: gprof.c
|
|||
arcs.o: arcs.c
|
||||
dfn.o: dfn.c
|
||||
lookup.o: lookup.c
|
||||
${MACHINE}.o: ${MACHINE}.c
|
||||
$(MACHINE).o: $(MACHINE).c
|
||||
hertz.o: hertz.c
|
||||
printgprof.o: printgprof.c
|
||||
printlist.o: printlist.c
|
||||
|
|
232
gprof/gprof.1
232
gprof/gprof.1
|
@ -17,46 +17,41 @@
|
|||
.\"
|
||||
.\" @(#)gprof.1 6.6 (Berkeley) 7/24/90
|
||||
.\"
|
||||
.Dd July 24, 1990
|
||||
.Dt GPROF 1
|
||||
.Os BSD 4.2
|
||||
.Sh NAME
|
||||
.Nm gprof
|
||||
.Nd display call graph profile data
|
||||
.Sh SYNOPSIS
|
||||
.Nm gprof
|
||||
.Op options
|
||||
.Op Ar a.out Op Ar gmon.out ...
|
||||
.Sh DESCRIPTION
|
||||
.Nm gprof
|
||||
.TH GPROF 1 "July 24, 1990"
|
||||
.SH NAME
|
||||
gprof \- display call graph profile data
|
||||
.SH SYNOPSIS
|
||||
.B gprof
|
||||
.RB "[\|" a.out "\|]"
|
||||
.B
|
||||
gmon.out ...
|
||||
.SH DESCRIPTION
|
||||
.B gprof
|
||||
produces an execution profile of C, Pascal, or Fortran77 programs.
|
||||
The effect of called routines is incorporated in the profile of each caller.
|
||||
The profile data is taken from the call graph profile file
|
||||
.Pf \&( Pa gmon.out
|
||||
default) which is created by programs
|
||||
\&(`gmon.out' default) which is created by programs
|
||||
that are compiled with the
|
||||
.Fl pg
|
||||
.B \-pg
|
||||
option of
|
||||
.Xr cc 1 ,
|
||||
.Xr pc 1 ,
|
||||
.BR cc ( 1 ) ,
|
||||
.BR pc ( 1 ) ,
|
||||
and
|
||||
.Xr f77 1 .
|
||||
.BR f77 ( 1 ) .
|
||||
The
|
||||
.Fl pg
|
||||
.B \-pg
|
||||
option also links in versions of the library routines
|
||||
that are compiled for profiling.
|
||||
.Nm Gprof
|
||||
reads the given object file (the default is
|
||||
.Pa a.out)
|
||||
and establishes the relation between it's symbol table
|
||||
and the call graph profile from
|
||||
.Pa gmon.out .
|
||||
.B Gprof
|
||||
reads the given object file (the default is `a.out')
|
||||
and establishes the relation between its symbol table
|
||||
and the call graph profile from `gmon.out'.
|
||||
If more than one profile file is specified,
|
||||
the
|
||||
.Nm gprof
|
||||
.B gprof
|
||||
output shows the sum of the profile information in the given profile files.
|
||||
.Pp
|
||||
.Nm Gprof
|
||||
.PP
|
||||
.B Gprof
|
||||
calculates the amount of time spent in each routine.
|
||||
Next, these times are propagated along the edges of the call graph.
|
||||
Cycles are discovered, and calls into a cycle are made to share the time
|
||||
|
@ -68,175 +63,158 @@ Below each function entry is shown its (direct) call graph children,
|
|||
and how their times are propagated to this function.
|
||||
A similar display above the function shows how this function's time and the
|
||||
time of its descendents is propagated to its (direct) call graph parents.
|
||||
.Pp
|
||||
.PP
|
||||
Cycles are also shown, with an entry for the cycle as a whole and
|
||||
a listing of the members of the cycle and their contributions to the
|
||||
time and call counts of the cycle.
|
||||
.Pp
|
||||
.PP
|
||||
Second, a flat profile is given,
|
||||
similar to that provided by
|
||||
.Xr prof 1 .
|
||||
.BR prof ( 1 ) .
|
||||
This listing gives the total execution times, the call counts,
|
||||
the time in milleseconds the call spent in the routine itself, and
|
||||
the time in milleseconds the call spent in the routine itself including
|
||||
its descendents.
|
||||
.Pp
|
||||
.PP
|
||||
Finally, an index of the function names is provided.
|
||||
.Pp
|
||||
.SH OPTIONS
|
||||
The following options are available:
|
||||
.Tw Fl
|
||||
.Tp Fl a
|
||||
.TP
|
||||
.B \-a
|
||||
suppresses the printing of statically declared functions.
|
||||
If this option is given, all relevant information about the static function
|
||||
(e.g., time samples, calls to other functions, calls from other functions)
|
||||
belongs to the function loaded just before the static function in the
|
||||
.Pa a.out
|
||||
file.
|
||||
.Tp Fl b
|
||||
\&`a.out' file.
|
||||
.TP
|
||||
.B \-b
|
||||
suppresses the printing of a description of each field in the profile.
|
||||
.Tp Fl c
|
||||
.TP
|
||||
.B \-c
|
||||
the static call graph of the program is discovered by a heuristic
|
||||
that examines the text space of the object file.
|
||||
Static-only parents or children are shown
|
||||
with call counts of 0.
|
||||
.Tc Fl e
|
||||
.Ws
|
||||
.Ar name
|
||||
.Cx
|
||||
.TP
|
||||
.BI "\-e " name
|
||||
suppresses the printing of the graph profile entry for routine
|
||||
.Ar name
|
||||
.I name
|
||||
and all its descendants
|
||||
(unless they have other ancestors that aren't suppressed).
|
||||
More than one
|
||||
.Fl e
|
||||
.B \-e
|
||||
option may be given.
|
||||
Only one
|
||||
.Ar name
|
||||
.I name
|
||||
may be given with each
|
||||
.Fl e
|
||||
.B \-e
|
||||
option.
|
||||
.Tc Fl E
|
||||
.Ws
|
||||
.Ar name
|
||||
.Cx
|
||||
.TP
|
||||
.BI "\-E " name
|
||||
suppresses the printing of the graph profile entry for routine
|
||||
.Ar name
|
||||
.I name
|
||||
(and its descendants) as
|
||||
.Fl e ,
|
||||
.B \-e ,
|
||||
above, and also excludes the time spent in
|
||||
.Ar name
|
||||
.I name
|
||||
(and its descendants) from the total and percentage time computations.
|
||||
(For example,
|
||||
.Fl E
|
||||
.Ar mcount
|
||||
.Fl E
|
||||
.Ar mcleanup
|
||||
.BI "\-E " mcount
|
||||
.BI "\-E " mcleanup
|
||||
is the default.)
|
||||
.Tc Fl f
|
||||
.Ws
|
||||
.Ar name
|
||||
.Cx
|
||||
.TP
|
||||
.BI "\-f " name
|
||||
prints the graph profile entry of only the specified routine
|
||||
.Ar name
|
||||
.I name
|
||||
and its descendants.
|
||||
More than one
|
||||
.Fl f
|
||||
.B \-f
|
||||
option may be given.
|
||||
Only one
|
||||
.Ar name
|
||||
.I name
|
||||
may be given with each
|
||||
.Fl f
|
||||
.B \-f
|
||||
option.
|
||||
.Tc Fl F
|
||||
.Ws
|
||||
.Ar name
|
||||
.Cx
|
||||
.TP
|
||||
.BI "\-F " name
|
||||
prints the graph profile entry of only the routine
|
||||
.Ar name
|
||||
.I name
|
||||
and its descendants (as
|
||||
.Fl f ,
|
||||
.B \-f ,
|
||||
above) and also uses only the times of the printed routines
|
||||
in total time and percentage computations.
|
||||
More than one
|
||||
.Fl F
|
||||
.B \-F
|
||||
option may be given.
|
||||
Only one
|
||||
.Ar name
|
||||
.I name
|
||||
may be given with each
|
||||
.Fl F
|
||||
.B \-F
|
||||
option.
|
||||
The
|
||||
.Fl F
|
||||
.B \-F
|
||||
option
|
||||
overrides
|
||||
the
|
||||
.Fl E
|
||||
.B \-E
|
||||
option.
|
||||
.Tc Fl k
|
||||
.Ws
|
||||
.Ar fromname
|
||||
.Ws
|
||||
.Ar toname
|
||||
.Cx
|
||||
.TP
|
||||
.BI "\-k " "fromname toname"
|
||||
will delete any arcs from routine
|
||||
.Ar fromname
|
||||
.I fromname
|
||||
to routine
|
||||
.Ar toname .
|
||||
.IR toname .
|
||||
This can be used to break undesired cycles.
|
||||
More than one
|
||||
.Fl k
|
||||
.B \-k
|
||||
option may be given.
|
||||
Only one pair of routine names may be given with each
|
||||
.Fl k
|
||||
.B \-k
|
||||
option.
|
||||
.Tp Fl s
|
||||
a profile file
|
||||
.Pa gmon.sum
|
||||
is produced that represents
|
||||
.TP
|
||||
.B \-s
|
||||
a profile file `gmon.sum' is produced that represents
|
||||
the sum of the profile information in all the specified profile files.
|
||||
This summary profile file may be given to later
|
||||
executions of gprof (probably also with a
|
||||
.Fl s )
|
||||
to accumulate profile data across several runs of an
|
||||
.Pa a.out
|
||||
file.
|
||||
.Tp Fl z
|
||||
.BR \-s )
|
||||
to accumulate profile data across several runs of an `a.out' file.
|
||||
.TP
|
||||
.B -z
|
||||
displays routines that have zero usage (as shown by call counts
|
||||
and accumulated time).
|
||||
This is useful with the
|
||||
.Fl c
|
||||
.B \-c
|
||||
option for discovering which routines were never called.
|
||||
.Tp
|
||||
.Sh FILES
|
||||
.Dw gmon.sum
|
||||
.Di L
|
||||
.Dp Pa a.out
|
||||
the namelist and text space.
|
||||
.Dp Pa gmon.out
|
||||
dynamic call graph and profile.
|
||||
.Dp Pa gmon.sum
|
||||
summarized dynamic call graph and profile.
|
||||
.Dp
|
||||
.Sh SEE ALSO
|
||||
.Xr monitor 3 ,
|
||||
.Xr profil 2 ,
|
||||
.Xr cc 1 ,
|
||||
.Xr prof 1
|
||||
.PP
|
||||
.SH FILES
|
||||
.ta \w'gmon.sum 'u
|
||||
a.out the namelist and text space.
|
||||
.br
|
||||
.Em An Execution Profiler for Modular Programs ,
|
||||
by
|
||||
S. Graham, P. Kessler, M. McKusick;
|
||||
Software - Practice and Experience,
|
||||
Vol. 13, pp. 671-685, 1983.
|
||||
gmon.out dynamic call graph and profile.
|
||||
.br
|
||||
.Em gprof: A Call Graph Execution Profiler ,
|
||||
gmon.sum summarized dynamic call graph and profile.
|
||||
.SH SEE ALSO
|
||||
.BR monitor ( 3 ) ,
|
||||
.BR profil ( 2 ) ,
|
||||
.BR cc ( 1 ) ,
|
||||
.BR prof ( 1 )
|
||||
.sp
|
||||
``An Execution Profiler for Modular Programs'',
|
||||
by S. Graham, P. Kessler, M. McKusick;
|
||||
.I
|
||||
Software \- Practice and Experience,
|
||||
Vol. 13, pp. 671-685, 1983.
|
||||
.sp
|
||||
``gprof: A Call Graph Execution Profiler'',
|
||||
by S. Graham, P. Kessler, M. McKusick;
|
||||
.I
|
||||
Proceedings of the SIGPLAN '82 Symposium on Compiler Construction,
|
||||
SIGPLAN Notices, Vol. 17, No 6, pp. 120-126, June 1982.
|
||||
.Sh HISTORY
|
||||
.Nm Gprof
|
||||
.SH HISTORY
|
||||
.B Gprof
|
||||
appeared in 4.2 BSD.
|
||||
.Sh BUGS
|
||||
.SH BUGS
|
||||
The granularity of the sampling is shown, but remains
|
||||
statistical at best.
|
||||
We assume that the time for each execution of a function
|
||||
|
@ -245,7 +223,7 @@ by the number of times the function is called.
|
|||
Thus the time propagated along the call graph arcs to the function's
|
||||
parents is directly proportional to the number of times that
|
||||
arc is traversed.
|
||||
.Pp
|
||||
.PP
|
||||
Parents that are not themselves profiled will have the time of
|
||||
their profiled children propagated to them, but they will appear
|
||||
to be spontaneously invoked in the call graph listing, and will
|
||||
|
@ -255,10 +233,8 @@ to be spontaneous (although for more obscure reasons).
|
|||
Any profiled children of signal catchers should have their times
|
||||
propagated properly, unless the signal catcher was invoked during
|
||||
the execution of the profiling routine, in which case all is lost.
|
||||
.Pp
|
||||
.PP
|
||||
The profiled program must call
|
||||
.Xr exit 2
|
||||
.BR exit ( 2 )
|
||||
or return normally for the profiling information to be saved
|
||||
in the
|
||||
.Pa gmon.out
|
||||
file.
|
||||
in the `gmon.out' file.
|
||||
|
|
Loading…
Reference in a new issue