Application Binary Interface: Difference between revisions
From ArmadeusWiki
(Creation) |
|||
Line 4: | Line 4: | ||
==ABI for dummies:== | ==ABI for dummies:== | ||
At that time there are 2 ABIs used for ARM Linux: | * At that time there are 2 ABIs used for ARM Linux: | ||
* OABI: Old/Legacy GNU ABI for kernels < 2.6.16 and GCC < 4. | ** 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. | ** EABI: new ARM ABI (Embedded ABI) for kernels >= 2.6.16 ang GCC >= 4.0.0 | ||
Benefits of new EABI: | *Benefits of new EABI: | ||
* floating point handling is faster when no hardware is available | ** floating point handling is faster when no hardware is available | ||
* system call are more efficient | ** system call are more efficient | ||
* compiled objects compatibility | ** compiled objects compatibility | ||
* ?? better Thumb code mixing support ?? | ** ?? better Thumb code mixing support ?? | ||
* kernel compiled with EABI can be compatible with OABI | ** kernel compiled with EABI can be compatible with OABI | ||
* Option as described in Linux menuconfig: | |||
<pre> | |||
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. | | |||
</pre> | |||
==Links== | ==Links== |
Latest revision as of 16:42, 1 April 2008
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. |