Difference between revisions of "Application Binary Interface"
From ArmadeusWiki
(Creation) |
(→ABI for dummies:) |
||
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 15: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. |