【问题标题】:Creating multiple segment for section using linker script使用链接描述文件为部分创建多个段
【发布时间】:2016-05-19 09:52:58
【问题描述】:

谁能指出对齐值的限制是什么,这使得为一个部分创建多个段。

用下面提到的测试用例:

#include <stdio.h>
#define SIZE (1 << 11)

int Buffer[SIZE]  __attribute__ ((aligned (SIZE * sizeof(int)))) ;

int main (int argc, char * argv[])
{
printf("Test\n");
return 0;
}

如果我将宏更改为:

#define SIZE (1 到 #define SIZE (1

如果没有上述更改,我们只能看到两个可加载段,而通过上述更改,我们观察到三个可加载段。随着 GCC 4.8.1 的 BSS 对齐从 8K 变为 16K,这会创建三个可加载段。

谁能告诉我需要在链接描述文件中进行哪些更改才能只为数据创建一个可加载段。

【问题讨论】:

  • 这是我在 i686 机器上观察到的。

标签: gcc linker loader linker-scripts


【解决方案1】:

有两种方法可以创建链接描述文件: 1. 在 ld/emulparam 目录下有创建链接脚本的 shell 脚本。 2. 而链接脚本的其他部分来自实际来源。

现在在源代码部分取决于您使用的是哪个链接器,即。 GNU 链接器或黄金链接器。

【讨论】:

    【解决方案2】:

    GNU 链接器脚本是基于构建的:

    1. 在 ~/binutils-2013.11/ld/emulparams/ 目录下,根据不同的 ELF 类型和平台,例如 i386/Vxworks,有不同的架构细节 shell 脚本

    elf_i386_vxworks.sh

    1. 虽然脚本中的其余泛型包含仍然来自 ld/elf 来源。

    在创建分段时,请查看源“bfd/elf.c”下的过程**bfd_boolean _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)**

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 2018-12-29
      • 1970-01-01
      • 2019-11-27
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      相关资源
      最近更新 更多