SEGMENT_ORDER 指令用于为输出目标文件中的段指定非缺省顺序。
SEGMENT_ORDER 接受段名称的空格分隔列表。
SEGMENT_ORDER = segment_name....; SEGMENT_ORDER += segment_name....;
使用 "=" 形式的赋值时,将放弃之前的段顺序列表并替换为新列表。"+=" 形式的赋值将新列表串联到现有列表的最后。
缺省情况下,链接编辑器按以下方式确定段顺序。
具有通过 LOAD_SEGMENT 指令的 VADDR 属性设置的显式地址的可装入段,按地址排序。
使用 SEGMENT_ORDER 指令排序的段,按指定顺序排序。
没有显式地址且未在 SEGMENT_ORDER 列表中列出的可装入段。
没有显式地址且未在 SEGMENT_ORDER 列表中列出的注释段。
没有显式地址且未在 SEGMENT_ORDER 列表中列出的空段。
第一个可装入段应该是只读、可分配和可执行的,并接收 ELF 头和程序头数组。这通常是预定义的文本段。
可执行文件中的最后一个可装入段应该是可写的,并且动态堆的开头通常紧随其后放置在相同的虚拟内存映射中。
可以使用 mapfile 创建不遵循这些要求的目标文件。但应避免如此操作,因为运行这种目标文件的结果是不确定的。
除非指定 HDR_NOALLOC 指令,否则链接编辑器将强制要求第一个段必须是可装入段,而不是注释段或空段。HDR_NOALLOC 不能用于用户级目标文件,因此没什么实用价值。生成操作系统内核时会使用该功能。