ZHCADC5A June 2013 – June 2020
图 1-1 显示了 ABI 的组成部分及其关系。我们将从下到上简要描述图中的这些组成部分,并提供在此 ABI 规范中参考的相应章节。
底部区域的组成部分与目标级互操作性有关。
C 语言 ABI(Chapter2、Chapter3、Chapter4、Chapter5、Chapter6和Chapter7)规定了函数调用约定、数据类型表示、寻址约定和 C 运行时库的接口。
C++ ABI(Chapter8)规定了如何实现 C++ 语言;这包括有关虚拟函数表、名称改编、如何调用构造函数以及异常处理机制(Chapter9)的详细信息。MSP430 C++ ABI 基于流行的 IA-64 (Itanium) C++ ABI。
DWARF 组成部分(Chapter10)规定了目标级调试信息的表示。基本标准是 DWARF3 标准。此规范详细说明了处理器特定的扩展。
ELF 组成部分(Chapter11)规定了目标文件的表示。该规范为系统 V ABI 规范扩充了处理器特定的信息。
构建属性(Chapter13)是指一种将影响对象间兼容性的各种形参(如目标设备假设、内存模型或 ABI 变体)编码到目标文件中的方法。工具链可以使用构建属性来防止组合或加载不兼容的目标文件。
图中间区域的组成部分与执行时互操作性有关。
图 1-1 顶部的组成部分为 ABI 扩充了平台特定的约定,后者可以定义使可执行文件与执行环境兼容的要求,如程序段的数量和使用、寻址约定、可见性约定、抢占、程序加载和初始化。裸机是指缺失任何具体环境。
最后,有一组规范不是 ABI 的正式组成部分,但本文档进行了介绍以供参考,同时供其他工具链选择实现。
初始化(Chapter14)是指初始化变量赖以获取其初始值的机制。名义上,这些变量驻留在 .data 段中,在加载 .data 段时会直接将它们初始化,不需要工具额外参与。然而,TI 工具链支持一种机制,通过该机制,.data 段能够以压缩形式编码到目标文件中,并在启动时解压缩。这是一种通用机制的特殊用法,该机制以编程方式将压缩后的代码或数据从离线存储(例如 ROM)复制到其执行地址。我们将该过程称为复制表。虽然不是 ABI 的一部分,但本文档介绍了初始化和复制表机制,以便在需要时通过其他工具链使用。