使用链接描述文件为节创建多个段
Creating multiple segment for section using linker script
谁能指出对齐值的限制是什么,这使得为一个部分创建多个段。
和下面提到的测试用例:
#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 << 11) to #define SIZE (1 << 12)
如果没有上述更改,我们只会看到两个可加载段,而通过上述更改,我们会看到三个可加载段。由于 GCC 4.8.1 的 BSS 对齐从 8K 更改为 16K,因此创建了三个可加载段。
所以谁能告诉我需要在链接描述文件中做哪些更改才能为数据创建一个可加载段。
有两种创建链接描述文件的方法:
1. 在 ld/emulparam 目录下有 shell 创建链接脚本的脚本。
2. 而链接描述文件的其他部分来自实际来源。
现在在源代码部分取决于您使用的是哪个链接器。 GNU 链接器或黄金链接器。
GNU 链接描述文件基于:
- 在目录 ~/binutils-2013.11/ld/emulparams/ 下,有不同的体系结构细节 shell 脚本基于不同的 ELF 类型和平台,例如 i386/Vxworks
elf_i386_vxworks.sh
- 虽然脚本中包含的其余通用内容仍然来自 ld/elf 来源。
关于段创建,请查看源代码“bfd/elf.c”下的程序 **bfd_boolean
_bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)**
“
”
谁能指出对齐值的限制是什么,这使得为一个部分创建多个段。
和下面提到的测试用例:
#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 << 11) to #define SIZE (1 << 12)
如果没有上述更改,我们只会看到两个可加载段,而通过上述更改,我们会看到三个可加载段。由于 GCC 4.8.1 的 BSS 对齐从 8K 更改为 16K,因此创建了三个可加载段。
所以谁能告诉我需要在链接描述文件中做哪些更改才能为数据创建一个可加载段。
有两种创建链接描述文件的方法: 1. 在 ld/emulparam 目录下有 shell 创建链接脚本的脚本。 2. 而链接描述文件的其他部分来自实际来源。
现在在源代码部分取决于您使用的是哪个链接器。 GNU 链接器或黄金链接器。
GNU 链接描述文件基于:
- 在目录 ~/binutils-2013.11/ld/emulparams/ 下,有不同的体系结构细节 shell 脚本基于不同的 ELF 类型和平台,例如 i386/Vxworks
elf_i386_vxworks.sh
- 虽然脚本中包含的其余通用内容仍然来自 ld/elf 来源。
关于段创建,请查看源代码“bfd/elf.c”下的程序 **bfd_boolean
_bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)**
“