Provided by: lcov_1.15-1_all bug

NAME

       geninfo - Generate tracefiles from .da files

SYNOPSIS

       geninfo [-h|--help] [-v|--version] [-q|--quiet]
               [-i|--initial] [-t|--test-name test-name]
               [-o|--output-filename filename] [-f|--follow]
               [-b|--base-directory directory]
               [--checksum] [--no-checksum]
               [--compat-libtool] [--no-compat-libtool]
               [--gcov-tool tool] [--ignore-errors errors]
               [--no-recursion] directory [--external] [--no-external]
               [--config-file config-file] [--no-markers]
               [--derive-func-data] [--compat mode=on|off|auto]
               [--rc keyword=value]
               [--include pattern] [--exclude pattern]

DESCRIPTION

       geninfo  converts all GCOV coverage data files found in directory into tracefiles, which the genhtml tool
       can convert to HTML output.

       Unless the --output-filename option is specified, geninfo writes its output to one file per .da file, the
       name of which is generated by simply appending ".info" to the respective .da file name.

       Note 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.

       Note also that geninfo is called from within lcov, so that there is usually no need to call it directly.

       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)).

       --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.

       --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
              .da 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.

              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.

       --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.

       --exclude pattern
              Exclude source files matching pattern.

              Use this switch if you want to exclude coverage data for 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.

       --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 .da files.

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

       -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).

              Note: The pattern must be specified to match the absolute path of each source file.

       --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.

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

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

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

       -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  .da
              file.

       -q
       --quiet
              Do not print progress messages.

              Suppresses  all  informational progress output. When this switch is enabled, only error or warning
              messages are printed.

       --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.

       -v
       --version
              Print version number, then exit.

FILES

       /etc/lcovrc
              The system-wide configuration file.

       ~/.lcovrc
              The per-user configuration file.

       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 .da file, there is a section containing filename and coverage
       data:

         SF:<absolute path to the source file>

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

         FN:<line number of function start>,<function name>

       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:<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.

       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
       .bb file (see gcov (1) for more information on this file type). Relative filenames are prefixed with  the
       directory in which the .bb file is found.

       Note  also  that  symbolic  links  to  the .bb 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.

AUTHOR

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

SEE ALSO

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

2021-11-08                                          LCOV 1.14                                         geninfo(1)