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