Identifying Software Capabilities
The software capabilities of an object identify characteristics of the software that might be important for debugging or monitoring processes. Software capabilities can also influence process execution. Currently, the only software capability that is recognized relates to process address space restrictions.
64-bit objects can indicate that at runtime they must be exercised within a 32-bit address space.
Software capabilities flags are defined in sys/elf.h
.
#define SF1_SUNW_ADDR32 0x004
Software capability requirements can be identified using the following mapfile
syntax.
$mapfile_version 2 CAPABILITY { SF = sfcap_flags...; SF += sfcap_flags...; SF -= sfcap_flags...; };
The SF
attribute to the CAPABILITY
directive can be assigned the token ADDR32
.
Relocatable objects can contain software capabilities values. The link-editor combines the software capabilities values from multiple input relocatable objects. Software capabilities can also be supplied with a mapfile
. By default, any mapfile
values are combined with the values supplied by relocatable objects.
The software capability requirements of an object can be controlled explicitly from a mapfile
by using the "=
" form of assignment to override any software capabilities that might be provided from any input relocatable objects. An empty SF
attribute used with the "=
" form of assignment effectively removes any software capabilities requirement from the object being built.
The following example suppresses any software capabilities data defined by the input relocatable object foo.o
from being included in the output file, bar.o
.
$ elfdump -H foo.o Object Capabilities: index tag value [0] CA_SUNW_SF_1 0x4 [ ADDR32 ] $ cat mapfile $mapfile_version 2 CAPABILITY { SF = ; }; $ ld -o bar.o -r -Mmapfile foo.o $ elfdump -H bar.o $