1.5. About the ARM ABI (Application Binary Interface)

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

A third-party toolchain such as the GNU tools must comply with the standards given in the ABI for its objects to link and interoperate correctly with those produced by RVCT. The CodeSourcery release of the GNU tools is specifically tailored to fully support the ARM ABI and allow objects produced using both RVCT and the GNU tools to work together successfully.

Further details of the ARM ABI, including the full ABI documents, can be found on the ARM website at: http://www.arm.com/products/DevTools/ABI.html.

Interactions between mixed-ABI components

In the short term, it is likely that you will need to build a mixed ABI system. Kernels before version 2.6.16 can only be built using the legacy GNU ABI (use GCC option ‑mabi= apcs‑gnu when using the CodeSourcery toolchain). This includes all kernel modules and device drivers.

This can cause problems when your applications or library must interface directly with kernel structures or functions (syscalls), including through the use of a shared header file describing kernel structures. In this case, you must use assembly code or modified descriptions of the structures to translate between the two ABIs when calling kernel functions or manipulating kernel data structures in your applications or libraries.

As of kernel 2.6.16, the Linux kernel can be built using the new ARM EABI. This allows for much simpler integration of applications and libraries to form a completely EABI-compliant system.

Copyright © 2005-2006. All rights reserved.DAI0150B
Non-Confidential