10.15. Binutils-2.21.1a

Le paquet Binutils contient un éditeur de liens, un assembleur et d'autres outils pour gérer des fichiers objets.

10.15.1. Installation de Binutils

Vérifiez que les pseudo-terminaux (PTY) fonctionnent correctement dans l'environnement chroot. Vérifiez que tout est bien configuré en effectuant un simple test :

expect -c "spawn ls"

Cette commande devrait donner la sortie suivante :

spawn ls

Si, à la place, elle donne un message disant qu'il faut créer plus de ptys, alors l'environnement n'est pas bien paramétré pour l'opération PTY. Ce problème doit être résolu avant de lancer les suites de tests pour Binutils et GCC.

La documentation de Binutils recommande de construire Binutils à l'extérieur du répertoire des sources dans un répertoire dédié :

mkdir -v ../binutils-build
cd ../binutils-build

Préparez la compilation de Binutils :

CC="gcc -isystem /usr/include" \
LDFLAGS="-Wl,-rpath-link,/usr/lib:/lib" \
  ../binutils-2.21.1/configure --prefix=/usr \
     --libdir=/usr/lib --enable-shared \
     --disable-multilib --enable-64-bit-bfd

Compilez le paquet :

make configure-host
[Important]

Important

Pendant make configure-host il se peut que vous receviez le message d'erreur suivant. Vous pouvez l'ignorer en toute sécurité.

WARNING: `flex' is missing on your system. You should only
need it if you modified a `.l' file. You may need the `Flex'
package in order for those modifications to take effect. You
can get `Flex' from any GNU archive site.
make tooldir=/usr

Voici la signification du paramètre de make :

tooldir=/usr

Normalement, le répertoire tooldir (celui où seront placés les exécutables) est configuré avec $(exec_prefix)/$(target_alias). Comme il s'agit d'un système personnalisé, nous n'avons pas besoin d'un répertoire spécifique à notre cible dans /usr.

[Important]

Important

La suite de tests de Binutils dans cette section est considérée comme critique. Ne la sautez sous aucun prétexte.

La suite de tests de ld accède à /lib64/ld-linux-x86-64.so lors de certains des tests. Le lien symbolique suivant va l'autoriser :

ln -sv /lib /lib64

Testez les résultats :

make check

Maintenant, supprimez le lien symbolique temporaire :

rm -v /lib64

Maintenant que les tests ont été effectués, supprimez les liens symboliques présents dans /usr/lib64. Ce devrait être les seules choses présentes dans ce répertoire, nous n'avons donc pas à forcer leur suppression :

rm -v /usr/lib64/libstd*so*
rmdir -v /usr/lib64

Installez le paquet :

make tooldir=/usr install

Installez le fichier d'en-tête libiberty dont ont besoin certains paquets :

cp -v ../binutils-2.21.1/include/libiberty.h /usr/include

10.15.2. Contenu de Binutils

Programmes installés: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings et strip
Bibliothèques installées: libiberty.a, libbfd.[a,so] et libopcodes.[a,so]
Répertoire installé: /usr/lib/ldscripts

Descriptions courtes

addr2line

Traduit les adresses de programme en noms de fichier et numéros de ligne ; suivant une adresse et le nom d'un exécutable, il utilise les informations de débogage disponibles dans l'exécutable pour déterminer le fichier source et le numéro de ligne associé à cette adresse

ar

Crée, modifie et extrait des archives

as

Un assembleur qui assemble la sortie de gcc en des fichiers objets

c++filt

Utilisé par l'éditeur de liens pour récupérer les symboles C++ et Java, et pour empêcher les fonctions surchargées d'arrêter brutalement le programme

gprof

Affiche les données de profilage d'appels dans un graphe

ld

Un éditeur de liens combinant un certain nombre d'objets et de fichiers archives en un seul fichier, en déplaçant leur données et en regroupant les références de symboles

nm

Liste les symboles disponibles dans un fichier objet

objcopy

Traduit un type de fichier objet en un autre

objdump

Affiche des informations sur le fichier objet donné, les options contrôlant les informations à afficher ; l'information affichée est surtout utile aux programmeurs qui travaillent sur les outils de compilation

ranlib

Génère un index du contenu d'une archive et le stocke dans l'archive ; l'index liste tous les symboles définis par les membres de l'archive qui sont des fichiers objet déplaçables

readelf

Affiche des informations sur les binaires du type ELF

size

Liste les tailles des sections et la taille totale pour les fichiers objets donnés

strings

Affiche, pour chaque fichier donné, la séquence de caractères affichables qui sont d'au moins la taille spécifiée (par défaut, 4) ; pour les fichiers objets, il affiche, par défaut, seulement les chaînes des sections d'initialisation et de chargement alors que pour les autres types de fichiers, il parcourt le fichier entier

strip

Supprime les symboles des fichiers objets

libiberty

Contient des routines utilisées par différents programmes GNU comme getopt, obstack, strerror, strtol et strtoul

libbfd

Bibliothèque des descripteurs de fichiers binaires (Binary File Descriptor)

libopcodes

Une bibliothèque de gestion des opcodes—la « version lisible » des instructions du processeur ; elle est utilisée pour construire des outils comme objdump.