GNU链接器非连续内存区域的节(section)

17
我正在尝试编写一个链接脚本,将一个部分内容写入两个非连续的内存区域。
我在这个邮件列表中找到了一篇旧帖子: “ld链接脚本和非连续内存区域” http://sourceware.org/ml/binutils/2012-01/msg00188.html 我知道C28x编译器的一个特性可以解决这个问题: 将部分内容分割成多个内存段:(使用or函数) SECTIONS { .text: { *(.text) } >> FLASH1| FLASH3 } 详见: http://processors.wiki.ti.com/index.php/C28x_Compiler_-_Understanding_Linking 我尝试过但没有成功。 目前我必须手动填充第一个内存区域。但是很难搜索那些未来不会更改的代码部分,并完全适配和填充第一个内存区域。
GNU链接器是否实现了这样的功能?或者有没有更好的方法来解决这个问题?

现在有一个-enable-non-contiguous-regions选项。更多详细信息请参阅我对类似问题的回答 - undefined
1个回答

1
我认为最简单的方法(也可能是唯一的方法)是将您的部分分成两个部分,然后将一个部分分配给第一个内存区域,将第二个部分分配给第二个内存区域。
您可能已经看到了这个链接脚本的相当简洁的描述: http://www.math.utah.edu/docs/info/ld_3.html

2
我知道这是一个非常老的问题,但是否有一种好的方法可以将其分成两个部分,而不需要手动将X映射到A部分,将Y映射到B部分?我有三个不连续的内存区域来放置整个程序(.text、.data和.bss),如果要保持它们分开,那将会很麻烦。 - rjp
1
也许这是唯一的方法,但并不容易。一个好的解决方案是链接器自动填充内存区域中的一个部分,然后将其余部分流入下一个内存区域。更好的是,当内存紧张时(在嵌入式软件中有时会出现),它可以自动排列部分以实现最佳适配。 - Craig McQueen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接