Remove done() which was just exit() so use of warn()/err() can be made. Abort
on allocation failure instead of displaying a warning and deferencing NULL pointer after. Spelling. Add prototypes. Add list of option in synopsis section of man page, -d is not referenced because available as a compile option. It should be made a runtime option btw.
This commit is contained in:
parent
b0a07322f5
commit
97fa9b7739
@ -1,8 +1,12 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "gprof.h"
|
||||
|
||||
/*
|
||||
* gprof -c isn't currently supported...
|
||||
*/
|
||||
void
|
||||
findcall( parentp , p_lowpc , p_highpc )
|
||||
nltype *parentp;
|
||||
unsigned long p_lowpc;
|
||||
|
@ -42,6 +42,7 @@ static char sccsid[] = "@(#)gprof.c 8.1 (Berkeley) 6/6/93";
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <a.out.h>
|
||||
#include <err.h>
|
||||
|
||||
#include "gprof.h"
|
||||
|
||||
@ -71,10 +72,8 @@ aout_getnfile(const char *filename, char ***defaultEs)
|
||||
int valcmp();
|
||||
|
||||
nfile = fopen( filename ,"r");
|
||||
if (nfile == NULL) {
|
||||
perror( filename );
|
||||
done();
|
||||
}
|
||||
if (nfile == NULL)
|
||||
err( 1 , "%s", filename );
|
||||
fread(&xbuf, 1, sizeof(xbuf), nfile);
|
||||
if (N_BADMAG(xbuf)) {
|
||||
fclose(nfile);
|
||||
@ -102,19 +101,13 @@ getstrtab(FILE *nfile, const char *filename)
|
||||
{
|
||||
|
||||
fseek(nfile, (long)(N_SYMOFF(xbuf) + xbuf.a_syms), 0);
|
||||
if (fread(&ssiz, sizeof (ssiz), 1, nfile) == 0) {
|
||||
warnx("%s: no string table (old format?)" , filename );
|
||||
done();
|
||||
}
|
||||
if (fread(&ssiz, sizeof (ssiz), 1, nfile) == 0)
|
||||
errx( 1 , "%s: no string table (old format?)" , filename );
|
||||
strtab = calloc(ssiz, 1);
|
||||
if (strtab == NULL) {
|
||||
warnx("%s: no room for %d bytes of string table", filename , ssiz);
|
||||
done();
|
||||
}
|
||||
if (fread(strtab+sizeof(ssiz), ssiz-sizeof(ssiz), 1, nfile) != 1) {
|
||||
warnx("%s: error reading string table", filename );
|
||||
done();
|
||||
}
|
||||
if (strtab == NULL)
|
||||
errx( 1 , "%s: no room for %ld bytes of string table", filename , ssiz);
|
||||
if (fread(strtab+sizeof(ssiz), ssiz-sizeof(ssiz), 1, nfile) != 1)
|
||||
errx( 1 , "%s: error reading string table" , filename );
|
||||
}
|
||||
|
||||
/*
|
||||
@ -137,16 +130,13 @@ getsymtab(FILE *nfile, const char *filename)
|
||||
}
|
||||
nname++;
|
||||
}
|
||||
if (nname == 0) {
|
||||
warnx("%s: no symbols", filename );
|
||||
done();
|
||||
}
|
||||
if (nname == 0)
|
||||
errx( 1 , "%s: no symbols" , filename );
|
||||
askfor = nname + 1;
|
||||
nl = (nltype *) calloc( askfor , sizeof(nltype) );
|
||||
if (nl == 0) {
|
||||
warnx("no room for %d bytes of symbol table", askfor * sizeof(nltype) );
|
||||
done();
|
||||
}
|
||||
if (nl == 0)
|
||||
errx( 1 , "no room for %d bytes of symbol table" ,
|
||||
askfor * sizeof(nltype) );
|
||||
|
||||
/* pass2 - read symbols */
|
||||
fseek(nfile, (long)N_SYMOFF(xbuf), 0);
|
||||
@ -189,7 +179,7 @@ gettextspace(FILE *nfile)
|
||||
}
|
||||
textspace = (u_char *) malloc( xbuf.a_text );
|
||||
if ( textspace == 0 ) {
|
||||
warnx("ran out room for %d bytes of text space: can't do -c" ,
|
||||
warnx("no room for %lu bytes of text space: can't do -c" ,
|
||||
xbuf.a_text );
|
||||
return;
|
||||
}
|
||||
@ -235,7 +225,7 @@ funcsymbol(struct nlist *nlistp)
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
while ( c = *name++ ) {
|
||||
while ( (c = *name++) ) {
|
||||
if ( c == '.' ) {
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -31,11 +31,12 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)arcs.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
@ -52,6 +53,7 @@ int oldcycle;
|
||||
/*
|
||||
* add (or just increment) an arc
|
||||
*/
|
||||
void
|
||||
addarc( parentp , childp , count )
|
||||
nltype *parentp;
|
||||
nltype *childp;
|
||||
@ -80,6 +82,8 @@ addarc( parentp , childp , count )
|
||||
return;
|
||||
}
|
||||
arcp = (arctype *)calloc( 1 , sizeof *arcp );
|
||||
if (arcp == NULL)
|
||||
errx( 1 , "malloc failed" );
|
||||
arcp -> arc_parentp = parentp;
|
||||
arcp -> arc_childp = childp;
|
||||
arcp -> arc_count = count;
|
||||
@ -105,6 +109,7 @@ addarc( parentp , childp , count )
|
||||
*/
|
||||
nltype **topsortnlp;
|
||||
|
||||
int
|
||||
topcmp( npp1 , npp2 )
|
||||
nltype **npp1;
|
||||
nltype **npp2;
|
||||
@ -202,9 +207,8 @@ doarcs()
|
||||
* Sort the symbol table in reverse topological order
|
||||
*/
|
||||
topsortnlp = (nltype **) calloc( nname , sizeof(nltype *) );
|
||||
if ( topsortnlp == (nltype **) 0 ) {
|
||||
fprintf( stderr , "[doarcs] ran out of memory for topo sorting\n" );
|
||||
}
|
||||
if ( topsortnlp == (nltype **) 0 )
|
||||
errx( 1 , "[doarcs] ran out of memory for topo sorting" );
|
||||
for ( index = 0 ; index < nname ; index += 1 ) {
|
||||
topsortnlp[ index ] = &nl[ index ];
|
||||
}
|
||||
@ -230,7 +234,7 @@ doarcs()
|
||||
doflags();
|
||||
/*
|
||||
* starting from the topological bottom,
|
||||
* propogate children times up to parents.
|
||||
* propagate children times up to parents.
|
||||
*/
|
||||
dotime();
|
||||
/*
|
||||
@ -239,9 +243,8 @@ doarcs()
|
||||
* and cycle headers.
|
||||
*/
|
||||
timesortnlp = (nltype **) calloc( nname + ncycle , sizeof(nltype *) );
|
||||
if ( timesortnlp == (nltype **) 0 ) {
|
||||
warnx("ran out of memory for sorting");
|
||||
}
|
||||
if ( timesortnlp == (nltype **) 0 )
|
||||
errx( 1 , "ran out of memory for sorting" );
|
||||
for ( index = 0 ; index < nname ; index++ ) {
|
||||
timesortnlp[index] = &nl[index];
|
||||
}
|
||||
@ -255,6 +258,7 @@ doarcs()
|
||||
return( timesortnlp );
|
||||
}
|
||||
|
||||
void
|
||||
dotime()
|
||||
{
|
||||
int index;
|
||||
@ -265,6 +269,7 @@ dotime()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
timepropagate( parentp )
|
||||
nltype *parentp;
|
||||
{
|
||||
@ -353,6 +358,7 @@ timepropagate( parentp )
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
cyclelink()
|
||||
{
|
||||
register nltype *nlp;
|
||||
@ -362,7 +368,7 @@ cyclelink()
|
||||
arctype *arcp;
|
||||
|
||||
/*
|
||||
* Count the number of cycles, and initialze the cycle lists
|
||||
* Count the number of cycles, and initialize the cycle lists
|
||||
*/
|
||||
ncycle = 0;
|
||||
for ( nlp = nl ; nlp < npe ; nlp++ ) {
|
||||
@ -378,11 +384,9 @@ cyclelink()
|
||||
* i.e. it is origin 1, not origin 0.
|
||||
*/
|
||||
cyclenl = (nltype *) calloc( ncycle + 1 , sizeof( nltype ) );
|
||||
if ( cyclenl == 0 ) {
|
||||
warnx("no room for %d bytes of cycle headers",
|
||||
if ( cyclenl == 0 )
|
||||
errx( 1 , "no room for %d bytes of cycle headers" ,
|
||||
( ncycle + 1 ) * sizeof( nltype ) );
|
||||
done();
|
||||
}
|
||||
/*
|
||||
* now link cycles to true cycleheads,
|
||||
* number them, accumulate the data for the cycle
|
||||
@ -447,6 +451,7 @@ cyclelink()
|
||||
/*
|
||||
* analyze cycles to determine breakup
|
||||
*/
|
||||
bool
|
||||
cycleanalyze()
|
||||
{
|
||||
arctype **cyclestack;
|
||||
@ -482,11 +487,9 @@ cycleanalyze()
|
||||
continue;
|
||||
done = FALSE;
|
||||
cyclestack = (arctype **) calloc( size + 1 , sizeof( arctype *) );
|
||||
if ( cyclestack == 0 ) {
|
||||
warnx("no room for %d bytes of cycle stack",
|
||||
if ( cyclestack == 0 )
|
||||
errx( 1, "no room for %d bytes of cycle stack" ,
|
||||
( size + 1 ) * sizeof( arctype * ) );
|
||||
return;
|
||||
}
|
||||
# ifdef DEBUG
|
||||
if ( debug & BREAKCYCLE ) {
|
||||
printf( "[cycleanalyze] starting cycle %d of %d, size %d\n" ,
|
||||
@ -524,6 +527,7 @@ cycleanalyze()
|
||||
return( done );
|
||||
}
|
||||
|
||||
bool
|
||||
descend( node , stkstart , stkp )
|
||||
nltype *node;
|
||||
arctype **stkstart;
|
||||
@ -555,8 +559,10 @@ descend( node , stkstart , stkp )
|
||||
if ( ret == FALSE )
|
||||
return( FALSE );
|
||||
}
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
bool
|
||||
addcycle( stkstart , stkend )
|
||||
arctype **stkstart;
|
||||
arctype **stkend;
|
||||
@ -600,7 +606,7 @@ addcycle( stkstart , stkend )
|
||||
clp = (cltype *)
|
||||
calloc( 1 , sizeof ( cltype ) + ( size - 1 ) * sizeof( arctype * ) );
|
||||
if ( clp == 0 ) {
|
||||
warnx("no room for %d bytes of subcycle storage",
|
||||
warnx( "no room for %d bytes of subcycle storage" ,
|
||||
sizeof ( cltype ) + ( size - 1 ) * sizeof( arctype * ) );
|
||||
return( FALSE );
|
||||
}
|
||||
@ -632,6 +638,7 @@ addcycle( stkstart , stkend )
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
void
|
||||
compresslist()
|
||||
{
|
||||
cltype *clp;
|
||||
@ -747,6 +754,7 @@ compresslist()
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void
|
||||
printsubcycle( clp )
|
||||
cltype *clp;
|
||||
{
|
||||
@ -762,6 +770,7 @@ printsubcycle( clp )
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
void
|
||||
cycletime()
|
||||
{
|
||||
int cycle;
|
||||
@ -791,6 +800,7 @@ cycletime()
|
||||
* propfraction as the sum of fractional parents' propfractions
|
||||
* and while we're here, sum time for functions.
|
||||
*/
|
||||
void
|
||||
doflags()
|
||||
{
|
||||
int index;
|
||||
@ -856,7 +866,7 @@ doflags()
|
||||
/*
|
||||
* it has parents to pass time to,
|
||||
* but maybe someone wants to shut it up
|
||||
* by puttting it on -E list. (but favor -F over -E)
|
||||
* by putting it on -E list. (but favor -F over -E)
|
||||
*/
|
||||
if ( !onlist( Flist , childp -> name )
|
||||
&& onlist( Elist , childp -> name ) ) {
|
||||
@ -885,6 +895,7 @@ doflags()
|
||||
* print flag of the child (cycle) appropriately.
|
||||
* similarly, deal with propagation fractions from parents.
|
||||
*/
|
||||
void
|
||||
inheritflags( childp )
|
||||
nltype *childp;
|
||||
{
|
||||
|
@ -31,17 +31,16 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)dfn.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <stdio.h>
|
||||
#include <err.h>
|
||||
#include "gprof.h"
|
||||
|
||||
#define DFN_DEPTH 100
|
||||
@ -56,6 +55,7 @@ int dfn_depth;
|
||||
|
||||
int dfn_counter;
|
||||
|
||||
void
|
||||
dfn_init()
|
||||
{
|
||||
|
||||
@ -66,6 +66,7 @@ dfn_init()
|
||||
/*
|
||||
* given this parent, depth first number its children.
|
||||
*/
|
||||
void
|
||||
dfn( parentp )
|
||||
nltype *parentp;
|
||||
{
|
||||
@ -79,7 +80,7 @@ dfn( parentp )
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
/*
|
||||
* if we're already numbered, no need to look any furthur.
|
||||
* if we're already numbered, no need to look any further.
|
||||
*/
|
||||
if ( dfn_numbered( parentp ) ) {
|
||||
return;
|
||||
@ -112,15 +113,14 @@ dfn( parentp )
|
||||
/*
|
||||
* push a parent onto the stack and mark it busy
|
||||
*/
|
||||
void
|
||||
dfn_pre_visit( parentp )
|
||||
nltype *parentp;
|
||||
{
|
||||
|
||||
dfn_depth += 1;
|
||||
if ( dfn_depth >= DFN_DEPTH ) {
|
||||
fprintf( stderr , "[dfn] out of my depth (dfn_stack overflow)\n" );
|
||||
exit( 1 );
|
||||
}
|
||||
if ( dfn_depth >= DFN_DEPTH )
|
||||
errx( 1 , "[dfn] out of my depth (dfn_stack overflow)" );
|
||||
dfn_stack[ dfn_depth ].nlentryp = parentp;
|
||||
dfn_stack[ dfn_depth ].cycletop = dfn_depth;
|
||||
parentp -> toporder = DFN_BUSY;
|
||||
@ -161,6 +161,7 @@ dfn_busy( childp )
|
||||
/*
|
||||
* MISSING: an explanation
|
||||
*/
|
||||
void
|
||||
dfn_findcycle( childp )
|
||||
nltype *childp;
|
||||
{
|
||||
@ -179,10 +180,8 @@ dfn_findcycle( childp )
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( cycletop <= 0 ) {
|
||||
fprintf( stderr , "[dfn_findcycle] couldn't find head of cycle\n" );
|
||||
exit( 1 );
|
||||
}
|
||||
if ( cycletop <= 0 )
|
||||
errx( 1 , "[dfn_findcycle] couldn't find head of cycle" );
|
||||
# ifdef DEBUG
|
||||
if ( debug & DFNDEBUG ) {
|
||||
printf( "[dfn_findcycle] dfn_depth %d cycletop %d " ,
|
||||
@ -271,6 +270,7 @@ dfn_findcycle( childp )
|
||||
* deal with self-cycles
|
||||
* for lint: ARGSUSED
|
||||
*/
|
||||
void
|
||||
dfn_self_cycle( parentp )
|
||||
nltype *parentp;
|
||||
{
|
||||
@ -292,6 +292,7 @@ dfn_self_cycle( parentp )
|
||||
* [MISSING: an explanation]
|
||||
* and pop it off the stack
|
||||
*/
|
||||
void
|
||||
dfn_post_visit( parentp )
|
||||
nltype *parentp;
|
||||
{
|
||||
|
@ -81,10 +81,10 @@ elf_getnfile(const char *filename, char ***defaultEs)
|
||||
return -1;
|
||||
}
|
||||
if (fstat(fd, &s) == -1)
|
||||
err(1, "Cannot fstat %s", filename);
|
||||
err(1, "cannot fstat %s", filename);
|
||||
if ((mapbase = mmap(0, s.st_size, PROT_READ, MAP_SHARED, fd, 0)) ==
|
||||
MAP_FAILED)
|
||||
err(1, "Cannot mmap %s", filename);
|
||||
err(1, "cannot mmap %s", filename);
|
||||
close(fd);
|
||||
|
||||
base = (const char *)mapbase;
|
||||
@ -111,7 +111,7 @@ elf_getnfile(const char *filename, char ***defaultEs)
|
||||
|
||||
/* Allocate memory for them, plus a terminating entry. */
|
||||
if ((nl = (nltype *)calloc(nname + 1, sizeof(nltype))) == NULL)
|
||||
errx(1, "Insufficient memory for symbol table");
|
||||
errx(1, "insufficient memory for symbol table");
|
||||
|
||||
/* Read them in. */
|
||||
npe = nl;
|
||||
|
@ -40,7 +40,13 @@
|
||||
.Nd display call graph profile data
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op options
|
||||
.Op Fl abcKlLsuz
|
||||
.Op Fl C Ar count
|
||||
.Op Fl e Ar name
|
||||
.Op Fl E Ar name
|
||||
.Op Fl f Ar name
|
||||
.Op Fl F Ar name
|
||||
.Op Fl k Ar fromname Ar toname
|
||||
.Op Ar a.out Op Ar a.out.gmon ...
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
@ -91,11 +97,11 @@ Cycles are discovered, and calls into a cycle are made to share the time
|
||||
of the cycle.
|
||||
The first listing shows the functions
|
||||
sorted according to the time they represent
|
||||
including the time of their call graph descendents.
|
||||
including the time of their call graph descendants.
|
||||
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.
|
||||
time of its descendants is propagated to its (direct) call graph parents.
|
||||
.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
|
||||
@ -107,21 +113,21 @@ similar to that provided by
|
||||
This listing gives the total execution times, the call counts,
|
||||
the time in msec or usec the call spent in the routine itself, and
|
||||
the time in msec or usec the call spent in the routine itself including
|
||||
its descendents.
|
||||
its descendants.
|
||||
.Pp
|
||||
Finally, an index of the function names is provided.
|
||||
.Pp
|
||||
The following options are available:
|
||||
.Bl -tag -width Fl
|
||||
.Bl -tag -width indent
|
||||
.It Fl a
|
||||
Suppresses the printing of statically declared functions.
|
||||
Suppress 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.
|
||||
.It Fl b
|
||||
Suppresses the printing of a description of each field in the profile.
|
||||
Suppress the printing of a description of each field in the profile.
|
||||
.It Fl c
|
||||
The static call graph of the program is discovered by a heuristic
|
||||
that examines the text space of the object file.
|
||||
@ -137,7 +143,7 @@ so using this option may cause
|
||||
.Nm
|
||||
to run for a very long time.
|
||||
.It Fl e Ar name
|
||||
Suppresses the printing of the graph profile entry for routine
|
||||
Suppress the printing of the graph profile entry for routine
|
||||
.Ar name
|
||||
and all its descendants
|
||||
(unless they have other ancestors that aren't suppressed).
|
||||
@ -150,7 +156,7 @@ may be given with each
|
||||
.Fl e
|
||||
option.
|
||||
.It Fl E Ar name
|
||||
Suppresses the printing of the graph profile entry for routine
|
||||
Suppress the printing of the graph profile entry for routine
|
||||
.Ar name
|
||||
(and its descendants) as
|
||||
.Fl e ,
|
||||
@ -164,7 +170,7 @@ above, and also excludes the time spent in
|
||||
.Ar mcleanup
|
||||
is the default.)
|
||||
.It Fl f Ar name
|
||||
Prints the graph profile entry of only the specified routine
|
||||
Print the graph profile entry of only the specified routine
|
||||
.Ar name
|
||||
and its descendants.
|
||||
More than one
|
||||
@ -176,7 +182,7 @@ may be given with each
|
||||
.Fl f
|
||||
option.
|
||||
.It Fl F Ar name
|
||||
Prints the graph profile entry of only the routine
|
||||
Print the graph profile entry of only the routine
|
||||
.Ar name
|
||||
and its descendants (as
|
||||
.Fl f ,
|
||||
@ -221,9 +227,9 @@ argument to be ignored, and allows for symbols in
|
||||
.Xr kld 4
|
||||
modules to be used.
|
||||
.It Fl l
|
||||
Suppresses the printing of the call-graph profile.
|
||||
Suppress the printing of the call-graph profile.
|
||||
.It Fl L
|
||||
Suppresses the printing of the flat profile.
|
||||
Suppress the printing of the flat profile.
|
||||
.It Fl s
|
||||
A profile file
|
||||
.Pa gmon.sum
|
||||
@ -236,7 +242,7 @@ to accumulate profile data across several runs of an
|
||||
.Pa a.out
|
||||
file.
|
||||
.It Fl u
|
||||
Suppresses the printing of functions whose names are not visible to
|
||||
Suppress the printing of functions whose names are not visible to
|
||||
C programs. For the ELF object format, this means names that
|
||||
contain the
|
||||
.Ql .\&
|
||||
@ -249,7 +255,7 @@ All relevant information about such functions belongs to the
|
||||
This is useful for eliminating "functions" that are just labels
|
||||
inside other functions.
|
||||
.It Fl z
|
||||
Displays routines that have zero usage (as shown by call counts
|
||||
Display routines that have zero usage (as shown by call counts
|
||||
and accumulated time).
|
||||
This is useful with the
|
||||
.Fl c
|
||||
@ -258,11 +264,11 @@ option for discovering which routines were never called.
|
||||
.Sh FILES
|
||||
.Bl -tag -width a.out.gmon -compact
|
||||
.It Pa a.out
|
||||
The namelist and text space.
|
||||
the namelist and text space
|
||||
.It Pa a.out.gmon
|
||||
Dynamic call graph and profile.
|
||||
dynamic call graph and profile
|
||||
.It Pa gmon.sum
|
||||
Summarized dynamic call graph and profile.
|
||||
summarized dynamic call graph and profile
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr cc 1 ,
|
||||
|
@ -37,11 +37,12 @@ static const char copyright[] =
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)gprof.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
@ -57,6 +58,7 @@ static struct gmonhdr gmonhdr;
|
||||
static int lflag;
|
||||
static int Lflag;
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
@ -130,15 +132,15 @@ main(argc, argv)
|
||||
case 'K':
|
||||
Kflag = TRUE;
|
||||
break;
|
||||
case 'l':
|
||||
case 'l':
|
||||
lflag = 1;
|
||||
Lflag = 0;
|
||||
break;
|
||||
case 'L':
|
||||
case 'L':
|
||||
Lflag = 1;
|
||||
lflag = 0;
|
||||
break;
|
||||
case 's':
|
||||
case 's':
|
||||
sflag = TRUE;
|
||||
break;
|
||||
case 'u':
|
||||
@ -231,7 +233,7 @@ main(argc, argv)
|
||||
* print the index
|
||||
*/
|
||||
printindex();
|
||||
done();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -239,6 +241,7 @@ main(argc, argv)
|
||||
* an array of sampling hits within pc ranges,
|
||||
* and the arcs.
|
||||
*/
|
||||
void
|
||||
getpfile(filename)
|
||||
char *filename;
|
||||
{
|
||||
@ -276,16 +279,12 @@ openpfile(filename)
|
||||
int size;
|
||||
int rate;
|
||||
|
||||
if((pfile = fopen(filename, "r")) == NULL) {
|
||||
perror(filename);
|
||||
done();
|
||||
}
|
||||
if((pfile = fopen(filename, "r")) == NULL)
|
||||
err(1, "%s", filename);
|
||||
fread(&tmp, sizeof(struct gmonhdr), 1, pfile);
|
||||
if ( s_highpc != 0 && ( tmp.lpc != gmonhdr.lpc ||
|
||||
tmp.hpc != gmonhdr.hpc || tmp.ncnt != gmonhdr.ncnt ) ) {
|
||||
warnx("%s: incompatible with first gmon file", filename);
|
||||
done();
|
||||
}
|
||||
tmp.hpc != gmonhdr.hpc || tmp.ncnt != gmonhdr.ncnt ) )
|
||||
errx(1, "%s: incompatible with first gmon file", filename);
|
||||
gmonhdr = tmp;
|
||||
if ( gmonhdr.version == GMONVERSION ) {
|
||||
rate = gmonhdr.profrate;
|
||||
@ -298,12 +297,9 @@ openpfile(filename)
|
||||
}
|
||||
if (hz == 0) {
|
||||
hz = rate;
|
||||
} else if (hz != rate) {
|
||||
fprintf(stderr,
|
||||
"%s: profile clock rate (%d) %s (%ld) in first gmon file\n",
|
||||
} else if (hz != rate)
|
||||
errx(0, "%s: profile clock rate (%d) %s (%ld) in first gmon file",
|
||||
filename, rate, "incompatible with clock rate", hz);
|
||||
done();
|
||||
}
|
||||
if ( gmonhdr.histcounter_type == 0 ) {
|
||||
/* Historical case. The type was u_short (2 bytes in practice). */
|
||||
histcounter_type = 16;
|
||||
@ -334,6 +330,7 @@ openpfile(filename)
|
||||
return(pfile);
|
||||
}
|
||||
|
||||
void
|
||||
tally( rawp )
|
||||
struct rawarc *rawp;
|
||||
{
|
||||
@ -362,6 +359,7 @@ tally( rawp )
|
||||
/*
|
||||
* dump out the gmon.sum file
|
||||
*/
|
||||
void
|
||||
dumpsum( sumfile )
|
||||
char *sumfile;
|
||||
{
|
||||
@ -370,24 +368,18 @@ dumpsum( sumfile )
|
||||
struct rawarc arc;
|
||||
FILE *sfile;
|
||||
|
||||
if ( ( sfile = fopen ( sumfile , "w" ) ) == NULL ) {
|
||||
perror( sumfile );
|
||||
done();
|
||||
}
|
||||
if ( ( sfile = fopen ( sumfile , "w" ) ) == NULL )
|
||||
err( 1 , "%s" , sumfile );
|
||||
/*
|
||||
* dump the header; use the last header read in
|
||||
*/
|
||||
if ( fwrite( &gmonhdr , sizeof gmonhdr , 1 , sfile ) != 1 ) {
|
||||
perror( sumfile );
|
||||
done();
|
||||
}
|
||||
if ( fwrite( &gmonhdr , sizeof gmonhdr , 1 , sfile ) != 1 )
|
||||
err( 1 , "%s" , sumfile );
|
||||
/*
|
||||
* dump the samples
|
||||
*/
|
||||
if (fwrite(samples, histcounter_size, nsamples, sfile) != nsamples) {
|
||||
perror( sumfile );
|
||||
done();
|
||||
}
|
||||
if (fwrite(samples, histcounter_size, nsamples, sfile) != nsamples)
|
||||
err( 1 , "%s" , sumfile );
|
||||
/*
|
||||
* dump the normalized raw arc information
|
||||
*/
|
||||
@ -396,10 +388,8 @@ dumpsum( sumfile )
|
||||
arc.raw_frompc = arcp -> arc_parentp -> value;
|
||||
arc.raw_selfpc = arcp -> arc_childp -> value;
|
||||
arc.raw_count = arcp -> arc_count;
|
||||
if ( fwrite ( &arc , sizeof arc , 1 , sfile ) != 1 ) {
|
||||
perror( sumfile );
|
||||
done();
|
||||
}
|
||||
if ( fwrite ( &arc , sizeof arc , 1 , sfile ) != 1 )
|
||||
err( 1 , "%s" , sumfile );
|
||||
# ifdef DEBUG
|
||||
if ( debug & SAMPLEDEBUG ) {
|
||||
printf( "[dumpsum] frompc 0x%lx selfpc 0x%lx count %ld\n" ,
|
||||
@ -428,6 +418,7 @@ valcmp(v1, v2)
|
||||
return EQUALTO;
|
||||
}
|
||||
|
||||
void
|
||||
readsamples(pfile)
|
||||
FILE *pfile;
|
||||
{
|
||||
@ -436,10 +427,8 @@ readsamples(pfile)
|
||||
|
||||
if (samples == 0) {
|
||||
samples = (double *) calloc(nsamples, sizeof(double));
|
||||
if (samples == 0) {
|
||||
warnx("no room for %d sample pc's", nsamples);
|
||||
done();
|
||||
}
|
||||
if (samples == 0)
|
||||
errx(0, "no room for %d sample pc's", nsamples);
|
||||
}
|
||||
for (i = 0; i < nsamples; i++) {
|
||||
fread(&sample, histcounter_size, 1, pfile);
|
||||
@ -474,10 +463,8 @@ readsamples(pfile)
|
||||
err(1, "unsupported histogram counter type %d", histcounter_type);
|
||||
}
|
||||
}
|
||||
if (i != nsamples) {
|
||||
warnx("unexpected EOF after reading %d/%d samples", --i , nsamples );
|
||||
done();
|
||||
}
|
||||
if (i != nsamples)
|
||||
errx(1, "unexpected EOF after reading %d/%d samples", --i , nsamples );
|
||||
}
|
||||
|
||||
/*
|
||||
@ -512,6 +499,7 @@ readsamples(pfile)
|
||||
* only one sample for every four bytes of text space and never
|
||||
* have any overlap (the two end cases, above).
|
||||
*/
|
||||
void
|
||||
asgnsamples()
|
||||
{
|
||||
register int j;
|
||||
@ -601,6 +589,7 @@ max(a, b)
|
||||
* if it turns out that the entry point is in one bucket and the code
|
||||
* for a routine is in the next bucket.
|
||||
*/
|
||||
void
|
||||
alignentries()
|
||||
{
|
||||
register struct nl *nlp;
|
||||
@ -624,9 +613,3 @@ alignentries()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
done()
|
||||
{
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ typedef struct arcstruct arctype;
|
||||
/*
|
||||
* The symbol table;
|
||||
* for each external in the specified file we gather
|
||||
* its address, the number of calls and compute its share of cpu time.
|
||||
* its address, the number of calls and compute its share of CPU time.
|
||||
*/
|
||||
struct nl {
|
||||
const char *name; /* the name */
|
||||
@ -268,43 +268,43 @@ struct stringlist *ktolist;
|
||||
/*
|
||||
* function declarations
|
||||
*/
|
||||
/*
|
||||
addarc();
|
||||
*/
|
||||
void addarc(nltype *, nltype *, long);
|
||||
bool addcycle(arctype **, arctype **);
|
||||
void addlist(struct stringlist *, char *);
|
||||
void alignentries(void);
|
||||
int aout_getnfile(const char *, char ***);
|
||||
int arccmp();
|
||||
arctype *arclookup();
|
||||
/*
|
||||
asgnsamples();
|
||||
printblurb();
|
||||
cyclelink();
|
||||
dfn();
|
||||
*/
|
||||
void asgnsamples(void);
|
||||
void compresslist(void);
|
||||
bool cycleanalyze(void);
|
||||
void cyclelink(void);
|
||||
void cycletime(void);
|
||||
bool descend(nltype *, arctype **, arctype **);
|
||||
void dfn(nltype *);
|
||||
bool dfn_busy();
|
||||
/*
|
||||
dfn_findcycle();
|
||||
*/
|
||||
void dfn_findcycle(nltype *);
|
||||
void dfn_init(void);
|
||||
bool dfn_numbered();
|
||||
/*
|
||||
dfn_post_visit();
|
||||
dfn_pre_visit();
|
||||
dfn_self_cycle();
|
||||
*/
|
||||
void dfn_post_visit(nltype *);
|
||||
void dfn_pre_visit(nltype *);
|
||||
void dfn_self_cycle(nltype *);
|
||||
nltype **doarcs();
|
||||
/*
|
||||
done();
|
||||
*/
|
||||
void doflags(void);
|
||||
void dotime(void);
|
||||
void dumpsum(char *);
|
||||
int elf_getnfile(const char *, char ***);
|
||||
/*
|
||||
findcalls();
|
||||
flatprofheader();
|
||||
flatprofline();
|
||||
*/
|
||||
void flatprofheader(void);
|
||||
void flatprofline(nltype *);
|
||||
void getpfile(char *);
|
||||
/*
|
||||
getpfile();
|
||||
gprofheader();
|
||||
gprofline();
|
||||
*/
|
||||
void inheritflags(nltype *);
|
||||
int kernel_getnfile(const char *, char ***);
|
||||
/*
|
||||
main();
|
||||
@ -313,33 +313,29 @@ unsigned long max();
|
||||
int membercmp();
|
||||
unsigned long min();
|
||||
nltype *nllookup();
|
||||
bool onlist(struct stringlist *, const char *);
|
||||
FILE *openpfile();
|
||||
long operandlength();
|
||||
operandenum operandmode();
|
||||
char *operandname();
|
||||
/*
|
||||
printchildren();
|
||||
printcycle();
|
||||
printgprof();
|
||||
printmembers();
|
||||
printname();
|
||||
printparents();
|
||||
printprof();
|
||||
readsamples();
|
||||
*/
|
||||
void printblurb(char *);
|
||||
void printchildren(nltype *);
|
||||
void printcycle(nltype *);
|
||||
void printgprof(nltype **);
|
||||
void printindex(void);
|
||||
void printmembers(nltype *);
|
||||
void printname(nltype *);
|
||||
void printparents(nltype *);
|
||||
void printprof(void);
|
||||
void printsubcycle(cltype *);
|
||||
void readsamples(FILE *);
|
||||
unsigned long reladdr();
|
||||
/*
|
||||
sortchildren();
|
||||
sortmembers();
|
||||
sortparents();
|
||||
tally();
|
||||
timecmp();
|
||||
topcmp();
|
||||
*/
|
||||
void sortchildren(nltype *);
|
||||
void sortmembers(nltype *);
|
||||
void sortparents(nltype *);
|
||||
void tally(struct rawarc *);
|
||||
void timepropagate(nltype *);
|
||||
int totalcmp();
|
||||
/*
|
||||
valcmp();
|
||||
*/
|
||||
|
||||
#define LESSTHAN -1
|
||||
#define EQUALTO 0
|
||||
|
@ -31,9 +31,14 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)hertz.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
|
@ -1,3 +1,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "gprof.h"
|
||||
|
||||
/*
|
||||
|
@ -1,8 +1,12 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "gprof.h"
|
||||
|
||||
/*
|
||||
* gprof -c isn't currently supported...
|
||||
*/
|
||||
void
|
||||
findcall( parentp , p_lowpc , p_highpc )
|
||||
nltype *parentp;
|
||||
unsigned long p_lowpc;
|
||||
|
@ -31,13 +31,12 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)lookup.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
|
@ -37,9 +37,14 @@
|
||||
* From: sparc.c 5.1 (Berkeley) 7/7/92
|
||||
*/
|
||||
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)mips.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "gprof.h"
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)pathnames.h 8.1 (Berkeley) 6/6/93
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#define _PATH_FLAT_BLURB "/usr/share/misc/gprof.flat"
|
||||
|
@ -31,11 +31,12 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)printgprof.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
@ -43,6 +44,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "gprof.h"
|
||||
#include "pathnames.h"
|
||||
|
||||
void
|
||||
printprof()
|
||||
{
|
||||
register nltype *np;
|
||||
@ -56,9 +58,8 @@ printprof()
|
||||
* Sort the symbol table in by time
|
||||
*/
|
||||
sortednlp = (nltype **) calloc( nname , sizeof(nltype *) );
|
||||
if ( sortednlp == (nltype **) 0 ) {
|
||||
fprintf( stderr , "[printprof] ran out of memory for time sorting\n" );
|
||||
}
|
||||
if ( sortednlp == (nltype **) 0 )
|
||||
errx( 1 , "[printprof] ran out of memory for time sorting" );
|
||||
for ( index = 0 ; index < nname ; index += 1 ) {
|
||||
sortednlp[ index ] = &nl[ index ];
|
||||
}
|
||||
@ -71,6 +72,7 @@ printprof()
|
||||
free( sortednlp );
|
||||
}
|
||||
|
||||
int
|
||||
timecmp( npp1 , npp2 )
|
||||
nltype **npp1, **npp2;
|
||||
{
|
||||
@ -93,6 +95,7 @@ timecmp( npp1 , npp2 )
|
||||
/*
|
||||
* header for flatprofline
|
||||
*/
|
||||
void
|
||||
flatprofheader()
|
||||
{
|
||||
|
||||
@ -107,7 +110,7 @@ flatprofheader()
|
||||
} else {
|
||||
printf( " no time accumulated\n\n" );
|
||||
/*
|
||||
* this doesn't hurt sinc eall the numerators will be zero.
|
||||
* this doesn't hurt since all the numerators will be zero.
|
||||
*/
|
||||
totime = 1.0;
|
||||
}
|
||||
@ -120,6 +123,7 @@ flatprofheader()
|
||||
"name" );
|
||||
}
|
||||
|
||||
void
|
||||
flatprofline( np )
|
||||
register nltype *np;
|
||||
{
|
||||
@ -154,6 +158,7 @@ flatprofline( np )
|
||||
printf( "\n" );
|
||||
}
|
||||
|
||||
void
|
||||
gprofheader()
|
||||
{
|
||||
|
||||
@ -182,6 +187,7 @@ gprofheader()
|
||||
printf( "\n" );
|
||||
}
|
||||
|
||||
void
|
||||
gprofline( np )
|
||||
register nltype *np;
|
||||
{
|
||||
@ -207,6 +213,7 @@ gprofline( np )
|
||||
printf( "\n" );
|
||||
}
|
||||
|
||||
void
|
||||
printgprof(timesortnlp)
|
||||
nltype **timesortnlp;
|
||||
{
|
||||
@ -289,6 +296,7 @@ totalcmp( npp1 , npp2 )
|
||||
return strcmp( np1 -> name , np2 -> name );
|
||||
}
|
||||
|
||||
void
|
||||
printparents( childp )
|
||||
nltype *childp;
|
||||
{
|
||||
@ -333,6 +341,7 @@ printparents( childp )
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
printchildren( parentp )
|
||||
nltype *parentp;
|
||||
{
|
||||
@ -366,6 +375,7 @@ printchildren( parentp )
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
printname( selfp )
|
||||
nltype *selfp;
|
||||
{
|
||||
@ -393,6 +403,7 @@ printname( selfp )
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
sortchildren( parentp )
|
||||
nltype *parentp;
|
||||
{
|
||||
@ -433,6 +444,7 @@ sortchildren( parentp )
|
||||
parentp -> children = sorted.arc_childlist;
|
||||
}
|
||||
|
||||
void
|
||||
sortparents( childp )
|
||||
nltype *childp;
|
||||
{
|
||||
@ -476,6 +488,7 @@ sortparents( childp )
|
||||
/*
|
||||
* print a cycle header
|
||||
*/
|
||||
void
|
||||
printcycle( cyclep )
|
||||
nltype *cyclep;
|
||||
{
|
||||
@ -500,6 +513,7 @@ printcycle( cyclep )
|
||||
/*
|
||||
* print the members of a cycle
|
||||
*/
|
||||
void
|
||||
printmembers( cyclep )
|
||||
nltype *cyclep;
|
||||
{
|
||||
@ -524,6 +538,7 @@ printmembers( cyclep )
|
||||
/*
|
||||
* sort members of a cycle
|
||||
*/
|
||||
void
|
||||
sortmembers( cyclep )
|
||||
nltype *cyclep;
|
||||
{
|
||||
@ -666,6 +681,7 @@ arccmp( thisp , thatp )
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
printblurb( blurbname )
|
||||
char *blurbname;
|
||||
{
|
||||
@ -674,7 +690,7 @@ printblurb( blurbname )
|
||||
|
||||
blurbfile = fopen( blurbname , "r" );
|
||||
if ( blurbfile == NULL ) {
|
||||
perror( blurbname );
|
||||
warn( "%s" , blurbname );
|
||||
return;
|
||||
}
|
||||
while ( ( input = getc( blurbfile ) ) != EOF ) {
|
||||
@ -690,6 +706,7 @@ namecmp( npp1 , npp2 )
|
||||
return( strcmp( (*npp1) -> name , (*npp2) -> name ) );
|
||||
}
|
||||
|
||||
void
|
||||
printindex()
|
||||
{
|
||||
nltype **namesortnlp;
|
||||
@ -698,13 +715,12 @@ printindex()
|
||||
char peterbuffer[ BUFSIZ ];
|
||||
|
||||
/*
|
||||
* Now, sort regular function name alphbetically
|
||||
* Now, sort regular function name alphabetically
|
||||
* to create an index.
|
||||
*/
|
||||
namesortnlp = (nltype **) calloc( nname + ncycle , sizeof(nltype *) );
|
||||
if ( namesortnlp == (nltype **) 0 ) {
|
||||
warnx("ran out of memory for sorting");
|
||||
}
|
||||
if ( namesortnlp == (nltype **) 0 )
|
||||
errx( 1 , "ran out of memory for sorting");
|
||||
for ( index = 0 , nnames = 0 ; index < nname ; index++ ) {
|
||||
if ( zflag == 0 && nl[index].ncall == 0 && nl[index].time == 0 )
|
||||
continue;
|
||||
|
@ -31,11 +31,12 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)printlist.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
@ -61,6 +62,7 @@ struct stringlist *elist = &ehead;
|
||||
struct stringlist Ehead = { 0 , 0 };
|
||||
struct stringlist *Elist = &Ehead;
|
||||
|
||||
void
|
||||
addlist( listp , funcname )
|
||||
struct stringlist *listp;
|
||||
char *funcname;
|
||||
@ -68,10 +70,8 @@ addlist( listp , funcname )
|
||||
struct stringlist *slp;
|
||||
|
||||
slp = (struct stringlist *) malloc( sizeof(struct stringlist));
|
||||
if ( slp == (struct stringlist *) 0 ) {
|
||||
warnx("ran out room for printlist");
|
||||
done();
|
||||
}
|
||||
if ( slp == (struct stringlist *) 0 )
|
||||
errx( 1 , "no room for printlist");
|
||||
slp -> next = listp -> next;
|
||||
slp -> string = funcname;
|
||||
listp -> next = slp;
|
||||
@ -80,7 +80,7 @@ addlist( listp , funcname )
|
||||
bool
|
||||
onlist( listp , funcname )
|
||||
struct stringlist *listp;
|
||||
char *funcname;
|
||||
const char *funcname;
|
||||
{
|
||||
struct stringlist *slp;
|
||||
|
||||
|
@ -35,9 +35,14 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)sparc.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "gprof.h"
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "gprof.h"
|
||||
|
||||
|
@ -31,9 +31,14 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)tahoe.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "gprof.h"
|
||||
|
||||
|
@ -31,9 +31,14 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)vax.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "gprof.h"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user