我的链接器脚本中有以下行
JumpTable ABSOLUTE(0x2000000C): AT(eROData)
{
JumpTableStart = .;
*(.JumpSection);
. = ALIGN(4);
JumpTableEnd = .;
} > SRAM
eROData 是来自闪存的地址,并假定值为 0x1000xxxx
链接后,我注意到链接器将 VMA 和 LMA 都分配给了 JumpTable 部分。这是列表文件中的列表。
2 .rodata 00000004 10001214 10001214 00001214 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 JumpTable 00000140 2000000c 2000000c 00008954 2**2
CONTENTS, READONLY
.data 部分没有这样的问题。
这是一个已知的 GNU 链接器问题吗?
编辑:我注意到如果在 C 文件中定义了“.JumpSection”部分,则正确分配了 LMA。
我正面临这个问题,因为该部分是在程序集文件中定义的。
你以前遇到过这个问题吗?
编辑 - 解决方案:事实证明 .JumpSection 必须使用正确的属性定义: .section ".JumpSection","ax",%progbits
只有这样,链接器才能正确运行。