6.13. Binutils-2.24

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

Temps de construction approximatif: 2.4 SBU
Espace disque requis: 397 Mo

6.13.1. Installation de Binutils

Vérifiez que les pseudo-terminaux (PTY) fonctionnent correctement dans l'environnement en effectuant un simple test :

expect -c "spawn ls"

Cette commande devrait afficher ce qui suit :

spawn ls

Si, à la place, la sortie affiche le message ci-dessous, c'est que l'environnement n'est pas paramétré pour la bonne opération PTY. Vous devez résoudre ce problème avant de lancer les suites de test de Binutils et de GCC :

The system has no more ptys.
Ask your system administrator to create more.

Supprimez l'installation d'un fichier obsolète standards.info puisqu'un plus récent est installé plus tard dans les instructions pour Autoconf :

rm -fv etc/standards.info
sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in

Ajoutez un correctif fait en amont pour utiliser l'optimisation des liens de gcc, ou LTO pour link time optimization par défaut :

patch -Np1 -i ../binutils-2.24-load_gcc_lto_plugin_by_default-1.patch

Corrigez des tests LTO de la suite de tests :

patch -Np1 -i ../binutils-2.24-lto_testsuite-1.patch

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 :

../binutils-2.24/configure --prefix=/usr   \
                           --enable-shared \
                           --disable-werror

Compilez le paquet :

make tooldir=/usr

Voici la signification des options de configure :

tooldir=/usr

Normalement, le répertoire tooldir (celui où seront placés les exécutables) est configuré avec $(exec_prefix)/$(target_alias). Par exemple, les machines x86_64 l'étendront en /usr/x86_64-unknown-linux-gnu. Comme il s'agit d'un système personnalisé, nous n'avons pas besoin d'un répertoire spécifique à notre cible dans /usr. $(exec_prefix)/$(target_alias) serait utilisée si le système avait pour but une cross-compilation (par exemple, compiler un paquet sur une machine Intel qui génère du code pouvant être exécuté sur des machines PowerPC).

[Important]

Important

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

Testez les résultats :

make -k check

Installez le paquet :

make tooldir=/usr install

6.13.2. Contenu de Binutils

Programmes installés: addr2line, ar, as, c++filt, elfedit, gprof, ld, ld.bfd, nm, objcopy, objdump, ranlib, readelf, size, strings et strip
Bibliothèques installées: 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 à partir d'archives

as

Un assembleur qui assemble la sortie de gcc en un fichier objet

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

elfedit

Met à jour l'en-tête ELF des fichiers ELF

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

ld.bfd

Lien dur vers ld

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

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.