The GAS Configuration Plan

Theory:

The goal of the new configuration scheme is to bury all object format,
target processor, and host machine dependancies in object, target, and
host specific files.  That is, to move all #ifdef's out of the gas
common code.

Here's how it works.  There is a .h and a .c file for each object file
format, a .h and a .c file for each target processor, and a .h for
each host.  config.gas creates {sym}links in the current directory to
the appropriate files in the config directory.  config.gas also serves
as a list of triplets {host, target, object-format} that have been
tested at one time or another.  I also recommend that config.gas be
used to document triplet specific notes as to purpose of the triplet,
etc.

Implementation:

host.h is a {sym}link to .../config/xm-yourhost.h.  It is intended to
be used to hide host compiler, system header file, and system library
differences between host machines.  If your host needs actual c source
files, then either: these are generally useful functions, in which
case you should probably build a local library outside of the gas
source tree, or someone, perhaps me, is confused about what is needed
by different hosts.

obj-format.h is a {sym}link to .../config/obj-something.h.  It is intended

All gas .c files include as.h.

as.h #define's "gas", includes host.h, defines a number of gas
specific structures and types, and then includes tp.h, obj.h, and
target-environment.h.

target-environment.h defines a target environment specific
preprocessor flag, eg, TE_SUN, and then includes obj-format.h.

obj-format.h defines an object format specific preprocessor flag, eg,
OBJ_AOUT, OBJ_BOUT, OBJ_COFF, includes "target-processor.h", and then
defines the object specific macros, functions, types, and structures.

target-processor.h 

target-processor.

Porting:

There appear to be four major types of ports; new hosts, new target
processors, new object file formats, and new target environments.