ABI: Application Binary Interface

Last modified : 30 October, 2018

So in my exploration of how a C++ compiler compiles code, I came across ABIs. As similar as they sound to APIs, there exists a distinction. Here are some resources that helped me understand it (superficially) :

  1. Wikipedia
  2. This stack overflow question
  3. System V x86-64 ABI : This document just shows the diff over x86 ABI (which is 32-bit).
  4. Documentation for Itanium C++ ABI
  5. Documentation for Itanium C++ ABI
  6. Compiler Writer documentation for LLVM : The ABI section mentions System V and Itanium.

Note that even though the Itanium architecture itself (IA64) is a dying instruction set architecture (ISA), the Itanium ABI is not.

Here are some tools that can help inspect binaries 1. libabigail-tools 2. abi-compliance-checker

$ abidiff zsh/5.3.1/zsh/files.so lib64/xtables/libxt_time.so
Functions changes summary: 0 Removed, 0 Changed, 0 Added function
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 6 Removed, 1 Added function symbols not referenced by debug info
Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info

6 Removed function symbols not referenced by debug info:

  boot_
  cleanup_
  enables_
  features_
  finish_
  setup_

1 Added function symbol not referenced by debug info:

  libxt_time_init

All content on this website is licensed as Creative Commons-Attribution-ShareAlike 4.0 License. Opinions expressed are solely my own.