1e01aa904Sopenharmony_ci
2e01aa904Sopenharmony_ci======
3e01aa904Sopenharmony_ciabidw
4e01aa904Sopenharmony_ci======
5e01aa904Sopenharmony_ci
6e01aa904Sopenharmony_ciabidw reads a shared library in `ELF`_ format and emits an XML
7e01aa904Sopenharmony_cirepresentation of its ABI to standard output.  The emitted
8e01aa904Sopenharmony_cirepresentation format, named ``ABIXML``, includes all the globally
9e01aa904Sopenharmony_cidefined functions and variables, along with a complete representation
10e01aa904Sopenharmony_ciof their types.  It also includes a representation of the globally
11e01aa904Sopenharmony_cidefined ELF symbols of the file.
12e01aa904Sopenharmony_ci
13e01aa904Sopenharmony_ciWhen given the ``--linux-tree`` option, this program can also handle a
14e01aa904Sopenharmony_ci`Linux kernel`_ tree.  That is, a directory tree that contains both
15e01aa904Sopenharmony_cithe vmlinux binary and `Linux Kernel`_ modules.  It analyses those
16e01aa904Sopenharmony_ci`Linux Kernel`_ binaries and emits an XML representation of the
17e01aa904Sopenharmony_ciinterface between the kernel and its module, to standard output.  In
18e01aa904Sopenharmony_cithis case, we don't call it an ABI, but a KMI (Kernel Module
19e01aa904Sopenharmony_ciInterface).  The emitted KMI includes all the globally defined
20e01aa904Sopenharmony_cifunctions and variables, along with a complete representation of their
21e01aa904Sopenharmony_citypes.
22e01aa904Sopenharmony_ci
23e01aa904Sopenharmony_ciTo generate either ABI or KMI representation, by default ``abidw``
24e01aa904Sopenharmony_ciuses debug information in `DWARF`_ format, if present, otherwise it
25e01aa904Sopenharmony_cilooks for debug information in `CTF`_ format, if present, finally, if
26e01aa904Sopenharmony_cineither is found, it uses only `ELF`_ symbols to report which of them
27e01aa904Sopenharmony_ciwere added or removed.
28e01aa904Sopenharmony_ci
29e01aa904Sopenharmony_ci.. include:: tools-use-libabigail.txt
30e01aa904Sopenharmony_ci
31e01aa904Sopenharmony_ci.. _abidiff_invocation_label:
32e01aa904Sopenharmony_ci
33e01aa904Sopenharmony_ciInvocation
34e01aa904Sopenharmony_ci==========
35e01aa904Sopenharmony_ci
36e01aa904Sopenharmony_ci::
37e01aa904Sopenharmony_ci
38e01aa904Sopenharmony_ci  abidw [options] [<path-to-elf-file>]
39e01aa904Sopenharmony_ci
40e01aa904Sopenharmony_ciOptions
41e01aa904Sopenharmony_ci=======
42e01aa904Sopenharmony_ci
43e01aa904Sopenharmony_ci  * ``--help | -h``
44e01aa904Sopenharmony_ci
45e01aa904Sopenharmony_ci    Display a short help about the command and exit.
46e01aa904Sopenharmony_ci
47e01aa904Sopenharmony_ci  * `--version | -v`
48e01aa904Sopenharmony_ci
49e01aa904Sopenharmony_ci    Display the version of the program and exit.
50e01aa904Sopenharmony_ci
51e01aa904Sopenharmony_ci  * `--abixml-version`
52e01aa904Sopenharmony_ci
53e01aa904Sopenharmony_ci    Display the version of the ABIXML format emitted by this program and exit.
54e01aa904Sopenharmony_ci
55e01aa904Sopenharmony_ci  * ``--debug-info-dir | -d`` <*dir-path*>
56e01aa904Sopenharmony_ci
57e01aa904Sopenharmony_ci    In cases where the debug info for *path-to-elf-file* is in a
58e01aa904Sopenharmony_ci    separate file that is located in a non-standard place, this tells
59e01aa904Sopenharmony_ci    ``abidw`` where to look for that debug info file.
60e01aa904Sopenharmony_ci
61e01aa904Sopenharmony_ci    Note that *dir-path* must point to the root directory under which
62e01aa904Sopenharmony_ci    the debug information is arranged in a tree-like manner.  Under
63e01aa904Sopenharmony_ci    Red Hat based systems, that directory is usually
64e01aa904Sopenharmony_ci    ``<root>/usr/lib/debug``.
65e01aa904Sopenharmony_ci
66e01aa904Sopenharmony_ci    This option can be provided several times with different root
67e01aa904Sopenharmony_ci    directories.  In that case, ``abidw`` will potentially look into
68e01aa904Sopenharmony_ci    all those root directories to find the split debug info for the
69e01aa904Sopenharmony_ci    elf file.
70e01aa904Sopenharmony_ci
71e01aa904Sopenharmony_ci    Note that this option is not mandatory for split debug information
72e01aa904Sopenharmony_ci    installed by your system's package manager because then
73e01aa904Sopenharmony_ci    ``abidw`` knows where to find it.
74e01aa904Sopenharmony_ci
75e01aa904Sopenharmony_ci  * ``--out-file`` <*file-path*>
76e01aa904Sopenharmony_ci
77e01aa904Sopenharmony_ci    This option instructs ``abidw`` to emit the XML representation of
78e01aa904Sopenharmony_ci    *path-to-elf-file* into the file *file-path*, rather than emitting
79e01aa904Sopenharmony_ci    it to its standard output.
80e01aa904Sopenharmony_ci
81e01aa904Sopenharmony_ci  * ``--noout``
82e01aa904Sopenharmony_ci
83e01aa904Sopenharmony_ci    This option instructs ``abidw`` to not emit the XML representation
84e01aa904Sopenharmony_ci    of the ABI.  So it only reads the ELF and debug information,
85e01aa904Sopenharmony_ci    builds the internal representation of the ABI and exits.  This
86e01aa904Sopenharmony_ci    option is usually useful for debugging purposes.
87e01aa904Sopenharmony_ci
88e01aa904Sopenharmony_ci  * ``--no-corpus-path``
89e01aa904Sopenharmony_ci
90e01aa904Sopenharmony_ci    Do not emit the path attribute for the ABI corpus.
91e01aa904Sopenharmony_ci
92e01aa904Sopenharmony_ci  * ``--suppressions | suppr`` <*path-to-suppression-specifications-file*>
93e01aa904Sopenharmony_ci
94e01aa904Sopenharmony_ci    Use a :ref:`suppression specification <suppr_spec_label>` file
95e01aa904Sopenharmony_ci    located at *path-to-suppression-specifications-file*.  Note that
96e01aa904Sopenharmony_ci    this option can appear multiple times on the command line.  In
97e01aa904Sopenharmony_ci    that case, all of the provided suppression specification files are
98e01aa904Sopenharmony_ci    taken into account.  ABI artifacts matched by the suppression
99e01aa904Sopenharmony_ci    specifications are suppressed from the output of this tool.
100e01aa904Sopenharmony_ci
101e01aa904Sopenharmony_ci
102e01aa904Sopenharmony_ci  * ``--kmi-whitelist | -kaw`` <*path-to-whitelist*>
103e01aa904Sopenharmony_ci
104e01aa904Sopenharmony_ci    When analyzing a `Linux Kernel`_ binary, this option points to the
105e01aa904Sopenharmony_ci    white list of names of ELF symbols of functions and variables
106e01aa904Sopenharmony_ci    which ABI must be written out.  That white list is called a "
107e01aa904Sopenharmony_ci    Kernel Module Interface white list".  This is because for the
108e01aa904Sopenharmony_ci    Kernel, we don't talk about the ABI; we rather talk about the
109e01aa904Sopenharmony_ci    interface between the Kernel and its module. Hence the term
110e01aa904Sopenharmony_ci    ``KMI`` rather than ``ABI``
111e01aa904Sopenharmony_ci
112e01aa904Sopenharmony_ci    Any other function or variable which ELF symbol are not present in
113e01aa904Sopenharmony_ci    that white list will not be considered by the KMI writing process.
114e01aa904Sopenharmony_ci
115e01aa904Sopenharmony_ci    If this option is not provided -- thus if no white list is
116e01aa904Sopenharmony_ci    provided -- then the entire KMI, that is, all publicly defined and
117e01aa904Sopenharmony_ci    exported functions and global variables by the `Linux Kernel`_
118e01aa904Sopenharmony_ci    binaries is emitted.
119e01aa904Sopenharmony_ci    
120e01aa904Sopenharmony_ci  * ``--linux-tree | --lt``
121e01aa904Sopenharmony_ci
122e01aa904Sopenharmony_ci    Make ``abidw`` to consider the input path as a path to a directory
123e01aa904Sopenharmony_ci    containing the vmlinux binary as several kernel modules binaries.
124e01aa904Sopenharmony_ci    In that case, this program emits the representation of the Kernel
125e01aa904Sopenharmony_ci    Module Interface (KMI) on the standard output.
126e01aa904Sopenharmony_ci
127e01aa904Sopenharmony_ci    Below is an example of usage of ``abidw`` on a `Linux Kernel`_
128e01aa904Sopenharmony_ci    tree.
129e01aa904Sopenharmony_ci
130e01aa904Sopenharmony_ci    First, checkout a `Linux Kernel`_ source tree and build it.  Then
131e01aa904Sopenharmony_ci    install the kernel modules in a directory somewhere.  Copy the
132e01aa904Sopenharmony_ci    vmlinux binary into that directory too.  And then serialize the
133e01aa904Sopenharmony_ci    KMI of that kernel to disk, using ``abidw``: ::
134e01aa904Sopenharmony_ci
135e01aa904Sopenharmony_ci       $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
136e01aa904Sopenharmony_ci       $ cd linux && git checkout v4.5
137e01aa904Sopenharmony_ci       $ make allyesconfig all
138e01aa904Sopenharmony_ci       $ mkdir build-output
139e01aa904Sopenharmony_ci       $ make INSTALL_MOD_PATH=./build-output modules_install 
140e01aa904Sopenharmony_ci       $ cp vmlinux build-output/modules/4.5.0
141e01aa904Sopenharmony_ci       $ abidw --linux-tree build-output/modules/4.5.0 > build-output/linux-4.5.0.kmi
142e01aa904Sopenharmony_ci
143e01aa904Sopenharmony_ci  * ``--headers-dir | --hd`` <headers-directory-path-1>
144e01aa904Sopenharmony_ci
145e01aa904Sopenharmony_ci    Specifies where to find the public headers of the binary that the
146e01aa904Sopenharmony_ci    tool has to consider.  The tool will thus filter out types that
147e01aa904Sopenharmony_ci    are not defined in public headers.
148e01aa904Sopenharmony_ci
149e01aa904Sopenharmony_ci    Note that several public header directories can be specified for
150e01aa904Sopenharmony_ci    the binary to consider.  In that case the ``--header-dir`` option
151e01aa904Sopenharmony_ci    should be present several times on the command line, like in the
152e01aa904Sopenharmony_ci    following example: ::
153e01aa904Sopenharmony_ci
154e01aa904Sopenharmony_ci      $ abidw --header-dir /some/path       \
155e01aa904Sopenharmony_ci              --header-dir /some/other/path \
156e01aa904Sopenharmony_ci              binary > binary.abi
157e01aa904Sopenharmony_ci
158e01aa904Sopenharmony_ci  * ``--header-file | --hf`` <header-file-path>
159e01aa904Sopenharmony_ci
160e01aa904Sopenharmony_ci    Specifies where to find one of the public headers of the abi file
161e01aa904Sopenharmony_ci    that the tool has to consider.  The tool will thus filter out
162e01aa904Sopenharmony_ci    types that are not defined in public headers.
163e01aa904Sopenharmony_ci
164e01aa904Sopenharmony_ci  * ``--drop-private-types``
165e01aa904Sopenharmony_ci
166e01aa904Sopenharmony_ci    This option is to be used with the ``--headers-dir`` and/or
167e01aa904Sopenharmony_ci    ``header-file`` options.  With this option, types that are *NOT*
168e01aa904Sopenharmony_ci    defined in the headers are entirely dropped from the internal
169e01aa904Sopenharmony_ci    representation build by Libabigail to represent the ABI and will
170e01aa904Sopenharmony_ci    not end up in the abi XML file.
171e01aa904Sopenharmony_ci
172e01aa904Sopenharmony_ci  * ``--no-elf-needed``
173e01aa904Sopenharmony_ci
174e01aa904Sopenharmony_ci    Do not include the list of DT_NEEDED dependency names in the
175e01aa904Sopenharmony_ci    corpus.
176e01aa904Sopenharmony_ci
177e01aa904Sopenharmony_ci  * ``--drop-undefined-syms``
178e01aa904Sopenharmony_ci
179e01aa904Sopenharmony_ci    With this option functions or variables for which the (exported)
180e01aa904Sopenharmony_ci    ELF symbol is undefined are dropped from the internal
181e01aa904Sopenharmony_ci    representation build by Libabigail to represent the ABI and will
182e01aa904Sopenharmony_ci    not end up in the abi XML file.
183e01aa904Sopenharmony_ci
184e01aa904Sopenharmony_ci  * ``--exported-interfaces-only``
185e01aa904Sopenharmony_ci
186e01aa904Sopenharmony_ci    By default, when looking at the debug information accompanying a
187e01aa904Sopenharmony_ci    binary, this tool analyzes the descriptions of the types reachable
188e01aa904Sopenharmony_ci    by the interfaces (functions and variables) that are visible
189e01aa904Sopenharmony_ci    outside of their translation unit.  Once that analysis is done, an
190e01aa904Sopenharmony_ci    ABI corpus is constructed by only considering the subset of types
191e01aa904Sopenharmony_ci    reachable from interfaces associated to `ELF`_ symbols that are
192e01aa904Sopenharmony_ci    defined and exported by the binary.  It's that final ABI corpus
193e01aa904Sopenharmony_ci    which textual representation is saved as ``ABIXML``.
194e01aa904Sopenharmony_ci
195e01aa904Sopenharmony_ci    The problem with that approach however is that analyzing all the
196e01aa904Sopenharmony_ci    interfaces that are visible from outside their translation unit
197e01aa904Sopenharmony_ci    can amount to a lot of data, especially when those binaries are
198e01aa904Sopenharmony_ci    applications, as opposed to shared libraries.  One example of such
199e01aa904Sopenharmony_ci    applications is the `Linux Kernel`_.  Analyzing massive ABI
200e01aa904Sopenharmony_ci    corpora like these can be extremely slow.
201e01aa904Sopenharmony_ci
202e01aa904Sopenharmony_ci    To mitigate that performance issue, this option allows libabigail
203e01aa904Sopenharmony_ci    to only analyze types that are reachable from interfaces
204e01aa904Sopenharmony_ci    associated with defined and exported `ELF`_ symbols.
205e01aa904Sopenharmony_ci
206e01aa904Sopenharmony_ci    Note that this option is turned on by default when analyzing the
207e01aa904Sopenharmony_ci    `Linux Kernel`_.  Otherwise, it's turned off by default.
208e01aa904Sopenharmony_ci
209e01aa904Sopenharmony_ci  * ``--allow-non-exported-interfaces``
210e01aa904Sopenharmony_ci
211e01aa904Sopenharmony_ci    When looking at the debug information accompanying a binary, this
212e01aa904Sopenharmony_ci    tool analyzes the descriptions of the types reachable by the
213e01aa904Sopenharmony_ci    interfaces (functions and variables) that are visible outside of
214e01aa904Sopenharmony_ci    their translation unit.  Once that analysis is done, an ABI corpus
215e01aa904Sopenharmony_ci    is constructed by only considering the subset of types reachable
216e01aa904Sopenharmony_ci    from interfaces associated to `ELF`_ symbols that are defined and
217e01aa904Sopenharmony_ci    exported by the binary.  It's that final ABI corpus which textual
218e01aa904Sopenharmony_ci    representation is saved as ``ABIXML``.
219e01aa904Sopenharmony_ci
220e01aa904Sopenharmony_ci    The problem with that approach however is that analyzing all the
221e01aa904Sopenharmony_ci    interfaces that are visible from outside their translation unit
222e01aa904Sopenharmony_ci    can amount to a lot of data, especially when those binaries are
223e01aa904Sopenharmony_ci    applications, as opposed to shared libraries.  One example of such
224e01aa904Sopenharmony_ci    applications is the `Linux Kernel`_.  Analyzing massive ABI
225e01aa904Sopenharmony_ci    corpora like these can be extremely slow.
226e01aa904Sopenharmony_ci
227e01aa904Sopenharmony_ci    In the presence of an "average sized" binary however one can
228e01aa904Sopenharmony_ci    afford having libabigail analyze all interfaces that are visible
229e01aa904Sopenharmony_ci    outside of their translation unit, using this option.
230e01aa904Sopenharmony_ci
231e01aa904Sopenharmony_ci    Note that this option is turned on by default, unless we are in
232e01aa904Sopenharmony_ci    the presence of the `Linux Kernel`_.
233e01aa904Sopenharmony_ci
234e01aa904Sopenharmony_ci  * ``--no-linux-kernel-mode``
235e01aa904Sopenharmony_ci
236e01aa904Sopenharmony_ci    Without this option, if abipkgiff detects that the binaries it is
237e01aa904Sopenharmony_ci    looking at are Linux Kernel binaries (either vmlinux or modules)
238e01aa904Sopenharmony_ci    then it only considers functions and variables which ELF symbols
239e01aa904Sopenharmony_ci    are listed in the __ksymtab and __ksymtab_gpl sections.
240e01aa904Sopenharmony_ci
241e01aa904Sopenharmony_ci    With this option, abipkgdiff considers the binary as a non-special
242e01aa904Sopenharmony_ci    ELF binary.  It thus considers functions and variables which are
243e01aa904Sopenharmony_ci    defined and exported in the ELF sense.
244e01aa904Sopenharmony_ci
245e01aa904Sopenharmony_ci  * ``--check-alternate-debug-info`` <*elf-path*>
246e01aa904Sopenharmony_ci
247e01aa904Sopenharmony_ci    If the debug info for the file *elf-path* contains a reference to
248e01aa904Sopenharmony_ci    an `alternate debug info <alt-di-label>`_ file, ``abidw`` checks
249e01aa904Sopenharmony_ci    that it can find that alternate debug info file.  In that case, it
250e01aa904Sopenharmony_ci    emits a meaningful success message mentioning the full path to the
251e01aa904Sopenharmony_ci    alternate debug info file found.  Otherwise, it emits an error
252e01aa904Sopenharmony_ci    code.
253e01aa904Sopenharmony_ci
254e01aa904Sopenharmony_ci  * ``--no-show-locs``
255e01aa904Sopenharmony_ci
256e01aa904Sopenharmony_ci   In the emitted ABI representation, do not show file, line or column
257e01aa904Sopenharmony_ci   where ABI artifacts are defined.
258e01aa904Sopenharmony_ci
259e01aa904Sopenharmony_ci  * ``--no-parameter-names``
260e01aa904Sopenharmony_ci
261e01aa904Sopenharmony_ci    In the emitted ABI representation, do not show names of function
262e01aa904Sopenharmony_ci    parameters, just the types.
263e01aa904Sopenharmony_ci
264e01aa904Sopenharmony_ci  * ``--no-write-default-sizes``
265e01aa904Sopenharmony_ci
266e01aa904Sopenharmony_ci    In the XML ABI representation, do not write the size-in-bits for
267e01aa904Sopenharmony_ci    pointer type definitions, reference type definitions, function
268e01aa904Sopenharmony_ci    declarations and function types when they are equal to the default
269e01aa904Sopenharmony_ci    address size of the translation unit.  Note that libabigail before
270e01aa904Sopenharmony_ci    1.8 will not set the default size and will interpret types without
271e01aa904Sopenharmony_ci    a size-in-bits attribute as zero sized.
272e01aa904Sopenharmony_ci
273e01aa904Sopenharmony_ci  * ``--type-id-style`` <``sequence``|``hash``>
274e01aa904Sopenharmony_ci
275e01aa904Sopenharmony_ci    This option controls how types are idenfied in the generated XML
276e01aa904Sopenharmony_ci    files.  The default ``sequence`` style just numbers (with
277e01aa904Sopenharmony_ci    ``type-id-`` as prefix) the types in the order they are
278e01aa904Sopenharmony_ci    encountered.  The ``hash`` style uses a (stable, portable) hash of
279e01aa904Sopenharmony_ci    libabigail's internal type names and is intended to make the XML
280e01aa904Sopenharmony_ci    files easier to diff.
281e01aa904Sopenharmony_ci
282e01aa904Sopenharmony_ci  * ``--check-alternate-debug-info-base-name`` <*elf-path*>
283e01aa904Sopenharmony_ci
284e01aa904Sopenharmony_ci
285e01aa904Sopenharmony_ci    Like ``--check-alternate-debug-info``, but in the success message,
286e01aa904Sopenharmony_ci    only mention the base name of the debug info file; not its full path.
287e01aa904Sopenharmony_ci
288e01aa904Sopenharmony_ci  * ``--load-all-types``
289e01aa904Sopenharmony_ci
290e01aa904Sopenharmony_ci    By default, ``libabigail`` (and thus ``abidw``) only loads types
291e01aa904Sopenharmony_ci    that are reachable from functions and variables declarations that
292e01aa904Sopenharmony_ci    are publicly defined and exported by the binary.  So only those
293e01aa904Sopenharmony_ci    types are present in the output of ``abidw``.  This option however
294e01aa904Sopenharmony_ci    makes ``abidw`` load *all* the types defined in the binaries, even
295e01aa904Sopenharmony_ci    those that are not reachable from public declarations.
296e01aa904Sopenharmony_ci
297e01aa904Sopenharmony_ci  *  ``--abidiff``
298e01aa904Sopenharmony_ci
299e01aa904Sopenharmony_ci    Load the ABI of the ELF binary given in argument, save it in
300e01aa904Sopenharmony_ci    libabigail's XML format in a temporary file; read the ABI from the
301e01aa904Sopenharmony_ci    temporary XML file and compare the ABI that has been read back
302e01aa904Sopenharmony_ci    against the ABI of the ELF binary given in argument.  The ABIs
303e01aa904Sopenharmony_ci    should compare equal.  If they don't, the program emits a
304e01aa904Sopenharmony_ci    diagnostic and exits with a non-zero code.
305e01aa904Sopenharmony_ci
306e01aa904Sopenharmony_ci    This is a debugging and sanity check option.
307e01aa904Sopenharmony_ci
308e01aa904Sopenharmony_ci    *  ``--debug-abidiff``
309e01aa904Sopenharmony_ci
310e01aa904Sopenharmony_ci    Same as ``--abidiff`` but in debug mode.  In this mode, error
311e01aa904Sopenharmony_ci    messages are emitted for types which fail type canonicalization.
312e01aa904Sopenharmony_ci
313e01aa904Sopenharmony_ci    This is an optional debugging and sanity check option.  To enable
314e01aa904Sopenharmony_ci    it the libabigail package needs to be configured with
315e01aa904Sopenharmony_ci    the --enable-debug-self-comparison option.
316e01aa904Sopenharmony_ci
317e01aa904Sopenharmony_ci    *  ``--debug-type-canonicalization | --debug-tc``
318e01aa904Sopenharmony_ci
319e01aa904Sopenharmony_ci    Debug the type canonicalization process.  This is done by using
320e01aa904Sopenharmony_ci    structural and canonical equality when canonicalizing every single
321e01aa904Sopenharmony_ci    type.  Structural and canonical equality should yield the same
322e01aa904Sopenharmony_ci    result.  If they don't yield the same result for a given type,
323e01aa904Sopenharmony_ci    then it means that the canonicalization of that type went wrong.
324e01aa904Sopenharmony_ci    In that case, an error message is emitted and the execution of the
325e01aa904Sopenharmony_ci    program is aborted.
326e01aa904Sopenharmony_ci
327e01aa904Sopenharmony_ci    This option is available only if the package was configured with
328e01aa904Sopenharmony_ci    the --enable-debug-type-canonicalization option.
329e01aa904Sopenharmony_ci
330e01aa904Sopenharmony_ci  * ``--no-assume-odr-for-cplusplus``
331e01aa904Sopenharmony_ci
332e01aa904Sopenharmony_ci    When analysing a binary originating from C++ code using `DWARF`_
333e01aa904Sopenharmony_ci    debug information, libabigail assumes the `One Definition Rule`_
334e01aa904Sopenharmony_ci    to speed-up the analysis.  In that case, when several types have
335e01aa904Sopenharmony_ci    the same name in the binary, they are assumed to all be equal.
336e01aa904Sopenharmony_ci
337e01aa904Sopenharmony_ci    This option disables that assumption and instructs libabigail to
338e01aa904Sopenharmony_ci    actually actually compare the types to determine if they are
339e01aa904Sopenharmony_ci    equal.
340e01aa904Sopenharmony_ci
341e01aa904Sopenharmony_ci  * ``--no-leverage-dwarf-factorization``
342e01aa904Sopenharmony_ci
343e01aa904Sopenharmony_ci    When analysing a binary which `DWARF`_ debug information was
344e01aa904Sopenharmony_ci    processed with the `DWZ`_ tool, the type information is supposed
345e01aa904Sopenharmony_ci    to be already factorized.  That context is used by libabigail to
346e01aa904Sopenharmony_ci    perform some speed optimizations.
347e01aa904Sopenharmony_ci
348e01aa904Sopenharmony_ci    This option disables those optimizations.
349e01aa904Sopenharmony_ci
350e01aa904Sopenharmony_ci  * ``--ctf``
351e01aa904Sopenharmony_ci
352e01aa904Sopenharmony_ci    Extract ABI information from `CTF`_ debug information, if present in
353e01aa904Sopenharmony_ci    the given object.
354e01aa904Sopenharmony_ci
355e01aa904Sopenharmony_ci  *  ``--annotate``
356e01aa904Sopenharmony_ci
357e01aa904Sopenharmony_ci    Annotate the ABIXML output with comments above most elements.  The
358e01aa904Sopenharmony_ci    comments are made of the pretty-printed form types, declaration or
359e01aa904Sopenharmony_ci    even ELF symbols.  The purpose is to make the ABIXML output more
360e01aa904Sopenharmony_ci    human-readable for debugging or documenting purposes.
361e01aa904Sopenharmony_ci
362e01aa904Sopenharmony_ci  * ``--stats``
363e01aa904Sopenharmony_ci
364e01aa904Sopenharmony_ci    Emit statistics about various internal things.
365e01aa904Sopenharmony_ci
366e01aa904Sopenharmony_ci  * ``--verbose``
367e01aa904Sopenharmony_ci
368e01aa904Sopenharmony_ci    Emit verbose logs about the progress of miscellaneous internal
369e01aa904Sopenharmony_ci    things.
370e01aa904Sopenharmony_ci
371e01aa904Sopenharmony_ciNotes
372e01aa904Sopenharmony_ci=====
373e01aa904Sopenharmony_ci
374e01aa904Sopenharmony_ci.. _alt-di-label:
375e01aa904Sopenharmony_ci
376e01aa904Sopenharmony_ciAlternate debug info files
377e01aa904Sopenharmony_ci--------------------------
378e01aa904Sopenharmony_ci
379e01aa904Sopenharmony_ciAs of the version 4 of the DWARF specification, `Alternate debug
380e01aa904Sopenharmony_ciinformation <http://www.dwarfstd.org/ShowIssue.php?issue=120604.1>`_
381e01aa904Sopenharmony_ciis a `GNU`_ extension to the DWARF specification.  It has however been
382e01aa904Sopenharmony_ciproposed for inclusion into the upcoming version 5 of the DWARF
383e01aa904Sopenharmony_cistandard.  You can read more about the GNU extensions to the DWARF
384e01aa904Sopenharmony_cistandard `here
385e01aa904Sopenharmony_ci<https://fedorahosted.org/elfutils/wiki/DwarfExtensions>`_.
386e01aa904Sopenharmony_ci
387e01aa904Sopenharmony_ci.. _ELF: http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
388e01aa904Sopenharmony_ci.. _DWARF: http://www.dwarfstd.org
389e01aa904Sopenharmony_ci.. _GNU: http://www.gnu.org
390e01aa904Sopenharmony_ci.. _Linux Kernel: https://kernel.org/
391e01aa904Sopenharmony_ci.. _CTF: https://raw.githubusercontent.com/wiki/oracle/binutils-gdb/files/ctf-spec.pdf
392e01aa904Sopenharmony_ci.. _ODR: https://en.wikipedia.org/wiki/One_Definition_Rule
393e01aa904Sopenharmony_ci.. _One Definition Rule: https://en.wikipedia.org/wiki/One_Definition_Rule
394e01aa904Sopenharmony_ci.. _DWZ: https://sourceware.org/dwz
395