代码之家  ›  专栏  ›  技术社区  ›  RoMa

如何使gnu链接器创建类似于的输出部分。bss?

  •  0
  • RoMa  · 技术社区  · 8 年前

    在嵌入式环境中,我希望传递有关特殊部件的信息 从构建过程到程序的内存(起始地址和长度) 加载器。我的想法是让链接器创建一个类似于的输出部分。bss, i、 e.该节不应占用elf文件中的空间,并且应具有标志 像这样。bss部分。我有了这个想法,因为我已经在使用定制的

    当处理elf文件时,我的costumized加载程序可以识别这个部分 使用神奇的名称,并使用截面尺寸和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 回复  |  直到 8 年前
        1
  •  0
  •   RoMa    8 年前

    浏览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
    ...