リンカースクリプトに次の行があります
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 リンカの問題ですか?
編集:セクション「.JumpSection」がCファイルで定義されている場合、LMAが正しく割り当てられていることに気付きました。
セクションがアセンブリ ファイルで定義されているため、この問題に直面しています。
以前にこの問題に直面したことがありますか?
編集 - 解決策: .JumpSection を正しい属性で定義する必要があることがわかりました: .section ".JumpSection","ax",%progbits
そうして初めて、リンカは正しく動作します。