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

文档信息

前言

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

1.  Oracle Solaris 链接编辑器介绍

2.  链接编辑器

3.  运行时链接程序

4.  共享目标文件

第 2 部分快速参考

5.  链接编辑器快速参考

第 3 部分高级主题

6.  直接绑定

7.  生成目标文件以优化系统性能

8.  mapfile

9.  接口和版本控制

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

11.  可扩展性机制

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

12.  目标文件格式

文件格式

数据表示形式

ELF 头

ELF 标识

数据编码

节合并

特殊节

COMDAT 节

组节

功能节

散列表节

移动节

注释节

重定位节

重定位计算

SPARC: 重定位

SPARC: 重定位类型

64 位 SPARC: 重定位类型

x86: 重定位

32 位 x86: 重定位类型

x64: 重定位类型

字符串表节

符号表节

符号值

符号表布局和约定

符号排序节

寄存器符号

Syminfo 表节

版本控制节

版本定义章节

版本依赖性节

版本符号节

13.  程序装入和动态链接

14.  线程局部存储

第 5 部分附录

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

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

索引

功能节

SHT_SUNW_cap 节标识目标文件的功能要求。这些功能称为目标文件功能。此节还可以标识目标文件中的函数或初始化的数据项的功能要求。这些功能称为符号功能。此节包含以下结构的数组。请参见 sys/elf.h

typedef struct {
        Elf32_Word      c_tag;
        union {
                Elf32_Word      c_val;
                Elf32_Addr      c_ptr;
        } c_un;
} Elf32_Cap;

typedef struct {
        Elf64_Xword     c_tag;
        union {
                Elf64_Xword     c_val;
                Elf64_Addr      c_ptr;
        } c_un;
} Elf64_Cap;

对于此类型的每一个目标文件,c_tag 都会控制 c_un 的解释。

c_val

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

c_ptr

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

存在以下功能标记。

表 12-12 ELF 功能数组标记

名称
c_un
CA_SUNW_NULL
0
已忽略
CA_SUNW_HW_1
1
c_val
CA_SUNW_SF_1
2
c_val
CA_SUNW_HW_2
3
c_val
CA_SUNW_PLAT
4
c_ptr
CA_SUNW_MACH
5
c_ptr
CA_SUNW_ID
6
c_ptr
CA_SUNW_NULL

标记功能组的结尾。

CA_SUNW_HW_1CA_SUNW_HW_2

表示硬件功能值。c_val 元素包含用于表示关联硬件功能的值。在 SPARC 平台上,硬件功能在 sys/auxv_SPARC.h 中定义。在 x86 平台上,硬件功能在 sys/auxv_386.h 中定义。

CA_SUNW_SF_1

表示软件功能值。c_val 元素包含用于表示 sys/elf.h 中定义的关联软件功能的值。

CA_SUNW_PLAT

指定平台名称。c_ptr 元素包含以空字符结尾的字符串的字符串表偏移,该偏移定义平台名称。

CA_SUNW_MACH

指定计算机名。c_ptr 元素包含以空字符结尾的字符串的字符串表偏移,该偏移定义计算机硬件名称。

CA_SUNW_ID

指定功能标识符名称。c_ptr 元素包含以空字符结尾的字符串的字符串表偏移,该偏移定义标识符名称。此元素并不定义功能,而是为功能组指定唯一的符号名称,通过该名称可以引用该功能组。此标识符名称附加在任何在链接编辑器的 -z symbolcap 处理过程中转换为局部符号的全局符号名称中。请参见将目标文件功能转换为符号功能

可重定位目标文件可以包含功能节。链接编辑器会将多个输入可重定位目标文件中的所有功能节合并到一个单独的功能节中。使用链接编辑器,还可在生成目标文件时定义功能。请参见标识功能要求

一个目标文件中可以存在多个以 CA_SUNW_NULL 结尾的功能组。从索引 0 开始的第一个组标识目标文件功能。定义目标文件功能的动态目标文件包含与该节关联的 PT_SUNWCAP 程序头。使用此程序头,运行时链接程序可以对照可供进程使用的系统功能来验证目标文件。使用不同目标文件功能的动态目标文件可以提供使用过滤器的灵活运行时环境。请参见特定于功能的共享目标文件

其他功能组标识符号功能。符号功能允许一个目标文件中存在同一符号的多个实例。每个实例都关联一组必须可供要使用的实例使用的功能。存在符号功能时,SHT_SUNW_cap 节的 sh_link 元素指向关联的 SHT_SUNW_capinfo 表。使用符号功能的动态目标文件可以提供针对特定的系统启用优化功能的灵活方式。请参见创建符号功能函数系列

SHT_SUNW_capinfo 表与关联的符号表对应。SHT_SUNW_capinfo 节的 sh_link 元素指向关联的符号表。与功能关联的函数在 SHT_SUNW_capinfo 表中具有索引,这些索引用于标识 SHT_SUNW_cap 节中的功能组。

在动态目标文件中,SHT_SUNW_capinfo 节的 sh_info 元素指向功能链表 SHT_SUNW_capchain。运行时链接程序使用此表查找功能系列的成员。

SHT_SUNW_capinfo 表项具有以下格式。请参见 sys/elf.h

typedef Elf32_Word    Elf32_Capinfo;
typedef Elf64_Xword   Elf64_Capinfo;

此表中的元素可以使用以下宏进行解释。请参见 sys/elf.h

#define ELF32_C_SYM(info)       ((info)>>8)
#define ELF32_C_GROUP(info)     ((unsigned char)(info))
#define ELF32_C_INFO(sym, grp)  (((sym)<<8)+(unsigned char)(grp))

#define ELF64_C_SYM(info)       ((info)>>32)
#define ELF64_C_GROUP(info)     ((Elf64_Word)(info))
#define ELF64_C_INFO(sym, grp)  (((Elf64_Xword)(sym)<<32)+(Elf64_Xword)(grp))

SHT_SUNW_capinfo 项的 group(组)元素包含此符号关联的 SHT_SUNW_cap 表的索引。因此该元素可以将符号与功能组关联起来。保留的组索引 CAPINFO_SUNW_GLOB 标识功能实例系列的前置符号,该符号提供缺省实例。

名称
含义
CAPINFO_SUNW_GLOB
0xff
标识缺省符号。此符号不与任何特定的功能关联,但指向一个符号功能系列。

SHT_SUNW_capinfo 项的 symbol 元素包含与此符号关联的前置符号的索引。链接编辑器使用组和符号信息处理可重定位目标文件中的功能符号系列,并在任何输出目标文件中构造所需的功能信息。在动态目标文件中,前置符号的符号元素(使用组 CAPINFO_SUNW_GLOB 标记)是 SHT_SUNW_capchain 表的索引。此索引使运行时链接程序可以遍历功能链表,从该索引开始检查其后的每一项,直至找到 0 项为止。这些链项包含每个功能系列成员的符号索引。

定义符号功能的动态目标文件具有一个 DT_SUNW_CAP 动态项和一个 DT_SUNW_CAPINFO 动态项。这些项分别标识 SHT_SUNW_cap 节和 SHT_SUNW_capinfo 节。目标文件还包含 DT_SUNW_CAPCHAINDT_SUNW_CAPCHAINENTDT_SUNW_CAPCHAINSZ 项,这些项标识 SHT_SUNW_capchain 节、节项大小和总大小。通过这些项,运行时链接程序可以使用符号功能实例系列建立最好的符号以供使用。

目标文件可以仅定义目标文件功能,或仅定义符号功能,也可以同时定义这两种功能。目标文件功能组从索引 0 开始。符号功能组从 0 以外的其他任何索引开始。如果目标文件定义符号功能,但不定义目标文件功能,那么在索引 0 处必须存在一个 CA_SUNW_NULL 项以表示符号功能的开始。