所以我正在尝试使用GCC在armV7 cortex-a8上编写一个裸机操作系统,我遇到了一些问题。
在我完成装配中的C环境设置并跳转到main后,我注意到我的堆栈框架没有被正确跟踪。在进一步检查时,看起来LR寄存器被推入堆栈作为调用main()的函数,它正在搞砸调试器。
如果我将LR设置为0,问题就会消失 - 但这是解决这个问题的正确方法吗?
答案 0 :(得分:2)
文件Exception handling ABI for the ARM architecture 表明了这一点:
运行时环境必须确保堆栈展开无法继续超出有效堆栈区域,可能将
main()
的调用者标记为EXIDX_CANTUNWIND
。
如果在启动代码中使用.cantunwind
指令,则会发生这种情况。