Binutils-2.14

Il pacchetto Binutils contiene un linker, un assemblatore e altri tool per manipolare file oggetto.

Tempo approssimativo di costruzione:  1.4 SBU
Spazio necessario sul disco:     167 MB

L'installazione di Binuils dipende da: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.

Installazione di Binutils

Ora è il momento giusto per verificare che i vostri pseudo terminali (PTY) lavorino correttamente all'interno dell'ambiente chroot. Verificheremo di nuovo velocemente che sia tutto impostato correttamente eseguendo un semplice test:

expect -c "spawn ls"

Se ricevete il messaggio:

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

Il vostro ambiente chroot non è configurato correttamente per i PTY. In questo caso non c'è modo di avviare le suite di test per Binutils e GCC fino a quando non sarete in grado di risolvere la cosa. Fate riferimento alla sezione chiamata “Montaggio dei file system proc e devpts” e alla sezione Make_devices ed eseguite i passi raccomandati per correggere il problema.

Questo pacchetto è noto per avere problemi quando vengono cambiati i suoi flag di ottimizzazione predefiniti (incluse le opzioni -march e -mcpu). Pertanto, se doveste aver definito variabili di ambiente che disabilitano le nostre ottimizzazioni predefinite, come i flag CFLAGS e CXXFLAGS, raccomandiamo di eliminarle quando costruite Binutils.

La documentazione di Binutils raccomanda di costruire Binutils fuori dalla directory dei sorgenti, in una directory dedicata:

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

Ora preparate Binutils per la compilazione:

../binutils-2.14/configure --prefix=/usr --enable-shared

Compilate il pacchetto:

make tooldir=/usr

Normalmente la tooldir (la directory dove finiscono gli eseguibili) è impostata a $(exec_prefix)/$(target_alias), che si espande in, per esempio, /usr/i686-pc-linux-gnu. Dal momento che noi costruiamo solo per il nostro sistema, non abbiamo bisogno di questa directory specifica in /usr. Questa impostazione verrebbe utilizzata se il sistema fosse usato per fare cross-compiling (per esempio compilare un pacchetto su una macchina Intel che genera codice che può essere eseguito su macchine PowerPC).

[Important]

Importante

La suite di test per Binutils in questa sezione è considerata critica. Il nostro consiglio è di non saltarla per nessuna ragione.

Verificate i risultati:

make check

Le note sulle suite di test dalla sezione chiamata “Binutils-2.14 - Passo 2” qui sono ancora validissime. Fate riferimento a queste ultime se doveste avere qualche dubbio.

Ora installate il pacchetto:

make tooldir=/usr install

Installate il file header libiberty, che è richiesto da alcuni pacchetti:

cp ../binutils-2.14/include/libiberty.h /usr/include

Contenuti di Binutils

Programmi installati: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings e strip

Librerie installate: libiberty.a, libbfd.[a,so] e libopcodes.[a,so]

Brevi descrizioni

addr2line traduce indirizzi di programmi in nomi di file e numeri di linea. Dato nome e indirizzo di un eseguibile, usa le informazioni di debug nell'eseguibile per capire quale file sorgente e numero di linea sono associati con l'indirizzo.

ar crea, modifica ed estrae da archivi. Un archivio è un singolo file che contiene una collezione di altri file in una struttura che rende possibile ritrovare i singoli file originari (chiamati membri dell'archivio)

as è un assemblatore. Assembla l'output di gcc in file oggetto.

c++filt è utilizzato dal linker per decodificare simboli C++ e Java ed evitare che funzioni sovraccaricate crollino.

gprof mostra i dati del profilo grafico di chiamata.

ld è un linker. Combina un certo numero di oggetti e file di archivio in un singolo file, riallocando i dati e collegando i riferimenti dei simboli.

nm elenca i simboli occorrenti in un dato file oggetto.

objcopy utilizzato per tradurre un certo tipo di file oggetto in un altro.

objdump visualizza informazioni su un dato file oggetto, con opzioni che permettono di controllare quali informazioni evidenziare. L'informazione mostrata di solito è utile solo ai programmatori che stanno lavorando ai tool di compilazione.

ranlib genera un indice dei contenui di un archivio, e lo memorizza nell'archivio. L'indice elenca tutti i simboli definiti dai membri dell'archivio che sono file oggetto riallocabili.

readelf mostra informazioni sui binari di tipo elf.

size visualizza le dimensioni della sezione, e il totale complessivo, per i file oggetto dati.

strings emette, per ciascun file dato, la sequenza di caratteri stampabili che siano almeno di una specifica lunghezza (per default è 4). Per i file oggetto stampa, per default, solo le stringhe delle sezioni di inizializzazione e caricamento. Per altri tipi di file scansiona l'intero file.

strip elimina i simboli dai file oggetto.

libiberty contiene routine usate da diversi programmi GNU, inclusi getopt, obstack, strerror, strtol e strtoul.

libbfd è la libreria Binary File Descriptor.

libopcodes è una libreria per manipolare mnemonici. È utilizzata per costruire utilità come objdump. I mnemonici sono le versioni in “testo leggibile” delle istruzioni del processore.