Update documentation
[external/binutils.git] / gprof / gprof.texi
1 \input texinfo @c -*-texinfo-*-
2 @setfilename gprof.info
3 @c Copyright 1988, 1992, 1993, 1998, 1999, 2000, 2001, 2003
4 @c Free Software Foundation, Inc.
5 @settitle GNU gprof
6 @setchapternewpage odd
7
8 @ifinfo
9 @c This is a dir.info fragment to support semi-automated addition of
10 @c manuals to an info tree.  zoo@cygnus.com is developing this facility.
11 @format
12 START-INFO-DIR-ENTRY
13 * gprof: (gprof).                Profiling your program's execution
14 END-INFO-DIR-ENTRY
15 @end format
16 @end ifinfo
17
18 @ifinfo
19 This file documents the gprof profiler of the GNU system.
20
21 @c man begin COPYRIGHT
22 Copyright (C) 1988, 92, 97, 98, 99, 2000, 2001, 2003 Free Software Foundation, Inc.
23
24 Permission is granted to copy, distribute and/or modify this document
25 under the terms of the GNU Free Documentation License, Version 1.1
26 or any later version published by the Free Software Foundation;
27 with no Invariant Sections, with no Front-Cover Texts, and with no
28 Back-Cover Texts.  A copy of the license is included in the
29 section entitled "GNU Free Documentation License".
30
31 @c man end
32
33 @ignore
34 Permission is granted to process this file through Tex and print the
35 results, provided the printed document carries copying permission
36 notice identical to this one except for the removal of this paragraph
37 (this paragraph not being relevant to the printed manual).
38
39 @end ignore
40 @end ifinfo
41
42 @finalout
43 @smallbook
44
45 @titlepage
46 @title GNU gprof
47 @subtitle The @sc{gnu} Profiler 
48 @author Jay Fenlason and Richard Stallman
49
50 @page
51
52 This manual describes the @sc{gnu} profiler, @code{gprof}, and how you
53 can use it to determine which parts of a program are taking most of the
54 execution time.  We assume that you know how to write, compile, and
55 execute programs.  @sc{gnu} @code{gprof} was written by Jay Fenlason.
56 Eric S. Raymond made some minor corrections and additions in 2003.
57
58 @vskip 0pt plus 1filll
59 Copyright @copyright{} 1988, 92, 97, 98, 99, 2000, 2003 Free Software Foundation, Inc.
60
61       Permission is granted to copy, distribute and/or modify this document
62       under the terms of the GNU Free Documentation License, Version 1.1
63       or any later version published by the Free Software Foundation;
64       with no Invariant Sections, with no Front-Cover Texts, and with no
65       Back-Cover Texts.  A copy of the license is included in the
66       section entitled "GNU Free Documentation License".
67
68 @end titlepage
69
70 @ifnottex
71 @node Top
72 @top Profiling a Program: Where Does It Spend Its Time?
73
74 This manual describes the @sc{gnu} profiler, @code{gprof}, and how you
75 can use it to determine which parts of a program are taking most of the
76 execution time.  We assume that you know how to write, compile, and
77 execute programs.  @sc{gnu} @code{gprof} was written by Jay Fenlason.
78
79 This document is distributed under the terms of the GNU Free
80 Documentation License.  A copy of the license is included in the
81 section entitled "GNU Free Documentation License".
82
83 @menu
84 * Introduction::        What profiling means, and why it is useful.
85
86 * Compiling::           How to compile your program for profiling.
87 * Executing::           Executing your program to generate profile data
88 * Invoking::            How to run @code{gprof}, and its options
89
90 * Output::              Interpreting @code{gprof}'s output
91
92 * Inaccuracy::          Potential problems you should be aware of
93 * How do I?::           Answers to common questions
94 * Incompatibilities::   (between @sc{gnu} @code{gprof} and Unix @code{gprof}.)
95 * Details::             Details of how profiling is done
96 * GNU Free Documentation License::  GNU Free Documentation License
97 @end menu
98 @end ifnottex
99
100 @node Introduction
101 @chapter Introduction to Profiling
102
103 @ifset man
104 @c man title gprof display call graph profile data
105
106 @smallexample
107 @c man begin SYNOPSIS
108 gprof [ -[abcDhilLsTvwxyz] ] [ -[ACeEfFJnNOpPqQZ][@var{name}] ] 
109  [ -I @var{dirs} ] [ -d[@var{num}] ] [ -k @var{from/to} ]
110  [ -m @var{min-count} ] [ -t @var{table-length} ]
111  [ --[no-]annotated-source[=@var{name}] ] 
112  [ --[no-]exec-counts[=@var{name}] ]
113  [ --[no-]flat-profile[=@var{name}] ] [ --[no-]graph[=@var{name}] ]
114  [ --[no-]time=@var{name}] [ --all-lines ] [ --brief ] 
115  [ --debug[=@var{level}] ] [ --function-ordering ] 
116  [ --file-ordering ] [ --directory-path=@var{dirs} ]
117  [ --display-unused-functions ] [ --file-format=@var{name} ]
118  [ --file-info ] [ --help ] [ --line ] [ --min-count=@var{n} ]
119  [ --no-static ] [ --print-path ] [ --separate-files ]
120  [ --static-call-graph ] [ --sum ] [ --table-length=@var{len} ]
121  [ --traditional ] [ --version ] [ --width=@var{n} ]
122  [ --ignore-non-functions ] [ --demangle[=@var{STYLE}] ]
123  [ --no-demangle ] [ @var{image-file} ] [ @var{profile-file} @dots{} ]
124 @c man end
125 @end smallexample
126
127 @c man begin DESCRIPTION
128 @code{gprof} produces an execution profile of C, Pascal, or Fortran77 
129 programs.  The effect of called routines is incorporated in the profile 
130 of each caller.  The profile data is taken from the call graph profile file
131 (@file{gmon.out} default) which is created by programs
132 that are compiled with the @samp{-pg} option of
133 @code{cc}, @code{pc}, and @code{f77}.
134 The @samp{-pg} option also links in versions of the library routines
135 that are compiled for profiling.  @code{Gprof} reads the given object 
136 file (the default is @code{a.out}) and establishes the relation between
137 its symbol table and the call graph profile from @file{gmon.out}.
138 If more than one profile file is specified, the @code{gprof}
139 output shows the sum of the profile information in the given profile files.
140
141 @code{Gprof} calculates the amount of time spent in each routine.
142 Next, these times are propagated along the edges of the call graph.
143 Cycles are discovered, and calls into a cycle are made to share the time
144 of the cycle.
145
146 @c man end
147
148 @c man begin BUGS
149 The granularity of the sampling is shown, but remains
150 statistical at best.
151 We assume that the time for each execution of a function
152 can be expressed by the total time for the function divided
153 by the number of times the function is called.
154 Thus the time propagated along the call graph arcs to the function's
155 parents is directly proportional to the number of times that
156 arc is traversed.
157
158 Parents that are not themselves profiled will have the time of
159 their profiled children propagated to them, but they will appear
160 to be spontaneously invoked in the call graph listing, and will
161 not have their time propagated further.
162 Similarly, signal catchers, even though profiled, will appear
163 to be spontaneous (although for more obscure reasons).
164 Any profiled children of signal catchers should have their times
165 propagated properly, unless the signal catcher was invoked during
166 the execution of the profiling routine, in which case all is lost.
167
168 The profiled program must call @code{exit}(2)
169 or return normally for the profiling information to be saved
170 in the @file{gmon.out} file.
171 @c man end
172
173 @c man begin FILES
174 @table @code
175 @item @file{a.out}
176 the namelist and text space.
177 @item @file{gmon.out}
178 dynamic call graph and profile.
179 @item @file{gmon.sum}
180 summarized dynamic call graph and profile.  
181 @end table
182 @c man end
183
184 @c man begin SEEALSO
185 monitor(3), profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
186
187 ``An Execution Profiler for Modular Programs'',
188 by S. Graham, P. Kessler, M. McKusick;
189 Software - Practice and Experience,
190 Vol. 13, pp. 671-685, 1983.
191
192 ``gprof: A Call Graph Execution Profiler'',
193 by S. Graham, P. Kessler, M. McKusick;
194 Proceedings of the SIGPLAN '82 Symposium on Compiler Construction,
195 SIGPLAN Notices, Vol. 17, No  6, pp. 120-126, June 1982.
196 @c man end
197 @end ifset
198
199 Profiling allows you to learn where your program spent its time and which
200 functions called which other functions while it was executing.  This
201 information can show you which pieces of your program are slower than you
202 expected, and might be candidates for rewriting to make your program
203 execute faster.  It can also tell you which functions are being called more
204 or less often than you expected.  This may help you spot bugs that had
205 otherwise been unnoticed.
206
207 Since the profiler uses information collected during the actual execution
208 of your program, it can be used on programs that are too large or too
209 complex to analyze by reading the source.  However, how your program is run
210 will affect the information that shows up in the profile data.  If you
211 don't use some feature of your program while it is being profiled, no
212 profile information will be generated for that feature.
213
214 Profiling has several steps:
215
216 @itemize @bullet
217 @item
218 You must compile and link your program with profiling enabled.
219 @xref{Compiling}.
220
221 @item
222 You must execute your program to generate a profile data file.
223 @xref{Executing}.
224
225 @item
226 You must run @code{gprof} to analyze the profile data.
227 @xref{Invoking}.
228 @end itemize
229
230 The next three chapters explain these steps in greater detail.
231
232 @c man begin DESCRIPTION
233
234 Several forms of output are available from the analysis.
235
236 The @dfn{flat profile} shows how much time your program spent in each function,
237 and how many times that function was called.  If you simply want to know
238 which functions burn most of the cycles, it is stated concisely here.
239 @xref{Flat Profile}.
240
241 The @dfn{call graph} shows, for each function, which functions called it, which
242 other functions it called, and how many times.  There is also an estimate
243 of how much time was spent in the subroutines of each function.  This can
244 suggest places where you might try to eliminate function calls that use a
245 lot of time.  @xref{Call Graph}.
246
247 The @dfn{annotated source} listing is a copy of the program's
248 source code, labeled with the number of times each line of the
249 program was executed.  @xref{Annotated Source}.
250 @c man end
251
252 To better understand how profiling works, you may wish to read
253 a description of its implementation.
254 @xref{Implementation}.
255
256 @node Compiling
257 @chapter Compiling a Program for Profiling
258
259 The first step in generating profile information for your program is
260 to compile and link it with profiling enabled.
261
262 To compile a source file for profiling, specify the @samp{-pg} option when
263 you run the compiler.  (This is in addition to the options you normally
264 use.)
265
266 To link the program for profiling, if you use a compiler such as @code{cc}
267 to do the linking, simply specify @samp{-pg} in addition to your usual
268 options.  The same option, @samp{-pg}, alters either compilation or linking
269 to do what is necessary for profiling.  Here are examples:
270
271 @example
272 cc -g -c myprog.c utils.c -pg
273 cc -o myprog myprog.o utils.o -pg
274 @end example
275
276 The @samp{-pg} option also works with a command that both compiles and links:
277
278 @example
279 cc -o myprog myprog.c utils.c -g -pg
280 @end example
281
282 Note: The @samp{-pg} option must be part of your compilation options
283 as well as your link options.  If it is not, when you run @code{gprof}
284 you will get no profile report and an error message like this:
285
286 @example
287 gprof: gmon.out file is missing call-graph data
288 @end example
289
290 If you run the linker @code{ld} directly instead of through a compiler
291 such as @code{cc}, you may have to specify a profiling startup file
292 @file{gcrt0.o} as the first input file instead of the usual startup
293 file @file{crt0.o}.  In addition, you would probably want to
294 specify the profiling C library, @file{libc_p.a}, by writing
295 @samp{-lc_p} instead of the usual @samp{-lc}.  This is not absolutely
296 necessary, but doing this gives you number-of-calls information for
297 standard library functions such as @code{read} and @code{open}.  For
298 example:
299
300 @example
301 ld -o myprog /lib/gcrt0.o myprog.o utils.o -lc_p
302 @end example
303
304 If you compile only some of the modules of the program with @samp{-pg}, you
305 can still profile the program, but you won't get complete information about
306 the modules that were compiled without @samp{-pg}.  The only information
307 you get for the functions in those modules is the total time spent in them;
308 there is no record of how many times they were called, or from where.  This
309 will not affect the flat profile (except that the @code{calls} field for
310 the functions will be blank), but will greatly reduce the usefulness of the
311 call graph.
312
313 If you wish to perform line-by-line profiling,
314 you will also need to specify the @samp{-g} option,
315 instructing the compiler to insert debugging symbols into the program
316 that match program addresses to source code lines.
317 @xref{Line-by-line}.
318
319 In addition to the @samp{-pg} and @samp{-g} options, older versions of
320 GCC required you to specify the @samp{-a} option when compiling in
321 order to instrument it to perform basic-block counting.  Newer
322 versions do not require this option and will not accept it;
323 basic-block counting is always enabled when @samp{-pg} is on.
324
325 When basic-block counting is enabled, as the program runs
326 it will count how many times it executed each branch of each @samp{if}
327 statement, each iteration of each @samp{do} loop, etc.  This will
328 enable @code{gprof} to construct an annotated source code
329 listing showing how many times each line of code was executed.
330
331 @node Executing
332 @chapter Executing the Program
333
334 Once the program is compiled for profiling, you must run it in order to
335 generate the information that @code{gprof} needs.  Simply run the program
336 as usual, using the normal arguments, file names, etc.  The program should
337 run normally, producing the same output as usual.  It will, however, run
338 somewhat slower than normal because of the time spent collecting and the
339 writing the profile data.
340
341 The way you run the program---the arguments and input that you give
342 it---may have a dramatic effect on what the profile information shows.  The
343 profile data will describe the parts of the program that were activated for
344 the particular input you use.  For example, if the first command you give
345 to your program is to quit, the profile data will show the time used in
346 initialization and in cleanup, but not much else.
347
348 Your program will write the profile data into a file called @file{gmon.out}
349 just before exiting.  If there is already a file called @file{gmon.out},
350 its contents are overwritten.  There is currently no way to tell the
351 program to write the profile data under a different name, but you can rename
352 the file afterwards if you are concerned that it may be overwritten.
353
354 In order to write the @file{gmon.out} file properly, your program must exit
355 normally: by returning from @code{main} or by calling @code{exit}.  Calling
356 the low-level function @code{_exit} does not write the profile data, and
357 neither does abnormal termination due to an unhandled signal.
358
359 The @file{gmon.out} file is written in the program's @emph{current working
360 directory} at the time it exits.  This means that if your program calls
361 @code{chdir}, the @file{gmon.out} file will be left in the last directory
362 your program @code{chdir}'d to.  If you don't have permission to write in
363 this directory, the file is not written, and you will get an error message.
364
365 Older versions of the @sc{gnu} profiling library may also write a file
366 called @file{bb.out}.  This file, if present, contains an human-readable
367 listing of the basic-block execution counts.  Unfortunately, the
368 appearance of a human-readable @file{bb.out} means the basic-block
369 counts didn't get written into @file{gmon.out}.
370 The Perl script @code{bbconv.pl}, included with the @code{gprof}
371 source distribution, will convert a @file{bb.out} file into
372 a format readable by @code{gprof}.  Invoke it like this:
373
374 @smallexample
375 bbconv.pl < bb.out > @var{bh-data}
376 @end smallexample
377
378 This translates the information in @file{bb.out} into a form that
379 @code{gprof} can understand.  But you still need to tell @code{gprof}
380 about the existence of this translated information.  To do that, include
381 @var{bb-data} on the @code{gprof} command line, @emph{along with
382 @file{gmon.out}}, like this:
383
384 @smallexample
385 gprof @var{options} @var{executable-file} gmon.out @var{bb-data} [@var{yet-more-profile-data-files}@dots{}] [> @var{outfile}]
386 @end smallexample
387
388 @node Invoking
389 @chapter @code{gprof} Command Summary
390
391 After you have a profile data file @file{gmon.out}, you can run @code{gprof}
392 to interpret the information in it.  The @code{gprof} program prints a
393 flat profile and a call graph on standard output.  Typically you would
394 redirect the output of @code{gprof} into a file with @samp{>}.
395
396 You run @code{gprof} like this:
397
398 @smallexample
399 gprof @var{options} [@var{executable-file} [@var{profile-data-files}@dots{}]] [> @var{outfile}]
400 @end smallexample
401
402 @noindent
403 Here square-brackets indicate optional arguments.
404
405 If you omit the executable file name, the file @file{a.out} is used.  If
406 you give no profile data file name, the file @file{gmon.out} is used.  If
407 any file is not in the proper format, or if the profile data file does not
408 appear to belong to the executable file, an error message is printed.
409
410 You can give more than one profile data file by entering all their names
411 after the executable file name; then the statistics in all the data files
412 are summed together.
413
414 The order of these options does not matter.
415
416 @menu
417 * Output Options::      Controlling @code{gprof}'s output style
418 * Analysis Options::    Controlling how @code{gprof} analyses its data
419 * Miscellaneous Options::
420 * Deprecated Options::  Options you no longer need to use, but which
421                             have been retained for compatibility
422 * Symspecs::            Specifying functions to include or exclude
423 @end menu
424
425 @node Output Options,Analysis Options,,Invoking
426 @section Output Options
427
428 @c man begin OPTIONS
429 These options specify which of several output formats
430 @code{gprof} should produce.
431
432 Many of these options take an optional @dfn{symspec} to specify
433 functions to be included or excluded.  These options can be
434 specified multiple times, with different symspecs, to include
435 or exclude sets of symbols.  @xref{Symspecs}.
436
437 Specifying any of these options overrides the default (@samp{-p -q}),
438 which prints a flat profile and call graph analysis
439 for all functions.
440
441 @table @code
442
443 @item -A[@var{symspec}]
444 @itemx --annotated-source[=@var{symspec}]
445 The @samp{-A} option causes @code{gprof} to print annotated source code.
446 If @var{symspec} is specified, print output only for matching symbols.
447 @xref{Annotated Source}.
448
449 @item -b
450 @itemx --brief
451 If the @samp{-b} option is given, @code{gprof} doesn't print the
452 verbose blurbs that try to explain the meaning of all of the fields in
453 the tables.  This is useful if you intend to print out the output, or
454 are tired of seeing the blurbs.
455
456 @item -C[@var{symspec}]
457 @itemx --exec-counts[=@var{symspec}]
458 The @samp{-C} option causes @code{gprof} to
459 print a tally of functions and the number of times each was called.
460 If @var{symspec} is specified, print tally only for matching symbols.
461
462 If the profile data file contains basic-block count records, specifying
463 the @samp{-l} option, along with @samp{-C}, will cause basic-block
464 execution counts to be tallied and displayed.
465
466 @item -i
467 @itemx --file-info
468 The @samp{-i} option causes @code{gprof} to display summary information
469 about the profile data file(s) and then exit.  The number of histogram,
470 call graph, and basic-block count records is displayed.
471
472 @item -I @var{dirs}
473 @itemx --directory-path=@var{dirs}
474 The @samp{-I} option specifies a list of search directories in
475 which to find source files.  Environment variable @var{GPROF_PATH}
476 can also be used to convey this information.
477 Used mostly for annotated source output.
478
479 @item -J[@var{symspec}]
480 @itemx --no-annotated-source[=@var{symspec}]
481 The @samp{-J} option causes @code{gprof} not to
482 print annotated source code.
483 If @var{symspec} is specified, @code{gprof} prints annotated source,
484 but excludes matching symbols.
485
486 @item -L
487 @itemx --print-path
488 Normally, source filenames are printed with the path
489 component suppressed.  The @samp{-L} option causes @code{gprof}
490 to print the full pathname of
491 source filenames, which is determined
492 from symbolic debugging information in the image file
493 and is relative to the directory in which the compiler
494 was invoked.
495
496 @item -p[@var{symspec}]
497 @itemx --flat-profile[=@var{symspec}]
498 The @samp{-p} option causes @code{gprof} to print a flat profile.
499 If @var{symspec} is specified, print flat profile only for matching symbols.
500 @xref{Flat Profile}.
501
502 @item -P[@var{symspec}]
503 @itemx --no-flat-profile[=@var{symspec}]
504 The @samp{-P} option causes @code{gprof} to suppress printing a flat profile.
505 If @var{symspec} is specified, @code{gprof} prints a flat profile,
506 but excludes matching symbols.
507
508 @item -q[@var{symspec}]
509 @itemx --graph[=@var{symspec}]
510 The @samp{-q} option causes @code{gprof} to print the call graph analysis.
511 If @var{symspec} is specified, print call graph only for matching symbols
512 and their children.
513 @xref{Call Graph}.
514
515 @item -Q[@var{symspec}]
516 @itemx --no-graph[=@var{symspec}]
517 The @samp{-Q} option causes @code{gprof} to suppress printing the
518 call graph.
519 If @var{symspec} is specified, @code{gprof} prints a call graph,
520 but excludes matching symbols.
521
522 @item -y
523 @itemx --separate-files
524 This option affects annotated source output only.
525 Normally, @code{gprof} prints annotated source files
526 to standard-output.  If this option is specified,
527 annotated source for a file named @file{path/@var{filename}}
528 is generated in the file @file{@var{filename}-ann}.  If the underlying
529 filesystem would truncate @file{@var{filename}-ann} so that it
530 overwrites the original @file{@var{filename}}, @code{gprof} generates
531 annotated source in the file @file{@var{filename}.ann} instead (if the
532 original file name has an extension, that extension is @emph{replaced}
533 with @file{.ann}).
534
535 @item -Z[@var{symspec}]
536 @itemx --no-exec-counts[=@var{symspec}]
537 The @samp{-Z} option causes @code{gprof} not to
538 print a tally of functions and the number of times each was called.
539 If @var{symspec} is specified, print tally, but exclude matching symbols.
540
541 @item --function-ordering
542 The @samp{--function-ordering} option causes @code{gprof} to print a
543 suggested function ordering for the program based on profiling data.
544 This option suggests an ordering which may improve paging, tlb and
545 cache behavior for the program on systems which support arbitrary
546 ordering of functions in an executable.
547
548 The exact details of how to force the linker to place functions
549 in a particular order is system dependent and out of the scope of this
550 manual.
551
552 @item --file-ordering @var{map_file}
553 The @samp{--file-ordering} option causes @code{gprof} to print a
554 suggested .o link line ordering for the program based on profiling data.
555 This option suggests an ordering which may improve paging, tlb and
556 cache behavior for the program on systems which do not support arbitrary
557 ordering of functions in an executable.
558
559 Use of the @samp{-a} argument is highly recommended with this option.
560
561 The @var{map_file} argument is a pathname to a file which provides
562 function name to object file mappings.  The format of the file is similar to
563 the output of the program @code{nm}.
564
565 @smallexample
566 @group
567 c-parse.o:00000000 T yyparse
568 c-parse.o:00000004 C yyerrflag
569 c-lang.o:00000000 T maybe_objc_method_name
570 c-lang.o:00000000 T print_lang_statistics
571 c-lang.o:00000000 T recognize_objc_keyword
572 c-decl.o:00000000 T print_lang_identifier
573 c-decl.o:00000000 T print_lang_type
574 @dots{}
575
576 @end group
577 @end smallexample
578
579 To create a @var{map_file} with @sc{gnu} @code{nm}, type a command like
580 @kbd{nm --extern-only --defined-only -v --print-file-name program-name}.
581
582 @item -T
583 @itemx --traditional
584 The @samp{-T} option causes @code{gprof} to print its output in
585 ``traditional'' BSD style.
586
587 @item -w @var{width}
588 @itemx --width=@var{width}
589 Sets width of output lines to @var{width}.
590 Currently only used when printing the function index at the bottom
591 of the call graph.
592
593 @item -x
594 @itemx --all-lines
595 This option affects annotated source output only.
596 By default, only the lines at the beginning of a basic-block
597 are annotated.  If this option is specified, every line in
598 a basic-block is annotated by repeating the annotation for the
599 first line.  This behavior is similar to @code{tcov}'s @samp{-a}.
600
601 @item --demangle[=@var{style}]
602 @itemx --no-demangle
603 These options control whether C++ symbol names should be demangled when
604 printing output.  The default is to demangle symbols.  The
605 @code{--no-demangle} option may be used to turn off demangling. Different 
606 compilers have different mangling styles.  The optional demangling style 
607 argument can be used to choose an appropriate demangling style for your 
608 compiler.
609 @end table
610
611 @node Analysis Options,Miscellaneous Options,Output Options,Invoking
612 @section Analysis Options
613
614 @table @code
615
616 @item -a
617 @itemx --no-static
618 The @samp{-a} option causes @code{gprof} to suppress the printing of
619 statically declared (private) functions.  (These are functions whose
620 names are not listed as global, and which are not visible outside the
621 file/function/block where they were defined.)  Time spent in these
622 functions, calls to/from them, etc, will all be attributed to the
623 function that was loaded directly before it in the executable file.
624 @c This is compatible with Unix @code{gprof}, but a bad idea.  
625 This option affects both the flat profile and the call graph.
626
627 @item -c
628 @itemx --static-call-graph
629 The @samp{-c} option causes the call graph of the program to be
630 augmented by a heuristic which examines the text space of the object
631 file and identifies function calls in the binary machine code.
632 Since normal call graph records are only generated when functions are
633 entered, this option identifies children that could have been called,
634 but never were.  Calls to functions that were not compiled with
635 profiling enabled are also identified, but only if symbol table
636 entries are present for them.
637 Calls to dynamic library routines are typically @emph{not} found
638 by this option.
639 Parents or children identified via this heuristic
640 are indicated in the call graph with call counts of @samp{0}.
641
642 @item -D
643 @itemx --ignore-non-functions
644 The @samp{-D} option causes @code{gprof} to ignore symbols which
645 are not known to be functions.  This option will give more accurate
646 profile data on systems where it is supported (Solaris and HPUX for
647 example).
648
649 @item -k @var{from}/@var{to}
650 The @samp{-k} option allows you to delete from the call graph any arcs from
651 symbols matching symspec @var{from} to those matching symspec @var{to}.
652
653 @item -l
654 @itemx --line
655 The @samp{-l} option enables line-by-line profiling, which causes
656 histogram hits to be charged to individual source code lines,
657 instead of functions.
658 If the program was compiled with basic-block counting enabled,
659 this option will also identify how many times each line of
660 code was executed.
661 While line-by-line profiling can help isolate where in a large function
662 a program is spending its time, it also significantly increases
663 the running time of @code{gprof}, and magnifies statistical
664 inaccuracies.
665 @xref{Sampling Error}.
666
667 @item -m @var{num}
668 @itemx --min-count=@var{num}
669 This option affects execution count output only.
670 Symbols that are executed less than @var{num} times are suppressed.
671
672 @item -n[@var{symspec}]
673 @itemx --time[=@var{symspec}]
674 The @samp{-n} option causes @code{gprof}, in its call graph analysis,
675 to only propagate times for symbols matching @var{symspec}.
676
677 @item -N[@var{symspec}]
678 @itemx --no-time[=@var{symspec}]
679 The @samp{-n} option causes @code{gprof}, in its call graph analysis,
680 not to propagate times for symbols matching @var{symspec}.
681
682 @item -z
683 @itemx --display-unused-functions
684 If you give the @samp{-z} option, @code{gprof} will mention all
685 functions in the flat profile, even those that were never called, and
686 that had no time spent in them.  This is useful in conjunction with the
687 @samp{-c} option for discovering which routines were never called.
688
689 @end table
690
691 @node Miscellaneous Options,Deprecated Options,Analysis Options,Invoking
692 @section Miscellaneous Options
693
694 @table @code
695
696 @item -d[@var{num}]
697 @itemx --debug[=@var{num}]
698 The @samp{-d @var{num}} option specifies debugging options.
699 If @var{num} is not specified, enable all debugging.
700 @xref{Debugging}.
701
702 @item -O@var{name}
703 @itemx --file-format=@var{name}
704 Selects the format of the profile data files.  Recognized formats are
705 @samp{auto} (the default), @samp{bsd}, @samp{4.4bsd}, @samp{magic}, and
706 @samp{prof} (not yet supported).
707
708 @item -s
709 @itemx --sum
710 The @samp{-s} option causes @code{gprof} to summarize the information
711 in the profile data files it read in, and write out a profile data
712 file called @file{gmon.sum}, which contains all the information from
713 the profile data files that @code{gprof} read in.  The file @file{gmon.sum}
714 may be one of the specified input files; the effect of this is to
715 merge the data in the other input files into @file{gmon.sum}.
716
717 Eventually you can run @code{gprof} again without @samp{-s} to analyze the
718 cumulative data in the file @file{gmon.sum}.
719
720 @item -v
721 @itemx --version
722 The @samp{-v} flag causes @code{gprof} to print the current version
723 number, and then exit.
724
725 @end table
726
727 @node Deprecated Options,Symspecs,Miscellaneous Options,Invoking
728 @section Deprecated Options
729
730 @table @code
731
732 These options have been replaced with newer versions that use symspecs.
733
734 @item -e @var{function_name}
735 The @samp{-e @var{function}} option tells @code{gprof} to not print
736 information about the function @var{function_name} (and its
737 children@dots{}) in the call graph.  The function will still be listed
738 as a child of any functions that call it, but its index number will be
739 shown as @samp{[not printed]}.  More than one @samp{-e} option may be
740 given; only one @var{function_name} may be indicated with each @samp{-e}
741 option. 
742
743 @item -E @var{function_name}
744 The @code{-E @var{function}} option works like the @code{-e} option, but
745 time spent in the function (and children who were not called from
746 anywhere else), will not be used to compute the percentages-of-time for
747 the call graph.  More than one @samp{-E} option may be given; only one
748 @var{function_name} may be indicated with each @samp{-E} option.
749
750 @item -f @var{function_name}
751 The @samp{-f @var{function}} option causes @code{gprof} to limit the
752 call graph to the function @var{function_name} and its children (and
753 their children@dots{}).  More than one @samp{-f} option may be given;
754 only one @var{function_name} may be indicated with each @samp{-f}
755 option.  
756
757 @item -F @var{function_name}
758 The @samp{-F @var{function}} option works like the @code{-f} option, but
759 only time spent in the function and its children (and their
760 children@dots{}) will be used to determine total-time and
761 percentages-of-time for the call graph.  More than one @samp{-F} option
762 may be given; only one @var{function_name} may be indicated with each
763 @samp{-F} option.  The @samp{-F} option overrides the @samp{-E} option.
764
765 @end table
766
767 @c man end
768
769 Note that only one function can be specified with each @code{-e},
770 @code{-E}, @code{-f} or @code{-F} option.  To specify more than one
771 function, use multiple options.  For example, this command:
772
773 @example
774 gprof -e boring -f foo -f bar myprogram > gprof.output
775 @end example
776
777 @noindent
778 lists in the call graph all functions that were reached from either
779 @code{foo} or @code{bar} and were not reachable from @code{boring}.
780
781 @node Symspecs,,Deprecated Options,Invoking
782 @section Symspecs
783
784 Many of the output options allow functions to be included or excluded
785 using @dfn{symspecs} (symbol specifications), which observe the
786 following syntax:
787
788 @example
789   filename_containing_a_dot
790 | funcname_not_containing_a_dot
791 | linenumber
792 | ( [ any_filename ] `:' ( any_funcname | linenumber ) )
793 @end example
794
795 Here are some sample symspecs:
796
797 @table @samp
798 @item main.c
799 Selects everything in file @file{main.c}---the
800 dot in the string tells @code{gprof} to interpret
801 the string as a filename, rather than as
802 a function name.  To select a file whose
803 name does not contain a dot, a trailing colon
804 should be specified.  For example, @samp{odd:} is
805 interpreted as the file named @file{odd}.
806
807 @item main
808 Selects all functions named @samp{main}.
809
810 Note that there may be multiple instances of the same function name
811 because some of the definitions may be local (i.e., static).  Unless a
812 function name is unique in a program, you must use the colon notation
813 explained below to specify a function from a specific source file.
814
815 Sometimes, function names contain dots.  In such cases, it is necessary
816 to add a leading colon to the name.  For example, @samp{:.mul} selects
817 function @samp{.mul}.
818
819 In some object file formats, symbols have a leading underscore.
820 @code{gprof} will normally not print these underscores.  When you name a
821 symbol in a symspec, you should type it exactly as @code{gprof} prints
822 it in its output.  For example, if the compiler produces a symbol
823 @samp{_main} from your @code{main} function, @code{gprof} still prints
824 it as @samp{main} in its output, so you should use @samp{main} in
825 symspecs.
826
827 @item main.c:main
828 Selects function @samp{main} in file @file{main.c}.
829
830 @item main.c:134
831 Selects line 134 in file @file{main.c}.
832 @end table
833
834 @node Output
835 @chapter Interpreting @code{gprof}'s Output
836
837 @code{gprof} can produce several different output styles, the
838 most important of which are described below.  The simplest output
839 styles (file information, execution count, and function and file ordering)
840 are not described here, but are documented with the respective options
841 that trigger them.
842 @xref{Output Options}.
843
844 @menu
845 * Flat Profile::        The flat profile shows how much time was spent
846                             executing directly in each function.
847 * Call Graph::          The call graph shows which functions called which
848                             others, and how much time each function used
849                             when its subroutine calls are included.
850 * Line-by-line::        @code{gprof} can analyze individual source code lines
851 * Annotated Source::    The annotated source listing displays source code
852                             labeled with execution counts
853 @end menu
854
855
856 @node Flat Profile,Call Graph,,Output
857 @section The Flat Profile
858 @cindex flat profile
859
860 The @dfn{flat profile} shows the total amount of time your program
861 spent executing each function.  Unless the @samp{-z} option is given,
862 functions with no apparent time spent in them, and no apparent calls
863 to them, are not mentioned.  Note that if a function was not compiled
864 for profiling, and didn't run long enough to show up on the program
865 counter histogram, it will be indistinguishable from a function that
866 was never called.
867
868 This is part of a flat profile for a small program:
869
870 @smallexample
871 @group
872 Flat profile:
873
874 Each sample counts as 0.01 seconds.
875   %   cumulative   self              self     total           
876  time   seconds   seconds    calls  ms/call  ms/call  name    
877  33.34      0.02     0.02     7208     0.00     0.00  open
878  16.67      0.03     0.01      244     0.04     0.12  offtime
879  16.67      0.04     0.01        8     1.25     1.25  memccpy
880  16.67      0.05     0.01        7     1.43     1.43  write
881  16.67      0.06     0.01                             mcount
882   0.00      0.06     0.00      236     0.00     0.00  tzset
883   0.00      0.06     0.00      192     0.00     0.00  tolower
884   0.00      0.06     0.00       47     0.00     0.00  strlen
885   0.00      0.06     0.00       45     0.00     0.00  strchr
886   0.00      0.06     0.00        1     0.00    50.00  main
887   0.00      0.06     0.00        1     0.00     0.00  memcpy
888   0.00      0.06     0.00        1     0.00    10.11  print
889   0.00      0.06     0.00        1     0.00     0.00  profil
890   0.00      0.06     0.00        1     0.00    50.00  report
891 @dots{}
892 @end group
893 @end smallexample
894
895 @noindent
896 The functions are sorted by first by decreasing run-time spent in them,
897 then by decreasing number of calls, then alphabetically by name.  The
898 functions @samp{mcount} and @samp{profil} are part of the profiling
899 apparatus and appear in every flat profile; their time gives a measure of
900 the amount of overhead due to profiling.
901
902 Just before the column headers, a statement appears indicating
903 how much time each sample counted as.
904 This @dfn{sampling period} estimates the margin of error in each of the time
905 figures.  A time figure that is not much larger than this is not
906 reliable.  In this example, each sample counted as 0.01 seconds,
907 suggesting a 100 Hz sampling rate.
908 The program's total execution time was 0.06
909 seconds, as indicated by the @samp{cumulative seconds} field.  Since
910 each sample counted for 0.01 seconds, this means only six samples
911 were taken during the run.  Two of the samples occurred while the
912 program was in the @samp{open} function, as indicated by the
913 @samp{self seconds} field.  Each of the other four samples
914 occurred one each in @samp{offtime}, @samp{memccpy}, @samp{write},
915 and @samp{mcount}.
916 Since only six samples were taken, none of these values can
917 be regarded as particularly reliable.
918 In another run,
919 the @samp{self seconds} field for
920 @samp{mcount} might well be @samp{0.00} or @samp{0.02}.
921 @xref{Sampling Error}, for a complete discussion.
922
923 The remaining functions in the listing (those whose
924 @samp{self seconds} field is @samp{0.00}) didn't appear
925 in the histogram samples at all.  However, the call graph
926 indicated that they were called, so therefore they are listed,
927 sorted in decreasing order by the @samp{calls} field.
928 Clearly some time was spent executing these functions,
929 but the paucity of histogram samples prevents any
930 determination of how much time each took.
931
932 Here is what the fields in each line mean:
933
934 @table @code
935 @item % time
936 This is the percentage of the total execution time your program spent
937 in this function.  These should all add up to 100%.
938
939 @item cumulative seconds
940 This is the cumulative total number of seconds the computer spent
941 executing this functions, plus the time spent in all the functions
942 above this one in this table.
943
944 @item self seconds
945 This is the number of seconds accounted for by this function alone.
946 The flat profile listing is sorted first by this number.
947
948 @item calls
949 This is the total number of times the function was called.  If the
950 function was never called, or the number of times it was called cannot
951 be determined (probably because the function was not compiled with
952 profiling enabled), the @dfn{calls} field is blank.
953
954 @item self ms/call
955 This represents the average number of milliseconds spent in this
956 function per call, if this function is profiled.  Otherwise, this field
957 is blank for this function.
958
959 @item total ms/call
960 This represents the average number of milliseconds spent in this
961 function and its descendants per call, if this function is profiled.
962 Otherwise, this field is blank for this function.
963 This is the only field in the flat profile that uses call graph analysis.
964
965 @item name
966 This is the name of the function.   The flat profile is sorted by this
967 field alphabetically after the @dfn{self seconds} and @dfn{calls}
968 fields are sorted.
969 @end table
970
971 @node Call Graph,Line-by-line,Flat Profile,Output
972 @section The Call Graph
973 @cindex call graph
974
975 The @dfn{call graph} shows how much time was spent in each function
976 and its children.  From this information, you can find functions that,
977 while they themselves may not have used much time, called other
978 functions that did use unusual amounts of time.
979
980 Here is a sample call from a small program.  This call came from the
981 same @code{gprof} run as the flat profile example in the previous
982 chapter.
983
984 @smallexample
985 @group
986 granularity: each sample hit covers 2 byte(s) for 20.00% of 0.05 seconds
987
988 index % time    self  children    called     name
989                                                  <spontaneous>
990 [1]    100.0    0.00    0.05                 start [1]
991                 0.00    0.05       1/1           main [2]
992                 0.00    0.00       1/2           on_exit [28]
993                 0.00    0.00       1/1           exit [59]
994 -----------------------------------------------
995                 0.00    0.05       1/1           start [1]
996 [2]    100.0    0.00    0.05       1         main [2]
997                 0.00    0.05       1/1           report [3]
998 -----------------------------------------------
999                 0.00    0.05       1/1           main [2]
1000 [3]    100.0    0.00    0.05       1         report [3]
1001                 0.00    0.03       8/8           timelocal [6]
1002                 0.00    0.01       1/1           print [9]
1003                 0.00    0.01       9/9           fgets [12]
1004                 0.00    0.00      12/34          strncmp <cycle 1> [40]
1005                 0.00    0.00       8/8           lookup [20]
1006                 0.00    0.00       1/1           fopen [21]
1007                 0.00    0.00       8/8           chewtime [24]
1008                 0.00    0.00       8/16          skipspace [44]
1009 -----------------------------------------------
1010 [4]     59.8    0.01        0.02       8+472     <cycle 2 as a whole>   [4]
1011                 0.01        0.02     244+260         offtime <cycle 2> [7]
1012                 0.00        0.00     236+1           tzset <cycle 2> [26]
1013 -----------------------------------------------
1014 @end group
1015 @end smallexample
1016
1017 The lines full of dashes divide this table into @dfn{entries}, one for each
1018 function.  Each entry has one or more lines.
1019
1020 In each entry, the primary line is the one that starts with an index number
1021 in square brackets.  The end of this line says which function the entry is
1022 for.  The preceding lines in the entry describe the callers of this
1023 function and the following lines describe its subroutines (also called
1024 @dfn{children} when we speak of the call graph).
1025
1026 The entries are sorted by time spent in the function and its subroutines.
1027
1028 The internal profiling function @code{mcount} (@pxref{Flat Profile})
1029 is never mentioned in the call graph.
1030
1031 @menu
1032 * Primary::       Details of the primary line's contents.
1033 * Callers::       Details of caller-lines' contents.
1034 * Subroutines::   Details of subroutine-lines' contents.
1035 * Cycles::        When there are cycles of recursion,
1036                    such as @code{a} calls @code{b} calls @code{a}@dots{}
1037 @end menu
1038
1039 @node Primary
1040 @subsection The Primary Line
1041
1042 The @dfn{primary line} in a call graph entry is the line that
1043 describes the function which the entry is about and gives the overall
1044 statistics for this function.
1045
1046 For reference, we repeat the primary line from the entry for function
1047 @code{report} in our main example, together with the heading line that
1048 shows the names of the fields:
1049
1050 @smallexample
1051 @group
1052 index  % time    self  children called     name
1053 @dots{}
1054 [3]    100.0    0.00    0.05       1         report [3]
1055 @end group
1056 @end smallexample
1057
1058 Here is what the fields in the primary line mean:
1059
1060 @table @code
1061 @item index
1062 Entries are numbered with consecutive integers.  Each function
1063 therefore has an index number, which appears at the beginning of its
1064 primary line.
1065
1066 Each cross-reference to a function, as a caller or subroutine of
1067 another, gives its index number as well as its name.  The index number
1068 guides you if you wish to look for the entry for that function.
1069
1070 @item % time
1071 This is the percentage of the total time that was spent in this
1072 function, including time spent in subroutines called from this
1073 function.
1074
1075 The time spent in this function is counted again for the callers of
1076 this function.  Therefore, adding up these percentages is meaningless.
1077
1078 @item self
1079 This is the total amount of time spent in this function.  This
1080 should be identical to the number printed in the @code{seconds} field
1081 for this function in the flat profile.
1082
1083 @item children
1084 This is the total amount of time spent in the subroutine calls made by
1085 this function.  This should be equal to the sum of all the @code{self}
1086 and @code{children} entries of the children listed directly below this
1087 function.
1088
1089 @item called
1090 This is the number of times the function was called.
1091
1092 If the function called itself recursively, there are two numbers,
1093 separated by a @samp{+}.  The first number counts non-recursive calls,
1094 and the second counts recursive calls.
1095
1096 In the example above, the function @code{report} was called once from
1097 @code{main}.
1098
1099 @item name
1100 This is the name of the current function.  The index number is
1101 repeated after it.
1102
1103 If the function is part of a cycle of recursion, the cycle number is
1104 printed between the function's name and the index number
1105 (@pxref{Cycles}).  For example, if function @code{gnurr} is part of
1106 cycle number one, and has index number twelve, its primary line would
1107 be end like this:
1108
1109 @example
1110 gnurr <cycle 1> [12]
1111 @end example
1112 @end table
1113
1114 @node Callers, Subroutines, Primary, Call Graph
1115 @subsection Lines for a Function's Callers
1116
1117 A function's entry has a line for each function it was called by.
1118 These lines' fields correspond to the fields of the primary line, but
1119 their meanings are different because of the difference in context.
1120
1121 For reference, we repeat two lines from the entry for the function
1122 @code{report}, the primary line and one caller-line preceding it, together
1123 with the heading line that shows the names of the fields:
1124
1125 @smallexample
1126 index  % time    self  children called     name
1127 @dots{}
1128                 0.00    0.05       1/1           main [2]
1129 [3]    100.0    0.00    0.05       1         report [3]
1130 @end smallexample
1131
1132 Here are the meanings of the fields in the caller-line for @code{report}
1133 called from @code{main}:
1134
1135 @table @code
1136 @item self
1137 An estimate of the amount of time spent in @code{report} itself when it was
1138 called from @code{main}.
1139
1140 @item children
1141 An estimate of the amount of time spent in subroutines of @code{report}
1142 when @code{report} was called from @code{main}.
1143
1144 The sum of the @code{self} and @code{children} fields is an estimate
1145 of the amount of time spent within calls to @code{report} from @code{main}.
1146
1147 @item called
1148 Two numbers: the number of times @code{report} was called from @code{main},
1149 followed by the total number of non-recursive calls to @code{report} from
1150 all its callers.
1151
1152 @item name and index number
1153 The name of the caller of @code{report} to which this line applies,
1154 followed by the caller's index number.
1155
1156 Not all functions have entries in the call graph; some
1157 options to @code{gprof} request the omission of certain functions.
1158 When a caller has no entry of its own, it still has caller-lines
1159 in the entries of the functions it calls.
1160
1161 If the caller is part of a recursion cycle, the cycle number is
1162 printed between the name and the index number.
1163 @end table
1164
1165 If the identity of the callers of a function cannot be determined, a
1166 dummy caller-line is printed which has @samp{<spontaneous>} as the
1167 ``caller's name'' and all other fields blank.  This can happen for
1168 signal handlers.
1169 @c What if some calls have determinable callers' names but not all?
1170 @c FIXME - still relevant?
1171
1172 @node Subroutines, Cycles, Callers, Call Graph
1173 @subsection Lines for a Function's Subroutines
1174
1175 A function's entry has a line for each of its subroutines---in other
1176 words, a line for each other function that it called.  These lines'
1177 fields correspond to the fields of the primary line, but their meanings
1178 are different because of the difference in context.
1179
1180 For reference, we repeat two lines from the entry for the function
1181 @code{main}, the primary line and a line for a subroutine, together
1182 with the heading line that shows the names of the fields:
1183
1184 @smallexample
1185 index  % time    self  children called     name
1186 @dots{}
1187 [2]    100.0    0.00    0.05       1         main [2]
1188                 0.00    0.05       1/1           report [3]
1189 @end smallexample
1190
1191 Here are the meanings of the fields in the subroutine-line for @code{main}
1192 calling @code{report}:
1193
1194 @table @code
1195 @item self
1196 An estimate of the amount of time spent directly within @code{report}
1197 when @code{report} was called from @code{main}.
1198
1199 @item children
1200 An estimate of the amount of time spent in subroutines of @code{report}
1201 when @code{report} was called from @code{main}.
1202
1203 The sum of the @code{self} and @code{children} fields is an estimate
1204 of the total time spent in calls to @code{report} from @code{main}.
1205
1206 @item called
1207 Two numbers, the number of calls to @code{report} from @code{main}
1208 followed by the total number of non-recursive calls to @code{report}.
1209 This ratio is used to determine how much of @code{report}'s @code{self}
1210 and @code{children} time gets credited to @code{main}.
1211 @xref{Assumptions}.
1212
1213 @item name
1214 The name of the subroutine of @code{main} to which this line applies,
1215 followed by the subroutine's index number.
1216
1217 If the caller is part of a recursion cycle, the cycle number is
1218 printed between the name and the index number.
1219 @end table
1220
1221 @node Cycles,, Subroutines, Call Graph
1222 @subsection How Mutually Recursive Functions Are Described
1223 @cindex cycle
1224 @cindex recursion cycle
1225
1226 The graph may be complicated by the presence of @dfn{cycles of
1227 recursion} in the call graph.  A cycle exists if a function calls
1228 another function that (directly or indirectly) calls (or appears to
1229 call) the original function.  For example: if @code{a} calls @code{b},
1230 and @code{b} calls @code{a}, then @code{a} and @code{b} form a cycle.
1231
1232 Whenever there are call paths both ways between a pair of functions, they
1233 belong to the same cycle.  If @code{a} and @code{b} call each other and
1234 @code{b} and @code{c} call each other, all three make one cycle.  Note that
1235 even if @code{b} only calls @code{a} if it was not called from @code{a},
1236 @code{gprof} cannot determine this, so @code{a} and @code{b} are still
1237 considered a cycle.
1238
1239 The cycles are numbered with consecutive integers.  When a function
1240 belongs to a cycle, each time the function name appears in the call graph
1241 it is followed by @samp{<cycle @var{number}>}.
1242
1243 The reason cycles matter is that they make the time values in the call
1244 graph paradoxical.  The ``time spent in children'' of @code{a} should
1245 include the time spent in its subroutine @code{b} and in @code{b}'s
1246 subroutines---but one of @code{b}'s subroutines is @code{a}!  How much of
1247 @code{a}'s time should be included in the children of @code{a}, when
1248 @code{a} is indirectly recursive?
1249
1250 The way @code{gprof} resolves this paradox is by creating a single entry
1251 for the cycle as a whole.  The primary line of this entry describes the
1252 total time spent directly in the functions of the cycle.  The
1253 ``subroutines'' of the cycle are the individual functions of the cycle, and
1254 all other functions that were called directly by them.  The ``callers'' of
1255 the cycle are the functions, outside the cycle, that called functions in
1256 the cycle.
1257
1258 Here is an example portion of a call graph which shows a cycle containing
1259 functions @code{a} and @code{b}.  The cycle was entered by a call to
1260 @code{a} from @code{main}; both @code{a} and @code{b} called @code{c}.
1261
1262 @smallexample
1263 index  % time    self  children called     name
1264 ----------------------------------------
1265                  1.77        0    1/1        main [2]
1266 [3]     91.71    1.77        0    1+5    <cycle 1 as a whole> [3]
1267                  1.02        0    3          b <cycle 1> [4]
1268                  0.75        0    2          a <cycle 1> [5]
1269 ----------------------------------------
1270                                   3          a <cycle 1> [5]
1271 [4]     52.85    1.02        0    0      b <cycle 1> [4]
1272                                   2          a <cycle 1> [5]
1273                     0        0    3/6        c [6]
1274 ----------------------------------------
1275                  1.77        0    1/1        main [2]
1276                                   2          b <cycle 1> [4]
1277 [5]     38.86    0.75        0    1      a <cycle 1> [5]
1278                                   3          b <cycle 1> [4]
1279                     0        0    3/6        c [6]
1280 ----------------------------------------
1281 @end smallexample
1282
1283 @noindent
1284 (The entire call graph for this program contains in addition an entry for
1285 @code{main}, which calls @code{a}, and an entry for @code{c}, with callers
1286 @code{a} and @code{b}.)
1287
1288 @smallexample
1289 index  % time    self  children called     name
1290                                              <spontaneous>
1291 [1]    100.00       0     1.93    0      start [1]
1292                  0.16     1.77    1/1        main [2]
1293 ----------------------------------------
1294                  0.16     1.77    1/1        start [1]
1295 [2]    100.00    0.16     1.77    1      main [2]
1296                  1.77        0    1/1        a <cycle 1> [5]
1297 ----------------------------------------
1298                  1.77        0    1/1        main [2]
1299 [3]     91.71    1.77        0    1+5    <cycle 1 as a whole> [3]
1300                  1.02        0    3          b <cycle 1> [4]
1301                  0.75        0    2          a <cycle 1> [5]
1302                     0        0    6/6        c [6]
1303 ----------------------------------------
1304                                   3          a <cycle 1> [5]
1305 [4]     52.85    1.02        0    0      b <cycle 1> [4]
1306                                   2          a <cycle 1> [5]
1307                     0        0    3/6        c [6]
1308 ----------------------------------------
1309                  1.77        0    1/1        main [2]
1310                                   2          b <cycle 1> [4]
1311 [5]     38.86    0.75        0    1      a <cycle 1> [5]
1312                                   3          b <cycle 1> [4]
1313                     0        0    3/6        c [6]
1314 ----------------------------------------
1315                     0        0    3/6        b <cycle 1> [4]
1316                     0        0    3/6        a <cycle 1> [5]
1317 [6]      0.00       0        0    6      c [6]
1318 ----------------------------------------
1319 @end smallexample
1320
1321 The @code{self} field of the cycle's primary line is the total time
1322 spent in all the functions of the cycle.  It equals the sum of the
1323 @code{self} fields for the individual functions in the cycle, found
1324 in the entry in the subroutine lines for these functions.
1325
1326 The @code{children} fields of the cycle's primary line and subroutine lines
1327 count only subroutines outside the cycle.  Even though @code{a} calls
1328 @code{b}, the time spent in those calls to @code{b} is not counted in
1329 @code{a}'s @code{children} time.  Thus, we do not encounter the problem of
1330 what to do when the time in those calls to @code{b} includes indirect
1331 recursive calls back to @code{a}.
1332
1333 The @code{children} field of a caller-line in the cycle's entry estimates
1334 the amount of time spent @emph{in the whole cycle}, and its other
1335 subroutines, on the times when that caller called a function in the cycle.
1336
1337 The @code{calls} field in the primary line for the cycle has two numbers:
1338 first, the number of times functions in the cycle were called by functions
1339 outside the cycle; second, the number of times they were called by
1340 functions in the cycle (including times when a function in the cycle calls
1341 itself).  This is a generalization of the usual split into non-recursive and
1342 recursive calls.
1343
1344 The @code{calls} field of a subroutine-line for a cycle member in the
1345 cycle's entry says how many time that function was called from functions in
1346 the cycle.  The total of all these is the second number in the primary line's
1347 @code{calls} field.
1348
1349 In the individual entry for a function in a cycle, the other functions in
1350 the same cycle can appear as subroutines and as callers.  These lines show
1351 how many times each function in the cycle called or was called from each other
1352 function in the cycle.  The @code{self} and @code{children} fields in these
1353 lines are blank because of the difficulty of defining meanings for them
1354 when recursion is going on.
1355
1356 @node Line-by-line,Annotated Source,Call Graph,Output
1357 @section Line-by-line Profiling
1358
1359 @code{gprof}'s @samp{-l} option causes the program to perform
1360 @dfn{line-by-line} profiling.  In this mode, histogram
1361 samples are assigned not to functions, but to individual
1362 lines of source code.  The program usually must be compiled
1363 with a @samp{-g} option, in addition to @samp{-pg}, in order
1364 to generate debugging symbols for tracking source code lines.
1365
1366 The flat profile is the most useful output table
1367 in line-by-line mode.
1368 The call graph isn't as useful as normal, since
1369 the current version of @code{gprof} does not propagate
1370 call graph arcs from source code lines to the enclosing function.
1371 The call graph does, however, show each line of code
1372 that called each function, along with a count.
1373
1374 Here is a section of @code{gprof}'s output, without line-by-line profiling.
1375 Note that @code{ct_init} accounted for four histogram hits, and
1376 13327 calls to @code{init_block}.
1377
1378 @smallexample
1379 Flat profile:
1380
1381 Each sample counts as 0.01 seconds.
1382   %   cumulative   self              self     total           
1383  time   seconds   seconds    calls  us/call  us/call  name    
1384  30.77      0.13     0.04     6335     6.31     6.31  ct_init
1385
1386
1387                      Call graph (explanation follows)
1388
1389
1390 granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds
1391
1392 index % time    self  children    called     name
1393
1394                 0.00    0.00       1/13496       name_too_long
1395                 0.00    0.00      40/13496       deflate
1396                 0.00    0.00     128/13496       deflate_fast
1397                 0.00    0.00   13327/13496       ct_init
1398 [7]      0.0    0.00    0.00   13496         init_block
1399
1400 @end smallexample
1401
1402 Now let's look at some of @code{gprof}'s output from the same program run,
1403 this time with line-by-line profiling enabled.  Note that @code{ct_init}'s
1404 four histogram hits are broken down into four lines of source code - one hit
1405 occurred on each of lines 349, 351, 382 and 385.  In the call graph,
1406 note how
1407 @code{ct_init}'s 13327 calls to @code{init_block} are broken down
1408 into one call from line 396, 3071 calls from line 384, 3730 calls
1409 from line 385, and 6525 calls from 387.
1410
1411 @smallexample
1412 Flat profile:
1413
1414 Each sample counts as 0.01 seconds.
1415   %   cumulative   self                    
1416  time   seconds   seconds    calls  name    
1417   7.69      0.10     0.01           ct_init (trees.c:349)
1418   7.69      0.11     0.01           ct_init (trees.c:351)
1419   7.69      0.12     0.01           ct_init (trees.c:382)
1420   7.69      0.13     0.01           ct_init (trees.c:385)
1421
1422
1423                      Call graph (explanation follows)
1424
1425
1426 granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds
1427
1428   % time    self  children    called     name
1429
1430             0.00    0.00       1/13496       name_too_long (gzip.c:1440)
1431             0.00    0.00       1/13496       deflate (deflate.c:763)
1432             0.00    0.00       1/13496       ct_init (trees.c:396)
1433             0.00    0.00       2/13496       deflate (deflate.c:727)
1434             0.00    0.00       4/13496       deflate (deflate.c:686)
1435             0.00    0.00       5/13496       deflate (deflate.c:675)
1436             0.00    0.00      12/13496       deflate (deflate.c:679)
1437             0.00    0.00      16/13496       deflate (deflate.c:730)
1438             0.00    0.00     128/13496       deflate_fast (deflate.c:654)
1439             0.00    0.00    3071/13496       ct_init (trees.c:384)
1440             0.00    0.00    3730/13496       ct_init (trees.c:385)
1441             0.00    0.00    6525/13496       ct_init (trees.c:387)
1442 [6]  0.0    0.00    0.00   13496         init_block (trees.c:408)
1443
1444 @end smallexample
1445
1446
1447 @node Annotated Source,,Line-by-line,Output
1448 @section The Annotated Source Listing
1449
1450 @code{gprof}'s @samp{-A} option triggers an annotated source listing,
1451 which lists the program's source code, each function labeled with the
1452 number of times it was called.  You may also need to specify the
1453 @samp{-I} option, if @code{gprof} can't find the source code files.
1454
1455 Compiling with @samp{gcc @dots{} -g -pg -a} augments your program
1456 with basic-block counting code, in addition to function counting code.
1457 This enables @code{gprof} to determine how many times each line
1458 of code was executed.
1459 For example, consider the following function, taken from gzip,
1460 with line numbers added:
1461
1462 @smallexample
1463  1 ulg updcrc(s, n)
1464  2     uch *s;
1465  3     unsigned n;
1466  4 @{
1467  5     register ulg c;
1468  6
1469  7     static ulg crc = (ulg)0xffffffffL;
1470  8
1471  9     if (s == NULL) @{
1472 10         c = 0xffffffffL;
1473 11     @} else @{
1474 12         c = crc;
1475 13         if (n) do @{
1476 14             c = crc_32_tab[...];
1477 15         @} while (--n);
1478 16     @}
1479 17     crc = c;
1480 18     return c ^ 0xffffffffL;
1481 19 @}
1482
1483 @end smallexample
1484
1485 @code{updcrc} has at least five basic-blocks.
1486 One is the function itself.  The
1487 @code{if} statement on line 9 generates two more basic-blocks, one
1488 for each branch of the @code{if}.  A fourth basic-block results from
1489 the @code{if} on line 13, and the contents of the @code{do} loop form
1490 the fifth basic-block.  The compiler may also generate additional
1491 basic-blocks to handle various special cases.
1492
1493 A program augmented for basic-block counting can be analyzed with
1494 @samp{gprof -l -A}.  I also suggest use of the @samp{-x} option,
1495 which ensures that each line of code is labeled at least once.
1496 Here is @code{updcrc}'s
1497 annotated source listing for a sample @code{gzip} run:
1498
1499 @smallexample
1500                 ulg updcrc(s, n)
1501                     uch *s;
1502                     unsigned n;
1503             2 ->@{
1504                     register ulg c;
1505                 
1506                     static ulg crc = (ulg)0xffffffffL;
1507                 
1508             2 ->    if (s == NULL) @{
1509             1 ->        c = 0xffffffffL;
1510             1 ->    @} else @{
1511             1 ->        c = crc;
1512             1 ->        if (n) do @{
1513         26312 ->            c = crc_32_tab[...];
1514 26312,1,26311 ->        @} while (--n);
1515                     @}
1516             2 ->    crc = c;
1517             2 ->    return c ^ 0xffffffffL;
1518             2 ->@}
1519 @end smallexample
1520
1521 In this example, the function was called twice, passing once through
1522 each branch of the @code{if} statement.  The body of the @code{do}
1523 loop was executed a total of 26312 times.  Note how the @code{while}
1524 statement is annotated.  It began execution 26312 times, once for
1525 each iteration through the loop.  One of those times (the last time)
1526 it exited, while it branched back to the beginning of the loop 26311 times.
1527
1528 @node Inaccuracy
1529 @chapter Inaccuracy of @code{gprof} Output
1530
1531 @menu
1532 * Sampling Error::      Statistical margins of error
1533 * Assumptions::         Estimating children times
1534 @end menu
1535
1536 @node Sampling Error,Assumptions,,Inaccuracy
1537 @section Statistical Sampling Error
1538
1539 The run-time figures that @code{gprof} gives you are based on a sampling
1540 process, so they are subject to statistical inaccuracy.  If a function runs
1541 only a small amount of time, so that on the average the sampling process
1542 ought to catch that function in the act only once, there is a pretty good
1543 chance it will actually find that function zero times, or twice.
1544
1545 By contrast, the number-of-calls and basic-block figures
1546 are derived by counting, not
1547 sampling.  They are completely accurate and will not vary from run to run
1548 if your program is deterministic.
1549
1550 The @dfn{sampling period} that is printed at the beginning of the flat
1551 profile says how often samples are taken.  The rule of thumb is that a
1552 run-time figure is accurate if it is considerably bigger than the sampling
1553 period.
1554
1555 The actual amount of error can be predicted.
1556 For @var{n} samples, the @emph{expected} error
1557 is the square-root of @var{n}.  For example,
1558 if the sampling period is 0.01 seconds and @code{foo}'s run-time is 1 second,
1559 @var{n} is 100 samples (1 second/0.01 seconds), sqrt(@var{n}) is 10 samples, so
1560 the expected error in @code{foo}'s run-time is 0.1 seconds (10*0.01 seconds),
1561 or ten percent of the observed value.
1562 Again, if the sampling period is 0.01 seconds and @code{bar}'s run-time is
1563 100 seconds, @var{n} is 10000 samples, sqrt(@var{n}) is 100 samples, so
1564 the expected error in @code{bar}'s run-time is 1 second,
1565 or one percent of the observed value.
1566 It is likely to
1567 vary this much @emph{on the average} from one profiling run to the next.
1568 (@emph{Sometimes} it will vary more.)
1569
1570 This does not mean that a small run-time figure is devoid of information.
1571 If the program's @emph{total} run-time is large, a small run-time for one
1572 function does tell you that that function used an insignificant fraction of
1573 the whole program's time.  Usually this means it is not worth optimizing.
1574
1575 One way to get more accuracy is to give your program more (but similar)
1576 input data so it will take longer.  Another way is to combine the data from
1577 several runs, using the @samp{-s} option of @code{gprof}.  Here is how:
1578
1579 @enumerate
1580 @item
1581 Run your program once.
1582
1583 @item
1584 Issue the command @samp{mv gmon.out gmon.sum}.
1585
1586 @item
1587 Run your program again, the same as before.
1588
1589 @item
1590 Merge the new data in @file{gmon.out} into @file{gmon.sum} with this command:
1591
1592 @example
1593 gprof -s @var{executable-file} gmon.out gmon.sum
1594 @end example
1595
1596 @item
1597 Repeat the last two steps as often as you wish.
1598
1599 @item
1600 Analyze the cumulative data using this command:
1601
1602 @example
1603 gprof @var{executable-file} gmon.sum > @var{output-file}
1604 @end example
1605 @end enumerate
1606
1607 @node Assumptions,,Sampling Error,Inaccuracy
1608 @section Estimating @code{children} Times
1609
1610 Some of the figures in the call graph are estimates---for example, the
1611 @code{children} time values and all the the time figures in caller and
1612 subroutine lines.
1613
1614 There is no direct information about these measurements in the profile
1615 data itself.  Instead, @code{gprof} estimates them by making an assumption
1616 about your program that might or might not be true.
1617
1618 The assumption made is that the average time spent in each call to any
1619 function @code{foo} is not correlated with who called @code{foo}.  If
1620 @code{foo} used 5 seconds in all, and 2/5 of the calls to @code{foo} came
1621 from @code{a}, then @code{foo} contributes 2 seconds to @code{a}'s
1622 @code{children} time, by assumption.
1623
1624 This assumption is usually true enough, but for some programs it is far
1625 from true.  Suppose that @code{foo} returns very quickly when its argument
1626 is zero; suppose that @code{a} always passes zero as an argument, while
1627 other callers of @code{foo} pass other arguments.  In this program, all the
1628 time spent in @code{foo} is in the calls from callers other than @code{a}.
1629 But @code{gprof} has no way of knowing this; it will blindly and
1630 incorrectly charge 2 seconds of time in @code{foo} to the children of
1631 @code{a}.
1632
1633 @c FIXME - has this been fixed?
1634 We hope some day to put more complete data into @file{gmon.out}, so that
1635 this assumption is no longer needed, if we can figure out how.  For the
1636 nonce, the estimated figures are usually more useful than misleading.
1637
1638 @node How do I?
1639 @chapter Answers to Common Questions
1640
1641 @table @asis
1642 @item How can I get more exact information about hot spots in my program?
1643
1644 Looking at the per-line call counts only tells part of the story.
1645 Because @code{gprof} can only report call times and counts by function,
1646 the best way to get finer-grained information on where the program
1647 is spending its time is to re-factor large functions into sequences
1648 of calls to smaller ones.
1649
1650 @item How do I find which lines in my program were executed the most times?
1651
1652 Compile your program with basic-block counting enabled, run it, then
1653 use the following pipeline:
1654
1655 @example
1656 gprof -l -C @var{objfile} | sort -k 3 -n -r
1657 @end example
1658
1659 This listing will show you the lines in your code executed most often,
1660 but not necessarily those that consumed the most time.
1661
1662 @item How do I find which lines in my program called a particular function?
1663
1664 Use @samp{gprof -l} and lookup the function in the call graph.
1665 The callers will be broken down by function and line number.
1666
1667 @item How do I analyze a program that runs for less than a second?
1668
1669 Try using a shell script like this one:
1670
1671 @example
1672 for i in `seq 1 100`; do
1673   fastprog
1674   mv gmon.out gmon.out.$i
1675 done
1676
1677 gprof -s fastprog gmon.out.*
1678
1679 gprof fastprog gmon.sum
1680 @end example
1681
1682 If your program is completely deterministic, all the call counts
1683 will be simple multiples of 100 (i.e. a function called once in
1684 each run will appear with a call count of 100).
1685
1686 @end table
1687
1688 @node Incompatibilities
1689 @chapter Incompatibilities with Unix @code{gprof}
1690
1691 @sc{gnu} @code{gprof} and Berkeley Unix @code{gprof} use the same data
1692 file @file{gmon.out}, and provide essentially the same information.  But
1693 there are a few differences.
1694
1695 @itemize @bullet
1696 @item
1697 @sc{gnu} @code{gprof} uses a new, generalized file format with support
1698 for basic-block execution counts and non-realtime histograms.  A magic
1699 cookie and version number allows @code{gprof} to easily identify
1700 new style files.  Old BSD-style files can still be read.
1701 @xref{File Format}.
1702
1703 @item
1704 For a recursive function, Unix @code{gprof} lists the function as a
1705 parent and as a child, with a @code{calls} field that lists the number
1706 of recursive calls.  @sc{gnu} @code{gprof} omits these lines and puts
1707 the number of recursive calls in the primary line.
1708
1709 @item
1710 When a function is suppressed from the call graph with @samp{-e}, @sc{gnu}
1711 @code{gprof} still lists it as a subroutine of functions that call it.
1712
1713 @item
1714 @sc{gnu} @code{gprof} accepts the @samp{-k} with its argument
1715 in the form @samp{from/to}, instead of @samp{from to}.
1716
1717 @item
1718 In the annotated source listing,
1719 if there are multiple basic blocks on the same line,
1720 @sc{gnu} @code{gprof} prints all of their counts, separated by commas.
1721
1722 @ignore - it does this now
1723 @item
1724 The function names printed in @sc{gnu} @code{gprof} output do not include
1725 the leading underscores that are added internally to the front of all
1726 C identifiers on many operating systems.
1727 @end ignore
1728
1729 @item
1730 The blurbs, field widths, and output formats are different.  @sc{gnu}
1731 @code{gprof} prints blurbs after the tables, so that you can see the
1732 tables without skipping the blurbs.
1733 @end itemize
1734
1735 @node Details
1736 @chapter Details of Profiling
1737
1738 @menu
1739 * Implementation::      How a program collects profiling information
1740 * File Format::         Format of @samp{gmon.out} files
1741 * Internals::           @code{gprof}'s internal operation
1742 * Debugging::           Using @code{gprof}'s @samp{-d} option
1743 @end menu
1744
1745 @node Implementation,File Format,,Details
1746 @section Implementation of Profiling
1747
1748 Profiling works by changing how every function in your program is compiled
1749 so that when it is called, it will stash away some information about where
1750 it was called from.  From this, the profiler can figure out what function
1751 called it, and can count how many times it was called.  This change is made
1752 by the compiler when your program is compiled with the @samp{-pg} option,
1753 which causes every function to call @code{mcount}
1754 (or @code{_mcount}, or @code{__mcount}, depending on the OS and compiler)
1755 as one of its first operations.
1756
1757 The @code{mcount} routine, included in the profiling library,
1758 is responsible for recording in an in-memory call graph table
1759 both its parent routine (the child) and its parent's parent.  This is
1760 typically done by examining the stack frame to find both
1761 the address of the child, and the return address in the original parent.
1762 Since this is a very machine-dependent operation, @code{mcount}
1763 itself is typically a short assembly-language stub routine
1764 that extracts the required
1765 information, and then calls @code{__mcount_internal}
1766 (a normal C function) with two arguments - @code{frompc} and @code{selfpc}.
1767 @code{__mcount_internal} is responsible for maintaining
1768 the in-memory call graph, which records @code{frompc}, @code{selfpc},
1769 and the number of times each of these call arcs was traversed.
1770
1771 GCC Version 2 provides a magical function (@code{__builtin_return_address}),
1772 which allows a generic @code{mcount} function to extract the
1773 required information from the stack frame.  However, on some
1774 architectures, most notably the SPARC, using this builtin can be
1775 very computationally expensive, and an assembly language version
1776 of @code{mcount} is used for performance reasons.
1777
1778 Number-of-calls information for library routines is collected by using a
1779 special version of the C library.  The programs in it are the same as in
1780 the usual C library, but they were compiled with @samp{-pg}.  If you
1781 link your program with @samp{gcc @dots{} -pg}, it automatically uses the
1782 profiling version of the library.
1783
1784 Profiling also involves watching your program as it runs, and keeping a
1785 histogram of where the program counter happens to be every now and then.
1786 Typically the program counter is looked at around 100 times per second of
1787 run time, but the exact frequency may vary from system to system.
1788
1789 This is done is one of two ways.  Most UNIX-like operating systems
1790 provide a @code{profil()} system call, which registers a memory
1791 array with the kernel, along with a scale
1792 factor that determines how the program's address space maps
1793 into the array.
1794 Typical scaling values cause every 2 to 8 bytes of address space
1795 to map into a single array slot.
1796 On every tick of the system clock
1797 (assuming the profiled program is running), the value of the
1798 program counter is examined and the corresponding slot in
1799 the memory array is incremented.  Since this is done in the kernel,
1800 which had to interrupt the process anyway to handle the clock
1801 interrupt, very little additional system overhead is required.
1802
1803 However, some operating systems, most notably Linux 2.0 (and earlier),
1804 do not provide a @code{profil()} system call.  On such a system,
1805 arrangements are made for the kernel to periodically deliver
1806 a signal to the process (typically via @code{setitimer()}),
1807 which then performs the same operation of examining the
1808 program counter and incrementing a slot in the memory array.
1809 Since this method requires a signal to be delivered to
1810 user space every time a sample is taken, it uses considerably
1811 more overhead than kernel-based profiling.  Also, due to the
1812 added delay required to deliver the signal, this method is
1813 less accurate as well.
1814
1815 A special startup routine allocates memory for the histogram and 
1816 either calls @code{profil()} or sets up
1817 a clock signal handler.
1818 This routine (@code{monstartup}) can be invoked in several ways.
1819 On Linux systems, a special profiling startup file @code{gcrt0.o},
1820 which invokes @code{monstartup} before @code{main},
1821 is used instead of the default @code{crt0.o}.
1822 Use of this special startup file is one of the effects
1823 of using @samp{gcc @dots{} -pg} to link.
1824 On SPARC systems, no special startup files are used.
1825 Rather, the @code{mcount} routine, when it is invoked for
1826 the first time (typically when @code{main} is called),
1827 calls @code{monstartup}.
1828
1829 If the compiler's @samp{-a} option was used, basic-block counting
1830 is also enabled.  Each object file is then compiled with a static array
1831 of counts, initially zero.
1832 In the executable code, every time a new basic-block begins
1833 (i.e. when an @code{if} statement appears), an extra instruction
1834 is inserted to increment the corresponding count in the array.
1835 At compile time, a paired array was constructed that recorded
1836 the starting address of each basic-block.  Taken together,
1837 the two arrays record the starting address of every basic-block,
1838 along with the number of times it was executed.
1839
1840 The profiling library also includes a function (@code{mcleanup}) which is
1841 typically registered using @code{atexit()} to be called as the
1842 program exits, and is responsible for writing the file @file{gmon.out}.
1843 Profiling is turned off, various headers are output, and the histogram
1844 is written, followed by the call-graph arcs and the basic-block counts.
1845
1846 The output from @code{gprof} gives no indication of parts of your program that
1847 are limited by I/O or swapping bandwidth.  This is because samples of the
1848 program counter are taken at fixed intervals of the program's run time.
1849 Therefore, the
1850 time measurements in @code{gprof} output say nothing about time that your
1851 program was not running.  For example, a part of the program that creates
1852 so much data that it cannot all fit in physical memory at once may run very
1853 slowly due to thrashing, but @code{gprof} will say it uses little time.  On
1854 the other hand, sampling by run time has the advantage that the amount of
1855 load due to other users won't directly affect the output you get.
1856
1857 @node File Format,Internals,Implementation,Details
1858 @section Profiling Data File Format
1859
1860 The old BSD-derived file format used for profile data does not contain a
1861 magic cookie that allows to check whether a data file really is a
1862 @code{gprof} file.  Furthermore, it does not provide a version number, thus
1863 rendering changes to the file format almost impossible.  @sc{gnu} @code{gprof}
1864 uses a new file format that provides these features.  For backward
1865 compatibility, @sc{gnu} @code{gprof} continues to support the old BSD-derived
1866 format, but not all features are supported with it.  For example,
1867 basic-block execution counts cannot be accommodated by the old file
1868 format.
1869
1870 The new file format is defined in header file @file{gmon_out.h}.  It
1871 consists of a header containing the magic cookie and a version number,
1872 as well as some spare bytes available for future extensions.  All data
1873 in a profile data file is in the native format of the target for which
1874 the profile was collected.  @sc{gnu} @code{gprof} adapts automatically
1875 to the byte-order in use.
1876
1877 In the new file format, the header is followed by a sequence of
1878 records.  Currently, there are three different record types: histogram
1879 records, call-graph arc records, and basic-block execution count
1880 records.  Each file can contain any number of each record type.  When
1881 reading a file, @sc{gnu} @code{gprof} will ensure records of the same type are
1882 compatible with each other and compute the union of all records.  For
1883 example, for basic-block execution counts, the union is simply the sum
1884 of all execution counts for each basic-block.
1885
1886 @subsection Histogram Records
1887
1888 Histogram records consist of a header that is followed by an array of
1889 bins.  The header contains the text-segment range that the histogram
1890 spans, the size of the histogram in bytes (unlike in the old BSD
1891 format, this does not include the size of the header), the rate of the
1892 profiling clock, and the physical dimension that the bin counts
1893 represent after being scaled by the profiling clock rate.  The
1894 physical dimension is specified in two parts: a long name of up to 15
1895 characters and a single character abbreviation.  For example, a
1896 histogram representing real-time would specify the long name as
1897 "seconds" and the abbreviation as "s".  This feature is useful for
1898 architectures that support performance monitor hardware (which,
1899 fortunately, is becoming increasingly common).  For example, under DEC
1900 OSF/1, the "uprofile" command can be used to produce a histogram of,
1901 say, instruction cache misses.  In this case, the dimension in the
1902 histogram header could be set to "i-cache misses" and the abbreviation
1903 could be set to "1" (because it is simply a count, not a physical
1904 dimension).  Also, the profiling rate would have to be set to 1 in
1905 this case.
1906
1907 Histogram bins are 16-bit numbers and each bin represent an equal
1908 amount of text-space.  For example, if the text-segment is one
1909 thousand bytes long and if there are ten bins in the histogram, each
1910 bin represents one hundred bytes.
1911
1912
1913 @subsection Call-Graph Records
1914
1915 Call-graph records have a format that is identical to the one used in
1916 the BSD-derived file format.  It consists of an arc in the call graph
1917 and a count indicating the number of times the arc was traversed
1918 during program execution.  Arcs are specified by a pair of addresses:
1919 the first must be within caller's function and the second must be
1920 within the callee's function.  When performing profiling at the
1921 function level, these addresses can point anywhere within the
1922 respective function.  However, when profiling at the line-level, it is
1923 better if the addresses are as close to the call-site/entry-point as
1924 possible.  This will ensure that the line-level call-graph is able to
1925 identify exactly which line of source code performed calls to a
1926 function.
1927
1928 @subsection Basic-Block Execution Count Records
1929
1930 Basic-block execution count records consist of a header followed by a
1931 sequence of address/count pairs.  The header simply specifies the
1932 length of the sequence.  In an address/count pair, the address
1933 identifies a basic-block and the count specifies the number of times
1934 that basic-block was executed.  Any address within the basic-address can
1935 be used.
1936
1937 @node Internals,Debugging,File Format,Details
1938 @section @code{gprof}'s Internal Operation
1939
1940 Like most programs, @code{gprof} begins by processing its options.
1941 During this stage, it may building its symspec list
1942 (@code{sym_ids.c:sym_id_add}), if
1943 options are specified which use symspecs.
1944 @code{gprof} maintains a single linked list of symspecs,
1945 which will eventually get turned into 12 symbol tables,
1946 organized into six include/exclude pairs - one
1947 pair each for the flat profile (INCL_FLAT/EXCL_FLAT),
1948 the call graph arcs (INCL_ARCS/EXCL_ARCS),
1949 printing in the call graph (INCL_GRAPH/EXCL_GRAPH),
1950 timing propagation in the call graph (INCL_TIME/EXCL_TIME),
1951 the annotated source listing (INCL_ANNO/EXCL_ANNO),
1952 and the execution count listing (INCL_EXEC/EXCL_EXEC).
1953
1954 After option processing, @code{gprof} finishes
1955 building the symspec list by adding all the symspecs in
1956 @code{default_excluded_list} to the exclude lists
1957 EXCL_TIME and EXCL_GRAPH, and if line-by-line profiling is specified,
1958 EXCL_FLAT as well.
1959 These default excludes are not added to EXCL_ANNO, EXCL_ARCS, and EXCL_EXEC.
1960
1961 Next, the BFD library is called to open the object file,
1962 verify that it is an object file,
1963 and read its symbol table (@code{core.c:core_init}),
1964 using @code{bfd_canonicalize_symtab} after mallocing
1965 an appropriately sized array of symbols.  At this point,
1966 function mappings are read (if the @samp{--file-ordering} option
1967 has been specified), and the core text space is read into
1968 memory (if the @samp{-c} option was given).
1969
1970 @code{gprof}'s own symbol table, an array of Sym structures,
1971 is now built.
1972 This is done in one of two ways, by one of two routines, depending
1973 on whether line-by-line profiling (@samp{-l} option) has been
1974 enabled.
1975 For normal profiling, the BFD canonical symbol table is scanned.
1976 For line-by-line profiling, every
1977 text space address is examined, and a new symbol table entry
1978 gets created every time the line number changes.
1979 In either case, two passes are made through the symbol
1980 table - one to count the size of the symbol table required,
1981 and the other to actually read the symbols.  In between the
1982 two passes, a single array of type @code{Sym} is created of
1983 the appropriate length.
1984 Finally, @code{symtab.c:symtab_finalize}
1985 is called to sort the symbol table and remove duplicate entries
1986 (entries with the same memory address).
1987
1988 The symbol table must be a contiguous array for two reasons.
1989 First, the @code{qsort} library function (which sorts an array)
1990 will be used to sort the symbol table.
1991 Also, the symbol lookup routine (@code{symtab.c:sym_lookup}),
1992 which finds symbols
1993 based on memory address, uses a binary search algorithm
1994 which requires the symbol table to be a sorted array.
1995 Function symbols are indicated with an @code{is_func} flag.
1996 Line number symbols have no special flags set.
1997 Additionally, a symbol can have an @code{is_static} flag
1998 to indicate that it is a local symbol.
1999
2000 With the symbol table read, the symspecs can now be translated
2001 into Syms (@code{sym_ids.c:sym_id_parse}).  Remember that a single
2002 symspec can match multiple symbols.
2003 An array of symbol tables
2004 (@code{syms}) is created, each entry of which is a symbol table
2005 of Syms to be included or excluded from a particular listing.
2006 The master symbol table and the symspecs are examined by nested
2007 loops, and every symbol that matches a symspec is inserted
2008 into the appropriate syms table.  This is done twice, once to
2009 count the size of each required symbol table, and again to build
2010 the tables, which have been malloced between passes.
2011 From now on, to determine whether a symbol is on an include
2012 or exclude symspec list, @code{gprof} simply uses its
2013 standard symbol lookup routine on the appropriate table
2014 in the @code{syms} array.
2015
2016 Now the profile data file(s) themselves are read
2017 (@code{gmon_io.c:gmon_out_read}),
2018 first by checking for a new-style @samp{gmon.out} header,
2019 then assuming this is an old-style BSD @samp{gmon.out}
2020 if the magic number test failed.
2021
2022 New-style histogram records are read by @code{hist.c:hist_read_rec}.
2023 For the first histogram record, allocate a memory array to hold
2024 all the bins, and read them in.
2025 When multiple profile data files (or files with multiple histogram
2026 records) are read, the starting address, ending address, number
2027 of bins and sampling rate must match between the various histograms,
2028 or a fatal error will result.
2029 If everything matches, just sum the additional histograms into
2030 the existing in-memory array.
2031
2032 As each call graph record is read (@code{call_graph.c:cg_read_rec}),
2033 the parent and child addresses
2034 are matched to symbol table entries, and a call graph arc is
2035 created by @code{cg_arcs.c:arc_add}, unless the arc fails a symspec
2036 check against INCL_ARCS/EXCL_ARCS.  As each arc is added,
2037 a linked list is maintained of the parent's child arcs, and of the child's
2038 parent arcs.
2039 Both the child's call count and the arc's call count are
2040 incremented by the record's call count.
2041
2042 Basic-block records are read (@code{basic_blocks.c:bb_read_rec}),
2043 but only if line-by-line profiling has been selected.
2044 Each basic-block address is matched to a corresponding line
2045 symbol in the symbol table, and an entry made in the symbol's
2046 bb_addr and bb_calls arrays.  Again, if multiple basic-block
2047 records are present for the same address, the call counts
2048 are cumulative.
2049
2050 A gmon.sum file is dumped, if requested (@code{gmon_io.c:gmon_out_write}).
2051
2052 If histograms were present in the data files, assign them to symbols
2053 (@code{hist.c:hist_assign_samples}) by iterating over all the sample
2054 bins and assigning them to symbols.  Since the symbol table
2055 is sorted in order of ascending memory addresses, we can
2056 simple follow along in the symbol table as we make our pass
2057 over the sample bins.
2058 This step includes a symspec check against INCL_FLAT/EXCL_FLAT.
2059 Depending on the histogram
2060 scale factor, a sample bin may span multiple symbols,
2061 in which case a fraction of the sample count is allocated
2062 to each symbol, proportional to the degree of overlap.
2063 This effect is rare for normal profiling, but overlaps
2064 are more common during line-by-line profiling, and can
2065 cause each of two adjacent lines to be credited with half
2066 a hit, for example.
2067
2068 If call graph data is present, @code{cg_arcs.c:cg_assemble} is called.
2069 First, if @samp{-c} was specified, a machine-dependent
2070 routine (@code{find_call}) scans through each symbol's machine code,
2071 looking for subroutine call instructions, and adding them
2072 to the call graph with a zero call count.
2073 A topological sort is performed by depth-first numbering
2074 all the symbols (@code{cg_dfn.c:cg_dfn}), so that
2075 children are always numbered less than their parents,
2076 then making a array of pointers into the symbol table and sorting it into
2077 numerical order, which is reverse topological
2078 order (children appear before parents).
2079 Cycles are also detected at this point, all members
2080 of which are assigned the same topological number.
2081 Two passes are now made through this sorted array of symbol pointers.
2082 The first pass, from end to beginning (parents to children),
2083 computes the fraction of child time to propagate to each parent
2084 and a print flag.
2085 The print flag reflects symspec handling of INCL_GRAPH/EXCL_GRAPH,
2086 with a parent's include or exclude (print or no print) property
2087 being propagated to its children, unless they themselves explicitly appear
2088 in INCL_GRAPH or EXCL_GRAPH.
2089 A second pass, from beginning to end (children to parents) actually
2090 propagates the timings along the call graph, subject
2091 to a check against INCL_TIME/EXCL_TIME.
2092 With the print flag, fractions, and timings now stored in the symbol
2093 structures, the topological sort array is now discarded, and a
2094 new array of pointers is assembled, this time sorted by propagated time.
2095
2096 Finally, print the various outputs the user requested, which is now fairly
2097 straightforward.  The call graph (@code{cg_print.c:cg_print}) and
2098 flat profile (@code{hist.c:hist_print}) are regurgitations of values
2099 already computed.  The annotated source listing
2100 (@code{basic_blocks.c:print_annotated_source}) uses basic-block
2101 information, if present, to label each line of code with call counts,
2102 otherwise only the function call counts are presented.
2103
2104 The function ordering code is marginally well documented
2105 in the source code itself (@code{cg_print.c}).  Basically,
2106 the functions with the most use and the most parents are
2107 placed first, followed by other functions with the most use,
2108 followed by lower use functions, followed by unused functions
2109 at the end.
2110
2111 @node Debugging,,Internals,Details
2112 @subsection Debugging @code{gprof}
2113
2114 If @code{gprof} was compiled with debugging enabled,
2115 the @samp{-d} option triggers debugging output
2116 (to stdout) which can be helpful in understanding its operation.
2117 The debugging number specified is interpreted as a sum of the following
2118 options:
2119
2120 @table @asis
2121 @item 2 - Topological sort
2122 Monitor depth-first numbering of symbols during call graph analysis
2123 @item 4 - Cycles
2124 Shows symbols as they are identified as cycle heads
2125 @item 16 - Tallying
2126 As the call graph arcs are read, show each arc and how
2127 the total calls to each function are tallied
2128 @item 32 - Call graph arc sorting
2129 Details sorting individual parents/children within each call graph entry
2130 @item 64 - Reading histogram and call graph records
2131 Shows address ranges of histograms as they are read, and each
2132 call graph arc
2133 @item 128 - Symbol table
2134 Reading, classifying, and sorting the symbol table from the object file.
2135 For line-by-line profiling (@samp{-l} option), also shows line numbers
2136 being assigned to memory addresses.
2137 @item 256 - Static call graph
2138 Trace operation of @samp{-c} option
2139 @item 512 - Symbol table and arc table lookups
2140 Detail operation of lookup routines
2141 @item 1024 - Call graph propagation
2142 Shows how function times are propagated along the call graph
2143 @item 2048 - Basic-blocks
2144 Shows basic-block records as they are read from profile data
2145 (only meaningful with @samp{-l} option)
2146 @item 4096 - Symspecs
2147 Shows symspec-to-symbol pattern matching operation
2148 @item 8192 - Annotate source
2149 Tracks operation of @samp{-A} option
2150 @end table
2151
2152 @node GNU Free Documentation License
2153 @chapter GNU Free Documentation License
2154
2155                 GNU Free Documentation License
2156                 
2157                    Version 1.1, March 2000
2158
2159  Copyright (C) 2000  Free Software Foundation, Inc.
2160   59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2161      
2162  Everyone is permitted to copy and distribute verbatim copies
2163  of this license document, but changing it is not allowed.
2164
2165
2166 0. PREAMBLE
2167
2168 The purpose of this License is to make a manual, textbook, or other
2169 written document "free" in the sense of freedom: to assure everyone
2170 the effective freedom to copy and redistribute it, with or without
2171 modifying it, either commercially or noncommercially.  Secondarily,
2172 this License preserves for the author and publisher a way to get
2173 credit for their work, while not being considered responsible for
2174 modifications made by others.
2175
2176 This License is a kind of "copyleft", which means that derivative
2177 works of the document must themselves be free in the same sense.  It
2178 complements the GNU General Public License, which is a copyleft
2179 license designed for free software.
2180
2181 We have designed this License in order to use it for manuals for free
2182 software, because free software needs free documentation: a free
2183 program should come with manuals providing the same freedoms that the
2184 software does.  But this License is not limited to software manuals;
2185 it can be used for any textual work, regardless of subject matter or
2186 whether it is published as a printed book.  We recommend this License
2187 principally for works whose purpose is instruction or reference.
2188
2189
2190 1. APPLICABILITY AND DEFINITIONS
2191
2192 This License applies to any manual or other work that contains a
2193 notice placed by the copyright holder saying it can be distributed
2194 under the terms of this License.  The "Document", below, refers to any
2195 such manual or work.  Any member of the public is a licensee, and is
2196 addressed as "you".
2197
2198 A "Modified Version" of the Document means any work containing the
2199 Document or a portion of it, either copied verbatim, or with
2200 modifications and/or translated into another language.
2201
2202 A "Secondary Section" is a named appendix or a front-matter section of
2203 the Document that deals exclusively with the relationship of the
2204 publishers or authors of the Document to the Document's overall subject
2205 (or to related matters) and contains nothing that could fall directly
2206 within that overall subject.  (For example, if the Document is in part a
2207 textbook of mathematics, a Secondary Section may not explain any
2208 mathematics.)  The relationship could be a matter of historical
2209 connection with the subject or with related matters, or of legal,
2210 commercial, philosophical, ethical or political position regarding
2211 them.
2212
2213 The "Invariant Sections" are certain Secondary Sections whose titles
2214 are designated, as being those of Invariant Sections, in the notice
2215 that says that the Document is released under this License.
2216
2217 The "Cover Texts" are certain short passages of text that are listed,
2218 as Front-Cover Texts or Back-Cover Texts, in the notice that says that
2219 the Document is released under this License.
2220
2221 A "Transparent" copy of the Document means a machine-readable copy,
2222 represented in a format whose specification is available to the
2223 general public, whose contents can be viewed and edited directly and
2224 straightforwardly with generic text editors or (for images composed of
2225 pixels) generic paint programs or (for drawings) some widely available
2226 drawing editor, and that is suitable for input to text formatters or
2227 for automatic translation to a variety of formats suitable for input
2228 to text formatters.  A copy made in an otherwise Transparent file
2229 format whose markup has been designed to thwart or discourage
2230 subsequent modification by readers is not Transparent.  A copy that is
2231 not "Transparent" is called "Opaque".
2232
2233 Examples of suitable formats for Transparent copies include plain
2234 ASCII without markup, Texinfo input format, LaTeX input format, SGML
2235 or XML using a publicly available DTD, and standard-conforming simple
2236 HTML designed for human modification.  Opaque formats include
2237 PostScript, PDF, proprietary formats that can be read and edited only
2238 by proprietary word processors, SGML or XML for which the DTD and/or
2239 processing tools are not generally available, and the
2240 machine-generated HTML produced by some word processors for output
2241 purposes only.
2242
2243 The "Title Page" means, for a printed book, the title page itself,
2244 plus such following pages as are needed to hold, legibly, the material
2245 this License requires to appear in the title page.  For works in
2246 formats which do not have any title page as such, "Title Page" means
2247 the text near the most prominent appearance of the work's title,
2248 preceding the beginning of the body of the text.
2249
2250
2251 2. VERBATIM COPYING
2252
2253 You may copy and distribute the Document in any medium, either
2254 commercially or noncommercially, provided that this License, the
2255 copyright notices, and the license notice saying this License applies
2256 to the Document are reproduced in all copies, and that you add no other
2257 conditions whatsoever to those of this License.  You may not use
2258 technical measures to obstruct or control the reading or further
2259 copying of the copies you make or distribute.  However, you may accept
2260 compensation in exchange for copies.  If you distribute a large enough
2261 number of copies you must also follow the conditions in section 3.
2262
2263 You may also lend copies, under the same conditions stated above, and
2264 you may publicly display copies.
2265
2266
2267 3. COPYING IN QUANTITY
2268
2269 If you publish printed copies of the Document numbering more than 100,
2270 and the Document's license notice requires Cover Texts, you must enclose
2271 the copies in covers that carry, clearly and legibly, all these Cover
2272 Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
2273 the back cover.  Both covers must also clearly and legibly identify
2274 you as the publisher of these copies.  The front cover must present
2275 the full title with all words of the title equally prominent and
2276 visible.  You may add other material on the covers in addition.
2277 Copying with changes limited to the covers, as long as they preserve
2278 the title of the Document and satisfy these conditions, can be treated
2279 as verbatim copying in other respects.
2280
2281 If the required texts for either cover are too voluminous to fit
2282 legibly, you should put the first ones listed (as many as fit
2283 reasonably) on the actual cover, and continue the rest onto adjacent
2284 pages.
2285
2286 If you publish or distribute Opaque copies of the Document numbering
2287 more than 100, you must either include a machine-readable Transparent
2288 copy along with each Opaque copy, or state in or with each Opaque copy
2289 a publicly-accessible computer-network location containing a complete
2290 Transparent copy of the Document, free of added material, which the
2291 general network-using public has access to download anonymously at no
2292 charge using public-standard network protocols.  If you use the latter
2293 option, you must take reasonably prudent steps, when you begin
2294 distribution of Opaque copies in quantity, to ensure that this
2295 Transparent copy will remain thus accessible at the stated location
2296 until at least one year after the last time you distribute an Opaque
2297 copy (directly or through your agents or retailers) of that edition to
2298 the public.
2299
2300 It is requested, but not required, that you contact the authors of the
2301 Document well before redistributing any large number of copies, to give
2302 them a chance to provide you with an updated version of the Document.
2303
2304
2305 4. MODIFICATIONS
2306
2307 You may copy and distribute a Modified Version of the Document under
2308 the conditions of sections 2 and 3 above, provided that you release
2309 the Modified Version under precisely this License, with the Modified
2310 Version filling the role of the Document, thus licensing distribution
2311 and modification of the Modified Version to whoever possesses a copy
2312 of it.  In addition, you must do these things in the Modified Version:
2313
2314 A. Use in the Title Page (and on the covers, if any) a title distinct
2315    from that of the Document, and from those of previous versions
2316    (which should, if there were any, be listed in the History section
2317    of the Document).  You may use the same title as a previous version
2318    if the original publisher of that version gives permission.
2319 B. List on the Title Page, as authors, one or more persons or entities
2320    responsible for authorship of the modifications in the Modified
2321    Version, together with at least five of the principal authors of the
2322    Document (all of its principal authors, if it has less than five).
2323 C. State on the Title page the name of the publisher of the
2324    Modified Version, as the publisher.
2325 D. Preserve all the copyright notices of the Document.
2326 E. Add an appropriate copyright notice for your modifications
2327    adjacent to the other copyright notices.
2328 F. Include, immediately after the copyright notices, a license notice
2329    giving the public permission to use the Modified Version under the
2330    terms of this License, in the form shown in the Addendum below.
2331 G. Preserve in that license notice the full lists of Invariant Sections
2332    and required Cover Texts given in the Document's license notice.
2333 H. Include an unaltered copy of this License.
2334 I. Preserve the section entitled "History", and its title, and add to
2335    it an item stating at least the title, year, new authors, and
2336    publisher of the Modified Version as given on the Title Page.  If
2337    there is no section entitled "History" in the Document, create one
2338    stating the title, year, authors, and publisher of the Document as
2339    given on its Title Page, then add an item describing the Modified
2340    Version as stated in the previous sentence.
2341 J. Preserve the network location, if any, given in the Document for
2342    public access to a Transparent copy of the Document, and likewise
2343    the network locations given in the Document for previous versions
2344    it was based on.  These may be placed in the "History" section.
2345    You may omit a network location for a work that was published at
2346    least four years before the Document itself, or if the original
2347    publisher of the version it refers to gives permission.
2348 K. In any section entitled "Acknowledgements" or "Dedications",
2349    preserve the section's title, and preserve in the section all the
2350    substance and tone of each of the contributor acknowledgements
2351    and/or dedications given therein.
2352 L. Preserve all the Invariant Sections of the Document,
2353    unaltered in their text and in their titles.  Section numbers
2354    or the equivalent are not considered part of the section titles.
2355 M. Delete any section entitled "Endorsements".  Such a section
2356    may not be included in the Modified Version.
2357 N. Do not retitle any existing section as "Endorsements"
2358    or to conflict in title with any Invariant Section.
2359
2360 If the Modified Version includes new front-matter sections or
2361 appendices that qualify as Secondary Sections and contain no material
2362 copied from the Document, you may at your option designate some or all
2363 of these sections as invariant.  To do this, add their titles to the
2364 list of Invariant Sections in the Modified Version's license notice.
2365 These titles must be distinct from any other section titles.
2366
2367 You may add a section entitled "Endorsements", provided it contains
2368 nothing but endorsements of your Modified Version by various
2369 parties--for example, statements of peer review or that the text has
2370 been approved by an organization as the authoritative definition of a
2371 standard.
2372
2373 You may add a passage of up to five words as a Front-Cover Text, and a
2374 passage of up to 25 words as a Back-Cover Text, to the end of the list
2375 of Cover Texts in the Modified Version.  Only one passage of
2376 Front-Cover Text and one of Back-Cover Text may be added by (or
2377 through arrangements made by) any one entity.  If the Document already
2378 includes a cover text for the same cover, previously added by you or
2379 by arrangement made by the same entity you are acting on behalf of,
2380 you may not add another; but you may replace the old one, on explicit
2381 permission from the previous publisher that added the old one.
2382
2383 The author(s) and publisher(s) of the Document do not by this License
2384 give permission to use their names for publicity for or to assert or
2385 imply endorsement of any Modified Version.
2386
2387
2388 5. COMBINING DOCUMENTS
2389
2390 You may combine the Document with other documents released under this
2391 License, under the terms defined in section 4 above for modified
2392 versions, provided that you include in the combination all of the
2393 Invariant Sections of all of the original documents, unmodified, and
2394 list them all as Invariant Sections of your combined work in its
2395 license notice.
2396
2397 The combined work need only contain one copy of this License, and
2398 multiple identical Invariant Sections may be replaced with a single
2399 copy.  If there are multiple Invariant Sections with the same name but
2400 different contents, make the title of each such section unique by
2401 adding at the end of it, in parentheses, the name of the original
2402 author or publisher of that section if known, or else a unique number.
2403 Make the same adjustment to the section titles in the list of
2404 Invariant Sections in the license notice of the combined work.
2405
2406 In the combination, you must combine any sections entitled "History"
2407 in the various original documents, forming one section entitled
2408 "History"; likewise combine any sections entitled "Acknowledgements",
2409 and any sections entitled "Dedications".  You must delete all sections
2410 entitled "Endorsements."
2411
2412
2413 6. COLLECTIONS OF DOCUMENTS
2414
2415 You may make a collection consisting of the Document and other documents
2416 released under this License, and replace the individual copies of this
2417 License in the various documents with a single copy that is included in
2418 the collection, provided that you follow the rules of this License for
2419 verbatim copying of each of the documents in all other respects.
2420
2421 You may extract a single document from such a collection, and distribute
2422 it individually under this License, provided you insert a copy of this
2423 License into the extracted document, and follow this License in all
2424 other respects regarding verbatim copying of that document.
2425
2426
2427 7. AGGREGATION WITH INDEPENDENT WORKS
2428
2429 A compilation of the Document or its derivatives with other separate
2430 and independent documents or works, in or on a volume of a storage or
2431 distribution medium, does not as a whole count as a Modified Version
2432 of the Document, provided no compilation copyright is claimed for the
2433 compilation.  Such a compilation is called an "aggregate", and this
2434 License does not apply to the other self-contained works thus compiled
2435 with the Document, on account of their being thus compiled, if they
2436 are not themselves derivative works of the Document.
2437
2438 If the Cover Text requirement of section 3 is applicable to these
2439 copies of the Document, then if the Document is less than one quarter
2440 of the entire aggregate, the Document's Cover Texts may be placed on
2441 covers that surround only the Document within the aggregate.
2442 Otherwise they must appear on covers around the whole aggregate.
2443
2444
2445 8. TRANSLATION
2446
2447 Translation is considered a kind of modification, so you may
2448 distribute translations of the Document under the terms of section 4.
2449 Replacing Invariant Sections with translations requires special
2450 permission from their copyright holders, but you may include
2451 translations of some or all Invariant Sections in addition to the
2452 original versions of these Invariant Sections.  You may include a
2453 translation of this License provided that you also include the
2454 original English version of this License.  In case of a disagreement
2455 between the translation and the original English version of this
2456 License, the original English version will prevail.
2457
2458
2459 9. TERMINATION
2460
2461 You may not copy, modify, sublicense, or distribute the Document except
2462 as expressly provided for under this License.  Any other attempt to
2463 copy, modify, sublicense or distribute the Document is void, and will
2464 automatically terminate your rights under this License.  However,
2465 parties who have received copies, or rights, from you under this
2466 License will not have their licenses terminated so long as such
2467 parties remain in full compliance.
2468
2469
2470 10. FUTURE REVISIONS OF THIS LICENSE
2471
2472 The Free Software Foundation may publish new, revised versions
2473 of the GNU Free Documentation License from time to time.  Such new
2474 versions will be similar in spirit to the present version, but may
2475 differ in detail to address new problems or concerns.  See
2476 http://www.gnu.org/copyleft/.
2477
2478 Each version of the License is given a distinguishing version number.
2479 If the Document specifies that a particular numbered version of this
2480 License "or any later version" applies to it, you have the option of
2481 following the terms and conditions either of that specified version or
2482 of any later version that has been published (not as a draft) by the
2483 Free Software Foundation.  If the Document does not specify a version
2484 number of this License, you may choose any version ever published (not
2485 as a draft) by the Free Software Foundation.
2486
2487
2488 ADDENDUM: How to use this License for your documents
2489
2490 To use this License in a document you have written, include a copy of
2491 the License in the document and put the following copyright and
2492 license notices just after the title page:
2493
2494 @smallexample
2495     Copyright (c)  YEAR  YOUR NAME.
2496     Permission is granted to copy, distribute and/or modify this document
2497     under the terms of the GNU Free Documentation License, Version 1.1
2498     or any later version published by the Free Software Foundation;
2499     with the Invariant Sections being LIST THEIR TITLES, with the
2500     Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
2501     A copy of the license is included in the section entitled "GNU
2502     Free Documentation License".
2503 @end smallexample
2504
2505 If you have no Invariant Sections, write "with no Invariant Sections"
2506 instead of saying which ones are invariant.  If you have no
2507 Front-Cover Texts, write "no Front-Cover Texts" instead of
2508 "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
2509
2510 If your document contains nontrivial examples of program code, we
2511 recommend releasing these examples in parallel under your choice of
2512 free software license, such as the GNU General Public License,
2513 to permit their use in free software.
2514
2515 @contents
2516 @bye
2517
2518 NEEDS AN INDEX
2519
2520 -T - "traditional BSD style": How is it different?  Should the
2521 differences be documented?
2522
2523 example flat file adds up to 100.01%...
2524
2525 note: time estimates now only go out to one decimal place (0.0), where
2526 they used to extend two (78.67).