Architecture-ABI

From Yocto Project
Revision as of 19:13, 4 November 2010 by Mhatle (talk | contribs) (Created page with '== Architecture ABI == There are currently many official and unofficial ABI -- Application Binary Interfaces -- in use within embedded Linux projects. The following is an attem…')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Architecture ABI

There are currently many official and unofficial ABI -- Application Binary Interfaces -- in use within embedded Linux projects. The following is an attempt to lightly document what the individual architecture ABI consist of, without going into too many details..

Many of the following ABIs have grown organically based on specific processor designs and optimization levels. For the most part the processor optimizations are ignored in these descriptions, unless otherwise mentioned.

ARM

apcs-gnu a.k.a. OABI - The original ARM ABI.

It has two variants, an emulated hardware floating point, and a soft floating point variant. The legacy ABI should no longer be used in embedded projects and has more or less disappeared. The legacy ABI is not compatible with the EABI.

It can be detected by:

From: http://wiki.debian.org/ArmEabiPort

objdump -x contains [APCS-32]

The legacy abi can be enabled by using "-mabi=apcs-gnu"


EABI - The new "Embedded" ABI by ARM ltd.

The new EABI specifies a single ABI that works in various hardware floating point and software floating point configurations as well as Thumb interworking. Overall structure packing is better, a more efficient syscall convention is provided.


ARM Processors are available in both Big Endian and Little Endian varieties. Each variety impacts the ABI and specifies the endian bit and byte order.

The following table lists the current ARM ABIs in common usage:

ABI Endian Compatibility
EABI Big Endian
EABI Little Endian

IA32

MIPS

Power