Solaris 7 (SPARC-Plattform Edition) Versionshinweise

Unterstützung der 64-Bit-Version von Solaris für den Assembler

In SPARC V9 ABI wurde ein Mechanismus eingebunden, um die Überprüfung der Verwendung des globalen Registers zu ermöglichen, so daß diese globalen Register zuverlässiger eingesetzt werden können.

Dieser Mechanismus wird in SPARC V9 ABI erläutert. Es wurden ELF-Datensätze für die Registerverwendung eingeführt. V9 ABI-kompatible Programme müssen diese Datensätze einsetzen, um die Verwendung des globalen Registers aufzuzeichnen. Während einer bestehenden (statischen oder dynamischen) Verbindung werden die Datensätze verglichen, um die konsistente Verwendung der globalen Register zwischen unterschiedlichen zu verbindenden Objekten sicherzustellen. Wenn eine nicht konsistente Verwendung auftritt, wird beim Verbindungsvorgang eine Fehlermeldung ausgegeben.

Um diesen Mechanismus zu implementieren, muß der Compiler die ELF-Registerdatensätze ausgeben. Das erreichen Sie momentan, indem Sie die Option -Wc,-Qiselect-regsym=1 für C oder die Option -Qoption cg -Qiselect-regsym=1 für C++ dem Compiler bei der Kompilierung von v9 hinzufügen. Die ELF-Registerdatensätze werden von Linkern, die mit Solaris 2.5.1, Solaris 2.6 und Solaris 7 verbunden sind, akzeptiert. Linker, die mit älteren Solaris-Versionen verbunden sind, akzeptieren die neuen ELF-Registerdatensätze nicht; eine Fehlermeldung wird ausgegeben.

Da der SPARC-Assembler außerdem zu verknüpfende Objekte erstellen kann, ist die Ausgabe dieser Datensätze für den SPARC-Assembler unbedingt erforderlich. Der Assembler benötigt Informationen darüber, wie Sie bei der Verwendung der globalen Register vorgehen möchten, auf die in jeder Eingabedatei .s verwiesen wird. Hierfür müssen Sie eine neue Pseudo-Operation für den Assembler einführen; dadurch wird diese Funktion zur Verfügung gestellt.

Da der Compiler möglicherweise auch Assembler-Sprache ausgibt, z. B. mit den -S-Optionen, und da diese Sprache später vom Assembler bearbeitet werden kann, ist für den Compiler die Ausgabe der neuen Pseudo-Operationen erforderlich, um die richtige Dokumentation für die Verwendung des globalen Registers zu gewährleisten.

Neue SPARC V9-Pseudo-Anweisungen:

.register %g {2 | 3 | 6 | 7}, {#scratch | Symbolname}

Die neue Pseudo-Operation wird vom SPARC-Assembler bei sämtlichen Architektur-Einstellungen akzeptiert. Sie wirkt sich lediglich auf V9 aus. Dadurch können Sie anhand der neuen natürlichen Assembler-Pseudo-Operationen Assembler-Codes für V8 und V9 schreiben. Bei V8 der Versionen 2.5.1 und 2.6 der SPARC-Architektur wird die Pseudo-Operation akzeptiert, jedoch ignoriert.

Bei -xarch=v9 gilt: Wenn der SPARC-Assembler die Verwendung eines globalen Registers entdeckt, die nicht von einer neuen Pseudo-Operation abgedeckt ist, zeigt der SPARC-Assembler eine Fehlermeldung an.

Bei -xarch=v9 gilt: Wenn der SPARC-Assembler mehrere verschiedene Pseudo-Operationen entdeckt, die sich auf dasselbe globale Register beziehen, wird vom SPARC-Assembler eine Fehlermeldung ausgegeben. Andernfalls erstellt der SPARC-Assembler eine Liste der entsprechenden ELF-Registerdatensätze nach Festlegung des Benutzers. Der SPARC-Assembler kann bestätigen, daß die festgelegte Verwendungsbeschreibung korrekt ist. Diese Bestätigung ist jedoch nicht obligatorisch.