Notes de version de Solaris 7 (Edition pour plate-forme SPARC)

Prise en charge de Solaris 64 bits pour l'assembleur

Un mécanisme a été inclus dans l'interface binaire d'application (ABI) SPARC V9 permettant de vérifier l'utilisation des registres globaux pour s'assurer qu'ils peuvent être utilisés de manière fiable.

Ce mécanisme est décrit dans l'interface ABI SPARC V9. Pour résumer, l'interface intègre désormais des enregistrements d'utilisation des registres ELF. Des programmes compatibles ABI V9 sont nécessaires pour utiliser ces enregistrements afin d'obtenir des informations relatives à l'utilisation globale des registres. Pendant l'édition de liens, statique ou dynamique, une comparaison des enregistrements est effectuée pour s'assurer de l'utilisation cohérente des registres globaux entre les différents objets liés. En cas d'incohérence, l'édition de liens génère un message d'erreur.

Pour appliquer ce mécanisme, le compilateur doit générer les enregistrements des registres ELF. Cette opération s'effectue actuellement en ajoutant l'option -Wc,-Qiselect-regsym=1 en langage C ou l'option -Qoption cg -Qiselect-regsym=1 en langage C++ au compilateur pour une compilation effectuée pour v9. Les éditeurs de liens fournis avec Solaris 2.5.1, Solaris 2.6 et Solaris 7 acceptent les enregistrements de registres ELF. Les éditeurs de liens fournis avec des versions antérieures de Solaris n'acceptent pas les nouveaux enregistrements de registres ELF et affichent un message d'erreur.

Etant donné que l'assembleur SPARC peut également générer des objets pouvant être liés, il doit également générer les enregistrements des registres ELF. L'assembleur a besoin de savoir comment vous envisagez d'utiliser les registres globaux référencés dans chaque fichier d'entrée .s. Pour ce faire, vous devez introduire un nouveau pseudo op d'assembleur qui fournira cette fonctionnalité.

Etant donné que le compilateur peut également générer du langage d'assemblage (avec les options -S par exemple) qui sera assemblé ultérieurement par l'assembleur, il doit générer les nouveaux pseudos ops pour fournir la documentation appropriée sur l'utilisation des registres globaux.

Nouvelle pseudo instruction SPARC V9 :

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

Le nouveau pseudo est accepté par l'assembleur SPARC quel que soit le réglage de arch. Il n'a d'effet que pour V9. Cela vous permet d'écrire un code d'assemblage pour V8 et V9 utilisant les nouveaux pseudo ops d'assemblage naturel. Pour V8 sur architecture SPARC versions 2.5.1 et 2.6, le pseudo op est accepté, mais ignoré.

Sous -xarch=v9, si l'assembleur SPARC détecte une utilisation de registre global non couverte par le nouveau pseudo op, un message d'erreur s'affiche.

Sous -xarch=v9, si l'assembleur SPARC détecte plusieurs pseudos ops différents liés au même registre global, un message d'erreur s'affiche. Dans les autres cas, l'assembleur SPARC affiche les enregistrements de registre ELF appropriés, tels qu'ils ont été identifiés par l'utilisateur. Il se peut que l'assembleur SPARC vérifie que la description de l'utilisation spécifiée est correcte, mais il ne le fait pas nécessairement.