将部分注入GNU ld脚本; binutils版本之间的脚本兼容性.

将部分注入GNU ld脚本; binutils版本之间的脚本兼容性.,第1张

概述我正在建立类似于 How to collect data from different .a files into one array? How to keep sections in .a files with ld script?问题的内容,即在链接时间内从不同对象文件的元素中组成的数组. 在我的情况下,有几个数组,每个数组进入自己的部分.ld_comp_array_ *,其中*与数组的名称相 我正在建立类似于 How to collect data from different .a files into one array? How to keep sections in .a files with ld script?问题的内容,即在链接时间内从不同对象文件的元素中组成的数组.

在我的情况下,有几个数组,每个数组进入自己的部分.ld_comp_array_ *,其中*与数组的名称相匹配.然后我使用ld –verbose使用默认链接描述文件,并通过将所有这些部分(排序,使不同数组的元素不会混合)修改为输出部分:

KEEP (*(SORT_BY_name(.ld_comp_array*)))

一切都很好.

然后,事情会变得更复杂一些,因为使用此功能的应用程序可能会为各种平台构建 – 到目前为止,我已成功尝试使用AVR Xmega作为目标平台,以及windows 32位和32位和32位64位进行单元测试,列表是开放的(新的平台很可能在不久的将来添加).

但是,对于每个特定平台,默认链接描述文件与其他平台不同,目前我手动插入.ld_comp_array *部分 – 可能会以某种方式自动进行 *** 作?我想到的唯一解决方案是解析默认脚本并粘贴以上输入部分的描述,但这似乎太重了.

如果没有相对简单的解决方案,我可以手动保留它,但是我不知道从本地版本的ld获取的默认脚本是否可能在不同版本的binutils上破裂.有谁能澄清这是否安全?

如果可以自动完成,可以直接将输入部分规范直接注入到.text部分,假定数组应该是“不可变的”吗?

解决方法 我找到了一个令人满意的解决方案. GNU ld具有INSERT选项,使外部支持的脚本不会覆盖默认脚本,而只是在相对于默认脚本中存在的某个部分的位置添加新的部分.

所以在我的情况下,传递给链接器的脚本可能很简单:

SECTIONS{  .rodata.ld_comp_array :  {    *(SORT_BY_name(.ld_comp_array*))  }}INSERT AFTER .rodata;

更多关于INSERT选项:http://sourceware.org/binutils/docs/ld/Miscellaneous-Commands.html#Miscellaneous-Commands

总结

以上是内存溢出为你收集整理的将部分注入GNU ld脚本; binutils版本之间的脚本兼容性.全部内容,希望文章能够帮你解决将部分注入GNU ld脚本; binutils版本之间的脚本兼容性.所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1255270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存