Difference between revisions of "Application Binary Interface"

From ArmadeusWiki
Jump to: navigation, search
(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.1.0
+
** 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.1.0
+
** 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.                      |

Links