10.9. Ajuster la chaîne d'outils

Maintenant, on modifie le fichier de specs de GCC pour qu'il pointe vers le nouvel éditeur de liens dynamique. Une commande perl s'en charge :

gcc -dumpspecs | \
perl -p -e 's@/tools/lib/ld@/lib/ld@g;' \
     -e 's@/tools/lib64/ld@/lib64/ld@g;' \
     -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' > \
     $(dirname $(gcc --print-libgcc-file-name))/specs

La commande perl ci-dessus effectue deux modifications sur les specs de GCC : elle supprime « /tools » des chemins de l'éditeur de liens et ajoute « /usr/lib » à startfile_prefix_spec. C'est une bonne idée d'examiner visuellement le fichier specs, et de comparer avec la sortie de gcc -dumpspecs, pour vérifier que le changement voulu a bien été effectué en fin de compte.

[Attention]

Attention

Il est impératif à ce moment d'arrêter et de vous assurer que les fonctions basiques (compilation et édition des liens) de l'ensemble des outils ajusté fonctionnent comme prévu. Pour cela, effectuez une vérification d'intégrité :

Pour l'ABI 32 bits :

echo 'int main(){}' > dummy.c
gcc ${BUILD32} dummy.c
readelf -l a.out | grep ': /lib'

Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la dernière commande sera :

[Requesting program interpreter: /lib/ld-linux.so.2]

Pour l'ABI 64 bits :

echo 'main(){}' > dummy.c
gcc ${BUILD64} dummy.c
readelf -l a.out | grep ': /lib'

Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la dernière commande sera :

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

Notez que /lib ou /lib64 est maintenant le préfixe de notre éditeur de lien dynamique.

Si la sortie n'apparaît pas comme montrée ci-dessus ou qu'elle n'apparaît pas du tout, alors quelque chose ne va vraiment pas. Enquêtez et retracez les étapes pour savoir d'où vient le problème et comment le corriger. La raison la plus probable est que quelque chose s'est mal passé lors de la modification du fichier specs ci-dessus. Tout problème devra être résolu avant de continuer le processus.

Une fois que tout fonctionne correctement, nettoyez les fichiers de tests :

rm -v dummy.c a.out