ZHCADC4A September 2011 – March 2014
在 2009 年 TI 的 C6000 编译器工具 7.0 版本发布之前,C6000 的唯一 ABI 是基于 COFF 的原始 ABI。它严格上来说是一个裸机 ABI;没有执行级别的组件,尽管各种系统实现了动态链接的各个方面,但这类机制没有标准化或工具支持。
TI 编译器工具的 7.0 版本引入了一种名为 C6000 EABI 的新 ABI。它基于 ELF 目标文件格式,并支持动态链接和位置独立性。它源自业界标准模型,包括 IA-64 C++ ABI 和用于 ELF 和动态链接的 System V ABI。ABI 的处理器特定方面(例如数据布局和调用约定)与 COFF ABI 相比基本没有变化,尽管存在一些差异。毋庸置疑,COFF ABI 和 EABI 是不兼容的;也就是说,给定系统中的所有代码都必须遵循相同的 ABI。TI 的编译器工具支持新的 EABI 和旧的 COFF ABI,但我们鼓励迁移到新的 ABI,因为未来可能会停止支持 COFF ABI。
平台 是程序运行所在的软件环境。ABI 具有特定于平台的方面,尤其是在与执行环境相关的约定领域,例如程序段的数量和使用、寻址约定、可见性约定、抢占、动态链接、程序加载和初始化。目前有两个受支持的平台:裸机和 Linux 。裸机 一词表示不存在任何特定环境。这并不是说不能有操作系统,而是说没有特定于操作系统的 ABI 规范。换句话说,裸机 ABI 未涵盖程序的加载和运行方式以及它如何与系统的其他部分进行交互。
裸机 ABI 允许在许多具体方面存在很大的可变性。例如,实现可能提供位置独立性 (PIC),但如果给定系统不要求位置独立性,则这些约定不适用。由于这种可变性,程序可能仍然符合 ABI,但不兼容;例如,如果一个程序使用 PIC,但另一个程序不使用,则它们无法互操作。工具链应努力强制执行此类不兼容性。
Linux ABI 通过缩小裸机 ABI 的可变性并详细说明其他要求,对裸机 ABI 进行了补充,从而使程序或子程序可以在 C6000 上基于 Linux 的操作系统中运行。