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 *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 struct internal_exec *execp,
152 const bfd_target *(*callback_to_real_object_p) (bfd *));
154 @strong{Description}@*
155 Some a.out variant thinks that the file open in @var{abfd}
156 checking is an a.out file. Do some more checking, and set up
157 for access if it really is. Call back to the calling
158 environment's "finish up" function just before returning, to
159 handle any last-minute setup.
161 @findex aout_@var{size}_mkobject
162 @subsubsection @code{aout_@var{size}_mkobject}
165 bfd_boolean aout_@var{size}_mkobject, (bfd *abfd);
167 @strong{Description}@*
168 Initialize BFD @var{abfd} for use with a.out files.
170 @findex aout_@var{size}_machine_type
171 @subsubsection @code{aout_@var{size}_machine_type}
174 enum machine_type aout_@var{size}_machine_type
175 (enum bfd_architecture arch,
176 unsigned long machine,
177 bfd_boolean *unknown);
179 @strong{Description}@*
180 Keep track of machine architecture and machine type for
181 a.out's. Return the @code{machine_type} for a particular
182 architecture and machine, or @code{M_UNKNOWN} if that exact architecture
183 and machine can't be represented in a.out format.
185 If the architecture is understood, machine type 0 (default)
186 is always understood.
188 @findex aout_@var{size}_set_arch_mach
189 @subsubsection @code{aout_@var{size}_set_arch_mach}
192 bfd_boolean aout_@var{size}_set_arch_mach,
194 enum bfd_architecture arch,
195 unsigned long machine);
197 @strong{Description}@*
198 Set the architecture and the machine of the BFD @var{abfd} to the
199 values @var{arch} and @var{machine}. Verify that @var{abfd}'s format
200 can support the architecture required.
202 @findex aout_@var{size}_new_section_hook
203 @subsubsection @code{aout_@var{size}_new_section_hook}
206 bfd_boolean aout_@var{size}_new_section_hook,
210 @strong{Description}@*
211 Called by the BFD in response to a @code{bfd_make_section}