4

我正在构建一个由几个代码模块和一个静态库组成的嵌入式应用程序。一些全局变量显式放置在专用内存段中(即,不是默认的 .data 段)。

处理器内存架构为 4 个存储体,创建了一个连续的物理内存空间。在我的应用程序中,只有第 1 个存储库是为代码保留的,其他 3 个存储库是为显式分配的全局变量和一个小堆栈保留的。

问题是代码部分(.text)现在超出了第一个银行边界,我收到以下链接器错误消息:

./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 回答