ZHCADC4B September 2011 – August 2025
System V ABI 以及此 ABI 的其他基础文档和其他部分,定义了几个具有专门用途的段。表 13-4 整合了 C6000 使用的一些专用段,并且按功能进行了分组。
ABI 不强制要求具有段名。特殊段应按类型而不是名称进行标识。但是,通过遵循这些约定可以提高工具链之间的互操作性。例如,有时需要编写自定义链接器命令来链接由不同编译器构建的可重定位文件,而使用这些名称可以降低这样做的可能性。
ABI 强制要求名称与表中条目匹配的段必须用于指定用途。例如,编译器不需要将代码生成到名为 .text 的段中,但不允许在生成的名为 .text 的段中包含除代码以外的任何内容。
下表中列出的所有段名都是前缀。类型和属性会应用于名称以这些字符串开头的所有段。
| 前缀 | 类型 | 属性 |
|---|---|---|
| 代码段 | ||
| .text | SHT_PROGBITS | SHF_ALLOC + SHF_EXECINSTR |
| .plt | SHT_PROGBITS | SHF_ALLOC + SHF_EXECINSTR |
| Near 数据段 | ||
| .bss | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
| .neardata | SHT_PROGBITS | SHF_ALLOC + SHF_WRITE |
| .rodata | SHT_PROGBITS | SHF_ALLOC |
| Far 数据段 | ||
| .far | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
| .fardata | SHT_PROGBITS | SHF_ALLOC + SHF_WRITE |
| .const | SHT_PROGBITS | SHF_ALLOC |
| .fardata:const | SHT_PROGBITS | SHF_ALLOC |
| 动态数据段 | ||
| .got | SHT_PROGBITS | SHF_ALLOC + SHF_WRITE |
| .dsbt | SHT_PROGBITS | SHF_ALLOC + SHF_WRITE |
| 异常处理数据段 | ||
| .C6000.exidx | SHT_C6000_UNWIND | SHF_ALLOC + SHF_LINK_ORDER |
| .C6000.extab | SHT_PROGBITS | SHF_ALLOC |
| 初始化和终止段 | ||
| .init | SHT_PROGBITS | SHF_ALLOC + SHF_EXECINSTR |
| .fini | SHT_PROGBITS | SHF_ALLOC + SHF_EXECINSTR |
| .preinit_array | SHT_PREINIT_ARRAY | SHF_ALLOC + SHF_WRITE |
| .init_array | SHT_INIT_ARRAY | SHF_ALLOC + SHF_WRITE |
| .fini_array | SHT_FINI_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 | 无 |
| 动态加载结构 | ||
| .dynamic (1) | SHT_DYNAMIC | SHF_ALLOC |
| .dynsym (1) | SHT_DYNSYM | SHF_ALLOC |
| .dynstr (1) | SHT_STRTAB | SHF_ALLOC + SHF_STRINGS |
| .hash (1) | SHT_TAB | SHF_ALLOC |
| .interp | SHT_PROGBITS | 无 |
| 构建属性 | ||
| .C6000.attributes | SHT_C6000_ATTRIBUTES | 无 |
| 符号调试段 | ||
| .debug (2) | SHT_PROGBITS | 无 |
| 符号版本控制段(1) | ||
| .gnu.version | SHT_GNU_versym | SHF_ALLOC |
| .gnu.version_d | SHT_GNU_verdef | SHF_ALLOC |
| .gnu.version_r | SHT_GNU_verneed | SHF_ALLOC |
| 线程局部存储段 | ||
| .tbss | SHT_NOBITS | SHF_ALLOC + SHF_WRITE + SHF_TLS |
| .tdata | SHT_PROGBITS | SHF_ALLOC + SHF_WRITE + SHF_TLS |
| .tdata1 | SHT_PROGBITS | SHF_ALLOC + SHF_WRITE + SHF_TLS |
| .TI.tls_init | SHT_PROGBITS | SHF_ALLOC |
| TI 工具链特定段 | ||
| .stack | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
| .sysmem | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
| .cio | 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.phattrs | SHT_TI_PHATTRS | 无 |
| .TI.preempt.map | SHT_C6000_PREEMPTMAP | SHF_ALLOC |
| .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 中但未被 C6000 EABI 使用的段 | ||
| .comment | ||
| .data | ||
| .data1 | ||
| .line | ||
| .rodata1 | ||
上表中的“TI 工具链特定段”由 TI 工具链以各种工具链特定的方式使用。ABI 不强制要求使用这些段(但使用它们可促进互操作性),但它确实会保留这些名称。
上表中的“位于 System V ABI 中但未被 C6000 EABI 使用的段”由 System V ABI 指定,但不在 C6000 ABI 下使用或定义。TI 将其他段用于其他器件;这些名称予以保留。
有关线程局部存储的详细信息,请参阅Chapter7。
此外,.common 和 .scommon 是链接器使用的段名称。这些是抽象段,不是目标文件中的实际段。这些名称是链接器命令文件中用于放置变量的约定。这些段不应用于其他目的。