要在二进制代码级别进行校验,必须使用 discover 工具。如果二进制代码命名为 a.out,可以通过执行以下命令创建校验后的二进制代码 a.outi:
discover -i datarace -o a.outi a.out |
discover 工具在所有共享库打开时自动校验所有这些共享库(无论它们是静态链接到程序中的,还是通过 dlopen() 动态打开的)。缺省情况下,校验后的库副本会缓存到 $HOME/SUNW_Bit_Cache 目录中。
下面显示了一些有用的 discover 命令行选项。有关详细信息,请参见 discover(1) 手册页。
将校验后的二进制代码输出到指定文件名
不校验指定的库
不校验任何库
将高速缓存目录更改为 dir
为了校验程序的二进制代码以检测数据争用,discover 工具要求在以下条件下编译输入的二进制代码:
操作系统版本至少必须为 Oracle Solaris 10 Update 5 或 OpenSolaris 版本 snv_70。
编译器必须是不低于 Oracle Solaris Studio 12 Update 1 的发行版。
必须使用编译器优化标志 (-xO1, -xO2, -xO3, -xO4, -xO5) 之一。
另外,为了使线程分析器在报告数据争用时显示源代码和行号信息,还应该使用 -g 编译器选项。
如果使用编译器选项 -xbinopt=prepare 编译了二进制代码,可能也可以在基于 SPARC 的系统中运行的早期 Solaris 版本上使用 discover 工具。有关该编译器选项的信息,请参见 cc(1)、CC(1) 或 f95(1) 手册页。