簡體   English   中英

是什么導致鏈接器不在.init節中插入Epilog?

[英]What would cause linker not to insert epilog in .init section?

使用gcc arm-none-eabi 4_8編譯器,鏈接后我的二進制文件出現了問題。 沒有錯誤,但是當我在調試器中啟動它時,我永遠不會到達main。 跟蹤它似乎鏈接器沒有將結尾添加到crt的.init部分。 這導致我的代碼經過.init進入.rodata節,並在未定義指令上遇到嚴重錯誤。

我很困惑,試圖弄清楚為什么使用相同makefile的非常相似的代碼卻沒有這個問題。 我知道這是一個廣泛的問題,但是為什么鏈接程序沒有創建一個好的.init節是什么原因呢?

錯誤的.map:

*(.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

好的.map:

*(.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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM