如何在一个部分的末尾放置一个变量(使用GCC)

4

我希望将一个特定的变量放在其内存段的末尾。

如果我有:

file1.cpp:

__attribute__((section(".mysection"))) char var1[] = "var1";

在另一个文件file2.cpp中:

__attribute__((section(".mysection"))) char var2[] = "var2";

我该如何强制将var2放置在mysection的末尾?
2个回答

3

好的,我最终采用了完全不同的方法,但我想在这里分享我的最终结论:

我基于如何获取我的代码的结束地址进行了研究。

在代码中,你必须添加一个extern引用变量:

extern char var2[];

一个链接脚本必须按照以下方式编写:
SECTIONS
{
    .mysection : {
        *(.mysection);
        var2 = .;
    }
}
INSERT AFTER .mysection

在链接过程中添加链接器脚本(例如ld -T <PATH_TO_MY_LINKER_SCRIPT>)。INSERT AFTER部分用于将我的链接器脚本添加到默认的链接器脚本中。
我不得不使用'gold'来链接我的elf文件,显然我使用的版本不支持'INSERT AFTER'语法。因此,实际解决方案应该是复制默认的链接器脚本,并将我的脚本信息添加到其中。
我尚未测试过,但仍希望它能帮助某些人。

0
你需要在链接命令文件中创建自己的部分,并将其适当地放置在变量部分中。
对于大多数链接器,您无法告诉它确切变量的顺序。更简单的解决方案是为每个变量创建一个部分,并告诉链接器您希望如何排序这些部分。
查找GNU编译器集合的链接器命令文件的精确语法。

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