mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-16 15:04:46 +00:00
d5d303b6c2
While reading the overview manual page some things stroke me as needing some cleanup, especially, the confusion about 'ABIGAIL' the framework and libabigail the library. * doc/manuals/libabigail-overview.rst: Cleanup some confusion about Abigail-the-framework and libabigail-the-library. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
48 lines
2.2 KiB
ReStructuredText
48 lines
2.2 KiB
ReStructuredText
####################
|
|
Overview of the Abigail framework
|
|
####################
|
|
|
|
**ABIGAIL** stands for the Application Binary Interface Generic
|
|
Analysis and Instrumentation Library.
|
|
|
|
It's a framework which aims at helping developers and software
|
|
distributors to spot some ABI-related issues like interface
|
|
incompatibility in `ELF`_ shared libraries by performing a static
|
|
analysis of the `ELF`_ binaries at hand.
|
|
|
|
The type of interface incompatibilities that **Abigail** focuses on is
|
|
related to changes on the exported ELF functions and variables
|
|
symbols, as well as layout and size changes of data types of the
|
|
functions and variables exported by shared libraries.
|
|
|
|
In other words, if the return type of a function exported by a shared
|
|
library changes in an incompatible way from one version of a given
|
|
shared library to another, we want **Abigail** to help people catch
|
|
that.
|
|
|
|
In more concrete terms, the Abigail framwork provides a shared library
|
|
named **libabigail** which exposes an API to parse a shared library in
|
|
`ELF`_ format (accompanied with its associated debug information in
|
|
`DWARF`_ format) build an internal representation of all the functions
|
|
and variables it exports, along with their types. **Libabigail** also
|
|
builds an internal representation of the `ELF symbols`_ of these
|
|
functions and variables. That information about these exported
|
|
functions and variables is roughly what we consider as being the ABI
|
|
of the shared library, at least, in the scope of **Libabigail**.
|
|
|
|
Aside of this internal representation, **libabigail** provides
|
|
facilities to perform deep comparisons of two ABIs. That is, it can
|
|
compare the types of two sets of functions or variables and represents
|
|
the result in a way that allows it to emit textual reports about the
|
|
differences.
|
|
|
|
This allows us to write tools like :doc:`abidiff` that can compare the
|
|
ABI of two shared libraries and represent the result in a meaningful
|
|
enough way to help us spot ABI incompatibilities. There are several
|
|
:doc:`other tools <libabigail-tools>` that are built using the
|
|
``Abigail`` framwork.
|
|
|
|
.. _ELF: http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
|
|
.. _DWARF: http://www.dwarfstd.org
|
|
.. _ELF symbols: https://blogs.oracle.com/ali/entry/inside_elf_symbol_tables
|