Solaris 7 (Intel 平台版) 亚洲版发行说明

汇编程序的 64 位 Solaris 支持

在 SPARC V9 ABI 中包括一个机制以提供使用检查的统一注册,以便可以更加可靠地采用这些统一注册。

在 SPARC V9 ABI 之中描述这个机制。概括地说,它介绍了 ELF 注册 用法记录。要求符合 V9 ABI 标准的程序来采用这些记录以报告统一注册用法。在链接期间,无论是静态的或动态的,比较这些记录以保证在不同 的可链接对象之间统一注册的一致用法。如果检测到不一致的用法,则错误信息是链接操作所致。

要执行这个机制,编译程序必须输出 ELF 注册记录。目前可以实现这一目标。办法是: 当为 v9 编辑时,通过给 C 添加选项 -Wc,-Qiselect-regsym=1 或给 C++ 添加选项 -Qoption cg -Qiselect-regsym=1 给编译程序。与 Solaris 2.5.1、Solaris 2.6 和 Solaris 7 捆绑在一起的链接器接受 ELF 注册记录。与以前的 Solaris 版本捆绑在一起的链接器不接受新的 ELF 注册记录,并发出一条错误信息。

因为 SPARC 汇编程序也可能生成可链接的对象,所以有必要对 SPARC 汇编程序也输出 ELF 注册记录。汇编程序需要知道您打算怎样采用每个输入 .s 文件内所参考的统一注册。要这样做,您必须引进一个新的汇编程序伪操作以提供这种功能。

因为编译程序也可以用 -S选项输出汇编语言, 以后可用汇编程序来汇编这些汇编语言。所以有必要对编译程序输出新的伪操作,以便提供统一注册用法的适当文档资料。

新的 SPARC V9 伪指令:

.register %g {2 | 3 | 6 | 7} {#scratch | symbol name}

为所有体系结构设置的 SPARC 汇编程序都接受新的伪指令。它只对 V9 有效力。这让您能用新的自然汇编伪操作来写 V8 和 V9 的汇编程序。对于 SPARC 体系结构版本 2.5.1 和 2.6 上的 V8,可接受伪操作,但是不执行。

-xarch=v9 下,如果 SPARC 汇编程序检测到不在新的伪操作范围以内的统一注册用法,那么 SPARC 汇编程序将显示一条错误信息。

-xarch=v9 下,如果 SPARC 汇编程序检测到多个不同伪操作与同一个统一注册有关,那么 SPARC 汇编程序将发出错误信息。否则,SPARC 汇编程序将按用户识别列出适当的 ELF 注册记录清单。SPARC 汇编程序可以验证指定的用法描述是否正确,但不要求这样做。