4

複数のコード モジュールと静的ライブラリで構成される組み込みアプリケーションを構築しています。一部のグローバル変数は、専用のメモリ セクション (つまり、デフォルトの .data セクションではない) に明示的に配置されます。

プロセッサ メモリ アーキテクチャは 4 バンクで、連続した物理メモリ空間を作成します。私のアプリケーションでは、最初のバンクのみがコード用に予約されており、他の 3 つのバンクは明示的に割り当てられたグローバルと小さなスタック用に予約されています。

問題は、コード セクション (.text) が第 1 バンクの境界を超えて大きくなり、次のリンカ エラー メッセージが表示されることです。

./bin/ld: section .data_bank1 loaded at [0000000000002000,0000000000003fff] overlaps section .text loaded at [0000000000000630,00000000000020df]
./bin/ld: section .fini loaded at [00000000000020e0,00000000000020f9] overlaps section .data_bank1 loaded at [0000000000002000,0000000000003fff]

リンカーがセクションとオブジェクトのオーバーラップをチェックしてビルドを中止する前に、オブジェクトの割り当て (おそらく一時オブジェクト ファイル内) を確認する方法はありますか?

4

1 に答える 1

1

--print-mapフラグをリンカーに渡すことができます。これにより、各オブジェクト ファイルの各セクションがメモリにマップされる場所の詳細が出力されます。

例:

 .text          0x0000000000400370       0x2c /<snip>/lib64/crt1.o
                0x0000000000400370                _start
 .text          0x000000000040039c       0x17 /<snip>/lib64/crti.o
 *fill*         0x00000000004003b3        0xd 90909090
 .text          0x00000000004003c0       0x92 /<snip>/4.6.3/crtbegin.o
 *fill*         0x0000000000400452        0x2 90909090
 .text          0x0000000000400454       0x21 /tmp/ccwAfGkH.o
                0x000000000040045f                x
                0x000000000040046a                y
                0x0000000000400454                main
于 2012-09-05T12:28:09.197 に答える