JavaScript is required to for searching.
跳过导航链接
退出打印视图
链接程序和库指南     Oracle Solaris 11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分使用链接编辑器和运行时链接程序

1.  Oracle Solaris 链接编辑器介绍

2.  链接编辑器

3.  运行时链接程序

4.  共享目标文件

5.  接口和版本控制

6.  使用动态字符串标记建立依赖性

第 2 部分快速参考

7.  链接编辑器快速参考

8.  版本控制快速参考

第 3 部分高级主题

9.  直接绑定

10.  Mapfile

11.  可扩展性机制

第 4 部分ELF 应用程序二进制接口

12.  目标文件格式

13.  程序装入和动态链接

14.  线程局部存储

第 5 部分附录

A.  链接程序和库的更新及新增功能

B.  System V 发行版 4(版本 1)Mapfile

Mapfile 结构和语法

段声明

映射指令

段内节的排序

大小符号声明

文件控制指令

映射示例

Mapfile 缺省选项

内部映射结构

索引

内部映射结构

映射结构是基于 ELF 的链接编辑器中最重要的数据结构之一。对应于模型缺省 mapfile 的缺省映射结构由链接编辑器使用。任何用户 mapfile 都可以增大或覆盖缺省映射结构中的特定值。

图 B-1 说明了一个典型但某种程度上已简化的映射结构。“入口条件”框对应于缺省映射指令中的信息。“段属性描述符”框对应于缺省段声明中的信息。“输出节描述符”框提供了每段下的各个节的详细属性。节本身以循环方式显示。

图 B-1 简单的映射结构

image:简化的映射结构。

将节映射到段时,链接编辑器执行以下步骤:

  1. 读入节时,链接编辑器会检查入口条件列表以查看是否存在匹配。必须匹配所有指定的条件。

    图 B-1 中,text 段下节的 section_type 值必须为 $PROGBITSsection_flags 值必须为 ?A!W。此节的名称无需为 .text,因为入口条件中未指定任何名称。节的 section_flag 值可以是 X,也可以是 !X,因为入口条件中未指定任何执行位。

    如果不与任何入口条件匹配,则将节放置在输出文件的末尾(位于所有其他段之后)。不会为此信息创建任何程序头项。

  2. 当节位于段下时,链接编辑器会检查此段中现有输出节描述符的列表,方式如下:

    如果节属性值与现有输出节描述符的属性值完全匹配,则将此节放置在与该输出节描述符关联的节列表的末尾。

    例如,section_name 值为 .data1section_type 值为 $PROGBITSsection_flags 值为 ?AWX 的节将进入图 B-1 中第二个“入口条件”框,可以将其放置在 data 段中。此节与第二个“输出节描述符”框 (.data1, $PROGBITS, ?AWX) 完全匹配,将被添加到与该框关联的列表的末尾。fido.orover.osam.o 中的 .data1 节说明了这一点。

    如果未找到匹配的输出节描述符,但是存在其他具有相同 section_type 的输出节描述符,则使用与节相同的属性值创建一个新的输出节描述符,并且此节与新的输出节描述符相关联。输出节描述符和节放置在节类型相同的最后一个输出节描述符之后。图 B-1 中的 .data2 节便是按照此方式放置的。

    如果不存在其他具有所示节类型的输出节描述符,则将创建一个新的输出节描述符,并将节放置在此节中。


    注 - 如果输入节的用户定义类型值介于 SHT_LOUSERSHT_HIUSER 之间,则将其视为 $PROGBITS 节。mapfile 中没有命名此 sec ion_ty e 值的方法,但是可以使用入口条件中的其他属性值规 (section_flags sect on_name) 重定向这些节。


  3. 如果在读取所有命令行目标文件和库之后,段中没有任何节,则不会为该段生成任何程序头项。


注 - 类型为 $SYMTAB$STRTAB$REL$RELA 的输入节由链接编辑器在内部使用。引用这些节类型的指令只能将链接编辑器生成的输出节映射到段。