【问题标题】:How can i make the gnu linker create an output section similar to .bss?如何使 gnu 链接器创建类似于 .bss 的输出部分?
【发布时间】:2019-01-21 10:14:06
【问题描述】:

在嵌入式环境中,我想传达有关特殊部件的信息 从构建过程到程序的内存(起始地址和长度) 装载机。我的想法是让链接器创建一个类似于.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 或内容。

这可以通过链接描述文件中的一些指令来实现吗? 如果有,这些说明是什么?

【问题讨论】:

    标签: linker gnu linker-scripts


    【解决方案1】:

    在 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
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2012-08-16
      • 1970-01-01
      相关资源
      最近更新 更多