1@section a.out backends
2
3
4@strong{Description}@*
5BFD supports a number of different flavours of a.out format,
6though the major differences are only the sizes of the
7structures on disk, and the shape of the relocation
8information.
9
10The support is split into a basic support file @file{aoutx.h}
11and other files which derive functions from the base. One
12derivation file is @file{aoutf1.h} (for a.out flavour 1), and
13adds to the basic a.out functions support for sun3, sun4, 386
14and 29k a.out files, to create a target jump vector for a
15specific target.
16
17This information is further split out into more specific files
18for each machine, including @file{sunos.c} for sun3 and sun4,
19@file{newsos3.c} for the Sony NEWS, and @file{demo64.c} for a
20demonstration of a 64 bit a.out format.
21
22The base file @file{aoutx.h} defines general mechanisms for
23reading and writing records to and from disk and various
24other methods which BFD requires. It is included by
25@file{aout32.c} and @file{aout64.c} to form the names
26@code{aout_32_swap_exec_header_in}, @code{aout_64_swap_exec_header_in}, etc.
27
28As an example, this is what goes on to make the back end for a
29sun4, from @file{aout32.c}:
30
31@example
32       #define ARCH_SIZE 32
33       #include "aoutx.h"
34@end example
35
36Which exports names:
37
38@example
39       ...
40       aout_32_canonicalize_reloc
41       aout_32_find_nearest_line
42       aout_32_get_lineno
43       aout_32_get_reloc_upper_bound
44       ...
45@end example
46
47from @file{sunos.c}:
48
49@example
50       #define TARGET_NAME "a.out-sunos-big"
51       #define VECNAME    sunos_big_vec
52       #include "aoutf1.h"
53@end example
54
55requires all the names from @file{aout32.c}, and produces the jump vector
56
57@example
58       sunos_big_vec
59@end example
60
61The file @file{host-aout.c} is a special case.  It is for a large set
62of hosts that use ``more or less standard'' a.out files, and
63for which cross-debugging is not interesting.  It uses the
64standard 32-bit a.out support routines, but determines the
65file offsets and addresses of the text, data, and BSS
66sections, the machine architecture and machine type, and the
67entry point address, in a host-dependent manner.  Once these
68values have been determined, generic code is used to handle
69the  object file.
70
71When porting it to run on a new system, you must supply:
72
73@example
74        HOST_PAGE_SIZE
75        HOST_SEGMENT_SIZE
76        HOST_MACHINE_ARCH       (optional)
77        HOST_MACHINE_MACHINE    (optional)
78        HOST_TEXT_START_ADDR
79        HOST_STACK_END_ADDR
80@end example
81
82in the file @file{../include/sys/h-@var{XXX}.h} (for your host).  These
83values, plus the structures and macros defined in @file{a.out.h} on
84your host system, will produce a BFD target that will access
85ordinary a.out files on your host. To configure a new machine
86to use @file{host-aout.c}, specify:
87
88@example
89       TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
90       TDEPFILES= host-aout.o trad-core.o
91@end example
92
93in the @file{config/@var{XXX}.mt} file, and modify @file{configure.in}
94to use the
95@file{@var{XXX}.mt} file (by setting "@code{bfd_target=XXX}") when your
96configuration is selected.
97
98@subsection Relocations
99
100
101@strong{Description}@*
102The file @file{aoutx.h} provides for both the @emph{standard}
103and @emph{extended} forms of a.out relocation records.
104
105The standard records contain only an
106address, a symbol index, and a type field. The extended records
107(used on 29ks and sparcs) also have a full integer for an
108addend.
109
110@subsection Internal entry points
111
112
113@strong{Description}@*
114@file{aoutx.h} exports several routines for accessing the
115contents of an a.out file, which are gathered and exported in
116turn by various format specific files (eg sunos.c).
117
118@findex aout_@var{size}_swap_exec_header_in
119@subsubsection @code{aout_@var{size}_swap_exec_header_in}
120@strong{Synopsis}
121@example
122void aout_@var{size}_swap_exec_header_in,
123   (bfd *abfd,
124    struct external_exec *raw_bytes,
125    struct internal_exec *execp);
126@end example
127@strong{Description}@*
128Swap the information in an executable header @var{raw_bytes} taken
129from a raw byte stream memory image into the internal exec header
130structure @var{execp}.
131
132@findex aout_@var{size}_swap_exec_header_out
133@subsubsection @code{aout_@var{size}_swap_exec_header_out}
134@strong{Synopsis}
135@example
136void aout_@var{size}_swap_exec_header_out
137   (bfd *abfd,
138    struct internal_exec *execp,
139    struct external_exec *raw_bytes);
140@end example
141@strong{Description}@*
142Swap the information in an internal exec header structure
143@var{execp} into the buffer @var{raw_bytes} ready for writing to disk.
144
145@findex aout_@var{size}_some_aout_object_p
146@subsubsection @code{aout_@var{size}_some_aout_object_p}
147@strong{Synopsis}
148@example
149const bfd_target *aout_@var{size}_some_aout_object_p
150   (bfd *abfd,
151    const bfd_target *(*callback_to_real_object_p) ());
152@end example
153@strong{Description}@*
154Some a.out variant thinks that the file open in @var{abfd}
155checking is an a.out file.  Do some more checking, and set up
156for access if it really is.  Call back to the calling
157environment's "finish up" function just before returning, to
158handle any last-minute setup.
159
160@findex aout_@var{size}_mkobject
161@subsubsection @code{aout_@var{size}_mkobject}
162@strong{Synopsis}
163@example
164bfd_boolean aout_@var{size}_mkobject, (bfd *abfd);
165@end example
166@strong{Description}@*
167Initialize BFD @var{abfd} for use with a.out files.
168
169@findex aout_@var{size}_machine_type
170@subsubsection @code{aout_@var{size}_machine_type}
171@strong{Synopsis}
172@example
173enum machine_type  aout_@var{size}_machine_type
174   (enum bfd_architecture arch,
175    unsigned long machine));
176@end example
177@strong{Description}@*
178Keep track of machine architecture and machine type for
179a.out's. Return the @code{machine_type} for a particular
180architecture and machine, or @code{M_UNKNOWN} if that exact architecture
181and machine can't be represented in a.out format.
182
183If the architecture is understood, machine type 0 (default)
184is always understood.
185
186@findex aout_@var{size}_set_arch_mach
187@subsubsection @code{aout_@var{size}_set_arch_mach}
188@strong{Synopsis}
189@example
190bfd_boolean aout_@var{size}_set_arch_mach,
191   (bfd *,
192    enum bfd_architecture arch,
193    unsigned long machine));
194@end example
195@strong{Description}@*
196Set the architecture and the machine of the BFD @var{abfd} to the
197values @var{arch} and @var{machine}.  Verify that @var{abfd}'s format
198can support the architecture required.
199
200@findex aout_@var{size}_new_section_hook
201@subsubsection @code{aout_@var{size}_new_section_hook}
202@strong{Synopsis}
203@example
204bfd_boolean aout_@var{size}_new_section_hook,
205   (bfd *abfd,
206    asection *newsect));
207@end example
208@strong{Description}@*
209Called by the BFD in response to a @code{bfd_make_section}
210request.
211
212