ZHCADC3B February 2019 – October 2023
System V ABI 以及此 ABI 的其他基础文档和其他部分,定义了几个具有专门用途的段。表 11-4 整合了 C28x 使用的一些专用段,并且按功能进行了分组。
ABI 不强制要求具有段名。特殊段应按类型而不是名称进行标识。但是,通过遵循这些约定可以提高工具链之间的互操作性。例如,有时需要编写自定义链接器命令来链接由不同编译器构建的可重定位文件,而使用这些名称可以降低这样做的可能性。
ABI 强制要求名称与表中条目匹配的段必须用于指定用途。例如,编译器不需要将代码生成到名为 .text 的段中,但不允许在生成的名为 .text 的段中包含除代码以外的任何内容。
下表中列出的所有段名都是前缀。类型和属性会应用于名称以这些字符串开头的所有段。
前缀 | 类型 | 属性 |
---|---|---|
代码段 | ||
.text | SHT_PROGBITS | SHF_ALLOC + SHF_EXECINSTR |
数据段 | ||
.data | SHT_PROGBITS | SHF_ALLOC + SHF_WRITE |
.bss | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
.TI.noinit | SHT_NOBITS | TI_SHF_NOINIT |
.TI.persistent | SHT_PROGBITS | TI_SHF_NOINIT |
.const | SHT_PROGBITS | SHF_ALLOC |
异常处理数据段 | ||
.C28x.exidx | SHT_C28x_UNWIND | SHF_ALLOC + SHF_LINK_ORDER |
.C28x.extab | SHT_PROGBITS | SHF_ALLOC |
初始化和终止段 | ||
.init_array | SHT_INIT_ARRAY | SHF_ALLOC + SHF_WRITE |
ELF 结构 | ||
.rel | SHT_REL | 无 |
.rela | SHT_RELA | 无 |
.symtab | SHT_SYMTAB | 无 |
.symtab_shndx | SHT_SYMTAB_SHNDX | 无 |
.strtab | SHT_STRTAB | SHF_STRINGS |
.shstrtab | SHT_STRTAB | SHF_STRINGS |
.note | SHT_NOTE | 无 |
构建属性 | ||
.C28x.attributes | SHT_C28x_ATTRIBUTES | 无 |
符号调试段 | ||
.debug (1) | SHT_PROGBITS | 无 |
TI 工具链特定段 | ||
.stack | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
.sysmem | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
.switch | SHT_PROGBITS | SHF_ALLOC |
.binit | SHT_PROGBITS | SHF_ALLOC |
.cinit | SHT_TI_INITINFO | SHF_ALLOC |
.const:handler_table | SHT_PROGBITS | SHF_ALLOC |
.ovly | SHT_PROGBITS | SHF_ALLOC |
.ppdata | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
.ppinfo | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
.TI.crctab | SHT_PROGBITS | SHF_ALLOC |
.TI.icode | SHT_TI_ICODE | 无 |
.TI.xref | SHT_TI_XREF | 无 |
.TI.section.flags | SHT_TI_SH_FLAGS | 无 |
.TI.symbol.alias | SHT_TI_SYMALIAS | 无 |
.TI.section.page | SHT_TI_SH_PAGE | 无 |
位于 System V ABI 中但未被 C28x EABI 使用的段 | ||
.comment | ||
.data1 | ||
.dsbt | ||
.dynamic | ||
.dynstr | ||
.dynsym | ||
.far | ||
.fardata | ||
.fardata:const | ||
.fini | ||
.fini_array | ||
.gnu.version | ||
.gnu.version_d | ||
.gnu.version_r | ||
.got | ||
.hash | ||
.init | ||
.interp | ||
.line | ||
.neardata | ||
.plt | ||
.preinit_array | ||
.rodata | ||
.rodata1 | ||
.tbss | ||
.tdata | ||
.tdata1 | ||
.TI.tls_init |
上表中的“TI 工具链特定段”由 TI 工具链以各种工具链特定的方式使用。ABI 不强制要求使用这些段(但使用它们可促进互操作性),但它确实会保留这些名称。
上表中的“位于 System V ABI 中但未被 C28x EABI 使用的段”由 System V ABI 指定,但不在 C28x ABI 下使用或定义。TI 将其他段用于其他器件;这些名称予以保留。