mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
205 lines
6.9 KiB
Plaintext
205 lines
6.9 KiB
Plaintext
README for BINUTILS
|
|
|
|
These are the GNU binutils. These are utilities of use when dealing
|
|
with binary files, either object files or executables. These tools
|
|
consist of the linker (ld), the assembler (gas), and the profiler
|
|
(gprof) each of which have their own sub-directory named after them.
|
|
There is also a collection of other binary tools, including the
|
|
disassembler (objdump) in this directory. These tools make use of a
|
|
pair of libraries (bfd and opcodes) and a common set of header files
|
|
(include).
|
|
|
|
There are README and NEWS files in most of the program sub-directories
|
|
which give more information about those specific programs.
|
|
|
|
|
|
Unpacking and Installation -- quick overview
|
|
============================================
|
|
|
|
When you unpack the binutils archive file, you will get a directory
|
|
called something like `binutils-XXX', where XXX is the number of the
|
|
release. (Probably 2.11.2 or higher). This directory contains
|
|
various files and sub-directories. Most of the files in the top
|
|
directory are for information and for configuration. The actual
|
|
source code is in sub-directories.
|
|
|
|
To build binutils, you can just do:
|
|
|
|
cd binutils-XXX
|
|
./configure [options]
|
|
make
|
|
make install # copies the programs files into /usr/local/bin
|
|
# by default.
|
|
|
|
This will configure and build all the libraries as well as the
|
|
assembler, the binutils, and the linker.
|
|
|
|
If you have GNU make, we recommend building in a different directory:
|
|
|
|
mkdir objdir
|
|
cd objdir
|
|
../binutils-XXX/configure [options]
|
|
make
|
|
make install
|
|
|
|
This relies on the VPATH feature of GNU make.
|
|
|
|
By default, the binutils will be configured to support the system on
|
|
which they are built. When doing cross development, use the --target
|
|
configure option to specify a different target, eg:
|
|
|
|
./configure --target=foo-elf
|
|
|
|
The --enable-targets option adds support for more binary file formats
|
|
besides the default. List them as the argument to --enable-targets,
|
|
separated by commas. For example:
|
|
|
|
./configure --enable-targets=sun3,rs6000-aix,decstation
|
|
|
|
The name 'all' compiles in support for all valid BFD targets:
|
|
|
|
./configure --enable-targets=all
|
|
|
|
On 32-bit hosts though, this support will be restricted to 32-bit
|
|
target unless the --enable-64-bit-bfd option is also used:
|
|
|
|
./configure --enable-64-bit-bfd --enable-targets=all
|
|
|
|
You can also specify the --enable-shared option when you run
|
|
configure. This will build the BFD and opcodes libraries as shared
|
|
libraries. You can use arguments with the --enable-shared option to
|
|
indicate that only certain libraries should be built shared; for
|
|
example, --enable-shared=bfd. The only potential shared libraries in
|
|
a binutils release are bfd and opcodes.
|
|
|
|
The binutils will be linked against the shared libraries. The build
|
|
step will attempt to place the correct library in the run-time search
|
|
path for the binaries. However, in some cases, after you install the
|
|
binaries, you may have to set an environment variable, normally
|
|
LD_LIBRARY_PATH, so that the system can find the installed libbfd
|
|
shared library.
|
|
|
|
To build under openVMS/AXP, see the file makefile.vms in the top level
|
|
directory.
|
|
|
|
|
|
If you don't have ar
|
|
====================
|
|
|
|
If your system does not already have an 'ar' program, the normal
|
|
binutils build process will not work. In this case, run configure as
|
|
usual. Before running make, run this script:
|
|
|
|
#!/bin/sh
|
|
MAKE_PROG="${MAKE-make}"
|
|
MAKE="${MAKE_PROG} AR=true LINK=true"
|
|
export MAKE
|
|
${MAKE} $* all-libiberty
|
|
${MAKE} $* all-intl
|
|
${MAKE} $* all-bfd
|
|
cd binutils
|
|
MAKE="${MAKE_PROG}"
|
|
export MAKE
|
|
${MAKE} $* ar_DEPENDENCIES= ar_LDADD='../bfd/*.o `cat ../libiberty/required-list ../libiberty/needed-list | sed -e "s,\([^ ][^ ]*\),../libiberty/\1,g"` `if test -f ../intl/gettext.o; then echo '../intl/*.o'; fi`' ar
|
|
|
|
This script will build an ar program in binutils/ar. Move binutils/ar
|
|
into a directory on your PATH. After doing this, you can run make as
|
|
usual to build the complete binutils distribution. You do not need
|
|
the ranlib program in order to build the distribution.
|
|
|
|
Porting
|
|
=======
|
|
|
|
Binutils-2.11 supports many different architectures, but there
|
|
are many more not supported, including some that were supported
|
|
by earlier versions. We are hoping for volunteers to improve this
|
|
situation.
|
|
|
|
The major effort in porting binutils to a new host and/or target
|
|
architecture involves the BFD library. There is some documentation
|
|
in ../bfd/doc. The file ../gdb/doc/gdbint.texinfo (distributed
|
|
with gdb-4.x) may also be of help.
|
|
|
|
Reporting bugs
|
|
==============
|
|
|
|
Send bug reports and patches to:
|
|
|
|
bug-binutils@gnu.org.
|
|
|
|
Always mention the version number you are running; this is printed by
|
|
running any of the binutils with the --version option. We appreciate
|
|
reports about bugs, but we do not promise to fix them.
|
|
|
|
VMS
|
|
===
|
|
|
|
This section was written by Klaus K"ampf <kkaempf@rmi.de>. It
|
|
describes how to build and install the binutils on openVMS (Alpha and
|
|
Vax). (The BFD library only supports reading Vax object files.)
|
|
|
|
Compiling the release:
|
|
|
|
To compile the gnu binary utilities and the gnu assembler, you'll
|
|
need DEC C or GNU C for openVMS/Alpha. You'll need *both* compilers
|
|
on openVMS/Vax.
|
|
|
|
Compiling with either DEC C or GNU C works on openVMS/Alpha only. Some
|
|
of the opcodes and binutils files trap a bug in the DEC C optimizer,
|
|
so these files must be compiled with /noopt.
|
|
|
|
Compiling on openVMS/Vax is a bit complicated, as the bfd library traps
|
|
a bug in GNU C and the gnu assembler a bug in (my version of) DEC C.
|
|
|
|
I never tried compiling with VAX C.
|
|
|
|
|
|
You further need GNU Make Version 3.76 or later. This is available
|
|
at ftp.progis.de or any GNU archive site. The makefiles assume that
|
|
gmake starts gnu make as a foreign command.
|
|
|
|
If you're compiling with DEC C or VAX C, you must run
|
|
|
|
$ @setup
|
|
|
|
before starting gnu-make. This isn't needed with GNU C.
|
|
|
|
On the Alpha you can choose the compiler by editing the toplevel
|
|
makefile.vms. Either select CC=cc (for DEC C) or CC=gcc (for GNU C)
|
|
|
|
|
|
Installing the release
|
|
|
|
Provided that your directory setup conforms to the GNU on openVMS
|
|
standard, you already have a concealed device named 'GNU_ROOT'.
|
|
In this case, a simple
|
|
|
|
$ gmake install
|
|
|
|
suffices to copy all programs and libraries to the proper directories.
|
|
|
|
Define the programs as foreign commands by adding these lines to your
|
|
login.com:
|
|
|
|
$ gas :== $GNU_ROOT:[bin]as.exe
|
|
$ size :== $GNU_ROOT:[bin]size.exe
|
|
$ nm :== $GNU_ROOT:[bin]nm.exe
|
|
$ objdump :== $GNU_ROOT:[bin]objdump.exe
|
|
$ strings :== $GNU_ROOT:[bin]strings.exe
|
|
|
|
If you have a different directory setup, copy the binary utilities
|
|
([.binutils]size.exe, [.binutils]nm.exe, [.binutils]objdump.exe,
|
|
and [.binutils]strings.exe) and the gnu assembler and preprocessor
|
|
([.gas]as.exe and [.gas]gasp.exe]) to a directory of your choice
|
|
and define all programs as foreign commands.
|
|
|
|
|
|
If you're satisfied with the compilation, you may want to remove
|
|
unneeded objects and libraries:
|
|
|
|
$ gmake clean
|
|
|
|
|
|
If you have any problems or questions about the binutils on VMS, feel
|
|
free to mail me at kkaempf@rmi.de.
|