Commit Graph

52 Commits

Author SHA1 Message Date
charnier
064bebe6d3 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.
2002-10-16 13:50:09 +00:00
obrien
bc61fc95d8 Consistently use FBSDID 2002-06-30 05:25:07 +00:00
wollman
0e6b4b2400 Fix preprocessor directive syntax (text after #endif).
The style of this program is still atrocious (not fixed).
2002-05-30 21:18:01 +00:00
alfred
f0facdc5dd Check for defined(__i386__) instead of just defined(i386) since the compiler
will be updated to only define(__i386__) for ANSI cleanliness.
2002-05-30 07:00:42 +00:00
charnier
ad8a79e6a5 Use `The .Nm utility' 2002-04-20 12:18:28 +00:00
mike
b1d120cfbf Include <stdint.h> for definition of intmax_t and/or uintmax_t. 2002-03-25 05:23:45 +00:00
jake
0517cd92aa Make this build on sparc64. 2002-03-10 01:25:47 +00:00
bde
acab62a802 Support runtime specification of the history counter type by whatever
generated the gmon data.  The support is currently limited to what is
easy to implement and/or needed:

    signedess: signed or insigned
    size: 8, 16, 32 or 64 bits
    format: a binary integer in gprof's format (gprof is not a cross-tool).

High-resolution kernel profiling uses signed 64-bit counters.  Normal
kernel profiling and user profiling use unsigned 16-bit counters but
should use 32-bit ones.
2002-03-06 11:25:58 +00:00
bde
8de8391e81 Fixed some misspellings of 2 as sizeof(UNIT) so that they won't break
things when sizeof(UNIT) becomes a runtime parameter.  The relevant 2
is the one in profil(2)'s scaling of pc's to bucket numbers:

	   bucket = (pc - offset) / 2 * profil_scale / 65536

gprof(1) must duplicate this scaling, bug for bug compatibly, so it
must first do an integer division by 2 although this mainly makes
scales larger than 65536 useless.  sizeof(UNIT) was already wrong in
gprof4, but there were no problems because the fake profil scale is a
multiple of 2.

There are also some rounding bugs in the scaling, but these are only
problems if profil(2) is used directly to create unusual (and not
useful) scales.
2002-03-06 09:47:36 +00:00
bde
410e57d607 Fixed printf format errors. In printgprof.c, also convert the scale
without possibly losing lots of precision, and print the scale using
%g instead of %d in case it is non-integral.  %g might not be the best
format for this.
2002-02-21 12:07:21 +00:00
bde
2587888af4 Added missing copyright. Obtain one and a vendor id from gprof.c. aout.c
was split off from gprof.c in rev.1.7 of the latter.  elf.c is mostly new,
but the old copyright sort of applies to it and is better than none.

Use __FBSDID() for the FreeBSD id.
2002-02-21 12:03:06 +00:00
bde
a230636d24 Fixed a missing variable declaration so that gprof compiles with -DDEBUG. 2002-02-21 10:34:52 +00:00
bde
118c70fed9 Moved the definition of the machine-independent macro UNITS_TO_CODE
from <number of machines> machine-dependent headers to the one
non-header here it is used so that it is easier to fix.  This macro
just divides the machine-dependent offset OFFSET_OF_CODE by the
machine-independent scale factor sizeof(UNIT), as required for bug
for bug compatibility with the scaling of pc's in gprof.c.  UNIT is
the type of a profiling counter, and its size has nothing to do with
the correct scale factor except both are usually 2.
2002-02-21 07:12:57 +00:00
ru
aa219a0e7b Oops, forgot to remove the `beforeinstall' block. 2001-12-17 16:04:40 +00:00
ru
7ed2dfe749 Install files via FILES. 2001-12-17 16:02:15 +00:00
ru
80a463b623 mdoc(7) police: kill whitespace at EOL. 2001-11-20 15:49:18 +00:00
green
85a9f299f9 Add -K support to gprof(1), which enables dynamic symbol resolution from
the currently-running kernel (and supercedes an executable file argument
given).  With this change, properly-compiled KLD modules are now
able to be profiled.

Obtained from:	NAI Labs CBOSS project
Funded by:	DARPA
2001-10-30 15:54:09 +00:00
peter
bd8ef90209 Add ia64 support (stubs, just like i386, alpha) 2001-10-23 10:12:10 +00:00
schweikh
93c8100330 Add hint about how we name profiled libraries (append _p at the right place).
PR:		8061
Submitted by:	Brandon Gillespie <brandon@ice.cold.org>
Reviewed by:	joerg, ru
MFC after:	5 weeks
2001-08-14 17:48:29 +00:00
dd
911ca14c87 Remove whitespace at EOL. 2001-07-15 08:06:20 +00:00
ru
36f138439b mdoc(7) police: removed HISTORY info from the .Os call. 2001-07-10 14:16:33 +00:00
obrien
538e761e02 * include/elf.h has been repo copied to include/elf-hints.h, and it no
longer includes machine/elf.h.
* consumers of elf.h now use the minimalist elf header possible.

This change is motivated by Binutils 2.11.0 and too much clashing over
our base elf headers and the Binutils elf headers.
2001-05-02 23:56:21 +00:00
dd
02c02ffeef Grammar police: "its", not "it's", is the possessive form of "it". 2001-04-15 19:53:47 +00:00
ru
e6cfc0711d Prepare for mdoc(7)NG. 2000-12-19 16:00:12 +00:00
ru
0d1334ca0c mdoc(7) police: use the new features of the Nm macro. 2000-11-20 19:21:22 +00:00
sheldonh
49c4458c80 Remove single-space hard sentence breaks. These degrade the quality
of the typeset output, tend to make diffs harder to read and provide
bad examples for new-comers to mdoc.
2000-03-01 12:20:22 +00:00
peter
3b842d34e8 $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
simokawa
bd76338214 Enable gprof on alpha.
* alpha.{c,h} are same as i386.{c,h}.
* Force address calculation to be done in long precision(64bit on alpha)
  rather than double precision(52bit).
1999-07-16 07:22:10 +00:00
nik
6578739ddb Add $Id$, to make it simpler for members of the translation teams to
track.

The $Id$ line is normally at the bottom of the main comment block in the
man page, separated from the rest of the manpage by an empty comment,
like so;

     .\"    $Id$
     .\"

If the immediately preceding comment is a @(#) format ID marker than the
the $Id$ will line up underneath it with no intervening blank lines.
Otherwise, an additional blank line is inserted.

Approved by:            bde
1999-07-12 20:24:20 +00:00
dt
70ccb43727 Don't ignore weak symbols.
EGCS assign weak symbols to inline functions it couldn't inline (e.g. virtual
inline functions), template functions, etc. Omitting them result in quite bogus
profile.

Weak symbols created by __weak_reference are not really problem.

Caught by:	Ilya Segalovich <iseg@comptek.ru>
1999-07-03 12:30:04 +00:00
jmz
664ece1203 Construct the profile file name from the name of the executable. A program
compiled with -pg and run will generate a file <executable-filename>.gmon,
not gmon.out.

PR:		bin/8426
1999-05-23 00:37:56 +00:00
jdp
5b11e2a2f4 Make profiling work for ELF. gprof now autodetects the format of
the executable file, so it will work for both a.out and ELF format
files.  I have split the object format specific code into separate
source files.  It's cleaner than it was before, but it's still
pretty crufty.

Don't cheat on your make world for this update.  A lot of things
have to be rebuilt for it to work, including the compiler and all
of the profiled libraries.
1998-09-07 23:32:00 +00:00
jb
21c8ab7090 Change MACHINE to MACHINE_ARCH to support MACHINE=pc98. 1998-09-05 08:22:30 +00:00
jdp
993b274d03 Don't ignore symbols containing "$". C++ destructors and other
special functions have names containing dollar signs, and ignoring
them causes gprof to produce incorrect and sometimes bizarre results.
The comment in the original code said that dollar signs were excluded
because they are used in Pascal labels.  That's not much of an
issue these days.
1998-08-08 17:48:26 +00:00
charnier
f673b0ac7c Revert to original style. 1997-07-15 08:04:40 +00:00
bde
20aa44a88c 32-bit counters aren't large enough for 100+MHz clocks. Use 64-bit
counters.  `4' in GPROF4 and gprof4 now means 8.  gprof4 needs to be
recompiled to match the kernel.
1997-07-13 16:38:39 +00:00
charnier
aad076cc73 Fix typo I introduced during last commit. 1997-07-11 06:11:35 +00:00
charnier
3e5d2f9ca5 Use err(3). 1997-07-10 06:45:02 +00:00
wosch
4bcfb053ec Sort cross references. 1997-01-15 23:25:55 +00:00
bde
467c7d29da Use a (signed) int32_t counter instead of an `unsigned int' counter
for the GPROF4 case.  This allows a simpler method to be used for
non-statistical profiling (it allows overhead adjustments to be
subtracted from one counter without harm if that counter goes
negative; otherwise the adjustment would have to be distributed).

32 bit counters were already too small for GPROF4 with a 200MHz
clock.  int64_t counters should be used.
1996-10-16 21:02:49 +00:00
bde
f8b51172cd Print times/call in ns if hz >= 10e7. hz will be this large for high
resolution profiling on Pentiums.  On a 100MHz Pentium, the resolution
is at best 10 ns and actually a few hundred ns, but units of 10's or
100's of ns would be inconvenient and the current units of 1 us are a
bit too coarse.
1996-06-08 12:29:57 +00:00
mpp
86b292ffbd Correct some man page cross references and file location references. 1996-04-07 00:06:21 +00:00
joerg
adfc8d6391 Xref clocks(7). 1996-04-05 08:53:38 +00:00
mpp
0796408d4a Another round of man page cleanups.
Down to only about 100 items left to cleanup! :-)
1996-02-12 04:57:03 +00:00
bde
39cdb05128 Implemented non-statistical kernel profiling. This is based on
looking at a high resolution clock for each of the following events:
function call, function return, interrupt entry, interrupt exit,
and interesting branches.  The differences between the times of
these events are added at appropriate places in a ordinary histogram
(as if very fast statistical profiling sampled the pc at those
places) so that ordinary gprof can be used to analyze the times.

gmon.h:
Histogram counters need to be 4 bytes for microsecond resolutions.
They will need to be larger for the 586 clock.
The comments were vax-centric and wrong even on vaxes.  Does anyone
disagree?

gprof4.c:
The standard gprof should support counters of all integral sizes
and the size of the counter should be in the gmon header.  This
hack will do until then.  (Use gprof4 -u to examine the results
of non-statistical profiling.)

config/*:
Non-statistical profiling is configured with `config -pp'.
`config -p' still gives ordinary profiling.

kgmon/*:
Non-statistical profiling is enabled with `kgmon -B'.  `kgmon -b'
still enables ordinary profiling (and distables non-statistical
profiling) if non-statistical profiling is configured.
1995-12-29 15:46:59 +00:00
bde
f5284ed86d Change install' to ${INSTALL}' so that default install flags can be
specified in the top level Makefiles.
1995-07-25 00:37:58 +00:00
rgrimes
a14d555c87 Remove trailing whitespace. 1995-05-30 06:41:30 +00:00
wollman
18f4f1ed44 Added much-needed new options -[lL], to suppress printing of either the
call-graph or the flat profile, since often you only want one of them.
1994-12-22 20:52:15 +00:00
bde
63eff9d9b8 New flag -u to suppress functions whose name does not begin with an
underscore.  Use it to avoid seeing badsw when profiling the kernel.

Print times more accurately (e.g. usec in %8.0f format instead of
msec in %8.2f format for averages) if hz >= 10000.  This should have
no effect now since profhz is only 1024.
1994-09-05 16:14:54 +00:00
rgrimes
0ff5b1efa7 This commit was generated by cvs2svn to compensate for changes in r1590,
which included commits to RCS files with non-trunk default branches.
1994-05-27 12:33:43 +00:00