http://blog.csdn.net/flagyan/article/details/6166107

EABI(Embedded Application Binary Interface),嵌入式应用程序二进制接口。

ABI的定义

ABI描述应用程序与操作系统、应用程序与库、应用程序的组成部分之间的低层接口。ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。

EABI的具体定义

Codesourcery上有一个这样的QA:

https://support.codesourcery.com/GNUToolchain/kbentry32

Question

What is the ABI for the ARM Architecture? Is it the same as the ARM EABI?

Answer

The ABI for the ARM Architecture is a standard developed by ARM and its partners that explains how compilers, assemblers, linkers, and other similar tools should generate object files and executable files.

Tools that correctly implement the ABI for the ARM Architecture can interoperate; i.e., object files built with one toolchain can be combined with object files built with another toolchain if both compilers use the ABI for the ARM Architecture and provided that the code compiled observes certain conventions.

CodeSourcery was an active participant in the design of the ABI for the ARM Architecture. (In fact, the C++ ABI used by ARM is derived from the Itanium C++ ABI co-designed by CodeSourcery.) CodeSourcery continues to work with ARM, Ltd. to validate interoperability between Sourcery G++ and ARM’s proprietary tools.

The “ARM EABI” is an informal name for the ABI for the ARM Architecture.

The “ARM EABI” is an informal name for the ABI for the ARM Architecture.

这里提到了所谓的ARM EABI就是针对 ARM 体系结构的应用程序二进制接口的非正式名称

在arm的infocenter可以找到ABI for the ARM architecture的相关文档:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.abi/index.html

  

用于针对ARM体系结构的应用程序二进制接口(ABI)ARM文档集,这些接口包括ARM 过程调用标准(APCS)ARM ELFARM DWARF、基础平台ABI(BPABI)C++ ABI、异常处理ABI、运行时ABICABI 

在文档的Terms and abbreviations中有:

AEABI  (Embedded) ABI for the ARM architecture (this ABI…) 

也证实了EABI就是Application Binary Interface for the ARM Architecture

EABI的内容 

ABI for the ARM architecture是很多规范的合集:

AADWARF      DWARF for the ARM Architecture

AAELF         ELF for the ARM Architecture

AAPCS         Procedure Call Standard for the ARM Architecture

ADDENDA      Addenda to, and errata in, the ABI for the ARM Architecture

BPABI          Base Platform ABI for the ARM Architecture

BSABI          ABI for the ARM Architecture (Base Standard)

CLIBABI        C Library ABI for the ARM Architecture

CPPABI         C++ ABI for the ARM Architecture

EHABI          Exception Handling ABI for the ARM Architecture

EHEGI          Exception handling component specimen implementations

RTABI            Run-time ABI for the ARM Architecture

EABI的作用

EABI的目的是使不同的编译器编译出来的二进制文件可以互相使用(interoperability),比如Codesourcery, RVCT, RVDS这些编译器。符合EABI标准编译器编译出的库可以相互链接,这样软件开发人员就可以混合使用不同厂商提供的符合EABI标准的二进制库。

 

下面内容来自http://www.arm.com/community/software-enablement/linux.php?language=zh

ARM 有助于 GNU 编译器项目,该项目跟踪 ARM 体系结构的发展,并确保为 ARM 提供高质 GNU 工具链。

该工具链支持目前的所有 ARM 体系结构和处理器(包括 Thumb-2 指令集和 ARM 体系结构第 7 版),并计划支持将来的处理器和体系结构。

该工具链符合最新的 ARM 应用程序二进制接口,因此可与 ARM RealView Development Suite 或符合 ABI 的任何其他工具链交互工作。用户可以配合使用 ARM 提供的商用、专业工具链的已优化代码大小与性能以及使用开源工具生成的代码。

可从 CodeSourcery 访问 GNU 编译器的源代码和预置版本,网址为:http://www.codesourcery.com/gnu_toolchains/arm

当然,EABI相对于以前的ABI性能也会改善。

EABI相对于以前的ABI的改进

Differences between v1 and v2 of the ABI for the ARM Architecture列出了ABI for the ARM Architecture V1和V2两个版本的不同,这里的ABI for the ARM Architecture V2就是EABI,V1也被称作Old ABI 或者Lagacy ABI。EABI2005年推出的,新是相对于以前的而言,从时间上看其实已经很——所以很多这些所谓的改变,其实现在已经是标准做法了,例如Exception Handling ABI的改进使浮点数的性能的改善,堆栈的8字节对齐,structure packing的改变等等。

GNU EABI 

在很多地方有GNU EABI的说法,这是一个不同的ABI吗?

还是Codesourcery上的QA:

http://www.codesourcery.com/sgpp/lite/arm/portal/kbentry38

Question

Why is the configuration name for GNU/Linux arm-none-linux-gnueabi instead of just arm-none-linux-eabi? Is there a GNU variant of the EABI?

Answer

The Free Software Foundation prefers that configuration names for GNU/Linux contain both the string linux and the string gnu. The configuration arm-none-linux-gnu refers to the legacy ARM ABI for GNU/Linux. Some tools depend on the fact that configuration names have at most three hyphens, so gnu and eabi were combined into a single word.

The ABI used on GNU/Linux is not a special GNU variant of the EABI; it is just the EABI.

GNU EABI就是EABI,ABI for the ARM architecture。

相关资料

Debian Wiki: ArmEabiPort

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

Codesourcery上的ARM架构FAQ

http://www.codesourcery.com/sgpp/lite/arm/portal/target_arch?@action=faq&target_arch=arm

Wikipedia上的ABI

http://en.wikipedia.org/wiki/Application_binary_interface

CSDN hongjiujing的总结:ABI/EABI/OABI

http://blog.csdn.net/hongjiujing/archive/2008/07/21/2686556.aspx

EABI对浮点数性能的改善:Why ARM’s EABI Matters

http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Why-ARMs-EABI-matters/