From Fedora Project Wiki
Line 1: Line 1:
= Introduction =
= Introduction =
The abicheck task helps verify that the '''Application Binary Interface''' (a.k.a. ABI) of newer versions of Fedora C and C++ shared libraries stays [https://fedoraproject.org/wiki/ABICompatibilityDefinitions compatible] with previous versions. This task is executed when a new Fedora package update is submitted.
The abicheck task helps verify that the '''Application Binary Interface''' (a.k.a. ABI) of a new versions of a Fedora C or C++ shared library stays [https://fedoraproject.org/wiki/ABICompatibilityDefinitions compatible] with its previous version. This task is executed when a new Fedora package is built by the [http://koji.fedoraproject.org Koji] build service.


= How does abicheck task work? =
= How does abicheck task work? =

Revision as of 11:14, 28 May 2016

Introduction

The abicheck task helps verify that the Application Binary Interface (a.k.a. ABI) of a new versions of a Fedora C or C++ shared library stays compatible with its previous version. This task is executed when a new Fedora package is built by the Koji build service.

How does abicheck task work?

For each new Koji build, all sub-packages for all architectures (armv7hl, i686 and x86_64) are downloaded along with their debug info packages. Sub-packages of the previous latest stable corresponding build available in koji are downloaded along with their debug info packages as well.

The task then invokes the abipkgdiff tool to compare the ABIs of each new sub-package against its previous stable counterpart. The ABI comparison is only performed on shared libraries presents in those packages.

Known deficiencies

Comparing the ABI of two shared libraries involves performing a deep static analysis of the binaries and their debug information. Information about (possibly all) types and declarations present in the binaries are loaded in main memory and analyzed. The bigger the library and its debug information, the more memory is needed to perform the analysis.

The amount of memory needed by the abipkgdiff tool can vary from a few Kilobytes for small libraries to many Gigabytes for huge libraries.

Right now, taskotron executes the abicheck task on a system with 6GB of RAM. This task will fail to run if the amount of memory required for ABI comparison is greater than 6 GB.

Dealing with Result

The outcome of the abicheck task run can be PASSED, FAILED or NEEDS_INSPECTION. Depending on the outcome, either one of the following actions should be taken:

  • PASSED: No ABI change has been found. No review of the ABI change report logs is thus required.
  • FAILED: Incompatible ABI changes have been found in one or more libraries contained in the package. These changes will almost certainly break applications or libraries that depend on this package. A thorough review of the ABI changes reported in the logs is thus required. Please provide a relevant justification for these ABI changes or come with a new build that fixes those changes.
  • NEEDS_INSPECTION: Some ABI changes have been found. As a result, the ABI of the package might or might not be incompatible with its previous version. It is thus highly recommended to look into the log containing the ABI change report and verify that the ABI changes are harmless. If the changes are harmful, then please submit new version of the package that fixes the issue.

Getting Help

For further help on understanding logs containing ABI change reports, you can subscribe to the libabigail mailing list and send an email there. You can also ask us on IRC by joining the #libabigail channel on the irc.oftc.net network.

If you see any issue in the generated ABI change report log, please report a bug to libabigail's bugzilla

For any feature request on the abicheck taskotron task, please create an issue on the abicheck task issue tracker.

Additional Information

  • Browse abicheck taskotron task source code at pagure