	Preliminary Notes on Porting BFD
	--------------------------------

The 'host' is the system a tool runs *on*.
The 'target' is the system a tool runs *for*, i.e.
a tool can read/write the binaries of the target.

Porting to a new host
---------------------
Pick a name for your host. Call that <host>.
(<host> might be sun4, ...)
Create a file hosts/<host>.mh.

Porting to a new target
-----------------------
Pick a name for your target. Call that <target>.
Call the name for your CPU architecture <cpu>.
You need to create <target>.c and config/<target>.mt,
and add a case for it to a case statements in bfd/configure.host and
bfd/config.bfd, which associates each canonical host type with a BFD
host type (used as the base of the makefile fragment names), and to the
table in bfd/configure.ac which associates each target vector with
the .o files it uses.

config/<target>.mt is a Makefile fragment.
The following is usually enough:
DEFAULT_VECTOR=<target>_vec
SELECT_ARCHITECTURES=bfd_<cpu>_arch

See the list of cpu types in archures.c, or "ls cpu-*.c".
If your architecture is new, you need to add it to the tables
in bfd/archures.c, opcodes/configure.ac, and binutils/objdump.c.

For more information about .mt and .mh files, see config/README.

The file <target>.c is the hard part.  It implements the
bfd_target <target>_vec, which includes pointers to
functions that do the actual <target>-specific methods.

Porting to a <target> that uses the a.out binary format
-------------------------------------------------------

In this case, the include file aout-target.h probaby does most
of what you need. The program gen-aout generates <target>.c for
you automatically for many a.out systems.  Do:
	make gen-aout
	./gen-aout <target> > <target>.c
(This only works if you are building on the target ("native").
If you must make a cross-port from scratch, copy the most
similar existing file that includes aout-target.h, and fix what is wrong.)

Check the parameters in <target>.c, and fix anything that is wrong.
(Also let us know about it; perhaps we can improve gen-aout.c.)

TARGET_IS_BIG_ENDIAN_P
	Should be defined if <target> is big-endian.

N_HEADER_IN_TEXT(x)
	See discussion in ../include/aout/aout64.h.

BYTES_IN_WORD
	Number of bytes per word. (Usually 4 but can be 8.)

ARCH
	Number of bits per word.  (Usually 32, but can be 64.)

ENTRY_CAN_BE_ZERO
	Define if the extry point (start address of an
	executable program) can be 0x0.

TEXT_START_ADDR
	The address of the start of the text segemnt in
	virtual memory.  Normally, the same as the entry point.

TARGET_PAGE_SIZE

SEGMENT_SIZE
        Usually, the same as the TARGET_PAGE_SIZE.
        Alignment needed for the data segment.

TARGETNAME
	The name of the target, for run-time lookups.
	Usually "a.out-<target>"

Copyright (C) 2012-2021 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.
