SLAA534A June 2013 – June 2020
The System V ABI, along with other base documents and other sections of this ABI, defines several sections with dedicated purposes. Table 11-4 consolidates dedicated sections used by the MSP430 and groups them by functionality.
Section names are not mandated by the ABI. Special sections should be identified by type, not by name. However, interoperability among toolchains can be improved by following these conventions. For example, using these names may decrease the likelihood of having to write custom linker commands to link relocatable files built by different compilers.
The ABI does mandate that a section whose name does match an entry in the table must be used for the specified purpose. For example, the compiler is not required to generate code into a section called .text, but it is not allowed to generate a section called .text containing anything other than code.
All of the section names listed in the table that follows are prefixes. The type and attributes apply to all sections with names that begin with these strings.
Prefix | Type | Attributes |
---|---|---|
Code Sections | ||
.text | SHT_PROGBITS | SHF_ALLOC + SHF_EXECINSTR |
Data Sections | ||
.data | SHT_PROGBITS | SHF_ALLOC + SHF_WRITE |
.bss | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
.TI.noinit | SHT_NOBITS | SHF_MSP_NOINIT |
.TI.persistent | SHT_PROGBITS | SHF_MSP_NOINIT |
.const | SHT_PROGBITS | SHF_ALLOC |
Exception Handling Data Sections | ||
.MSP430.exidx | SHT_MSP430_UNWIND | SHF_ALLOC + SHF_LINK_ORDER |
.MSP430.extab | SHT_PROGBITS | SHF_ALLOC |
Initialization and Termination Sections | ||
.init_array | SHT_INIT_ARRAY | SHF_ALLOC + SHF_WRITE |
ELF Structures | ||
.rel | SHT_REL | None |
.rela | SHT_RELA | None |
.symtab | SHT_SYMTAB | None |
.symtab_shndx | SHT_SYMTAB_SHNDX | None |
.strtab | SHT_STRTAB | SHF_STRINGS |
.shstrtab | SHT_STRTAB | SHF_STRINGS |
.note | SHT_NOTE | None |
Build Attributes | ||
.MSP430.attributes | SHT_MSP430_ATTRIBUTES | None |
Symbolic Debug Sections | ||
.debug (1) | SHT_PROGBITS | None |
TI Toolchain-Specific Sections | ||
.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 | None |
.TI.xref | SHT_TI_XREF | None |
.TI.section.flags | SHT_TI_SH_FLAGS | None |
.TI.symbol.alias | SHT_TI_SYMALIAS | None |
.TI.section.page | SHT_TI_SH_PAGE | None |
Sections in the System V ABI but Unused by the MSP430 EABI (2) | ||
.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 |
The "TI Toolchain-Specific Sections" sections in the previous table are used by the TI toolchain in various toolchain-specific ways. The ABI does not mandate the use of these sections (although interoperability encourages their use), but it does reserve these names.
The "Sections in the System V ABI but Unused by the MSP430 EABI" sections in the previous table are specified by the System V ABI, but are not used or defined under the MSP430 ABI. Other sections are used by TI for other devices; these names are reserved.
In addition, .common is a section name used by the linker. This is an abstract section, not an actual section in the object files. The name is a convention in the linker command file for placing variables. This section should not be used for other purposes.