ABIDW(1) Libabigail ABIDW(1)
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 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. The input shared library
must contain associated debug information in DWARF format.
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. The
input binaries must contain associated debug information in DWARF format.
abidw [options] [<path-to-elf-file>]
· --help | -h
Display a short help about the command and exit.
· –version | -v
Display the version of the program and exit.
· --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
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
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.
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.
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-specifica‐
tions-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 Ker‐
nel, we don’t talk about the ABI; we rather talk about the interface between the Ker‐
nel 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 rep‐
resentation 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 first shared library that the tool
has to consider. The tool will thus filter out types that are not defined in public
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 sec‐
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
· --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.
In the emitted ABI representation, do not show file, line or column where ABI arti‐
facts are defined.
· --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.
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.
Load the ABI of the ELF binary given in argument, save it in libabigail’s XML for‐
mat 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.
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 pur‐
pose is to make the ABIXML output more human-readable for debugging or documenting
Emit statistics about various internal things.
Emit verbose logs about the progress of miscellaneous internal things.
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.
2014-2018, Red Hat, Inc.
Apr 24, 2018 ABIDW(1)