ZHCADC3B February 2019 – October 2023
在 TI 的 C28x 编译器工具 18.12.0.LTS 版本发布之前,C28x 的唯一 ABI 是基于 COFF 的原始 ABI。它严格上来说是一个裸机 ABI;没有执行级别的组件。
TI 编译器工具的 18.12.0.LTS 版本引入了一种名为 C28x 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 具有特定于平台的方面,尤其是在与执行环境相关的约定领域,例如程序段的数量和使用、寻址约定、可见性约定、抢占、程序加载和初始化。目前裸机是唯一受支持的平台。裸机 一词表示不存在任何特定环境。这并不是说不能有操作系统,而是说没有特定于操作系统的 ABI 规范。换句话说,裸机 ABI 未涵盖程序的加载和运行方式以及它如何与系统的其他部分进行交互。
裸机 ABI 允许在许多具体方面存在很大的可变性。例如,实现可能提供位置独立性 (PIC),但如果给定系统不要求位置独立性,则这些约定不适用。由于这种可变性,程序可能仍然符合 ABI,但不兼容;例如,如果一个程序使用 PIC,但另一个程序不使用,则它们无法互操作。工具链应努力强制执行此类不兼容性。