These are the GNU binutils.  These are utilities of use when dealing
with object files.

The linker (ld) is in a separate directory, which should be ../ld.
Linker-specific notes are in ../ld/README.

As of version 2.5, the assembler (as) is also included in this package, in
../gas.  Assembler-specific notes can be found in ../gas/README.

Recent changes are in ./NEWS, ../ld/NEWS, and ../gas/NEWS.

Unpacking and Installation -- quick overview
============================================

When you unpack the binutils-2.9.tar.gz file, you'll get a directory
called something like `binutils-2.9', which contains various files and
directories.  Most of the files in the top directory are for
information and for configuration.  The actual source code is in
subdirectories.

To build binutils, you can just do:

	cd binutils-2.9
	./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-2.9/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.

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 (this was
the default in releases before 2.3):

	./configure --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 runtime 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.9 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 deviced 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 satiesfied 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.
