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