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 的解释。
这些目标文件表示具有各种解释的整数值。
这些目标文件表示程序虚拟地址。
存在以下功能标记。
表 12-12 ELF 功能数组标记
|
标记功能组的结尾。
表示硬件功能值。c_val 元素包含用于表示关联硬件功能的值。在 SPARC 平台上,硬件功能在 sys/auxv_SPARC.h 中定义。在 x86 平台上,硬件功能在 sys/auxv_386.h 中定义。
表示软件功能值。c_val 元素包含用于表示 sys/elf.h 中定义的关联软件功能的值。
指定平台名称。c_ptr 元素包含以空字符结尾的字符串的字符串表偏移,该偏移定义平台名称。
指定计算机名。c_ptr 元素包含以空字符结尾的字符串的字符串表偏移,该偏移定义计算机硬件名称。
指定功能标识符名称。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 标识功能实例系列的前置符号,该符号提供缺省实例。
|
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_CAPCHAIN、 DT_SUNW_CAPCHAINENT 和 DT_SUNW_CAPCHAINSZ 项,这些项标识 SHT_SUNW_capchain 节、节项大小和总大小。通过这些项,运行时链接程序可以使用符号功能实例系列建立最好的符号以供使用。
目标文件可以仅定义目标文件功能,或仅定义符号功能,也可以同时定义这两种功能。目标文件功能组从索引 0 开始。符号功能组从 0 以外的其他任何索引开始。如果目标文件定义符号功能,但不定义目标文件功能,那么在索引 0 处必须存在一个 CA_SUNW_NULL 项以表示符号功能的开始。