Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

示例:预定义节的修改

以下 mapfile 示例将处理预定义的 text 和 data 段、头选项以及排序段中的节。

示例 8-2  预定义节的处理和节到段的分配
        1    $mapfile_version 2
        2    HDR_NOALLOC;
        3
        4    LOAD_SEGMENT text {
        5            VADDR=0xf0004000;
        6            FLAGS=READ EXECUTE;
        7            OS_ORDER=.text .rodata;
        9            ASSIGN_SECTION {
        10                   TYPE=PROGBITS;
        11                   FLAGS=ALLOC !WRITE;
        12           };
        13   };
        14
        15   LOAD_SEGMENT data {
        16           FLAGS=READ WRITE EXECUTE;
        17           ALIGN=0x1000;
        18           ROUND=0x1000;
        19   };

与往常一样,第一行声明要使用的 mapfile 语言版本。HDR_NOALLOC 指令(行 2)指定所获得的目标文件不应在目标文件的第一个可分配段中包含 ELF 头或程序头数组,该段是预定义的 text 段。

行 4-13 中的段指令为 text 段设置虚拟地址和权限标志。该指令还指定名为 .text 的节应放在段的开头,后跟任何名为 .rodata 的节,再后面是所有其他节。最后将可分配、非可写的 PROGBITS 节指定给该段。

行 15-19 中的段指令指定 data 段必须在边界 0x1000 上对齐。其效果是以相同的对齐方式对齐段中的第一个节。段的长度将向上舍入为与对齐方式相同的值的倍数。段权限设置为读取、写入和执行。