如何列出链接器分配的代码对象w / gcc?

我正在构建一个由几个代码模块和一个静态库组成的嵌入式应用程序。 一些全局变量显式放在专用内存部分(即,不是默认的.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] 

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

您可以将--print-map标志传递给链接器。 这将使它发出每个目标文件中每个部分映射到内存的详细信息。

例:

  .text 0x0000000000400370 0x2c //lib64/crt1.o 0x0000000000400370 _start .text 0x000000000040039c 0x17 //lib64/crti.o *fill* 0x00000000004003b3 0xd 90909090 .text 0x00000000004003c0 0x92 //4.6.3/crtbegin.o *fill* 0x0000000000400452 0x2 90909090 .text 0x0000000000400454 0x21 /tmp/ccwAfGkH.o 0x000000000040045f x 0x000000000040046a y 0x0000000000400454 main