试图在cortex-m3上加载与位置无关的代码

前端之家收集整理的这篇文章主要介绍了试图在cortex-m3上加载与位置无关的代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个嵌入式应用程序,它将有一个引导程序,它将决定直接从内部闪存运行两个应用程序中的一个.我试图使这些应用程序位置独立,以便它们都可以编译为相同的基地址.没有操作系统,因此没有可用的动态链接器.到目前为止,我尝试使用-fpie选项(使用gcc)构建并没有太大的成功.函数调用似乎是正确的,但全局数据没有正确的地址.本地定义的全局数据似乎使其地址偏移了应用程序偏离其原始基址的数量.在其他文件中声明的全局数据具有完全错误的地址(如果我使用-fpic构建,则本地声明的全局数据和其他文件中的全局数据都是完全错误的).我怀疑在我的应用程序启动时我需要对GOT部分进行一些操作,但我不确定.

解决方法

我终于搞定了.看起来我需要做以下事情:
所有代码都需要符合-fpic(之前我在尝试-fpie)

我还需要修改链接器脚本.我强迫GOT进入sram部分,它位于flash中的动态部分之后.如果GOT部分位于闪存中动态部分之前,看起来一切正常.不知道为什么这很重要,但它似乎解决了所有问题 – 在此之前,好像代码没有正确定位GOT,因为GOT存储了正确的值但是我所有变量的地址都不正确.

猜你在找的CSS相关文章