在嵌入式处理器中调用main()之前,我应该将LR设置为什么?

时间:2017-09-17 09:09:55

标签: c gcc arm embedded

所以我正在尝试使用GCC在armV7 cortex-a8上编写一个裸机操作系统,我遇到了一些问题。

在我完成装配中的C环境设置并跳转到main后,我注意到我的堆栈框架没有被正确跟踪。在进一步检查时,看起来LR寄存器被推入堆栈作为调用main()的函数,它正在搞砸调试器。

如果我将LR设置为0,问题就会消失 - 但这是解决这个问题的正确方法吗?

1 个答案:

答案 0 :(得分:2)

文件Exception handling ABI for the ARM architecture 表明了这一点:

  

运行时环境必须确保堆栈展开无法继续超出有效堆栈区域,可能将main()的调用者标记为EXIDX_CANTUNWIND

如果在启动代码中使用.cantunwind指令,则会发生这种情况。