8.20. Binutils-2.43.1

The Binutils package contains a linker, an assembler, and other tools for handling object files.

Approximate build time: 2.0 SBU
Required disk space: 2.7 GB

8.20.1. Installation of Binutils

First, apply a patch to prevent a bug that causing unnecessary relinking with packages that depend on cmake-3.31.0 or newer:

patch -Np1 -i ../binutils-2.43.1-upstream_fix-1.patch

The Binutils documentation recommends building Binutils in a dedicated build directory:

mkdir -v build
cd       build

Prepare Binutils for compilation:

../configure --prefix=/usr       \
             --sysconfdir=/etc   \
             --enable-gold       \
             --enable-ld=default \
             --enable-plugins    \
             --enable-shared     \
             --disable-werror    \
             --enable-64-bit-bfd \
             --with-system-zlib  \
             --enable-default-hash-style=gnu \
             --enable-multilib

The meaning of the new configure parameters:

--enable-gold

Build the gold linker and install it as ld.gold (alongside the default linker).

--enable-ld=default

Build the original bfd linker and install it as both ld (the default linker) and ld.bfd.

--enable-plugins

Enables plugin support for the linker.

--with-system-zlib

Use the installed zlib library instead of building the included version.

--enable-multilib

Enables multilib support in bintutils.

Compile the package:

make tooldir=/usr

The meaning of the make parameter:

tooldir=/usr

Normally, the tooldir (the directory where the executables will ultimately be located) is set to $(exec_prefix)/$(target_alias). For example, x86_64 machines would expand that to /usr/x86_64-pc-linux-gnu. Because this is a custom system, this target-specific directory in /usr is not required. $(exec_prefix)/$(target_alias) would be used if the system were used to cross-compile (for example, compiling a package on an Intel machine that generates code that can be executed on PowerPC machines).

[Important]

Important

The test suite for Binutils in this section is considered critical. Do not skip it under any circumstances.

Test the results:

make -k check

For a list of failed tests, run:

grep '^FAIL:' $(find -name '*.log')

Twelve tests fail in the gold test suite when the --enable-default-pie and --enable-default-ssp options are passed to GCC.

Install the package:

make tooldir=/usr install

Remove useless static libraries:

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

8.20.2. Contents of Binutils

Installed programs: addr2line, ar, as, c++filt, dwp, elfedit, gprof, gprofng, ld, ld.bfd, ld.gold, nm, objcopy, objdump, ranlib, readelf, size, strings, and strip
Installed libraries: libbfd.so, libctf.so, libctf-nobfd.so, libgprofng.so, libopcodes.so, and libsframe.so
Installed directory: /usr/lib/ldscripts

Short Descriptions

addr2line

Translates program addresses to file names and line numbers; given an address and the name of an executable, it uses the debugging information in the executable to determine which source file and line number are associated with the address

ar

Creates, modifies, and extracts from archives

as

An assembler that assembles the output of gcc into object files

c++filt

Used by the linker to de-mangle C++ and Java symbols and to keep overloaded functions from clashing

dwp

The DWARF packaging utility

elfedit

Updates the ELF headers of ELF files

gprof

Displays call graph profile data

gprofng

Gathers and analyzes performance data

ld

A linker that combines a number of object and archive files into a single file, relocating their data and tying up symbol references

ld.gold

A cut down version of ld that only supports the elf object file format

ld.bfd

A hard link to ld

nm

Lists the symbols occurring in a given object file

objcopy

Translates one type of object file into another

objdump

Displays information about the given object file, with options controlling the particular information to display; the information shown is useful to programmers who are working on the compilation tools

ranlib

Generates an index of the contents of an archive and stores it in the archive; the index lists all of the symbols defined by archive members that are relocatable object files

readelf

Displays information about ELF type binaries

size

Lists the section sizes and the total size for the given object files

strings

Outputs, for each given file, the sequences of printable characters that are of at least the specified length (defaulting to four); for object files, it prints, by default, only the strings from the initializing and loading sections while for other types of files, it scans the entire file

strip

Discards symbols from object files

libbfd

The Binary File Descriptor library

libctf

The Compat ANSI-C Type Format debugging support library

libctf-nobfd

A libctf variant which does not use libbfd functionality

libgprofng

A library containing most routines used by gprofng

libopcodes

A library for dealing with opcodes—the readable text versions of instructions for the processor; it is used for building utilities like objdump

libsframe

A library to support online backtracing using a simple unwinder