Capabilities Section
A SHT_SUNW_cap section identifies the capability requirements of an
object. These capabilities are referred to as object capabilities. This
section can also identify the capability requirements of functions, or initialized data items,
within an object. These capabilities are referred to as symbol
capabilities. This section contains an array of the following structures. See
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;For each object with this type, c_tag controls the
interpretation of c_un.
-
c_val -
These objects represent integer values with various interpretations.
-
c_ptr -
These objects represent program virtual addresses.
The following capabilities tags exist.
Table 14-15 ELF Capability Array Tags
| Name | Value | c_un |
|---|---|---|
|
|
|
Ignored |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
CA_SUNW_NULL -
Marks the end of a group of capabilities.
-
CA_SUNW_HW_1,CA_SUNW_HW_2,CA_SUNW_HW_3 -
Indicates hardware capability values. The
c_valelement contains a value that represents the associated hardware capabilities. On SPARC platforms, hardware capabilities are defined insys/auxv_SPARC.h. On x86 platforms, hardware capabilities are defined insys/auxv_386.h. -
CA_SUNW_SF_1 -
Indicates software capability values. The
c_valelement contains a value that represents the associated software capabilities that are defined insys/elf.h. -
CA_SUNW_PLAT -
Specifies a platform name. The
c_ptrelement contains the string table offset of a null-terminated string, that defines a platform name. -
CA_SUNW_MACH -
Specifies a machine name. The
c_ptrelement contains the string table offset of a null-terminated string, that defines a machine hardware name. -
CA_SUNW_ID -
Specifies a capability identifier name. The
c_ptrelement contains the string table offset of a null-terminated string, that defines an identifier name. This element does not define a capability, but assigns a unique symbolic name to the capability group by which the group can be referenced. This identifier name is appended to any global symbol names that are transformed to local symbols as part of the link-editors-z symbolcapprocessing. See Converting Object Capabilities to Symbol Capabilities.
Relocatable objects can contain a capabilities section. The link-editor combines any capabilities sections from multiple input relocatable objects into a single capabilities section. The link-editor also allows capabilities to be defined at the time an object is built. See Identifying Capability Requirements.
Multiple CA_SUNW_NULL terminated groups of
capabilities can exist within an object. The first group, starting at index
0, identifies the object capabilities. A dynamic object that defines
object capabilities, has a PT_SUNW_CAP program header associated to the
section. This program header allows the runtime linker to validate the object against the
system capabilities that are available to the process. Dynamic objects that use different
object capabilities can provide a flexible runtime environment using filters. See Capability Specific Shared Objects.
Additional groups of capabilities identify symbol capabilities. Symbol capabilities allow
multiple instances of the same symbol to exist within an object. Each instance is associated
to a set of capabilities that must be available for the instance to be used. When symbol
capabilities are present, the sh_link element of the
SHT_SUNW_cap section points to the associated
SHT_SUNW_capinfo table. Dynamic objects that use symbol capabilities can
provide a flexible means of enabling optimized functions for specific systems. See Creating a Family of Symbol Capabilities Functions.
The SHT_SUNW_capinfo table parallels the associated symbol table. The
sh_link element of the SHT_SUNW_capinfo
section points to the associated symbol table. Functions that are associated with
capabilities, have indexes within the SHT_SUNW_capinfo table that identify
the capabilities group within the SHT_SUNW_cap section.
Within a dynamic object, the sh_info element of the
SHT_SUNW_capinfo section points to a capabilities chain table,
SHT_SUNW_capchain. This table is used by the runtime linker to locate
members of a capabilities family.
A SHT_SUNW_capinfo table entry has the following format. See
sys/elf.h.
typedef Elf32_Word Elf32_Capinfo; typedef Elf64_Xword Elf64_Capinfo;
Elements within this table are interpreted using the following macros. See
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))
A SHT_SUNW_capinfo entry group element contains the
index of the SHT_SUNW_cap table that this symbol is associated with. This
element thus associates symbols to a capability group. A reserved group index,
CAPINFO_SUNW_GLOB, identifies a lead symbol of a family of capabilities
instances, that provides a default instance.
|
Name |
Value |
Meaning |
|
|
|
Identifies a default symbol. This symbol is not associated with any specific capabilities, but leads a symbol capabilities family. |
A SHT_SUNW_capinfo entry symbol element contains the
index of the lead symbol associated with this symbol. The group and symbol information allow
the link-editor to process families of capabilities symbols from relocatable objects, and
construct the necessary capabilities information in any output object. Within a dynamic
object, the symbol element of a lead symbol, one tagged with the group
CAPINFO_SUNW_GLOB, is an index into the
SHT_SUNW_capchain table. This index allows the runtime linker to traverse
the capabilities chain table, starting at this index, and inspects each following entry until
a 0 entry is found. The chain entries contain symbol indices for each
capabilities family member.
A dynamic object that defines symbol capabilities, has a DT_SUNW_CAP
dynamic entry, and a DT_SUNW_CAPINFO dynamic entry. These entries identify
the SHT_SUNW_cap section, and SHT_SUNW_capinfo section
respectively. The object also contains DT_SUNW_CAPCHAIN,
DT_SUNW_CAPCHAINENT and DT_SUNW_CAPCHAINSZ entries
that identify the SHT_SUNW_capchain section, the sections entry size and
total size. These entries allow the runtime linker to establish the best symbol to use, from a
family of symbol capability instances.
An object can define only object capabilities, or can define only symbol capabilities, or
can define both types of capabilities. An object capabilities group starts at index
0. Symbol capabilities groups start at any index other than
0. If an object defines symbol capabilities, but no object capabilities,
then a single CA_SUNW_NULL entry must exist at index 0
to indicate the start of symbol capabilities.