目标文件的软件功能标识对于调试或监视进程可能很重要的软件特征。目前,可识别的唯一软件功能与目标文件使用的帧指针有关。目标文件可以声明已知其帧指针的使用状态。然后,将帧指针声明为正在使用或未使用来限定此状态。
sys/elf.h 中定义的两个标志表示帧指针状态:
#define SF1_SUNW_FPKNWN 0x001 #define SF1_SUNW_FPUSED 0x002 |
可以使用以下 mapfile 语法标识这些软件功能要求:
sfcap_1 = TOKEN | Vval [ OVERRIDE ]; |
可以使用 FPKNWN 和 FPUSED 标志限定 sfcap_1 声明。或者,可以使用表示这些状态的数值进行限定。
可重定位目标文件可以包含软件功能值。链接编辑器合并多个输入可重定位目标文件中的软件功能值。可按如下方法根据两个输入值计算 CA_SUNW_SF_1 的值。
表 2–1 CA_SUNW_SF_1 标志组合状态表
输入文件 1 |
输入文件 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> |
此计算方法适用于每个可重定位目标文件值和 mapfile 值。如果不存在 .SUNW_cap 节,或者此节不包含 CA_SUNW_SF_1 值,或者未设置 SF1_SUNW_FPKNW 和 SF1_SUNW_FPUSED 标志,则目标文件的软件功能未知。
缺省情况下,使用相同的状态模型处理 mapfile 指定的任何软件功能。
可以使用 OVERRIDE 关键字在 mapfile 中显式控制输出文件的软件功能要求。OVERRIDE 关键字和软件功能值 0 可有效地从要生成的目标文件中删除任何软件功能要求。
$ 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 $ |