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