ZHCU947E June 2015 – January 2023
创建段时在名称中包含冒号可创建子段。子段是较大的段中的逻辑细分。子段本身是段,可由汇编器和链接器处理。
汇编器没有子段的概念;对于汇编器而言,名称中的冒号没有特殊含义。子段 .text:rts 被认为与其父段 .text 完全无关,汇编器不会将子段与其父段合并。
子段用于区分段的各个部分,以便分别处理。例如,将每个函数和对象置于具有唯一名称的子段,链接器可以更加精细地将段放置于存储器中,消除未使用的函数。
默认情况下,链接器如果在链接器命令文件(如 ".text")中发现一条 SECTION 指令,就会收集 .text 以及 .text 的所有子段,并放入一个大的输出段,名为 ".text"。您也可以使用 SECTION 指令分别控制子段。请参阅GUID-DF2119B0-6645-4D9B-AD96-6003E8505498.html#GUID-DF2119B0-6645-4D9B-AD96-6003E8505498中的示例。
创建子段的方式与创建其他用户命名段的方式相同:即使用 .sect 或 .usect 指令。
子段名称的语法为:
symbol | .usect "section_name:subsection_name",size in bytes[,alignment[,bank offset] ] |
.sect "section_name:subsection_name" |
基础段名后跟冒号和子段名即为子段。子段名不包含任何空格。
子段可分别分配,或使用同一基础名称与其他段组合。例如,您在 .text 段中创建了一个名为 _func 的子段:
.sect ".text:_func"
使用链接器的 SECTIONS 指令,您可以单独分配 .text:_func,或与所有 .text 段共同分配。
您可以创建两类子段:
子段与段的放置方法相同。有关 SECTIONS 指令的信息,请参阅GUID-6E6B4A54-DD1F-4CA9-92C1-21E822F3090C.html#GUID-6E6B4A54-DD1F-4CA9-92C1-21E822F3090C。