8.18. Binutils-2.38

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

Temps de construction approximatif: 6.1 SBU
Espace disque requis: 4.6 Go

8.18.1. Installation de Binutils

Vérifiez que les pseudo-terminaux (PTY) fonctionnent correctement dans l'environnement chroot 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.

Les développeurs amont ont créé un correctif pour corriger un problème lors de l'utilisation de binutils pour construire certains paquets BLFS qui ont activé l'optimisation à l'édition des liens (LTO). Appliquez-le maintenant :

patch -Np1 -i ../binutils-2.38-lto_fix-1.patch

Maintenant appliquez un correctif identifié en amont qui affecte la construction de certains paquets :

sed -e '/R_386_TLS_LE /i \   || (TYPE) == R_386_TLS_IE \\' \
    -i ./bfd/elfxx-x86.h

La documentation de Binutils recommande de construire Binutils dans un répertoire de construction dédié :

mkdir -v build
cd       build

Préparez la compilation de Binutils :

../configure --prefix=/usr       \
             --enable-gold       \
             --enable-ld=default \
             --enable-plugins    \
             --enable-shared     \
             --disable-werror    \
             --enable-64-bit-bfd \
             --with-system-zlib

Voici la signification des options de configure :

--enable-gold

Construit l'éditeur de liens gold et l'installe en tant que ld.gold (à côté de l'éditeur de liens par défaut).

--enable-ld=default

Construit l'éditeur de liens bdf original et l'installe à la fois en tant que ld (l'éditeur par défaut) et que ld.bfd.

--enable-plugins

Active la prise en charge des greffons pour l'éditeur de lien.

--enable-64-bit-bfd

Active la prise en charge 64 bits (sur les systèmes avec une taille de mot inférieure). Elle n'est pas forcément requise sur les systèmes 64 bits, mais elle ne fait pas de mal.

--with-system-zlib

Utilise la version installée de la bibliothèque zlib plutôt que de construire la version incluse.

Compilez le paquet :

make tooldir=/usr

Voici la signification des options de configure :

tooldir=/usr

Normalement, le répertoire tooldir (où seront placés les exécutables) est configuré pour être $(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 compilation croisée (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

Supprimez des bibliothèques statiques inutiles :

rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes}.a

8.18.2. Contenu de Binutils

Programmes installés: addr2line, ar, as, c++filt, dwp, elfedit, gprof, ld, ld.bfd, ld.gold, nm, objcopy, objdump, ranlib, readelf, size, strings et strip
Bibliothèques installées: libbfd.so, libctf.so, libctf-nobfd.so et libopcodes.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és à cette adresse

ar

Crée, modifie et extrait à partir d'archives

as

Un assembleur qui assemble la sortie de gcc en 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

dwp

L'utilitaire d'empaquetage DWARF

elfedit

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

gprof

Affiche les données de profilage du graphe d'appels

ld

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

ld.gold

Une version réduite de ld qui ne prend en charge que le format de fichier elf

ld.bfd

Lien matériel vers ld

nm

Liste les symboles présents dans un fichier objet

objcopy

Traduit un type de fichier objet en un autre

objdump

Affiche des informations sur le fichier objet donné, avec des options contrôlant les informations à afficher. Les informations affichées sont surtout utiles 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, uniquement 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

libctf

La bibliothèque de prise en charge du format de débogage compatible ANSI-C

libctf-nobfd

Une variante de libctf qui n'utilise par la fonctionnalité libbfd

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