Application Binary Interface

From ArmadeusWiki
Revision as of 16:42, 1 April 2008 by JulienB (Talk | contribs) (ABI for dummies:)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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.                      |

Links