Application Binary Interface
Definition from http://infocenter.arm.com
The Application Binary Interface (ABI) for the ARM Architecture is a collection of standards, some open and some specific to the ARM architecture. The standards regulate the interoperation of binary code, development tools, and a spectrum of ARM core-based execution environments from bare-metal to platform operating systems such as ARM Linux.
ABI for dummies:
- At that time there are 2 ABIs used for ARM Linux:
- OABI: Old/Legacy GNU ABI for kernels < 2.6.16 and GCC < 4.0.0
- EABI: new ARM ABI (Embedded ABI) for kernels >= 2.6.16 ang GCC >= 4.0.0
- Benefits of new EABI:
- floating point handling is faster when no hardware is available
- system call are more efficient
- compiled objects compatibility
- ?? better Thumb code mixing support ??
- kernel compiled with EABI can be compatible with OABI
- Option as described in Linux menuconfig:
CONFIG_AEABI: │ │ │ │ This option allows for the kernel to be compiled using the latest │ │ ARM ABI (aka EABI). This is only useful if you are using a user │ │ space environment that is also compiled with EABI. │ │ │ │ Since there are major incompatibilities between the legacy ABI and │ │ EABI, especially with regard to structure member alignment, this │ │ option also changes the kernel syscall calling convention to │ │ disambiguate both ABIs and allow for backward compatibility support │ │ (selected with CONFIG_OABI_COMPAT). │ │ │ │ To use this you need GCC version 4.0.0 or later. |