1 @section a.out backends
5 BFD supports a number of different flavours of a.out format,
6 though the major differences are only the sizes of the
7 structures on disk, and the shape of the relocation
10 The support is split into a basic support file @file{aoutx.h}
11 and other files which derive functions from the base. One
12 derivation file is @file{aoutf1.h} (for a.out flavour 1), and
13 adds to the basic a.out functions support for sun3, sun4, 386
14 and 29k a.out files, to create a target jump vector for a
17 This information is further split out into more specific files
18 for each machine, including @file{sunos.c} for sun3 and sun4,
19 @file{newsos3.c} for the Sony NEWS, and @file{demo64.c} for a
20 demonstration of a 64 bit a.out format.
22 The base file @file{aoutx.h} defines general mechanisms for
23 reading and writing records to and from disk and various
24 other 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.
28 As an example, this is what goes on to make the back end for a
29 sun4, from @file{aout32.c}:
40 aout_32_canonicalize_reloc
41 aout_32_find_nearest_line
43 aout_32_get_reloc_upper_bound
50 #define TARGET_NAME "a.out-sunos-big"
51 #define VECNAME sunos_big_vec
55 requires all the names from @file{aout32.c}, and produces the jump vector
61 The file @file{host-aout.c} is a special case. It is for a large set
62 of hosts that use ``more or less standard'' a.out files, and
63 for which cross-debugging is not interesting. It uses the
64 standard 32-bit a.out support routines, but determines the
65 file offsets and addresses of the text, data, and BSS
66 sections, the machine architecture and machine type, and the
67 entry point address, in a host-dependent manner. Once these
68 values have been determined, generic code is used to handle
71 When porting it to run on a new system, you must supply:
76 HOST_MACHINE_ARCH (optional)
77 HOST_MACHINE_MACHINE (optional)
82 in the file @file{../include/sys/h-@var{XXX}.h} (for your host). These
83 values, plus the structures and macros defined in @file{a.out.h} on
84 your host system, will produce a BFD target that will access
85 ordinary a.out files on your host. To configure a new machine
86 to use @file{host-aout.c}, specify:
89 TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
90 TDEPFILES= host-aout.o trad-core.o
93 in the @file{config/@var{XXX}.mt} file, and modify @file{configure.in}
95 @file{@var{XXX}.mt} file (by setting "@code{bfd_target=XXX}") when your
96 configuration is selected.
98 @subsection Relocations
101 @strong{Description}@*
102 The file @file{aoutx.h} provides for both the @emph{standard}
103 and @emph{extended} forms of a.out relocation records.
105 The standard records contain only an
106 address, a symbol index, and a type field. The extended records
107 (used on 29ks and sparcs) also have a full integer for an
110 @subsection Internal entry points
113 @strong{Description}@*
114 @file{aoutx.h} exports several routines for accessing the
115 contents of an a.out file, which are gathered and exported in
116 turn by various format specific files (eg sunos.c).
118 @findex aout_@var{size}_swap_exec_header_in
119 @subsubsection @code{aout_@var{size}_swap_exec_header_in}
122 void aout_@var{size}_swap_exec_header_in,
124 struct external_exec *raw_bytes,
125 struct internal_exec *execp);
127 @strong{Description}@*
128 Swap the information in an executable header @var{raw_bytes} taken
129 from a raw byte stream memory image into the internal exec header
130 structure @var{execp}.
132 @findex aout_@var{size}_swap_exec_header_out
133 @subsubsection @code{aout_@var{size}_swap_exec_header_out}
136 void aout_@var{size}_swap_exec_header_out
138 struct internal_exec *execp,
139 struct external_exec *raw_bytes);
141 @strong{Description}@*
142 Swap the information in an internal exec header structure
143 @var{execp} into the buffer @var{raw_bytes} ready for writing to disk.
145 @findex aout_@var{size}_some_aout_object_p
146 @subsubsection @code{aout_@var{size}_some_aout_object_p}
149 const bfd_target *aout_@var{size}_some_aout_object_p
151 const bfd_target *(*callback_to_real_object_p) ());
153 @strong{Description}@*
154 Some a.out variant thinks that the file open in @var{abfd}
155 checking is an a.out file. Do some more checking, and set up
156 for access if it really is. Call back to the calling
157 environment's "finish up" function just before returning, to
158 handle any last-minute setup.
160 @findex aout_@var{size}_mkobject
161 @subsubsection @code{aout_@var{size}_mkobject}
164 bfd_boolean aout_@var{size}_mkobject, (bfd *abfd);
166 @strong{Description}@*
167 Initialize BFD @var{abfd} for use with a.out files.
169 @findex aout_@var{size}_machine_type
170 @subsubsection @code{aout_@var{size}_machine_type}
173 enum machine_type aout_@var{size}_machine_type
174 (enum bfd_architecture arch,
175 unsigned long machine));
177 @strong{Description}@*
178 Keep track of machine architecture and machine type for
179 a.out's. Return the @code{machine_type} for a particular
180 architecture and machine, or @code{M_UNKNOWN} if that exact architecture
181 and machine can't be represented in a.out format.
183 If the architecture is understood, machine type 0 (default)
184 is always understood.
186 @findex aout_@var{size}_set_arch_mach
187 @subsubsection @code{aout_@var{size}_set_arch_mach}
190 bfd_boolean aout_@var{size}_set_arch_mach,
192 enum bfd_architecture arch,
193 unsigned long machine));
195 @strong{Description}@*
196 Set the architecture and the machine of the BFD @var{abfd} to the
197 values @var{arch} and @var{machine}. Verify that @var{abfd}'s format
198 can support the architecture required.
200 @findex aout_@var{size}_new_section_hook
201 @subsubsection @code{aout_@var{size}_new_section_hook}
204 bfd_boolean aout_@var{size}_new_section_hook,
208 @strong{Description}@*
209 Called by the BFD in response to a @code{bfd_make_section}