All Projects → clearlinux → abireport

clearlinux / abireport

Licence: Apache-2.0 license
Tool to create ABI reports from ELF binaries in packaging

Programming Languages

go
31211 projects - #10 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to abireport

elfinfo
Utility for displaying which compiler was used for creating an ELF file + basic info
Stars: ✭ 22 (+37.5%)
Mutual labels:  elf
boilerplate-typescript-rest-docker
How to use TypeScript & Docker building a REST service with debugging enabled (e.g. WebStorm or VSCode).
Stars: ✭ 17 (+6.25%)
Mutual labels:  continuous-integration
badwolf
Docker based continuous integration, continuous deployment and code lint review system for BitBucket
Stars: ✭ 88 (+450%)
Mutual labels:  continuous-integration
yaml-update-action
Update YAML property with dynamic values
Stars: ✭ 81 (+406.25%)
Mutual labels:  continuous-integration
gdb-memstr
Generate arbitrary strings out of contents of ELF sections
Stars: ✭ 13 (-18.75%)
Mutual labels:  elf
elfloader
ARMv7M ELF loader
Stars: ✭ 71 (+343.75%)
Mutual labels:  elf
docker-php-censor
Containers for PHP Censor CI system
Stars: ✭ 19 (+18.75%)
Mutual labels:  continuous-integration
maestro
Faster CI/CD for multi-artifact projects
Stars: ✭ 13 (-18.75%)
Mutual labels:  continuous-integration
civet
Continuous Integration, Verification, Enhancement, and Testing
Stars: ✭ 30 (+87.5%)
Mutual labels:  continuous-integration
on-demand
CloudFormation resources for scheduling On-Demand Buildkite Agents with AWS ECS and AWS Fargate
Stars: ✭ 19 (+18.75%)
Mutual labels:  continuous-integration
k8s.ecoysystem.apps
kubernetes(k8s) ecosystem applications written c#, including micro-service(aspnetcore.webapi) and health checks etc. the goal is automatic complete continuous integration, delivery, deployment by committing code to the respository. so i will continue to be iterated...
Stars: ✭ 16 (+0%)
Mutual labels:  continuous-integration
scikit-ci
Simpler and centralized CI configuration for Python extensions.
Stars: ✭ 15 (-6.25%)
Mutual labels:  continuous-integration
ELFPatch
A library for patching ELFs
Stars: ✭ 46 (+187.5%)
Mutual labels:  elf
tiller-circleci
Deploy Trellis, Bedrock and Sage via CircleCI
Stars: ✭ 14 (-12.5%)
Mutual labels:  continuous-integration
compile-sketches
GitHub Actions action that checks whether Arduino sketches compile and produces a report of data from the compilations
Stars: ✭ 35 (+118.75%)
Mutual labels:  continuous-integration
ghidra2dwarf
🐉 Export ghidra decompiled code to dwarf sections inside ELF binary
Stars: ✭ 135 (+743.75%)
Mutual labels:  elf
py-dependency-install
A GitHub Action that installs Python package dependencies from a user-defined requirements.txt file path with optional pip, setuptools, and wheel installs/updates
Stars: ✭ 23 (+43.75%)
Mutual labels:  continuous-integration
elf-stuff
Compilation of ELF Packers and ELF obfuscation / Anti-Debugging stuff
Stars: ✭ 20 (+25%)
Mutual labels:  elf
HaxeCI
An example of using CI for Haxe projects.
Stars: ✭ 45 (+181.25%)
Mutual labels:  continuous-integration
CVIP
C/C++/Golang/Linux...知识整理
Stars: ✭ 62 (+287.5%)
Mutual labels:  elf

abireport

Report License

A distro-agnostic tool for creating Application Binary Interface (ABI) reports from a set of binary packages. This tool is intended to assist packagers & developers of Linux distributions. It should be run at the end of the build, or even during the final stages of the build using the scan-tree root to be as unobtrusive as possible.

The tool, when invoked with scan-packages, will explode the packages requested, and perform an analysis of the binaries inside. From this, we create two files:

symbols

A $soname:$symbol mapping which describes the ABI of the package as a whole. This is sorted first by soname, second by symbol name:

    libgdk-3.so.0:gdk_x11_window_set_utf8_property
    libgdk-3.so.0:gdk_x11_xatom_to_atom
    libgdk-3.so.0:gdk_x11_xatom_to_atom_for_display
    libgtk-3.so.0:gtk_about_dialog_add_credit_section
    libgtk-3.so.0:gtk_about_dialog_get_artists
    libgtk-3.so.0:gtk_about_dialog_get_authors

used_libs

This file contains an alphabetically sorted list of binary dependencies for the package(s) as a whole. This is taken from the DT_NEEDED ELF tag. This helps to verify that a change to the package has really taken, such as using new ABI (soname version) or a new library appearing in the list due to enabling.

    libX11.so.6
    libXcomposite.so.1
    libXcursor.so.1
    libXdamage.so.1
    libXext.so.6

These files, when used with diff tools (i.e. git diff) make it very trivial to anticipite and deal with ABI breaks.

Multiple architectures

In many distributions, multilib or multiarch is employed. abireport will assign a unique suffix to each of these architectures to have a view on a per architecture basis. Currently, an x86_64 file will have no suffix, and x86 file will have the 32 suffix, etc. If you need a suffix added, please just open an issue.

Integrating

After your normal build routine, issue a call to abireport scan-packages. Note that this will decompress the binary packages in the directory first, so for maximum performance you should integrate into the build system itself. By default abireport is highly parallel so almost all of the time spent executing abireport is the decompression of packages.

Currently, abireport knows how to handle 3 package types:

  • *.deb
  • *.rpm
  • *.eopkg

More will be accepted by issue or pull request. In the event of a pull request, please ensure you run make compliant before sending, to ensure speedy integration of your code.

You may encapsulate abireport by using the scan-tree command after having decompressed the files yourself. If used against the true package build root, this zero-copy approach is significantly faster.

You should always store the current abireport results in your tree history, i.e. in git. Subsequent rebuilds will then automatically create a diff so that you can immediately see any actions that should be taken.

Implementation details

The dependencies are evaluated using the DT_NEEDED tag, thus only direct dependencies are considered. Before emitting the report, abireport will check in the library names (ET_DYN files) to see if the name is provided. If so, it is omitted.

Symbols are only exported if they meet certain export criteria. That is, they must be an ET_DYN ELF with a valid soname, and living in a valid library directory. That means that RPATH-bound libraries are not exported.

This may affect some package which use a private RPATH'd library. From the viewpoint of abireport, such private libraries do not constitute a true ABI, given that many distributions are opposed to the use of RPATH. In effect, these are actually plugins (unversioned libraries).

License

Apache-2.0

Copyright © 2016-2017 Intel Corporation

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].