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