ZHCADC3B February 2019 – October 2023
此 ABI 指定的属性记录在子段中,带有供应商字符串 C28x。工具链应仅使用这些属性来确定可重定位文件之间的兼容性;除非为此目的提供的 Tag_Compatibility 属性允许,否则不应使用特定于供应商的信息。
C28x 子段中的供应商数据包含任意数量的属性矢量。属性矢量以作用域标签开头,该标签指定它们是应用于整个文件还是仅应用于列出的段或符号。属性矢量具有以下三种格式之一:
长度字段指定整个属性矢量(包括其他字段)的长度,以字节为单位。符号和段号字段是段或符号索引的序列,以 0 结尾。
属性矢量中的属性表示为标签值对序列。标签表示为 ULEB128 常量。值为 ULEB128 常量或以 NULL 结尾的字符串。
在文件作用域内省略标签的效果等同于包含标签并将其赋值为 0 或 "" 相同,具体取决于形参类型。
为了允许消费者跳过无法识别的标签,对于偶数标签,形参类型会被标准化为 ULEB128,而对于奇数标签,则会被标准化为以 NULL 结尾的字符串。标签 1、2、3(作用域标签)和 32 (Tag_ABI_Compatibility) 是此约定的例外。
随着 ABI 的发展,可能会添加新的属性。为了使较旧的工具链能够可靠地处理可能包含它们无法理解的属性的文件,ABI 采用以下约定: