【发布时间】:2013-09-09 22:51:57
【问题描述】:
我已经广泛搜索了如何做到这一点,但未能找到答案。
我的内存布局如下:
Fake Address | Section
0 | text
7 | relocate
15 | bss
23 | stack
在堆栈的末尾,我放置了堆。它长大了,堆栈是我正在使用的 ARM 芯片的完整降序堆栈。
现在,我要做的是在我的 RAM 内存中放置一个单独的部分,我们称之为 .persist。我希望它位于 RAM 的最末端,并且我想将它编程到我的链接器脚本中。但是,.persist 部分的大小不是由我定义的,而是由编译器根据它包含的符号计算得出的。
到目前为止,我还没有想出一个好的方法来做到这一点。因为我知道 RAM 起始地址和 SIZE,所以如果我知道部分大小,计算部分需要去的位置将是微不足道的。但是,根据the GNU linker documentation (pg 74) 看来:
SIZEOF(section) 返回命名的字节大小 部分,如果该部分已被分配。 如果在评估时该节尚未分配,则链接器将 报错。
所以我无法计算链接描述文件中部分的大小(因为我想在放置/分配它之前计算大小)。
有谁知道这样做的好方法吗?
【问题讨论】:
-
我也有同样的问题。这对你有帮助吗? stackoverflow.com/a/19348569/911550
-
这是一个部分解决方案,但不是我所追求的。它仍然是最接近其他人的帮助。谢谢!
-
这已经解决了(见我下面的评论)。
标签: c++ c memory linker linker-scripts