Le paquet Binutils contient un éditeur de liens, un assembleur et d'autres outils pour gérer des fichiers objets.
Ce paquet est connu pour avoir des soucis quand les options d'optimisation
par défaut (en incluant les options -march
et
-mcpu
) sont modifiées. Donc, si des variables d'environnement
qui surchargent les optimisations par défaut, telles que CFLAGS
et CXXFLAGS
, ont été définies, supprimez cette initialisation
pour la construction 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 test simple :
expect -c "spawn ls"
Si le message suivant apparaît, l'environnement chroot n'est pas configuré correctement pour des opérations sur les PTY :
The system has no more ptys.
Ask your system administrator to create more.
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 ../binutils-build cd ../binutils-build
Préparez la compilation de Binutils :
../binutils-2.15.91.0.2/configure --prefix=/usr \ --enable-shared
Compilez le paquet :
make tooldir=/usr
Normalement, le répertoire tooldir (celui où seront placés les
exécutables) est configuré avec $(exec_prefix)/$(target_alias)
, ce qui
s'étend en, par exemple, /usr/i686-pc-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
. Cette configuration 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).
La suite de tests de Binutils dans cette section est considérée comme critique. Ne pas la laissez passer, quelqu'en soit la raison.
Testez les résultats :
make check
Installez le paquet :
make tooldir=/usr install
Installez le fichier d'en-tête libiberty
, requis par certains paquets :
cp ../binutils-2.15.91.0.2/include/libiberty.h /usr/include
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
Crée, modifie et extrait à partir d'archives
Un assembleur qui assemble la sortie de gcc en un fichier objet
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
Affiche les données de profilage d'appels dans un graphe
Un éditeur de liens combinant un certain nombre d'objects et de fichiers archives en un seul fichier, en déplaçant leur données et en regroupant les références de symboles
Liste les symboles disponibles dans un fichier objet
Traduit un type de fichier objet en un autre
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
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
Affiche des informations sur les binaires du type ELF
Liste les tailles des sections et la taille totale pour les fichiers objets donnés
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
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
La 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.