ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
目标文件的最小单元是段。段是占据存储器映射中连续空间的代码或数据块。目标文件的每个段都是独立且不同的。
ELF 格式可执行目标文件包含程序段。ELF 程序段是元段。它表示目标存储器的一个连续区域。它是具有相同属性(例如,可写或可读)的段 的集合。ELF 加载程序需要程序段信息,但不需要段信息。ELF 标准允许链接器完全从可执行目标文件中省略 ELF 段信息。
目标文件通常包含三个默认段:
.text 段 | 包含可执行代码(1) |
.data 段 | 通常包含已初始化的数据 |
.bss | 通常为未初始化的变量预留空间 |
您可以使用汇编器和链接器创建、命名和链接其他类型的段。.text、.data 和 .bss 段是范例,说明了如何处理段。
有两种基本类型的段:
已初始化的段 | 包含数据或代码。.text 和 .data 段已被初始化;使用 .sect 汇编器指令创建的用户命名段也已初始化。 |
未初始化的段 | 在存储器映射中为未初始化的数据预留空间。.bss 段未被初始化;使用 .usect 汇编器指令创建的用户命名段也已被初始化。 |
您可以使用几个汇编器指令将代码和数据的各个部分与相应的段关联。汇编器在汇编过程中构建这些段,创建按图 2-1 所示整理的目标文件。
链接器的其中一项功能是将段重新定位到目标系统的存储器映射中;此功能被称为放置。大多数系统都包含几种类型的存储器,因此使用段可帮助您更高效地使用目标存储器。所有段均可单独重定位;您可以将任何段放入目标存储器的任何已分配块中。例如,您可以定义一个包含初始化例程的段,然后将该例程分配到包含 ROM 的存储器映射的一个部分。有关段放置的更多信息,请参阅 ARM 优化 C/C++ 编译器用户指南 中的“指定在存储器中分配段的位置”一节。
图 2-1 展示了目标文件中的段与虚构目标存储器之间的关系。ROM 可以是 EEPROM、FLASH 或实际系统中的一些其他类型的物理存储器。