The software capabilities of an object identify characteristics of the software that might be important for debugging or monitoring processes. Presently, the only software capabilities that are recognized relate to frame pointer usage by the object.
Objects can indicate that their frame pointer use is known. This state is then qualified by declaring the frame pointer as being used or not.
Software capabilities flags are defined in sys/elf.h.
#define SF1_SUNW_FPKNWN 0x001 #define SF1_SUNW_FPUSED 0x002
These software capability requirements can be identified using the following mapfile syntax.
sfcap_1 = TOKEN | Vval [ OVERRIDE ]; |
The sfcap_1 declaration can be qualified with the tokens FPKNWN and FPUSED. Or, alternatively with a numeric value that represents these states.
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 the output file can be controlled explicitly from a mapfile by using the OVERRIDE keyword. An OVERRIDE keyword, together with a software capability value of 0, effectively removes any software capabilities requirement from the object being built.
$ elfdump -H foo.o Hardware/Software Capabilities Section: .SUNW_cap index tag value [0] CA_SUNW_SF_1 0x3 [ SF1_SUNW_FPKNWN SF1_SUNW_FPUSED ] $ cat mapfile sfcap_1 = V0x0 OVERRIDE; $ cc -o bar.o -r -Mmapfile foo.o $ elfdump -H bar.o $ |
The computation of a CA_SUNW_SF_1 value from two frame pointer input values is as follows.
Table 2–1 CA_SUNW_SF_1 Frame Pointer Flag Combination State Table
Input file 1 |
Input file 2 |
||
---|---|---|---|
|
SF1_SUNW_FPKNWN SF1_SUNW_FPUSED |
SF1_SUNW_FPKNWN |
<unknown> |
SF1_SUNW_FPKNWN SF1_SUNW_FPUSED |
SF1_SUNW_FPKNWN SF1_SUNW_FPUSED |
SF1_SUNW_FPKNWN |
SF1_SUNW_FPKNWN SF1_SUNW_FPUSED |
SF1_SUNW_FPKNWN |
SF1_SUNW_FPKNWN |
SF1_SUNW_FPKNWN |
SF1_SUNW_FPKNWN |
<unknown> |
SF1_SUNW_FPKNWN SF1_SUNW_FPUSED |
SF1_SUNW_FPKNWN |
<unknown> |
This computation is applied to each relocatable object value and mapfile value. The frame pointer software capabilities of an object are unknown if no .SUNW_cap section exists, or if the section contains no CA_SUNW_SF_1 value, or if neither the SF1_SUNW_FPKNW or SF1_SUNW_FPUSED flags are set.