我的链接器脚本中有以下行
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
只有这样,链接器才能正确运行。