		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.


Copyright Notices
=================

Copyright years on binutils source files may be listed using range
notation, e.g., 1991-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.


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.13 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.

On hosts that support shared system libraries the binutils will be
linked against them.  If you have static versions of the system
libraries installed as well and you wish to create static binaries
instead then use the LDFLAGS environment variable,  like this:

  ../binutils-XXX/configure LDFLAGS="--static" [more options]

Note: the two dashes are important.  The binutils make use of the
libtool script which has a special interpretation of "-static" when it
is in the LDFLAGS environment variable.

To build under openVMS/AXP, see the file makefile.vms in the top level
directory.


Native Language Support
=======================

By default Native Language Support will be enabled for binutils.  On
some systems however this support is not present and can lead to error
messages such as "undefined reference to `libintl_gettext'" when
building there tools.  If that happens the NLS support can be disabled
by adding the --disable-nls switch to the configure line like this:

	../binutils-XXX/configure --disable-nls


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 ../libiberty/*.o `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.13 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-5.x) may also be of help.

Reporting bugs
==============

Send bug reports and patches to:

   bug-binutils@gnu.org.

Please include the following in bug reports:

- A description of exactly what went wrong, and exactly what should have
  happened instead.

- The configuration name(s) given to the "configure" script.  The
  "config.status" file should have this information.  This is assuming
  you built binutils yourself.  If you didn't build binutils youself,
  then we need information regarding your machine and operating system,
  and it may be more appropriate to report bugs to wherever you obtained
  binutils.

- The options given to the tool (gas, objcopy, ld etc.) at run time.

- The actual input file that caused the problem.

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, particularly so
when the bug report is against an old version.  If you are able, please
consider building the latest tools from git to check that your bug has
not already been fixed.

When reporting problems about gas and ld, it's useful to provide a
testcase that triggers the problem.  In the case of a gas problem, we
want input files to gas and command line switches used.  The inputs to
gas are _NOT_ .c or .i files, but rather .s files.  If your original
source was a C program, you can generate the .s file and see the command
line options by passing -v -save-temps to gcc in addition to all the
usual options you use.  The reason we don't want C files is that we
might not have a C compiler around for the target you use.  While it
might be possible to build a compiler, that takes considerable time and
disk space, and we might not end up with exactly the same compiler you
use.

In the case of a ld problem, the input files are .o, .a and .so files,
and possibly a linker script specified with -T.  Again, when using gcc
to link, you can see these files by adding options to the gcc command
line.  Use -v -save-temps -Wl,-t, except that on targets that use gcc's
collect2, you would add -v -save-temps -Wl,-t,-debug.  The -t option
tells ld to print all files and libraries used, so that, for example,
you can associate -lc on the ld command line with the actual libc used.
Note that your simple two line C program to trigger a problem typically
expands into several megabytes of objects by the time you include
libraries.

It is antisocial to post megabyte sized attachments to mailing lists, so
please put large testcases somewhere on an ftp or web site so that only
interested developers need to download them, or offer to email them on
request.  Better still, try to reduce the testcase, for example, try to
develop a ld testcase that doesn't use system libraries.  However,
please be sure it is a complete testcase and that it really does
demonstrate the problem.  Also, don't bother paring it down if that will
cause large delays in filing the bug report.

If you expect to be contributing a large number of test cases, it would
be helpful if you would look at the test suite included in the release
(based on the Deja Gnu testing framework, available from the usual ftp
sites) and write test cases to fit into that framework.  This is
certainly not required.

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.

Copyright (C) 2012-2015 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
