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

文档信息

前言

1.  Oracle Solaris 链接编辑器介绍

2.  链接编辑器

3.  运行时链接程序

4.  共享目标文件

5.  应用程序二进制接口与版本控制

6.  支持接口

7.  目标文件格式

8.  线程局部存储

9.  Mapfile

A.  链接编辑器快速参考

B.  版本控制快速参考

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

D.  直接绑定

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

Mapfile 结构和语法

段声明

映射指令

段内节的排序

大小符号声明

文件控制指令

映射示例

Mapfile 缺省选项

内部映射结构

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

索引

内部映射结构

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

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

图 E-1 简单的映射结构

image:简化的映射结构。

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

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

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

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

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

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

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

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

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


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


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


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