@c Copyright (C) 2014-2022 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.

@ignore
@c man begin COPYRIGHT
Copyright @copyright{} 2014-2022 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``GNU General Public License'' and ``Funding
Free Software'', the Front-Cover texts being (a) (see below), and with
the Back-Cover Texts being (b) (see below).  A copy of the license is
included in the gfdl(7) man page.

(a) The FSF's Front-Cover Text is:

     A GNU Manual

(b) The FSF's Back-Cover Text is:

     You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development.
@c man end
@c Set file name and title for the man page.
@setfilename gcov-tool
@settitle offline gcda profile processing tool
@end ignore

@node Gcov-tool
@chapter @command{gcov-tool}---an Offline Gcda Profile Processing Tool

@command{gcov-tool} is a tool you can use in conjunction with GCC to
manipulate or process gcda profile files offline.

@menu
* Gcov-tool Intro::             Introduction to gcov-tool.
* Invoking Gcov-tool::          How to use gcov-tool.
@end menu

@node Gcov-tool Intro
@section Introduction to @command{gcov-tool}
@c man begin DESCRIPTION

@command{gcov-tool} is an offline tool to process gcc's gcda profile files.

Current gcov-tool supports the following functionalities:

@itemize @bullet
@item
merge two sets of profiles with weights.

@item
read one set of profile and rewrite profile contents. One can scale or
normalize the count values.
@end itemize

Examples of the use cases for this tool are:
@itemize @bullet
@item
Collect the profiles for different set of inputs, and use this tool to merge
them. One can specify the weight to factor in the relative importance of
each input.

@item
Rewrite the profile after removing a subset of the gcda files, while maintaining
the consistency of the summary and the histogram.

@item
It can also be used to debug or libgcov code as the tools shares the majority
code as the runtime library.
@end itemize

Note that for the merging operation, this profile generated offline may
contain slight different values from the online merged profile. Here are
a list of typical differences:

@itemize @bullet
@item
histogram difference: This offline tool recomputes the histogram after merging
the counters. The resulting histogram, therefore, is precise. The online
merging does not have this capability -- the histogram is merged from two
histograms and the result is an approximation.

@item
summary checksum difference: Summary checksum uses a CRC32 operation. The value
depends on the link list order of gcov-info objects. This order is different in
gcov-tool from that in the online merge. It's expected to have different
summary checksums. It does not really matter as the compiler does not use this
checksum anywhere.

@item
value profile counter values difference: Some counter values for value profile
are runtime dependent, like heap addresses. It's normal to see some difference
in these kind of counters.
@end itemize

@c man end

@node Invoking Gcov-tool
@section Invoking @command{gcov-tool}

@smallexample
gcov-tool @r{[}@var{global-options}@r{]} SUB_COMMAND @r{[}@var{sub_command-options}@r{]} @var{profile_dir}
@end smallexample

@command{gcov-tool} accepts the following options:

@ignore
@c man begin SYNOPSIS
gcov-tool [@option{-v}|@option{--version}] [@option{-h}|@option{--help}]

gcov-tool merge [merge-options] @var{directory1} @var{directory2}
     [@option{-o}|@option{--output} @var{directory}]
     [@option{-v}|@option{--verbose}]
     [@option{-w}|@option{--weight} @var{w1,w2}]

gcov-tool rewrite [rewrite-options] @var{directory}
     [@option{-n}|@option{--normalize} @var{long_long_value}]
     [@option{-o}|@option{--output} @var{directory}]
     [@option{-s}|@option{--scale} @var{float_or_simple-frac_value}]
     [@option{-v}|@option{--verbose}]

gcov-tool overlap [overlap-options] @var{directory1} @var{directory2}
     [@option{-f}|@option{--function}]
     [@option{-F}|@option{--fullname}]
     [@option{-h}|@option{--hotonly}]
     [@option{-o}|@option{--object}]
     [@option{-t}|@option{--hot_threshold}] @var{float}
     [@option{-v}|@option{--verbose}]

@c man end
@c man begin SEEALSO
gpl(7), gfdl(7), fsf-funding(7), gcc(1), gcov(1) and the Info entry for
@file{gcc}.
@c man end
@end ignore

@c man begin OPTIONS
@table @gcctabopt
@item -h
@itemx --help
Display help about using @command{gcov-tool} (on the standard output), and
exit without doing any further processing.

@item -v
@itemx --version
Display the @command{gcov-tool} version number (on the standard output),
and exit without doing any further processing.

@item merge
Merge two profile directories.
@table @gcctabopt

@item -o @var{directory}
@itemx --output @var{directory}
Set the output profile directory. Default output directory name is
@var{merged_profile}.

@item -v
@itemx --verbose
Set the verbose mode.

@item -w @var{w1},@var{w2}
@itemx --weight @var{w1},@var{w2}
Set the merge weights of the @var{directory1} and @var{directory2},
respectively. The default weights are 1 for both.
@end table

@item rewrite
Read the specified profile directory and rewrite to a new directory.
@table @gcctabopt

@item -n @var{long_long_value}
@itemx --normalize <long_long_value>
Normalize the profile. The specified value is the max counter value
in the new profile.

@item -o @var{directory}
@itemx --output @var{directory}
Set the output profile directory. Default output name is @var{rewrite_profile}.

@item -s @var{float_or_simple-frac_value}
@itemx --scale @var{float_or_simple-frac_value}
Scale the profile counters. The specified value can be in floating point value,
or simple fraction value form, such 1, 2, 2/3, and 5/3.

@item -v
@itemx --verbose
Set the verbose mode.
@end table

@item overlap
Compute the overlap score between the two specified profile directories.
The overlap score is computed based on the arc profiles. It is defined as
the sum of min (p1_counter[i] / p1_sum_all, p2_counter[i] / p2_sum_all),
for all arc counter i, where p1_counter[i] and p2_counter[i] are two
matched counters and p1_sum_all and p2_sum_all are the sum of counter
values in profile 1 and profile 2, respectively.

@table @gcctabopt
@item -f
@itemx --function
Print function level overlap score.

@item -F
@itemx --fullname
Print full gcda filename.

@item -h
@itemx --hotonly
Only print info for hot objects/functions.

@item -o
@itemx --object
Print object level overlap score.

@item -t @var{float}
@itemx --hot_threshold <float>
Set the threshold for hot counter value.

@item -v
@itemx --verbose
Set the verbose mode.
@end table

@end table

@c man end
