		README for GAS

A number of things have changed since version 1 and the wonderful world of gas
looks very different.  There's still a lot of irrelevant garbage lying around
that will be cleaned up in time.  Documentation is scarce, as are logs of the
changes made since the last gas release.  My apologies, and I'll try to get
something useful.

Unpacking and Installation - Summary
====================================

See ../binutils/README.

To build just the assembler, make the target all-gas.

Documentation
=============

The GAS release includes texinfo source for its manual, which can be processed
into `info' or `dvi' forms.

The DVI form is suitable for printing or displaying; the commands for doing
this vary from system to system.  On many systems, `lpr -d' will print a DVI
file.  On others, you may need to run a program such as `dvips' to convert the
DVI file into a form your system can print.

If you wish to build the DVI file, you will need to have TeX installed on your
system.  You can rebuild it by typing:

	cd gas/doc
	make as.dvi

The Info form is viewable with the GNU Emacs `info' subsystem, or the
standalone `info' program, available as part of the GNU Texinfo distribution.
To build the info files, you will need the `makeinfo' program.  Type:

	cd gas/doc
	make info

Specifying names for hosts and targets
======================================

   The specifications used for hosts and targets in the `configure'
script are based on a three-part naming scheme, but some short
predefined aliases are also supported.  The full naming scheme encodes
three pieces of information in the following pattern:

     ARCHITECTURE-VENDOR-OS

   For example, you can use the alias `sun4' as a HOST argument or in a
`--target=TARGET' option.  The equivalent full name is
`sparc-sun-sunos4'.

   The `configure' script accompanying GAS does not provide any query
facility to list all supported host and target names or aliases. 
`configure' calls the Bourne shell script `config.sub' to map
abbreviations to full names; you can read the script, if you wish, or
you can use it to test your guesses on abbreviations--for example:

     % sh config.sub sun4
     sparc-sun-sunos411
     % sh config.sub sun3
     m68k-sun-sunos411
     % sh config.sub decstation
     mips-dec-ultrix42
     % sh config.sub hp300bsd
     m68k-hp-bsd
     % sh config.sub i386v
     i386-unknown-sysv
     % sh config.sub i786v
     Invalid configuration `i786v': machine `i786v' not recognized


`configure' options
===================

   Here is a summary of the `configure' options and arguments that are
most often useful for building GAS.  `configure' also has several other
options not listed here.

     configure [--help]
               [--prefix=DIR]
               [--srcdir=PATH]
               [--host=HOST]
               [--target=TARGET]
               [--with-OPTION]
               [--enable-OPTION]

You may introduce options with a single `-' rather than `--' if you
prefer; but you may abbreviate option names if you use `--'.

`--help'
     Print a summary of the options to `configure', and exit.

`-prefix=DIR'
     Configure the source to install programs and files under directory
     `DIR'.

`--srcdir=PATH'
     Look for the package's source code in directory DIR.  Usually
     `configure' can determine that directory automatically.

`--host=HOST'
     Configure GAS to run on the specified HOST.  Normally the
     configure script can figure this out automatically.

     There is no convenient way to generate a list of all available
     hosts.

`--target=TARGET'
     Configure GAS for cross-assembling programs for the specified
     TARGET.  Without this option, GAS is configured to assemble .o files
     that run on the same machine (HOST) as GAS itself.

     There is no convenient way to generate a list of all available
     targets.

`--enable-OPTION'
     These flags tell the program or library being configured to 
     configure itself differently from the default for the specified
     host/target combination.  See below for a list of `--enable'
     options recognized in the gas distribution.

`configure' accepts other options, for compatibility with configuring
other GNU tools recursively; but these are the only options that affect
GAS or its supporting libraries.

The `--enable' options recognized by software in the gas distribution are:

`--enable-targets=...'
     This causes one or more specified configurations to be added to those for
     which BFD support is compiled.  Currently gas cannot use any format other
     than its compiled-in default, so this option is not very useful.

`--enable-bfd-assembler'
     This causes the assembler to use the new code being merged into it to use
     BFD data structures internally, and use BFD for writing object files.
     For most targets, this isn't supported yet.  For most targets where it has
     been done, it's already the default.  So generally you won't need to use
     this option.

Supported platforms
===================

At this point I believe gas to be ansi only code for most target cpu's.  That
is, there should be relatively few, if any host system dependencies.  So
porting (as a cross-assembler) to hosts not yet supported should be fairly
easy.  Porting to a new target shouldn't be too tough if it's a variant of one
already supported.

Native assembling should work on:

	sun3
	sun4
	386bsd
	bsd/386
	delta (m68k-sysv from Motorola)
	delta88 (m88k-sysv from Motorola)
	GNU/linux
	m68k hpux 8.0 (hpux 7.0 may be a problem)
	vax bsd, ultrix, vms
	hp9000s300
	decstation
	irix 4
	irix 5
	miniframe (m68k-sysv from Convergent Technologies)
	i386-aix (ps/2)
	hppa (hpux 4.3bsd, osf1)
	AIX
	unixware
	sco 3.2v4.2
	sco openserver 5.0 (a.k.a. 3.2v5.0 )
	sparc solaris
	ns32k (netbsd, lites)

I believe that gas as a cross-assembler can currently be targetted for
most of the above hosts, plus

	decstation-bsd (a.out format, to be used in BSD 4.4)
	ebmon29k
	go32 (DOS on i386, with DJGPP -- old a.out version)
	h8/300, h8/500 (Hitachi)
	i386-aix (ps/2)
	i960-coff
	mips ecoff (decstation-ultrix, iris, mips magnum, mips-idt-ecoff)
	Mitsubishi d10v and d30v
	nindy960
	powerpc EABI
	SH (Hitachi)
	sco386
	TI tic30 and tic80
	vax bsd or ultrix?
	vms
	vxworks68k
	vxworks960
	z8000 (Zilog)

MIPS ECOFF support has been added, but GAS will not run a C-style
preprocessor.  If you want that, rename your file to have a ".S" suffix, and
run gcc on it.  Or run "gcc -xassembler-with-cpp foo.s".

Support for ELF should work now for sparc, hppa, i386, alpha, m68k,
MIPS, powerpc.

Support for sequent (ns32k), tahoe, i860, m88k may be suffering from bitrot.

If you try out gas on some host or target not listed above, please let me know
the results, so I can update the list.

Compiler Support Hacks
======================

On a few targets, the assembler has been modified to support a feature
that is potentially useful when assembling compiler output, but which
may confuse assembly language programmers.  If assembler encounters a
.word pseudo-op of the form symbol1-symbol2 (the difference of two
symbols), and the difference of those two symbols will not fit in 16
bits, the assembler will create a branch around a long jump to
symbol1, and insert this into the output directly before the next
label: The .word will (instead of containing garbage, or giving an
error message) contain (the address of the long jump)-symbol2.  This
allows the assembler to assemble jump tables that jump to locations
very far away into code that works properly.  If the next label is
more than 32K away from the .word, you lose (silently); RMS claims
this will never happen.  If the -K option is given, you will get a
warning message when this happens.


REPORTING BUGS IN GAS
=====================

Bugs in gas should be reported to bug-gnu-utils@gnu.org.  They may be
cross-posted to bug-gcc if they affect the use of gas with gcc.  They
should not be reported just to bug-gcc, since I don't read that list,
and therefore wouldn't see them.

If you report a bug in GAS, please remember to include:

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

The type of machine (VAX, 68020, etc) and operating system (BSD, SunOS, DYNIX,
VMS, etc) GAS was running on.

The configuration name(s) given to the "configure" script.  The
"config.status" file should have this information.

The options given to GAS at run time.

The actual input file that caused the problem.

It is silly to report a bug in GAS without including an input file for GAS.
Don't ask us to generate the file just because you made it from files you
think we have access to.

1. You might be mistaken.
2. It might take us a lot of time to install things to regenerate that file.
3. We might get a different file from the one you got, and might not see any
   bug.

To save us these delays and uncertainties, always send the input file for the
program that failed.  A smaller test case that demonstrates the problem is of
course preferable, but be sure it is a complete input file, and that it really
does demonstrate the problem; but if paring it down would cause large delays
in filing the bug report, don't bother.

If the input file is very large, and you are on the internet, you may want to
make it avaliable for anonymous FTP instead of mailing it.  If you do, include
instructions for FTP'ing it in your 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.
