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