글로벌 레지스터들을 보다 손쉽게 이용할 수 있도록 글로벌 레지스터 사용 점검을 제공하기 위한 체계가 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 파일 내에서 사용자가 언급된 글로벌 레지스터를 어떻게 사용하려고 하는지를 알아야 합니다. 이를 위해서는 새로운 어셈블러 의사 op를 도입하여 이 기능을 제공해야 합니다.
컴파일러는 나중에 어셈블러에 의해 어셈블되는 -S와 같은 옵션으로 어셈블리 언어를 출력할 수도 있으므로 글로벌 레지스터 사용에 대한 적절한 문서를 제공하려면 컴파일러가 새로운 의사 op들을 출력해야 합니다.
새로운 SPARC V9 의사 명령:
.register%g {2 | 3 | 6 | 7}, {#scratch | symbol name}
새로운 의사는 어느 arch 설정을 위해서든 SPARC 어셈블러가 받아들입니다. 이것은 V9에 대해서만 효과가 있습니다. 그러므로 새로운 자연 어셈블리 의사 op를 사용하여 V8 및 V9을 위한 어셈블리 코드를 작성할 수 있습니다. SPARC 아키텍처 2.5.1 및 2.6 버전 상의 V8의 경우, 의사 op는 받아들여지지만 무시됩니다.
-xarch=v9 하에서 SPARC 어셈블러가 새로운 의사 op에 의해 커버되지 않은 글로벌 레지스터 사용을 탐지하면 SPARC 어셈블러는 오류 메시지를 표시합니다.
-xarch=v9에서 SPARC 어셈블러가 동일한 글로벌 레지스터와 관련된 다수의 다른 의사 op를 탐지하면 SPARC 어셈블러는 오류 메시지가 나오게 합니다. 그렇지 않으면 SPARC 어셈블러는 사용자가 파악한 대로 해당 ELF 레지스터 기록들을 나열합니다. SPARC 어셈블러는 지정된 사용 설명이 정확하다는 것을 확인할 수 있지만 그렇게 하도록 요구되지는 않습니다.