Linker 什么会导致链接器不在.init节中插入epilog?

Linker 什么会导致链接器不在.init节中插入epilog?,linker,crt,Linker,Crt,使用gcc arm none eabi 4_8编译器,链接后我的二进制文件出现问题。没有错误,但当我在调试器中调出它时,我永远不会到达main。通过跟踪它,链接器似乎没有将epilog添加到crt的.init部分。这会导致我的代码运行超过.init进入.rodata部分,并在未定义的指令上遇到严重错误 我很难理解为什么这段代码有这个问题,而使用相同makefile的非常相似的代码却没有。我知道这是一个广泛的问题,但是链接器没有创建一个好的.init部分的原因是什么 坏。地图: *(.init)

使用gcc arm none eabi 4_8编译器,链接后我的二进制文件出现问题。没有错误,但当我在调试器中调出它时,我永远不会到达main。通过跟踪它,链接器似乎没有将epilog添加到crt的.init部分。这会导致我的代码运行超过.init进入.rodata部分,并在未定义的指令上遇到严重错误

我很难理解为什么这段代码有这个问题,而使用相同makefile的非常相似的代码却没有。我知道这是一个广泛的问题,但是链接器没有创建一个好的.init部分的原因是什么

坏。地图:

*(.init)
.init          0x00001cec        0x4     /usr/local/.../gcc/linux/4_8-2013q4/bin/../lib/gcc/arm-none-eabi/4.8.3/armv6-m/crti.o
            0x00001cec                _init
*(.fini)
.fini          0x00001cf0        0x4 /usr/local/.../gcc/linux/4_8-2013q4/bin/../lib/gcc/arm-none-eabi/4.8.3/armv6-m/crti.o
            0x00001cf0                _fini
好的,地图:

*(.init)
.init          0x00015c48        0x4 /usr/local/.../gcc/linux/4_6-2012q4/bin/../lib/gcc/arm-none-eabi/4.6.2/armv6-m/crti.o
            0x00015c48                _init
.init          0x00015c4c        0x8 /usr/local/.../gcc/linux/4_6-2012q4/bin/../lib/gcc/arm-none-eabi/4.6.2/armv6-m/crtn.o
*(.fini)
.fini          0x00015c54        0x4 /usr/local/.../gcc/linux/4_6-2012q4/bin/../lib/gcc/arm-none-eabi/4.6.2/armv6-m/crti.o
            0x00015c54                _fini
.fini          0x00015c58        0x8 /usr/local/.../gcc/linux/4_6-2012q4/bin/../lib/gcc/arm-none-eabi/4.6.2/armv6-m/crtn.o

问题是链接器命令文件已过期

他失踪了:

           KEEP(*(.init))
           KEEP(*(.fini))