我已经广泛搜索了如何做这件事情,但没有找到答案。
我的内存布局如下:
Fake Address | Section
0 | text
7 | relocate
15 | bss
23 | stack
我将堆放在栈的末尾。堆会增长,而栈是针对我使用的 ARM 芯片的完整降序栈。
现在,我想要将一个单独的部分(称为.persist
)放入我的 RAM 内存中。我希望它位于 RAM 的最末尾,并且我想将其编程到我的链接器脚本中。然而,这个 .persist
部分的大小不是由我定义的,而是由编译器从其中包含的符号计算出来的。
到目前为止,我还没有想到一个好办法。因为我知道 RAM 的起始地址和 SIZE,如果我知道部分的大小,计算需要放置该部分的位置将非常简单。然而,根据GNU 链接器文档 (第 74 页),似乎:
SIZEOF(section) 返回命名节的字节数,如果已分配该节。 如果在评估此内容时未分配该节,则链接器将报告错误。
因此,我无法在链接器脚本中确定部分的大小(因为我想在放置/分配它之前计算大小)。
有谁知道好的方法吗?