ZHCUAU3J January 2018 – March 2024
链接器会为由其生成的每个复制表创建并分配一个单独的输入段。每个复制表符号都用包含相应复制表的输入段的地址值进行定义。
链接器会为每个重叠复制表输入段生成一个唯一的名称。例如,table(_first_ctbl) 会将 .first 段的复制表放置在名为 .ovly:_first_ctbl 的输入段中。链接器会创建单个输入段 .binit 以包含整个启动时复制表。
控制由链接器生成的复制表段的放置说明了如何使用链接器命令文件中的输入段名称来控制由链接器生成的复制表段的放置。
SECTIONS
{
UNION
{
.first: { a1.c.obj(.text), b1.c.obj(.text), c1.c.obj(.text) }
load = EMEM, run = PMEM, table(BINIT), table(_first_ctbl)
.second: { a2.c.obj(.text), b2.c.obj(.text) }
load = EMEM, run = PMEM, table(_second_ctbl)
}
.extra: load = EMEM, run = PMEM, table(BINIT)
...
.ovly: { } > BMEM
.binit: { } > BMEM
}
对于控制由链接器生成的复制表段的放置中的链接器命令文件,启动时复制表会生成到 .binit 输入段中,该输入段收集到 .binit 输出段中,该输出段映射到 BMEM 存储器区域中的某个地址。_first_ctbl 生成到 .ovly:_first_ctbl 输入段中,_second_ctbl 生成到 .ovly:_second_ctbl 输入段中。这些输入段的基本名称与 .ovly 输出段的名称匹配,因此这些输入段会收集到 .ovly 输出段中,然后该输出段映射到 BMEM 存储器区域中的某个地址。
如果没有为由链接器生成的复制表段提供显式的放置指令,则会根据链接器的默认放置算法来分配它们。
链接器不允许将其他类型的输入段与同一输出段中的复制表输入段进行组合。链接器不允许将从部分链接会话创建的复制表段用作后续链接会话的输入。