gcov uses three files for doing profiling. The names of these
files are derived from the original source file by substituting
the file suffix with either
of these files are placed in the same directory as the source file, and
contain data stored in a platform-independent method.
.bbg files are generated when the source file
is compiled with the GCC
-ftest-coverage option. The
.bb file contains a list of source files (including headers),
functions within those files, and line numbers corresponding to each
basic block in the source file.
.bb file format consists of several lists of 4-byte integers
which correspond to the line numbers of each basic block in the
file. Each list is terminated by a line number of 0. A line number of -1
is used to designate that the source file name (padded to a 4-byte
boundary and followed by another -1) follows. In addition, a line number
of -2 is used to designate that the name of a function (also padded to a
4-byte boundary and followed by a -2) follows.
.bbg file is used to reconstruct the program flow graph for
the source file. It contains a list of the program flow arcs (possible
branches taken from one basic block to another) for each function which,
in combination with the
.bb file, enables gcov to reconstruct the
.bbg file, the format is:
number of basic blocks for function #0 (4-byte number) total number of arcs for function #0 (4-byte number) count of arcs in basic block #0 (4-byte number) destination basic block of arc #0 (4-byte number) flag bits (4-byte number) destination basic block of arc #1 (4-byte number) flag bits (4-byte number) ... destination basic block of arc #N (4-byte number) flag bits (4-byte number) count of arcs in basic block #1 (4-byte number) destination basic block of arc #0 (4-byte number) flag bits (4-byte number) ...
A -1 (stored as a 4-byte number) is used to separate each function's list of basic blocks, and to verify that the file has been read correctly.
.da file is generated when a program containing object files
built with the GCC
-fprofile-arcs option is executed. A
.da file is created for each source file compiled with
this option, and the name of the
.da file is stored as an
absolute pathname in the resulting object file. This path name is
derived from the source file name by substituting a
The format of the
.da file is fairly simple. The first 8-byte
number is the number of counts in the file, followed by the counts
(stored as 8-byte numbers). Each count corresponds to the number of
times each arc in the program is executed. The counts are cumulative;
each time the program is executed, it attempts to combine the existing
.da files with the new counts for this invocation of the
program. It ignores the contents of any
.da files whose number of
arcs doesn't correspond to the current program, and merely overwrites
All three of these files use the functions in
gcov-io.h to store
integers; the functions in this header provide a machine-independent
mechanism for storing and retrieving data from a stream.