Provided by: lcov_2.0-4ubuntu2_all bug

NAME

       geninfo - Generate tracefiles from GCOV coverage data files

SYNOPSIS

       geninfo [-h|--help] [--version] [-q|--quiet] [-v|--verbose] [--debug]
               [-i|--initial] [-t|--test-name test-name]
               [-o|--output-filename filename] [-f|--follow]
               [-b|--base-directory directory]
               [--build-directory directory]
               [--branch-coverage]
               [--checksum] [--no-checksum]
               [--compat-libtool] [--no-compat-libtool]
               [--gcov-tool tool]
               [--parallel|-j [integer]]
               [--memory integer_num_Mb]
               [--ignore-errors errors]
               [--keep-going]
               [--preserve]
               [--filter type]
               [--demangle-cpp[param]]
               [--no-recursion] [--external] [--no-external]
               [--config-file config-file] [--no-markers]
               [--derive-func-data] [--compat mode=on|off|auto]
               [--rc keyword=value]
               [--include glob_pattern]
               [--exclude glob_pattern]
               [--erase-functions regexp_pattern]
               [--substitute regexp_pattern]
               [--omit-lines regexp_pattern]
               [--forget-test-names]
               [--version-script script_file]
               [--tempdir dirname]
               directory

DESCRIPTION

       Use  geninfo  to  create  LCOV tracefiles from GCC and LLVM/Clang coverage data files (see
       --gcov-tool for considerations when working with LLVM). You can use genhtml to  create  an
       HTML report from a tracefile.

       Note  that  geninfo  is called by lcov --capture, so there is typically no need to call it
       directly.

       Unless the --output-filename option is specified geninfo writes its  output  to  one  file
       with .info filename extension per input file.

       Note  also  that  the  current user needs write access to both directory as well as to the
       original source code location. This is necessary because some temporary files have  to  be
       created there during the conversion process.

   File types
       A  tracefile is a coverage data file in the format used by all LCOV tools such as geninfo,
       lcov, and genhtml.  By  convention,  tracefiles  have  a  .info  filename  extension.  See
       "Tracefile format" below for a description of the file format.

       A  .gcda file is a compiler-specific file containing run-time coverage data. It is created
       and updated  when  a  program  compiled  with  GCC/LLVM's  --coverage  option  is  run  to
       completion.   geninfo  reads  .gcda  files in its default mode of operation. Note: earlier
       compiler versions used the .da filename extension for this file type.

       A .gcno file is a compiler-specific file containing static, compile-time coverage data. It
       is  created when source code is compiled with GCC/LLVM's --coverage option.  geninfo reads
       .gcno files when option --initial is specified. Note: earlier compiler versions  used  .bb
       and .bbg filename extensions for this file type.

       A  .gcov  file  is  a  textual or JSON representation of the data found in .gcda and .gcno
       files. It is created by the gcov tools that is part  of  GCC  (see  --gcov-tool  for  LLVM
       considerations).   There  are  multiple  gcov  file  format  versions,  including textual,
       intermediate, and JSON format.  geninfo internally uses gcov to extract coverage data from
       .gcda and .gcno files using the best supported gcov file format.

       See the gcov man page for more information on .gcda, .gcno and .gcov output formats.

   Exclusion markers
       To  exclude  specific lines of code from a tracefile, you can add exclusion markers to the
       source code. Additionally you can exclude specific branches from branch  coverage  without
       excluding  the  involved  lines  from  line  and  function coverage. Exclusion markers are
       keywords which can for example be added in the form of a comment.  See  lcovrc(5)  how  to
       override some of them.

       The following markers are recognized by geninfo:

       LCOV_EXCL_LINE
              Lines containing this marker will be excluded.

       LCOV_EXCL_START
              Marks  the  beginning  of  an  excluded  section.  The current line is part of this
              section.

       LCOV_EXCL_STOP
              Marks the end of an excluded section. The current line not part of this section.

       LCOV_EXCL_BR_LINE
              Lines containing this marker will be excluded from branch coverage.

       LCOV_EXCL_BR_START
              Marks the beginning of a section  which  is  excluded  from  branch  coverage.  The
              current line is part of this section.

       LCOV_EXCL_BR_STOP
              Marks the end of a section which is excluded from branch coverage. The current line
              not part of this section.

       LCOV_EXCL_EXCEPTION_BR_LINE
              Lines containing this marker will  be  excluded  from  exception  branch  coverage:
              Exception  branches  will  be  ignored,  but  non-exception  branches  will  not be
              affected.

       LCOV_EXCL_EXCEPTION_BR_START
              Marks the beginning of a section which is excluded from exception branch  coverage.
              The current line is part of this section.

       LCOV_EXCL_EXCEPTION_BR_STOP
              Marks  the  end of a section which is excluded from exception branch coverage.  The
              current line not part of this section

OPTIONS

       -b directory
       --base-directory directory
              Use directory as base directory for relative paths.

              Use this option to specify the base directory of a build-environment  when  geninfo
              produces error messages like:

                     ERROR:          could          not          read         source         file
                     /home/user/project/subdir1/subdir2/subdir1/subdir2/file.c

              In this example, use /home/user/project as base directory.

              This option is required when using  geninfo  on  projects  built  with  libtool  or
              similar  build  environments  that  work  with a base directory, i.e. environments,
              where the current working directory when invoking the  compiler  is  not  the  same
              directory in which the source code file is located.

              Note that this option will not work in environments where multiple base directories
              are used. In that case use  configuration  file  setting  geninfo_auto_base=1  (see
              lcovrc(5)).

       --build-directory build_dir
              Search for .gcno data files from build_dir rather finding them only adjacent to the
              corresponding .o and/or .gcda file.

              By default, geninfo expects to find the .gcno and .gcda files  (compile-  and  run-
              time data, respectively) in the same directory.

              When this option is used:

                     geninfo path1 --build-directory path2 ...

              then geninfo will look for .gcno file

                     path2/relative/path/to/da_base.gcno

              when it finds .gcda file

                     path1/relative/path/to/da_base.gcda.

              Use  this  option when you have used the GCOV_PREFIX environment variable to direct
              the gcc or llvm runtime environment to write coverage data files to somewhere other
              than  the  directory  where  the  code  was originally compiled.  See gcc(1) and/or
              search for GCOV_PREFIX and GCOV_PREFIX_STRIP.

              This option can be used several times to specify multiple alternate directories  to
              look  for  .gcno  files.  This may be useful if your application uses code which is
              compiled in many separate locations - for example, common libraries that are shared
              between teams.

       --branch-coverage
              Collect retain branch coverage data.

              This  is  equivalent  to using the option "--rc lcov_branch_coverage=1"; the option
              was added to better match the genhml interface.

       --checksum
       --no-checksum
              Specify whether to generate checksum data when writing tracefiles.

              Use --checksum to enable  checksum  generation  or  --no-checksum  to  disable  it.
              Checksum generation is disabled by default.

              When  checksum  generation is enabled, a checksum will be generated for each source
              code line and stored along with the coverage data. This checksum will  be  used  to
              prevent attempts to combine coverage data from different source code versions.

              If you don't work with different source code versions, disable this option to speed
              up coverage data processing and to reduce the size of tracefiles.

              Note that this options is somewhat subsumed by the --version-script option -  which
              does something similar, but at the 'whole file' level.

       --compat mode=value[,mode=value,...]
              Set compatibility mode.

              Use  --compat to specify that geninfo should enable one or more compatibility modes
              when capturing coverage data. You can provide a comma-separated list of  mode=value
              pairs to specify the values for multiple modes.

              Valid values are:

              on
                     Enable compatibility mode.
              off
                     Disable compatibility mode.
              auto
                     Apply  auto-detection  to  determine if compatibility mode is required. Note
                     that auto-detection is not available for all compatibility modes.

              If no value is specified, 'on' is assumed as default value.

              Valid modes are:

              libtool
                     Enable this mode if you are capturing coverage data for a project  that  was
                     built using the libtool mechanism. See also --compat-libtool.

                     The default value for this setting is 'on'.

              hammer
                     Enable  this  mode if you are capturing coverage data for a project that was
                     built using a version of GCC 3.3 that contains a modification (hammer patch)
                     of  later  GCC versions. You can identify a modified GCC 3.3 by checking the
                     build directory of your project for files  ending  in  the  extension  .bbg.
                     Unmodified versions of GCC 3.3 name these files .bb.

                     The default value for this setting is 'auto'.

              split_crc
                     Enable  this  mode if you are capturing coverage data for a project that was
                     built using a version  of  GCC  4.6  that  contains  a  modification  (split
                     function  checksums)  of  later  GCC  versions.  Typical error messages when
                     running geninfo on coverage data produced by such GCC versions are  ´out  of
                     memory' and 'reached unexpected end of file'.

                     The default value for this setting is 'auto'

       --compat-libtool
       --no-compat-libtool
              Specify whether to enable libtool compatibility mode.

              Use --compat-libtool to enable libtool compatibility mode or --no-compat-libtool to
              disable it. The libtool compatibility mode is enabled by default.

              When libtool compatibility mode is enabled, geninfo will  assume  that  the  source
              code  relating to a .gcda file located in a directory named ".libs" can be found in
              its parent directory.

              If you have directories named ".libs" in  your  build  environment  but  don't  use
              libtool, disable this option to prevent problems when capturing coverage data.

       --config-file config-file
              Specify  a  configuration  file to use.  See the lcovrc man page for details of the
              file format and options.

              When  this  option  is  specified,  neither  the  system-wide  configuration   file
              /etc/lcovrc, nor the per-user configuration file ~/.lcovrc is read.

              This  option may be useful when there is a need to run several instances of geninfo
              with different configuration file options in parallel.

              Note that this option must be specified in full - abbreviations are not supported.

       --derive-func-data
              Calculate function coverage data from line coverage data.

              Use this option to collect function coverage data, even if the version of the  gcov
              tool  installed  on  the  test system does not provide this data. lcov will instead
              derive function coverage data from line coverage data and information  about  which
              lines belong to a function.

       --external
       --no-external
              Specify whether to capture coverage data for external source files.

              External  source  files  are  files which are not located in one of the directories
              specified by directory or --base-directory.  Use  --external  to  include  external
              source files while capturing coverage data or --no-external to ignore this data.

              Data for external source files is included by default.

       -f
       --follow
              Follow links when searching .gcda files.

       --gcov-tool tool
              Specify the location of the gcov tool.

              If  the  --gcov-tool  option  is  used  multiple  times,  then  the  arguments  are
              concatenated when the callback is executed  -  similar  to  how  the  gcc  -Xlinker
              parameter  works.   This  provides  a possibly easier way to pass arguments to your
              tool, without requiring a wrapper script.  In that  case,  your  callback  will  be
              executed  as:  tool-0 'tool-1; ... 'filename'.  Note that the second and subsequent
              arguments are quoted when passed to the shell, in order to handle parameters  which
              contain spaces.

              A common use for this option is to enable LLVM:

                     geninfo --gcov-tool llvm-cov --gcov-tool gcov ...

              Note:  'llvm-cov  gcov da_file_name' will generate output in gcov-compatible format
              as required by lcov.

              If not specified, 'gcov' is used by default.

       -h
       --help
              Print a short help text, then exit.

       --include pattern
              Include source files matching pattern.

              Use this switch if you want to include coverage data for only a particular  set  of
              source files matching any of the given patterns. Multiple patterns can be specified
              by using multiple --include command line switches. The patterns will be interpreted
              as  shell  wildcard  patterns (note that they may need to be escaped accordingly to
              prevent the shell from expanding them first).

              See the lcov man page for details

       --exclude pattern
              Exclude source files matching pattern.

              Use this switch if you want to exclude coverage data  from  a   particular  set  of
              source files matching any of the given patterns. Multiple patterns can be specified
              by using multiple --exclude command line switches. The patterns will be interpreted
              as  shell  wildcard  patterns (note that they may need to be escaped accordingly to
              prevent the shell from expanding them first).  Note: The pattern must be  specified
              to match the absolute path of each source file.

              Can  be  combined  with  the --include command line switch. If a given file matches
              both the include pattern and the exclude pattern, the  exclude  pattern  will  take
              precedence.

              See the lcov man page for details.

       --erase-functions regexp
              Exclude  coverage  data  from lines which fall within a function whose name matches
              the supplied regexp.  Note that this is a mangled or demangled name,  depending  on
              whether the --demangle-cpp option is used or not.

              Note  that  this  option requires that you use a gcc version which is new enough to
              support function begin/end line reports.

       --substitute regexp_pattern
              Apply Perl regexp regexp_pattern to source  file  names  found  during  processing.
              This  is  useful  when  the  path  name reported by gcov does not match your source
              layout and the file is not found. See the lcov man page for more details.

       --omit-lines regexp
              Exclude coverage data from lines whose content matches regexp.

              Use this switch if you want to exclude line  and  branch  coverage  data  for  some
              particular  constructs  in  your code (e.g., some complicated macro).  See the lcov
              man page for details.

       --forget-test-names
              If non-zero, ignore testcase names in tracefile - i.e., treat all coverage data  as
              if  it came from the same testcase.  This may improve performance and reduce memory
              consumption if user  does  not  need  per-testcase  coverage  summary  in  coverage
              reports.

              This  option can also be configured permanently using the configuration file option
              forget_testcase_names.

       --ignore-errors errors
              Specify a list of errors after which to continue processing.

              Use this option to specify a list of one or more  classes  of  errors  after  which
              geninfo  should  continue  processing instead of aborting.  Note that the tool will
              generate a warning (rather than a fatal error) unless you ignore the error two  (or
              more) times:
                     geninfo ... --ignore-errors unused,unused

              errors can be a comma-separated list of the following keywords:

              branch:  branch  ID  (2nd  field  in  the  .info file 'BRDA' entry) does not follow
              expected integer sequence.

              callback: Version script error.

              corrupt: corrupt/unreadable file found.

              count: An excessive  number  of  messages  of  some  class  have  been  reported  -
              subsequent  messages  of that type will be suppressed.  The limit can be controlled
              by the 'max_message_count' variable. See the lcovrc man page.

              deprecated: You are using a deprecated option.  This option will be removed  in  an
              upcoming release - so you should change your scripts now.

              empty:  the  .info  data file is empty (e.g., because all the code was 'removed' or
              excluded.

              format: unexpected syntax found in .info file.

              gcov: the gcov tool returned with a non-zero return code.

              graph: the graph file could not be found or is corrupted.

              mismatch: Inconsistent entries found in trace file:

              •  branch expression (3rd field in the .info file 'BRDA' entry) of merge data  does
                 not match, or

              •  function execution count (FNDA:...) but no function declaration (FN:...).

              negative: negative 'hit' count found.

              Note that negative counts may be caused by a known GCC bug - see

                     https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68080

              and  try  compiling with "-fprofile-update=atomic". You will need to recompile, re-
              run your tests, and re-capture coverage data.

              package: a required perl package is not installed on your system.  In  some  cases,
              it is possible to ignore this message and continue - however, certain features will
              be disabled in that case.

              parallel: various types of errors related to parallelism - e.g., child process died
              due to some error.   If you see an error related to parallel execution, it may be a
              good idea to remove the --parallel flag and try again.

              source: the source code file for a data set could not be found.

              unsupported: the requested feature is not supported for  this  tool  configuration.
              For  example,  function begin/end line range exclusions use some GCOV features that
              are not available in older GCC releases.

              unused: the include/exclude/erase/omit/substitute pattern did not  match  any  file
              pathnames.

              version:  revision control IDs of the file which we are trying to merge are not the
              same - line numbering and other information may be incorrect.

              Also see man lcovrc for a discussion of the 'max_message_count' parameter which can
              be  used  to control the number of warnings which are emitted before all subsequent
              messages are suppressed.  This can be used to reduce log file volume.

       --keep-going
              Do not stop if error occurs: attempt to generate a result, however flawed.

              This command line option corresponds to  the  stop_on_error  [0|1]  lcovrc  option.
              See the lcovrc man page for more details.

       --preserve
              Preserve intermediate data files (e.g., for debugging).

              By default, intermediate files are deleted.

       --filter filters
              Specify  a  list of coverpoint filters to apply to input data.  See the genhtml man
              page for details.

       --demangle-cpp [param]
              Demangle C++ method and function names in captured output.   See  the  genhtml  man
              page for details.

       -i
       --initial
              Capture initial zero coverage data.

              Run geninfo with this option on the directories containing .bb, .bbg or .gcno files
              before running any test case. The result is a "baseline" coverage  data  file  that
              contains zero coverage for every instrumented line and function.  Combine this data
              file (using lcov -a) with coverage data files captured after a test run  to  ensure
              that the percentage of total lines covered is correct even when not all object code
              files were loaded during the test.

              Note:  currently,  the  --initial  option  does  not   generate   branch   coverage
              information.

       --no-markers
              Use  this  option  if  you  want  to  get coverage data without regard to exclusion
              markers in the source code file.

       --no-recursion
              Use this option if you want to get coverage data for the specified  directory  only
              without processing subdirectories.

       -o output-filename
       --output-filename output-filename
              Write all data to output-filename.

              If  you  want  to have all data written to a single file (for easier handling), use
              this option to specify the respective filename. By default, one tracefile  will  be
              created for each processed .gcda file.

       --version-script script
              Use  script to get a source file's version ID from revision control when extracting
              data. The ID is used for error checking when merging .info files.

              See the genhtml man page for more details on the version script.

       -v
       --verbose
              Increment informational message verbosity.  This is mainly used for  script  and/or
              flow  debugging  -  e.g., to figure out which data file are found, where.  Also see
              the --quiet flag.

              Messages are sent to stdout unless there is no output file (i.e., if  the  coverage
              data is written to stdout rather than to a file) and to stderr otherwise.

       -q
       --quiet
              Decrement informational message verbosity.

              Decreased verbosity will suppress 'progress' messages for example - while error and
              warning messages will continue to be printed.

       --debug
              Increment 'debug messages' verbosity.  This is useful primarily to  developers  who
              want to enhance the lcov tool suite.

       --parallel [ integer ]
       -j [ integer ]
              Specify  parallelism  to  use  during  processing  (maximum  number of forked child
              processes).  If the optional integer parallelism parameter is zero or  is  missing,
              then  use  to  use  up the number of cores on the machine.  Default is not to use a
              single process (no parallelism).

       --memory integer
              Specify the maximum amount of memory to use  during  parallel  processing,  in  Mb.
              Effectively,  the process will not fork() if this limit would be exceeded.  Default
              is 0 (zero) - which means that there is no limit.

              This option may be useful if the compute farm environment imposes strict limits  on
              resource  utilization  such that the job will be killed if it tries to use too many
              parallel children - but the user does  now  know  a  priori  what  the  permissible
              maximum  is.   This  option enables the tool to use maximum parallelism - up to the
              limit imposed by the memory restriction.

       --rc keyword=value
              Override a configuration directive.

              Use  this  option  to  specify  a  keyword=value  statement  which  overrides   the
              corresponding  configuration  statement  in  the lcovrc configuration file. You can
              specify this option more than once to override multiple  configuration  statements.
              See lcovrc(5) for a list of available keywords and their meaning.

       -t testname
       --test-name testname
              Use  test  case name testname for resulting data. Valid test case names can consist
              of letters, decimal digits and the underscore character ('_').

              This proves useful when data from several test cases  is  merged  (i.e.  by  simply
              concatenating  the  respective tracefiles) in which case a test name can be used to
              differentiate between data from each test case.

       --version
              Print version number, then exit.

       --tempdir dirname
              Write temporary and intermediate data to indicated directory.  Default is "/tmp".

TRACEFILE FORMAT

       Following is a quick description of the tracefile format as used by genhtml,  geninfo  and
       lcov.

       A  tracefile is made up of several human-readable lines of text, divided into sections. If
       available, a tracefile begins with the testname which is stored in the following format:

         TN:<test name>

       For each source file referenced in the .gcda file, there is a section containing  filename
       and coverage data:

         SF:<absolute path to the source file>

       An optional source code version ID follows:

         VER:<version ID>

       If  present,  the  version  ID  is  compared  before  file  entries  are  merged (see lcov
       --add-tracefile ), and before the 'source detail' view is generated by genhtml.   See  the
       --version-script callback_script documentation and the sample usage in the lcov regression
       test examples.

       Following is a list of line numbers for each function name found in the source file:

         FN:<line number of function start>,(<line number of function end>,)?<function name>

       The 'end' line number is optional, and is generated only if the compiler/toolchain version
       is  recent  enough  to  generate  the  data  (e.g., gcc 9 or newer).  This data is used to
       support the --erase-functions and --show-proportions options.  If the  function  end  line
       data is not available, then these features will not work.

       Next, there is a list of execution counts for each instrumented function:

         FNDA:<execution count>,<function name>

       This list is followed by two lines containing the number of functions found and hit:

         FNF:<number of functions found>
         FNH:<number of function hit>

       Branch coverage information is stored which one line per branch:

         BRDA:<exception tag><line number>,<block number>,<branch number>,<taken>

       Block number and branch number are gcc internal IDs for the branch. Taken is either '-' if
       the basic block containing the branch was never executed or a number indicating how  often
       that  branch  was  taken.  'exception tag' is 'e' if this is a branch related to exception
       handling - and is not present if the branch is not related to exceptions.

       Branch coverage summaries are stored in two lines:

         BRF:<number of branches found>
         BRH:<number of branches hit>

       Then there is a list of execution counts for each instrumented line  (i.e.  a  line  which
       resulted in executable code):

         DA:<line number>,<execution count>[,<checksum>]

       Note  that  there  may  be  an  optional  checksum present for each instrumented line. The
       current geninfo implementation uses an MD5 hash as checksumming algorithm.

       At the end of a section, there is a summary about how many lines were found and  how  many
       were actually instrumented:

         LH:<number of lines with a non-zero execution count>
         LF:<number of instrumented lines>

       Each sections ends with:

         end_of_record

       In  addition to the main source code file there are sections for all #included files which
       also contain executable code.

       Note that the absolute path of a source file is generated by interpreting the contents  of
       the  respective .gcno file (see gcov (1) for more information on this file type). Relative
       filenames are prefixed with the directory in which the .gcno file is found.

       Note also that symbolic links to the .gcno file will be resolved so that the  actual  file
       path  is  used instead of the path to a link. This approach is necessary for the mechanism
       to work with the /proc/gcov files.

FILES

       /etc/lcovrc
              The system-wide configuration file.

       ~/.lcovrc
              The per-user configuration file.

       /usr/share/lcov/support-scripts/getp4version
              Sample script for use with --version-script that obtains version IDs via Perforce.

       /usr/share/lcov/support-scripts/get_signature
              Sample script for use with --version-script that uses md5hash as version IDs.

AUTHOR

       Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>

       Henry Cox <henry.cox@mediatek.com>
              Filtering, error management, parallel execution sections.

SEE ALSO

       lcov(1), lcovrc(5), genhtml(1), genpng(1), gendesc(1), gcov(1)

       https://github.com/linux-test-project/lcov