如何列出连接分配的代码对象W / GCC?(How to list linker allocated

2019-09-21 09:03发布

我建立由几个代码模块和静态库的嵌入式应用。 有些全局变量是明确放在专用内存部分(即不是默认的.data段)。

该处理器存储器架构为4家银行,创建一个连续的物理存储器空间。 在我的应用程序中,只有第一行是保留代码和其他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]

有没有办法看到的链接检查部分和对象重叠前的对象分配(可能在一个临时对象文件),并中止构建?

Answer 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


文章来源: How to list linker allocated code objects w/ gcc?