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

退出打印视图

更新时间: 2014 年 7 月
 
 

辅助节

除了主输出目标文件之外,Solaris 链接编辑器还可以生成一个或多个辅助目标文件。辅助目标文件包含通常写入到主目标文件中的不可分配节。生成辅助目标文件后,主目标文件和所有关联的辅助目标文件将包含 SHT_SUNW_ancillary 节,该节包含用于标识这些相关目标文件的信息。这些目标文件中任何一个的辅助节都提供了标识和解释组的其他成员所需的信息。

此节包含以下结构的数组。请参见 sys/elf.h

typedef struct {
        Elf32_Word      a_tag;
        union {
                Elf32_Word      a_val;
                Elf32_Addr      a_ptr;
        } a_un;
} Elf32_Ancillary;

typedef struct {
        Elf64_Xword     a_tag;
        union {
                Elf64_Xword     a_val;
                Elf64_Addr      a_ptr;
        } a_un;
} Elf64_Ancillary;

对于此类型的每个目标文件,a_tag 都控制着 a_un 的解释。

a_val

这些目标文件表示具有各种解释的整数值。

a_ptr

这些目标文件表示程序虚拟地址。

存在以下辅助标记。

表 12-13  ELF 辅助数组标记
名称
c_un
ANC_SUNW_NULL
0
已忽略
ANC_SUNW_CHECKSUM
1
a_val
ANC_SUNW_MEMBER
2
a_ptr
ANC_SUNW_NULL

标记辅助节组的结尾。

ANC_SUNW_CHECKSUM

c_val 元素中提供文件的校验和。当 ANC_SUNW_CHECKSUM 位于第一个 ANC_SUNW_MEMBER 实例之前时,它将提供将从中读取辅助节的目标文件的校验和。如果它位于 ANC_SUNW_MEMBER 标记之后,则它将提供该成员的校验和。

ANC_SUNW_MEMBER

指定目标文件名称。a_ptr 元素包含以空字符结尾的字符串的字符串表偏移,该偏移提供文件名称。

辅助节中必须始终在第一个 ANC_SUNW_MEMBER 实例(标识当前目标文件)之前包含一个 ANC_SUNW_CHECKSUM。在其之后,针对构成完整目标文件集合的每个目标文件,都应当有一个 ANC_SUNW_MEMBER。每个 ANC_SUNW_MEMBER 之后都应当跟有该目标文件的 ANC_SUNW_CHECKSUM。因此,典型辅助节的结构如下所示。

标签
含义
ANC_SUNW_CHECKSUM
此目标文件的校验和
ANC_SUNW_MEMBER
目标文件 1 的名称
ANC_SUNW_CHECKSUM
目标文件 1 的校验和
ANC_SUNW_MEMBER
目标文件 N 的名称
ANC_SUNW_CHECKSUM
目标文件 N 的校验和
ANC_SUNW_NULL

因此,目标文件可以通过将初始 ANC_SUNW_CHECKSUM 与其之后的每项进行比较,直到找到匹配项,来标识其自己。