对象文件节 - 2023.2 简体中文

Vitis 统一软件平台文档 嵌入式软件开发 (UG1400)

Document ID
UG1400
Release Date
2023-12-13
Version
2023.2 简体中文

通过将来自链接在一起的对象文件(.o 文件)的各输入节加以并置,即可创建可执行文件。默认情况下,编译器会跨标准节和明确定义的节创建代码。每个节都根据其关联的含义和用途来命名。下表中显示了对象文件的各标准节。

除了这些节外,您还可以创建自己的定制节,并将其分配到您所选的存储器。

表 1. 对象文件或可执行文件的各节布局
章节 描述
.text 文本节
.rodata 只读数据节
.sdata2 小型只读数据节
.sbss2 小型只读未初始化数据节
.data 读/写数据节
.sdata 小型读/写数据节
.sbss 小型未初始化数据节
.bss 未初始化数据节
.heap 程序堆存储器节
.stack 程序栈存储器节

通常不支持您修改的保留节包括:.init.fini.ctors.dtors.got.got2.eh_frame

.text
对象文件的该节包含可执行程序指令。本节包含 x(可执行)、r(只读)和 i(已初始化)标志。这表示本节可以分配到已初始化的只读存储器 (ROM),该 ROM 可从处理器指令总线寻址。
.rodata
本节包含只读数据。本节包含 r(只读)和 i(已初始化)标志。与 .text 节类似,本节同样可以分配到已初始化的只读存储器,可从处理器数据总线寻址。
.sdata2
本节与 .rodata 节类似。它包含大小小于 8 字节的小型只读数据。本节中的所有数据均可通过引用只读小型数据锚点来访问。这样即可确保本节的所有内容均可使用单一指令来访问。您可通过给编译器添加 -G 选项来更改进入本节的数据的大小。本节包含 r(只读)和 i(已初始化)标志。
.data
本节包含读/写数据,并具有 w(读/写)标志和 i(已初始化)标志。它必须映射到已初始化的随机存取存储器 (RAM)。不得将其映射到 ROM。
.sdata
本节包含大小小于 8 字节的小型读/写数据。您可通过 -G 选项来更改进入本节的数据的大小。本节中的所有数据均可通过读写小型数据锚点来访问。这样即可确保本节的所有内容均可使用单一指令来访问。本节包含 w(读/写)标志和 i(已初始化)标志,并且必须映射到已初始化的 RAM。
.sbss2
本节包含大小小于 8 字节且未初始化的小型只读数据。您可通过 -G 选项来更改进入本节的数据的大小。本节包含 r(读取)标志,可映射到 ROM。
.sbss
本节包含大小小于 8 字节且未初始化的小型数据。您可通过 -G 选项来更改进入本节的数据的大小。本节包含 w(读/写)标志,并且必须映射到 RAM。
.bss
本节包含未初始化的数据。本节包含 w(读/写)标志,并且必须映射到 RAM。
.heap
本节包含未初始化的数据,这些数据用作为全局程序堆。动态存储器分配例程会从本节分配存储器。本节必须映射到 RAM。
.stack
本节包含未初始化的数据,这些数据用作为程序栈。本节必须映射到 RAM。本节通常紧随在 .heap 节之后。在某些版本的连接器中,.stack 节和 .heap 节可能显示为合并在一起,组成名为 .bss_stack 的节。
.init
本节包含语言初始化代码,并具有与 .text 相同的标志。它必须映射到已初始化的 ROM。
.fini
本节包含语言清理代码,并具有与 .text 相同的标志。它必须映射到已初始化的 ROM。
.ctors
本节包含在程序启动时必须调用的函数的列表,所含标志与 .data 相同,并且必须映射到已初始化的 RAM。
.dtors
本节包含在程序结束时必须调用的函数的列表,所含标志与 .data 相同,并且必须映射到已初始化的 RAM。
.got2/.got
本节包含指向程序数据的指针,所含标志与 .data 相同,并且必须映射到已初始化的 RAM。
.eh_frame
本节包含帧展开信息,用于异常处理。它所含标志与 .rodata 相同,并且可映射到已初始化的 ROM。
.tbss
本节包含未初始化的线程本地数据,这些数据构成程序存储器镜像。本节所含标志与 .bss 相同,并且必须映射到 RAM。
.tdata
本节包含已初始化的线程本地数据,这些数据构成程序存储器镜像。本节必须映射到已初始化的 RAM。
.gcc_except_table
本节包含特定于语言的数据。本节必须映射到已初始化的 RAM。
.jcr
本节包含寄存已编译的 Java 类所需的信息。其中内容特定于编译器,供编译器初始化函数使用。本节必须映射到已初始化的 RAM。
.fixup
本节包含执行修复所需的必要信息,例如,修复页表和修复记录表。本节必须映射到已初始化的 RAM。