Interface aspects covered by an ABI include:
ABIs include the Intel Binary Compatibility Standard (iBCS)3 and the System V Release 4 ABIs for various instruction sets.
An embedded ABI (EABI), used on an embedded operating system, specifies aspects such as file formats, data types, register usage, stack frame organization, and function parameter passing of an embedded software program.
Each compiler and assembler that supports an EABI creates object code that is compatible with code generated by other such compilers and assemblers. This allows developers to link libraries generated by one compiler with object code generated by another.
Typically, an EABI is optimized for performance for the limited resources of the target embedded system. Therefore, an EABI may omit abstractions between kernel and user space typically found in desktop operating systems. For example, dynamic linking may be avoided to allow smaller executables and faster loading, fixed register usage allows more compact stacks and kernel calls, and running the application in privileged mode allows direct access to custom hardware operation without the indirection of calling a device driver.4 The choice of EABI can affect performance.56
Widely used EABIs include the PowerPC,7 Arm,8 and MIPS EABIs.9 Specific software implementations like the C library may impose additional limitations to form more concrete ABIs; one example is the GNU OABI and EABI for ARM, both of which are subsets of the ARM EABI.10
"Itanium C++ ABI". (compatible with multiple architectures) https://itanium-cxx-abi.github.io/cxx-abi/ ↩
"Itanium C++ ABI: Exception Handling". (compatible with multiple architectures) http://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html ↩
"Intel Binary Compatibility Standard (iBCS)". http://www.everything2.com/index.pl?node=iBCS ↩
"EABI Summary". PowerPC Embedded Application Binary Interface: 32-Bit Implementation (PDF) (Version 1.0 ed.). Freescale Semiconductor, Inc. 1 October 1995. pp. 28–30. http://www.nxp.com/docs/en/application-note/PPCEABI.pdf ↩
"Debian ARM accelerates via EABI port". Linuxdevices.com. 16 October 2016. Archived from the original on 21 January 2007. Retrieved 11 October 2007. https://web.archive.org/web/20070121183413/http://www.linuxdevices.com/news/NS9048137234.html ↩
Andrés Calderón and Nelson Castillo (14 March 2007). "Why ARM's EABI matters". Linuxdevices.com. Archived from the original on 31 March 2007. Retrieved 11 October 2007. https://web.archive.org/web/20070331193917/http://www.linuxdevices.com/articles/AT5920399313.html ↩
"ABI for the Arm Architecture". Developer.arm.com. Retrieved 4 February 2020. https://developer.arm.com/architectures/system-architectures/software-standards/abi ↩
Eric Christopher (11 June 2003). "mips eabi documentation". binutils@sources.redhat.com (Mailing list). Retrieved 19 June 2020. https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html ↩
"ArmEabiPort". Debian Wiki. Strictly speaking, both the old and new ARM ABIs are subsets of the ARM EABI specification, but in everyday usage the term "EABI" is used to mean the new one described here and "OABI" or "old-ABI" to mean the old one. https://wiki.debian.org/ArmEabiPort ↩