Solaris 7 (Edición SPARC): Notas sobre la versión

Admisión de Solaris de 64 bits para el ensamblador

Se ha incluido un mecanismo en la ABI V9 de SPARC para proporcionar la comprobación del uso de los registros globales de forma que éstos puedan utilizarse más fiablemente.

Este mecanismo se describe en la ABI V9 de SPARC. En resumen, se han introducido registros de uso de registros ELF. Los programas compatibles con ABI V9 necesitan utilizar estos registros para informar del uso de los registros globales. Durante el tiempo de enlace, tanto si es estático como dinámico, se comparan los registros para garantizar el uso coherente de los registros globales entre diferentes objetos enlazables. Si se detecta un uso incoherente, la operación de enlace provoca un mensaje de error.

Para implementar este mecanismo, el compilador debe incluir los registros ELF en su salida. Esto puede realizarse actualmente añadiendo la opción -Wc,-Qiselect-regsym=1 para el compilador C o la opción -Qoption cg -Qiselect-regsym=1 para el compilador C++ cuando se esté compilando para v9. Los enlazadores incluidos con Solaris 2.5.1, 2.6 y 7 aceptan los registros ELF. Los enlazadores incluidos con las versiones anteriores de Solaris no aceptan los registros ELF y generan un mensaje de error.

Como el ensamblador SPARC también debe generar objetos enlazables, es necesario que también incluya los registros ELF en su salida. El ensamblador necesita saber cómo tiene previsto utilizar los registros globales a los que se hace referencia en cada archivo .s de entrada. Para ello, debe introducir un nuevo pseudooperando de ensamblador para proporcionar esta función.

Como es posible que el compilador también ofrezca lenguaje ensamblador en su salida (por ejemplo, con las opciones -S) que posteriormente puede ensamblar el ensamblador, es necesario que el compilador genere los nuevos pseudooperandos en su salida con tal de proporcionar la documentación correcta del uso de los registros globales.

Nueva pseudoinstrucción de SPARC V9:

.register %g {2 | 3 | 6 | 7}, {#scratch | nombre símbolo}

El ensamblador SPARC acepta esta nueva pseudoinstrucción para cualquier valor de arquitectura. Sólo afecta a V9. Esto permite escribir código en ensamblador para V8 y V9 mediante los nuevos pseudooperandos naturales del ensamblador. El pseudooperando se acepta pero se ignora en V8 en las versiones 2.5.1 y 2.6 de la arquitectura SPARC.

Bajo -xarch=v9, si el ensamblador SPARC detecta un uso de registros globales no tratado por un pseudooperando, el ensamblador mostrará un mensaje de error.

Bajo -xarch=v9, si el ensamblador SPARC detecta varios pseudooperandos diferentes relacionados con el mismo registro global, el ensamblador generará un mensaje de error. De lo contrario, el ensamblador SPARC relacionará los registros ELF según estén identificados por el usuario, y puede que verifique que la descripción del uso especificada sea correcta, aunque no es necesario que lo haga.