Note sulla versione Solaris 7 (edizione per piattaforma SPARC)

Supporto di Solaris a 64 bit per l'Assembler

È stato incluso nella ABI SPARC V9 un meccanismo per il controllo dell'uso dei registri globali, in modo che questi registri possano essere utilizzati in modo più affidabile.

Questo meccanismo è descritto nella ABI SPARC V9. In breve, sono stati introdotti nuovi record per l'uso dei registri ELF. I programmi conformi alla ABI V9 devono utilizzare questi record per riferire sull'uso dei registri globali. Durante l'esecuzione di un link, statico o dinamico, i record vengono confrontati per assicurare un uso coerente dei registri globali tra diversi oggetti collegabili. Se viene rilevato un uso non coerente, l'operazione di link genera un messaggio di errore.

Per implementare questo meccanismo, il compilatore deve produrre i record dei registri ELF. Attualmente questa operazione può essere eseguita aggiungendo al compilatore l'opzione -Wc,-Qiselect-regsym=1 per il linguaggio C o l'opzione -Qoption cg -Qiselect-regsym=1 per il linguaggio C++ durante una compilazione per v9. I linker integrati in Solaris 2.5.1, Solaris 2.6 e Solaris 7 accettano i record dei registri ELF. I linker integrati nelle build precedenti di Solaris non accettano i nuovi record dei registri ELF e generano un messaggio di errore.

Poiché l'assembler SPARC può anche generare oggetti collegabili, è necessario che esso produca anche i record dei registri ELF. L'assembler deve sapere come si intendono utilizzare i registri globali a cui si fa riferimento all'interno di ogni file .s. A questo scopo, è necessario introdurre un nuovo pseudo op assembler per fornire questa funzionalità.

Poiché il compilatore può anche produrre codice in linguaggio assembly, ad es. con le opzioni -S, che potrà poi essere assemblato dall'assembler, è necessario che esso produca nuovi pseudo op in modo da fornire la documentazione appropriata per l'uso dei registri globali.

Nuova pseudo istruzione SPARC V9:

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

Il nuovo pseudo viene accettato dall'assembler SPARC per qualsiasi architettura, ma ha effetto solo per l'architettura V9. Questo permette di scrivere codice assembly per V8 e V9 usando i nuovi pseudo op assembly naturali. Per V8 sulle versioni 2.5.1 e 2.6 dell'architettura SPARC, lo pseudo op viene accettato ma ignorato.

Sotto -xarch=v9, se l'assembler SPARC rileva un uso dei registri globali che non è coperto da un nuovo pseudo op, esso genera un messaggio di errore.

Sotto -xarch=v9, se l'assembler SPARC rileva più pseudo op differenti relativi allo stesso registro globale, esso genera un messaggio di errore. Diversamente, l'assembler SPARC elenca i record dei registri ELF appropriati identificati dall'utente. L'assembler SPARC può verificare, ma non necessariamente, la correttezza della descrizione d'uso specificata.