您好!
我将使用适用于 A15的 GNU 工具(使用 TDA2xx SOC)。
1.我有一 本通用(可能是旧版) GNU 连接器手册,其中有一条注释:
"。 请注意、如果该段未分配 VMA、链接器也会使用 lma 区域作为 VMA 区域。 "
最近、我查看了 ARM GNU 软件包(在 gcc-arm-none-eabi-4_9-2015q3软件包中)附带的 ld pdf、我在本文档的任何位置都找不到此注释。
这是否意味着上述说明不再适用、如果我想确定分配、我必须同时指定 LMA 和 VMA 区域 (我不想将 LMA 保留为未定义、因为它可以使用之前段的 VMA-LMA 偏移来计算它、而这可能不是我想要的、所以我想控制它)? -同样的答案是否也适用于 TI 链接器?
2.
您能否解释一下、如果在 输出段块(在输出段块之外)之间进行读取/设置(在每个段可能具有不同的存储器区域)、段位置计数器(适用于 GNU 和 TI 链接器)的值和行为应该是什么?
根据为分配值的文档。 运算符定义以下输出段的起始地址(如果不是为段专门设置的)-当段被分配到不同的区域时、这是如何工作的?
"。。 链接器假定对进行了分配。 正在设置以下输出段的起始地址..."
请您对此进行解释和详细阐述。
3.
将输入段设置为输出段时、 如果我使用的语法*(.text)、我会看到它仅应用所有.text 输出段、不考虑任何.text.xxxx 输入段、并且为其创建了子组和专用输出段-因此会分配存储器区域 text.xxxx 由链接器根据内部逻辑确定、这可能不是预期的逻辑。
在 A15链接器脚本示例中,我 看到.text 仅引用*(.text),而对于.data,例如,有两个.data 的引用 (因为这是输出段的名称,所以将为其分配同名的输入信息)和所有.data.xxxx (*(.data.*)):
.text:{*(.text)}> MEM1
.data:{*(.data.*)} >MEM2
为什么.text 输出段不包含*(.text.*)? 您能解释一下吗? 我在上述理解上是否有误?
4.
TI 链接器有一个 GROUP 选项来 强制连续分配多个输出段、GNU 链接器是否有类似的内容(我找不到一个)?
谢谢
家伙