如何使gnu链接器创建类似于.bss的输出节?

时间:2018-08-14 14:05:00

标签: linker gnu linker-scripts

在嵌入式环境中,我想传达有关特殊部分的信息 从构建过程到程序的内存(起始地址和长度) 装载机。我的想法是让链接器创建类似于.bss的输出节, 即该部分不应占用elf文件中的空间,而应具有标志 就像.bss部分一样。我想到这个主意是因为我已经在使用自定义 链接描述文件。

在处理elf文件时,我的统一加载程序可以识别此部分 并以魔术名称命名,并使用大小和VMA部分作为 记忆的特殊部分。

当我说它应该类似于.bss时,是指objdump -h的输出 应该与此类似:

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
...
  7 .bss          00000204  10204c9c  10204c9c  00005c40  2**2
                  ALLOC
...

我想重要的是,这里仅存在标志ALLOC,而没有LOAD 或内容。

是否可以通过链接描述文件中的某些说明来实现? 如果是的话,这些指示是什么?

1 个答案:

答案 0 :(得分:0)

在stackoverflow上浏览类似的问题,ld文档显示解决方案非常简单:

.special_start = 0x20000000;
.special_size  = 0x10000000;
.special .special_start (NOLOAD) :
{
    . = . + .special_size;
}

objdump -h获得此输出:

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
...
  6 .sbss         0000005c  10204c40  10204c40  00005c40  2**2
                  ALLOC, SMALL_DATA
  7 .bss          00000204  10204c9c  10204c9c  00005c40  2**2
                  ALLOC
  8 .special      10000000  20000000  20000000  00006000  2**0
                  ALLOC
...