Provided by: abigail-tools_2.4-3build1_amd64 bug

NAME

       abidw - serialize the ABI of an ELF file

       abidw  reads  a shared library in ELF format and emits an XML representation of its ABI to
       standard output.  The emitted  representation  format,  named  ABIXML,  includes  all  the
       globally  defined  functions  and variables, along with a complete representation of their
       types.  It also includes a representation of the globally defined ELF symbols of the file.

       When given the --linux-tree option, this program can also  handle  a  Linux  kernel  tree.
       That  is, a directory tree that contains both the vmlinux binary and Linux Kernel modules.
       It analyses those Linux Kernel binaries and emits an XML representation of  the  interface
       between  the kernel and its module, to standard output.  In this case, we don’t call it an
       ABI, but a KMI (Kernel Module Interface).  The  emitted  KMI  includes  all  the  globally
       defined functions and variables, along with a complete representation of their types.

       To  generate  either ABI or KMI representation, by default abidw uses debug information in
       the DWARF format, if present, otherwise it looks for  debug  information  in  CTF  or  BTF
       formats,  if  present.   Finally,  if  no  debug  info  in these formats is found, it only
       considers ELF symbols and report about their addition or removal.

       This tool uses the libabigail library to analyze the binary  as  well  as  its  associated
       debug information.  Here is its general mode of operation.

       When  instructed  to  do  so,  a  binary  and its associated debug information is read and
       analyzed.  To that effect, libabigail analyzes by default the descriptions  of  the  types
       reachable  by  the  interfaces (functions and variables) that are visible outside of their
       translation unit.  Once that analysis is done, an Application Binary Interface  Corpus  is
       constructed  by  only considering the subset of types reachable from interfaces associated
       to ELF symbols that are defined and exported by the binary.  It’s that  final  ABI  corpus
       which libabigail considers as representing the ABI of the analyzed binary.

       Libabigail  then  has  capabilities  to  generate  textual representations of ABI Corpora,
       compare them, analyze their changes and report about them.

INVOCATION

          abidw [options] [<path-to-elf-file>]

OPTIONS

--help | -h

            Display a short help about the command and exit.

          • --version | -v

            Display the version of the program and exit.

          • --abixml-version

            Display the version of the ABIXML format emitted by this program and exit.

          • --add-binaries <bin1,bin2,…>

            For each of the comma-separated binaries given in argument to  this  option,  if  the
            binary  is  found  in the directory specified by the –added-binaries-dir option, then
            load the ABI corpus of the binary and add it to a set of ABI corpora  (called  a  ABI
            Corpus Group) made of the binary denoted by the Argument of abidw.  That corpus group
            is then serialized out.

          • --follow-dependencies

            For each dependency of the input binary of abidw, if it is  found  in  the  directory
            specified by the --added-binaries-dir option, then construct an ABI corpus out of the
            dependency and add it to a set of ABI corpora (called an ABI Corpus Group) along with
            the  ABI  corpus  of  the  input binary of the program.  The ABI Corpus Group is then
            serialized out.

          • --list-dependencies

            For each dependency of the input binary of``abidw``, if it’s found in  the  directory
            specified  by  the  --added-binaries-dir  option,  then the name of the dependency is
            printed out.

          • --added-binaries-dir | --abd <dir-path>

            This  option  is  to  be  used  in   conjunction   with   the   --add-binaries,   the
            --follow-dependencies   or   the  --list-dependencies  option.   Binaries  listed  as
            arguments of the --add-binaries option or being dependencies of the input  binary  in
            the  case  of  the --follow-dependencies option and found in the directory <dir-path>
            are going to be loaded as ABI corpus and added to the set of ABI corpora  (called  an
            ABI corpus group) built and serialized.

          • --debug-info-dir | -d <dir-path>

            In  cases  where  the  debug  info for path-to-elf-file is in a separate file that is
            located in a non-standard place, this tells abidw where to look for that  debug  info
            file.

            Note that dir-path must point to the root directory under which the debug information
            is arranged in a tree-like manner.  Under Red Hat based systems,  that  directory  is
            usually <root>/usr/lib/debug.

            This  option  can be provided several times with different root directories.  In that
            case, abidw will potentially look into all those root directories to find  the  split
            debug info for the elf file.

            Note  that this option is not mandatory for split debug information installed by your
            system’s package manager because then abidw knows where to find it.

          • --out-file <file-path>

            This option instructs abidw to emit the XML representation of  path-to-elf-file  into
            the file file-path, rather than emitting it to its standard output.

          • --noout

            This  option  instructs  abidw  to not emit the XML representation of the ABI.  So it
            only reads the ELF and debug information, builds the internal representation  of  the
            ABI and exits.  This option is usually useful for debugging purposes.

          • --no-corpus-path

            Do not emit the path attribute for the ABI corpus.

          • --suppressions | suppr <path-to-suppression-specifications-file>

            Use        a        suppression       specification       file       located       at
            path-to-suppression-specifications-file.  Note that this option can  appear  multiple
            times  on  the  command  line.   In  that  case,  all  of  the  provided  suppression
            specification files are taken into account.  ABI artifacts matched by the suppression
            specifications are suppressed from the output of this tool.

          • --kmi-whitelist | -kaw <path-to-whitelist>

            When  analyzing  a Linux Kernel binary, this option points to the white list of names
            of ELF symbols of functions and variables which ABI must be written out.  That  white
            list  is  called  a  ”  Kernel Module Interface white list”.  This is because for the
            Kernel, we don’t talk about the ABI; we rather talk about the interface  between  the
            Kernel and its module. Hence the term KMI rather than ABI

            Any  other  function  or variable which ELF symbol are not present in that white list
            will not be considered by the KMI writing process.

            If this option is not provided – thus if no white list is provided – then the  entire
            KMI, that is, all publicly defined and exported functions and global variables by the
            Linux Kernel binaries is emitted.

          • --linux-tree | --lt

            Make abidw to consider the input path as a path to a directory containing the vmlinux
            binary  as  several  kernel  modules  binaries.  In that case, this program emits the
            representation of the Kernel Module Interface (KMI) on the standard output.

            Below is an example of usage of abidw on a Linux Kernel tree.

            First, checkout a Linux Kernel source tree and build it.   Then  install  the  kernel
            modules  in  a directory somewhere.  Copy the vmlinux binary into that directory too.
            And then serialize the KMI of that kernel to disk, using abidw:

                $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
                $ cd linux && git checkout v4.5
                $ make allyesconfig all
                $ mkdir build-output
                $ make INSTALL_MOD_PATH=./build-output modules_install
                $ cp vmlinux build-output/modules/4.5.0
                $ abidw --linux-tree build-output/modules/4.5.0 > build-output/linux-4.5.0.kmi

          • --headers-dir | --hd <headers-directory-path-1>

            Specifies where to find the public headers  of  the  binary  that  the  tool  has  to
            consider.   The  tool  will  thus  filter  out  types  that are not defined in public
            headers.

            Note that several public header directories  can  be  specified  for  the  binary  to
            consider.   In  that  case the --header-dir option should be present several times on
            the command line, like in the following example:

                $ abidw --header-dir /some/path       \
                        --header-dir /some/other/path \
                        binary > binary.abi

          • --header-file | --hf <header-file-path>

            Specifies where to find one of the public headers of the abi file that the  tool  has
            to  consider.   The  tool  will  thus filter out types that are not defined in public
            headers.

          • --drop-private-types

            This option is to be used with the --headers-dir and/or  header-file  options.   With
            this  option, types that are NOT defined in the headers are entirely dropped from the
            internal representation build by Libabigail to represent the ABI and will not end  up
            in the abi XML file.

          • --no-elf-needed

            Do not include the list of DT_NEEDED dependency names in the corpus.

          • --drop-undefined-syms

            With  this  option  functions  or  variables  for  which the (exported) ELF symbol is
            undefined are dropped  from  the  internal  representation  build  by  Libabigail  to
            represent the ABI and will not end up in the abi XML file.

          • --exported-interfaces-only

            By  default,  when  looking at the debug information accompanying a binary, this tool
            analyzes the descriptions of the types reachable by  the  interfaces  (functions  and
            variables) that are visible outside of their translation unit.  Once that analysis is
            done, an ABI corpus is constructed by only considering the subset of types  reachable
            from  interfaces  associated  to  ELF  symbols  that  are defined and exported by the
            binary.  It’s that final ABI corpus which textual representation is saved as ABIXML.

            The problem with that approach however is that analyzing all the interfaces that  are
            visible  from  outside their translation unit can amount to a lot of data, especially
            when those binaries are applications, as opposed to shared libraries.  One example of
            such  applications is the Linux Kernel.  Analyzing massive ABI corpora like these can
            be extremely slow.

            To mitigate that performance issue, this option allows  libabigail  to  only  analyze
            types  that  are  reachable  from interfaces associated with defined and exported ELF
            symbols.

            Note that this option is turned on  by  default  when  analyzing  the  Linux  Kernel.
            Otherwise, it’s turned off by default.

          • --allow-non-exported-interfaces

            When  looking  at the debug information accompanying a binary, this tool analyzes the
            descriptions of the types reachable by the interfaces (functions and variables)  that
            are  visible  outside  of their translation unit.  Once that analysis is done, an ABI
            corpus is constructed  by  only  considering  the  subset  of  types  reachable  from
            interfaces  associated  to  ELF  symbols that are defined and exported by the binary.
            It’s that final ABI corpus which textual representation is saved as ABIXML.

            The problem with that approach however is that analyzing all the interfaces that  are
            visible  from  outside their translation unit can amount to a lot of data, especially
            when those binaries are applications, as opposed to shared libraries.  One example of
            such  applications is the Linux Kernel.  Analyzing massive ABI corpora like these can
            be extremely slow.

            In the presence of an “average sized” binary however one can afford having libabigail
            analyze all interfaces that are visible outside of their translation unit, using this
            option.

            Note that this option is turned on by default, unless we are in the presence  of  the
            Linux Kernel.

          • --no-linux-kernel-mode

            Without  this  option,  if  abipkgiff  detects that the binaries it is looking at are
            Linux Kernel binaries (either vmlinux or modules) then it  only  considers  functions
            and  variables  which  ELF  symbols  are  listed  in  the __ksymtab and __ksymtab_gpl
            sections.

            With this option, abipkgdiff considers the binary as a non-special  ELF  binary.   It
            thus  considers  functions  and  variables  which are defined and exported in the ELF
            sense.

          • --check-alternate-debug-info <elf-path>

            If the debug info for the file elf-path contains a reference to  an  alternate  debug
            info  file,  abidw  checks  that it can find that alternate debug info file.  In that
            case, it emits a meaningful success message mentioning the full path to the alternate
            debug info file found.  Otherwise, it emits an error code.

          • --no-show-locs
              In  the  emitted  ABI  representation,  do  not show file, line or column where ABI
              artifacts are defined.

          • --no-parameter-names

            In the emitted ABI representation, do not show names of function parameters, just the
            types.

          • --no-write-default-sizes

            In  the  XML  ABI  representation,  do  not  write  the size-in-bits for pointer type
            definitions, reference type definitions, function  declarations  and  function  types
            when  they  are equal to the default address size of the translation unit.  Note that
            libabigail before 1.8 will not set the default size and will interpret types  without
            a size-in-bits attribute as zero sized.

          • --type-id-style <sequence``|``hash>

            This  option controls how types are idenfied in the generated XML files.  The default
            sequence style just numbers (with type-id- as prefix) the types in the order they are
            encountered.   The hash style uses a (stable, portable) hash of libabigail’s internal
            type names and is intended to make the XML files easier to diff.

          • --check-alternate-debug-info-base-name <elf-path>

            Like --check-alternate-debug-info, but in the success message, only mention the  base
            name of the debug info file; not its full path.

          • --load-all-types

            By  default,  libabigail  (and  thus  abidw) only loads types that are reachable from
            functions and variables declarations that are publicly defined and  exported  by  the
            binary.  So only those types are present in the output of abidw.  This option however
            makes abidw load all the types defined in the  binaries,  even  those  that  are  not
            reachable from public declarations.

          • --abidiff
              Load  the  ABI  of  the  ELF  binary given in argument, save it in libabigail’s XML
              format in a temporary file; read the ABI from the temporary XML  file  and  compare
              the  ABI  that  has  been  read  back  against  the  ABI of the ELF binary given in
              argument.  The ABIs should compare equal.  If  they  don’t,  the  program  emits  a
              diagnostic and exits with a non-zero code.

              This is a debugging and sanity check option.

              • --debug-abidiff

              Same  as --abidiff but in debug mode.  In this mode, error messages are emitted for
              types which fail type canonicalization.

              This is an optional debugging and sanity check option.  To enable it the libabigail
              package needs to be configured with the –enable-debug-self-comparison option.

              • --debug-type-canonicalization | --debug-tc

              Debug  the  type  canonicalization  process.   This is done by using structural and
              canonical equality when canonicalizing every single type.  Structural and canonical
              equality  should  yield the same result.  If they don’t yield the same result for a
              given type, then it means that the canonicalization of that type  went  wrong.   In
              that case, an error message is emitted and the execution of the program is aborted.

              This   option   is   available   only  if  the  package  was  configured  with  the
              –enable-debug-type-canonicalization option.

          • --no-assume-odr-for-cplusplus

            When analysing a binary originating from C++  code  using  DWARF  debug  information,
            libabigail  assumes  the One Definition Rule to speed-up the analysis.  In that case,
            when several types have the same name in the binary,  they  are  assumed  to  all  be
            equal.

            This  option  disables  that assumption and instructs libabigail to actually actually
            compare the types to determine if they are equal.

          • --no-leverage-dwarf-factorization

            When analysing a binary which DWARF debug information  was  processed  with  the  DWZ
            tool,  the  type  information  is supposed to be already factorized.  That context is
            used by libabigail to perform some speed optimizations.

            This option disables those optimizations.

          • --ctf

            Extract ABI information from CTF debug information, if present in the given object.

          • --annotate
              Annotate the ABIXML output with comments above most  elements.   The  comments  are
              made  of  the  pretty-printed  form  types,  declaration  or even ELF symbols.  The
              purpose is  to  make  the  ABIXML  output  more  human-readable  for  debugging  or
              documenting purposes.

          • --stats

            Emit statistics about various internal things.

          • --verbose

            Emit verbose logs about the progress of miscellaneous internal things.

USAGE EXAMPLES

          1. Emitting an ABIXML representation of a binary:

                 $ abidw binary > binary.abi

          2. Emitting  an  ABIXML  representation  of  a set of binaries specified on the command
             line:

                 $ abidw --added-binaries=bin1,bin2,bin3  \
                         --added-binaries-dir /some/where \
                         binary > binaries.abi

             Note that the binaries bin1, bin2  and  bin3  are  to  be  found  in  the  directory
             /some/where.   A representation of the ABI of the set of binaries binary, bin1, bin2
             and bin3 called an ABI corpus group is serialized in the file binaries.abi.

          3. Emitting an ABIXML representation of a binary and its dependencies:

                 $ abidw --follow-dependencies              \
                         --added-binaries-dir /some/where   \
                         binary > binary.abi

             Note that only the dependencies that are found  in  the  directory  /some/where  are
             analysed.  Their ABIs, along with the ABI the binary named binary are represented as
             an ABI corpus group and serialized in the file binary.abi, in the ABIXML format.

NOTES

   Alternate debug info files
       As of the version 4 of the DWARF specification,  Alternate  debug  information  is  a  GNU
       extension to the DWARF specification.  It has however been proposed for inclusion into the
       upcoming version 5 of the DWARF standard.  You can read more about the GNU  extensions  to
       the DWARF standard here.

AUTHOR

       Dodji Seketeli

COPYRIGHT

       2014-2024, Red Hat, Inc.

                                           Mar 31, 2024                                  ABIDW(1)