00001 /* `a.out' object-file definitions, including extensions to 64-bit fields */ 00002 00003 #ifndef __A_OUT_64_H__ 00004 #define __A_OUT_64_H__ 00005 00006 /* This is the layout on disk of the 32-bit or 64-bit exec header. */ 00007 00008 #ifndef external_exec 00009 struct external_exec 00010 { 00011 bfd_byte e_info[4]; /* magic number and stuff */ 00012 bfd_byte e_text[BYTES_IN_WORD]; /* length of text section in bytes */ 00013 bfd_byte e_data[BYTES_IN_WORD]; /* length of data section in bytes */ 00014 bfd_byte e_bss[BYTES_IN_WORD]; /* length of bss area in bytes */ 00015 bfd_byte e_syms[BYTES_IN_WORD]; /* length of symbol table in bytes */ 00016 bfd_byte e_entry[BYTES_IN_WORD]; /* start address */ 00017 bfd_byte e_trsize[BYTES_IN_WORD]; /* length of text relocation info */ 00018 bfd_byte e_drsize[BYTES_IN_WORD]; /* length of data relocation info */ 00019 }; 00020 00021 #define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7) 00022 00023 /* Magic numbers for a.out files */ 00024 00025 #if ARCH_SIZE==64 00026 #define OMAGIC 0x1001 /* Code indicating object file */ 00027 #define ZMAGIC 0x1002 /* Code indicating demand-paged executable. */ 00028 #define NMAGIC 0x1003 /* Code indicating pure executable. */ 00029 00030 /* There is no 64-bit QMAGIC as far as I know. */ 00031 00032 #define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \ 00033 && N_MAGIC(x) != NMAGIC \ 00034 && N_MAGIC(x) != ZMAGIC) 00035 #else 00036 #define OMAGIC 0407 /* ...object file or impure executable. */ 00037 #define NMAGIC 0410 /* Code indicating pure executable. */ 00038 #define ZMAGIC 0413 /* Code indicating demand-paged executable. */ 00039 #define BMAGIC 0415 /* Used by a b.out object. */ 00040 00041 /* This indicates a demand-paged executable with the header in the text. 00042 It is used by 386BSD (and variants) and Linux, at least. */ 00043 #ifndef QMAGIC 00044 #define QMAGIC 0314 00045 #endif 00046 # ifndef N_BADMAG 00047 # define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \ 00048 && N_MAGIC(x) != NMAGIC \ 00049 && N_MAGIC(x) != ZMAGIC \ 00050 && N_MAGIC(x) != QMAGIC) 00051 # endif /* N_BADMAG */ 00052 #endif 00053 00054 #endif 00055 00056 #ifdef QMAGIC 00057 #define N_IS_QMAGIC(x) (N_MAGIC (x) == QMAGIC) 00058 #else 00059 #define N_IS_QMAGIC(x) (0) 00060 #endif 00061 00062 /* The difference between TARGET_PAGE_SIZE and N_SEGSIZE is that TARGET_PAGE_SIZE is 00063 the finest granularity at which you can page something, thus it 00064 controls the padding (if any) before the text segment of a ZMAGIC 00065 file. N_SEGSIZE is the resolution at which things can be marked as 00066 read-only versus read/write, so it controls the padding between the 00067 text segment and the data segment (in memory; on disk the padding 00068 between them is TARGET_PAGE_SIZE). TARGET_PAGE_SIZE and N_SEGSIZE are the same 00069 for most machines, but different for sun3. */ 00070 00071 /* By default, segment size is constant. But some machines override this 00072 to be a function of the a.out header (e.g. machine type). */ 00073 00074 #ifndef N_SEGSIZE 00075 #define N_SEGSIZE(x) SEGMENT_SIZE 00076 #endif 00077 00078 /* Virtual memory address of the text section. 00079 This is getting very complicated. A good reason to discard a.out format 00080 for something that specifies these fields explicitly. But til then... 00081 00082 * OMAGIC and NMAGIC files: 00083 (object files: text for "relocatable addr 0" right after the header) 00084 start at 0, offset is EXEC_BYTES_SIZE, size as stated. 00085 * The text address, offset, and size of ZMAGIC files depend 00086 on the entry point of the file: 00087 * entry point below TEXT_START_ADDR: 00088 (hack for SunOS shared libraries) 00089 start at 0, offset is 0, size as stated. 00090 * If N_HEADER_IN_TEXT(x) is true (which defaults to being the 00091 case when the entry point is EXEC_BYTES_SIZE or further into a page): 00092 no padding is needed; text can start after exec header. Sun 00093 considers the text segment of such files to include the exec header; 00094 for BFD's purposes, we don't, which makes more work for us. 00095 start at TEXT_START_ADDR + EXEC_BYTES_SIZE, offset is EXEC_BYTES_SIZE, 00096 size as stated minus EXEC_BYTES_SIZE. 00097 * If N_HEADER_IN_TEXT(x) is false (which defaults to being the case when 00098 the entry point is less than EXEC_BYTES_SIZE into a page (e.g. page 00099 aligned)): (padding is needed so that text can start at a page boundary) 00100 start at TEXT_START_ADDR, offset TARGET_PAGE_SIZE, size as stated. 00101 00102 Specific configurations may want to hardwire N_HEADER_IN_TEXT, 00103 for efficiency or to allow people to play games with the entry point. 00104 In that case, you would #define N_HEADER_IN_TEXT(x) as 1 for sunos, 00105 and as 0 for most other hosts (Sony News, Vax Ultrix, etc). 00106 (Do this in the appropriate bfd target file.) 00107 (The default is a heuristic that will break if people try changing 00108 the entry point, perhaps with the ld -e flag.) 00109 00110 * QMAGIC is always like a ZMAGIC for which N_HEADER_IN_TEXT is true, 00111 and for which the starting address is TARGET_PAGE_SIZE (or should this be 00112 SEGMENT_SIZE?) (TEXT_START_ADDR only applies to ZMAGIC, not to QMAGIC). 00113 */ 00114 00115 /* This macro is only relevant for ZMAGIC files; QMAGIC always has the header 00116 in the text. */ 00117 #ifndef N_HEADER_IN_TEXT 00118 #define N_HEADER_IN_TEXT(x) (((x).a_entry & (TARGET_PAGE_SIZE-1)) >= EXEC_BYTES_SIZE) 00119 #endif 00120 00121 /* Sun shared libraries, not linux. This macro is only relevant for ZMAGIC 00122 files. */ 00123 #ifndef N_SHARED_LIB 00124 #define N_SHARED_LIB(x) ((x).a_entry < TEXT_START_ADDR) 00125 #endif 00126 00127 /* Returning 0 not TEXT_START_ADDR for OMAGIC and NMAGIC is based on 00128 the assumption that we are dealing with a .o file, not an 00129 executable. This is necessary for OMAGIC (but means we don't work 00130 right on the output from ld -N); more questionable for NMAGIC. */ 00131 00132 #ifndef N_TXTADDR 00133 #define N_TXTADDR(x) \ 00134 (/* The address of a QMAGIC file is always one page in, */ \ 00135 /* with the header in the text. */ \ 00136 N_IS_QMAGIC (x) ? TARGET_PAGE_SIZE + EXEC_BYTES_SIZE : \ 00137 N_MAGIC(x) != ZMAGIC ? 0 : /* object file or NMAGIC */\ 00138 N_SHARED_LIB(x) ? 0 : \ 00139 N_HEADER_IN_TEXT(x) ? \ 00140 TEXT_START_ADDR + EXEC_BYTES_SIZE : /* no padding */\ 00141 TEXT_START_ADDR /* a page of padding */\ 00142 ) 00143 #endif 00144 00145 /* If N_HEADER_IN_TEXT is not true for ZMAGIC, there is some padding 00146 to make the text segment start at a certain boundary. For most 00147 systems, this boundary is TARGET_PAGE_SIZE. But for Linux, in the 00148 time-honored tradition of crazy ZMAGIC hacks, it is 1024 which is 00149 not what TARGET_PAGE_SIZE needs to be for QMAGIC. */ 00150 00151 #ifndef ZMAGIC_DISK_BLOCK_SIZE 00152 #define ZMAGIC_DISK_BLOCK_SIZE TARGET_PAGE_SIZE 00153 #endif 00154 00155 #define N_DISK_BLOCK_SIZE(x) \ 00156 (N_MAGIC(x) == ZMAGIC ? ZMAGIC_DISK_BLOCK_SIZE : TARGET_PAGE_SIZE) 00157 00158 /* Offset in an a.out of the start of the text section. */ 00159 #ifndef N_TXTOFF 00160 #define N_TXTOFF(x) \ 00161 (/* For {O,N,Q}MAGIC, no padding. */ \ 00162 N_MAGIC(x) != ZMAGIC ? EXEC_BYTES_SIZE : \ 00163 N_SHARED_LIB(x) ? 0 : \ 00164 N_HEADER_IN_TEXT(x) ? \ 00165 EXEC_BYTES_SIZE : /* no padding */\ 00166 ZMAGIC_DISK_BLOCK_SIZE /* a page of padding */\ 00167 ) 00168 #endif 00169 /* Size of the text section. It's always as stated, except that we 00170 offset it to `undo' the adjustment to N_TXTADDR and N_TXTOFF 00171 for ZMAGIC files that nominally include the exec header 00172 as part of the first page of text. (BFD doesn't consider the 00173 exec header to be part of the text segment.) */ 00174 #ifndef N_TXTSIZE 00175 #define N_TXTSIZE(x) \ 00176 (/* For QMAGIC, we don't consider the header part of the text section. */\ 00177 N_IS_QMAGIC (x) ? (x).a_text - EXEC_BYTES_SIZE : \ 00178 (N_MAGIC(x) != ZMAGIC || N_SHARED_LIB(x)) ? (x).a_text : \ 00179 N_HEADER_IN_TEXT(x) ? \ 00180 (x).a_text - EXEC_BYTES_SIZE: /* no padding */\ 00181 (x).a_text /* a page of padding */\ 00182 ) 00183 #endif 00184 /* The address of the data segment in virtual memory. 00185 It is the text segment address, plus text segment size, rounded 00186 up to a N_SEGSIZE boundary for pure or pageable files. */ 00187 #ifndef N_DATADDR 00188 #define N_DATADDR(x) \ 00189 (N_MAGIC(x)==OMAGIC? (N_TXTADDR(x)+N_TXTSIZE(x)) \ 00190 : (N_SEGSIZE(x) + ((N_TXTADDR(x)+N_TXTSIZE(x)-1) & ~(N_SEGSIZE(x)-1)))) 00191 #endif 00192 /* The address of the BSS segment -- immediately after the data segment. */ 00193 00194 #define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) 00195 00196 /* Offsets of the various portions of the file after the text segment. */ 00197 00198 /* For {Q,Z}MAGIC, there is padding to make the data segment start on 00199 a page boundary. Most of the time the a_text field (and thus 00200 N_TXTSIZE) already contains this padding. It is possible that for 00201 BSDI and/or 386BSD it sometimes doesn't contain the padding, and 00202 perhaps we should be adding it here. But this seems kind of 00203 questionable and probably should be BSDI/386BSD-specific if we do 00204 do it. 00205 00206 For NMAGIC (at least for hp300 BSD, probably others), there is 00207 padding in memory only, not on disk, so we must *not* ever pad here 00208 for NMAGIC. */ 00209 00210 #ifndef N_DATOFF 00211 #define N_DATOFF(x) \ 00212 (N_TXTOFF(x) + N_TXTSIZE(x)) 00213 #endif 00214 00215 #ifndef N_TRELOFF 00216 #define N_TRELOFF(x) ( N_DATOFF(x) + (x).a_data ) 00217 #endif 00218 #ifndef N_DRELOFF 00219 #define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize ) 00220 #endif 00221 #ifndef N_SYMOFF 00222 #define N_SYMOFF(x) ( N_DRELOFF(x) + (x).a_drsize ) 00223 #endif 00224 #ifndef N_STROFF 00225 #define N_STROFF(x) ( N_SYMOFF(x) + (x).a_syms ) 00226 #endif 00227 00228 /* Symbols */ 00229 #ifndef external_nlist 00230 struct external_nlist { 00231 bfd_byte e_strx[BYTES_IN_WORD]; /* index into string table of name */ 00232 bfd_byte e_type[1]; /* type of symbol */ 00233 bfd_byte e_other[1]; /* misc info (usually empty) */ 00234 bfd_byte e_desc[2]; /* description field */ 00235 bfd_byte e_value[BYTES_IN_WORD]; /* value of symbol */ 00236 }; 00237 #define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD) 00238 #endif 00239 00240 struct internal_nlist { 00241 unsigned long n_strx; /* index into string table of name */ 00242 unsigned char n_type; /* type of symbol */ 00243 unsigned char n_other; /* misc info (usually empty) */ 00244 unsigned short n_desc; /* description field */ 00245 bfd_vma n_value; /* value of symbol */ 00246 }; 00247 00248 /* The n_type field is the symbol type, containing: */ 00249 00250 #define N_UNDF 0 /* Undefined symbol */ 00251 #define N_ABS 2 /* Absolute symbol -- defined at particular addr */ 00252 #define N_TEXT 4 /* Text sym -- defined at offset in text seg */ 00253 #define N_DATA 6 /* Data sym -- defined at offset in data seg */ 00254 #define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg */ 00255 #define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink) */ 00256 #define N_FN 0x1f /* File name of .o file */ 00257 #define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh) */ 00258 /* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT, 00259 N_DATA, or N_BSS. When the low-order bit of other types is set, 00260 (e.g. N_WARNING versus N_FN), they are two different types. */ 00261 #define N_EXT 1 /* External symbol (as opposed to local-to-this-file) */ 00262 #define N_TYPE 0x1e 00263 #define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol */ 00264 00265 #define N_INDR 0x0a 00266 00267 /* The following symbols refer to set elements. 00268 All the N_SET[ATDB] symbols with the same name form one set. 00269 Space is allocated for the set in the text section, and each set 00270 elements value is stored into one word of the space. 00271 The first word of the space is the length of the set (number of elements). 00272 00273 The address of the set is made into an N_SETV symbol 00274 whose name is the same as the name of the set. 00275 This symbol acts like a N_DATA global symbol 00276 in that it can satisfy undefined external references. */ 00277 00278 /* These appear as input to LD, in a .o file. */ 00279 #define N_SETA 0x14 /* Absolute set element symbol */ 00280 #define N_SETT 0x16 /* Text set element symbol */ 00281 #define N_SETD 0x18 /* Data set element symbol */ 00282 #define N_SETB 0x1A /* Bss set element symbol */ 00283 00284 /* This is output from LD. */ 00285 #define N_SETV 0x1C /* Pointer to set vector in data area. */ 00286 00287 /* Warning symbol. The text gives a warning message, the next symbol 00288 in the table will be undefined. When the symbol is referenced, the 00289 message is printed. */ 00290 00291 #define N_WARNING 0x1e 00292 00293 /* Weak symbols. These are a GNU extension to the a.out format. The 00294 semantics are those of ELF weak symbols. Weak symbols are always 00295 externally visible. The N_WEAK? values are squeezed into the 00296 available slots. The value of a N_WEAKU symbol is 0. The values 00297 of the other types are the definitions. */ 00298 #define N_WEAKU 0x0d /* Weak undefined symbol. */ 00299 #define N_WEAKA 0x0e /* Weak absolute symbol. */ 00300 #define N_WEAKT 0x0f /* Weak text symbol. */ 00301 #define N_WEAKD 0x10 /* Weak data symbol. */ 00302 #define N_WEAKB 0x11 /* Weak bss symbol. */ 00303 00304 /* Relocations 00305 00306 There are two types of relocation flavours for a.out systems, 00307 standard and extended. The standard form is used on systems where the 00308 instruction has room for all the bits of an offset to the operand, whilst 00309 the extended form is used when an address operand has to be split over n 00310 instructions. Eg, on the 68k, each move instruction can reference 00311 the target with a displacement of 16 or 32 bits. On the sparc, move 00312 instructions use an offset of 14 bits, so the offset is stored in 00313 the reloc field, and the data in the section is ignored. 00314 */ 00315 00316 /* This structure describes a single relocation to be performed. 00317 The text-relocation section of the file is a vector of these structures, 00318 all of which apply to the text section. 00319 Likewise, the data-relocation section applies to the data section. */ 00320 00321 struct reloc_std_external { 00322 bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */ 00323 bfd_byte r_index[3]; /* symbol table index of symbol */ 00324 bfd_byte r_type[1]; /* relocation type */ 00325 }; 00326 00327 #define RELOC_STD_BITS_PCREL_BIG ((unsigned int) 0x80) 00328 #define RELOC_STD_BITS_PCREL_LITTLE ((unsigned int) 0x01) 00329 00330 #define RELOC_STD_BITS_LENGTH_BIG ((unsigned int) 0x60) 00331 #define RELOC_STD_BITS_LENGTH_SH_BIG 5 00332 #define RELOC_STD_BITS_LENGTH_LITTLE ((unsigned int) 0x06) 00333 #define RELOC_STD_BITS_LENGTH_SH_LITTLE 1 00334 00335 #define RELOC_STD_BITS_EXTERN_BIG ((unsigned int) 0x10) 00336 #define RELOC_STD_BITS_EXTERN_LITTLE ((unsigned int) 0x08) 00337 00338 #define RELOC_STD_BITS_BASEREL_BIG ((unsigned int) 0x08) 00339 #define RELOC_STD_BITS_BASEREL_LITTLE ((unsigned int) 0x10) 00340 00341 #define RELOC_STD_BITS_JMPTABLE_BIG ((unsigned int) 0x04) 00342 #define RELOC_STD_BITS_JMPTABLE_LITTLE ((unsigned int) 0x20) 00343 00344 #define RELOC_STD_BITS_RELATIVE_BIG ((unsigned int) 0x02) 00345 #define RELOC_STD_BITS_RELATIVE_LITTLE ((unsigned int) 0x40) 00346 00347 #define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry */ 00348 00349 struct reloc_std_internal 00350 { 00351 bfd_vma r_address; /* Address (within segment) to be relocated. */ 00352 /* The meaning of r_symbolnum depends on r_extern. */ 00353 unsigned int r_symbolnum:24; 00354 /* Nonzero means value is a pc-relative offset 00355 and it should be relocated for changes in its own address 00356 as well as for changes in the symbol or section specified. */ 00357 unsigned int r_pcrel:1; 00358 /* Length (as exponent of 2) of the field to be relocated. 00359 Thus, a value of 2 indicates 1<<2 bytes. */ 00360 unsigned int r_length:2; 00361 /* 1 => relocate with value of symbol. 00362 r_symbolnum is the index of the symbol 00363 in files the symbol table. 00364 0 => relocate with the address of a segment. 00365 r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS 00366 (the N_EXT bit may be set also, but signifies nothing). */ 00367 unsigned int r_extern:1; 00368 /* The next three bits are for SunOS shared libraries, and seem to 00369 be undocumented. */ 00370 unsigned int r_baserel:1; /* Linkage table relative */ 00371 unsigned int r_jmptable:1; /* pc-relative to jump table */ 00372 unsigned int r_relative:1; /* "relative relocation" */ 00373 /* unused */ 00374 unsigned int r_pad:1; /* Padding -- set to zero */ 00375 }; 00376 00377 00378 /* EXTENDED RELOCS */ 00379 00380 struct reloc_ext_external { 00381 bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */ 00382 bfd_byte r_index[3]; /* symbol table index of symbol */ 00383 bfd_byte r_type[1]; /* relocation type */ 00384 bfd_byte r_addend[BYTES_IN_WORD]; /* datum addend */ 00385 }; 00386 00387 #define RELOC_EXT_BITS_EXTERN_BIG ((unsigned int) 0x80) 00388 #define RELOC_EXT_BITS_EXTERN_LITTLE ((unsigned int) 0x01) 00389 00390 #define RELOC_EXT_BITS_TYPE_BIG ((unsigned int) 0x1F) 00391 #define RELOC_EXT_BITS_TYPE_SH_BIG 0 00392 #define RELOC_EXT_BITS_TYPE_LITTLE ((unsigned int) 0xF8) 00393 #define RELOC_EXT_BITS_TYPE_SH_LITTLE 3 00394 00395 /* Bytes per relocation entry */ 00396 #define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD) 00397 00398 enum reloc_type 00399 { 00400 /* simple relocations */ 00401 RELOC_8, /* data[0:7] = addend + sv */ 00402 RELOC_16, /* data[0:15] = addend + sv */ 00403 RELOC_32, /* data[0:31] = addend + sv */ 00404 /* pc-rel displacement */ 00405 RELOC_DISP8, /* data[0:7] = addend - pc + sv */ 00406 RELOC_DISP16, /* data[0:15] = addend - pc + sv */ 00407 RELOC_DISP32, /* data[0:31] = addend - pc + sv */ 00408 /* Special */ 00409 RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */ 00410 RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */ 00411 RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */ 00412 RELOC_22, /* data[0:21] = (addend + sv) */ 00413 RELOC_13, /* data[0:12] = (addend + sv) */ 00414 RELOC_LO10, /* data[0:9] = (addend + sv) */ 00415 RELOC_SFA_BASE, 00416 RELOC_SFA_OFF13, 00417 /* P.I.C. (base-relative) */ 00418 RELOC_BASE10, /* Not sure - maybe we can do this the */ 00419 RELOC_BASE13, /* right way now */ 00420 RELOC_BASE22, 00421 /* for some sort of pc-rel P.I.C. (?) */ 00422 RELOC_PC10, 00423 RELOC_PC22, 00424 /* P.I.C. jump table */ 00425 RELOC_JMP_TBL, 00426 /* reputedly for shared libraries somehow */ 00427 RELOC_SEGOFF16, 00428 RELOC_GLOB_DAT, 00429 RELOC_JMP_SLOT, 00430 RELOC_RELATIVE, 00431 00432 RELOC_11, 00433 RELOC_WDISP2_14, 00434 RELOC_WDISP19, 00435 RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */ 00436 RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */ 00437 00438 /* 29K relocation types */ 00439 RELOC_JUMPTARG, 00440 RELOC_CONST, 00441 RELOC_CONSTH, 00442 00443 /* All the new ones I can think of, for sparc v9 */ 00444 00445 RELOC_64, /* data[0:63] = addend + sv */ 00446 RELOC_DISP64, /* data[0:63] = addend - pc + sv */ 00447 RELOC_WDISP21, /* data[0:20] = (addend + sv - pc)>>2 */ 00448 RELOC_DISP21, /* data[0:20] = addend - pc + sv */ 00449 RELOC_DISP14, /* data[0:13] = addend - pc + sv */ 00450 /* Q . 00451 What are the other ones, 00452 Since this is a clean slate, can we throw away the ones we dont 00453 understand ? Should we sort the values ? What about using a 00454 microcode format like the 68k ? 00455 */ 00456 NO_RELOC 00457 }; 00458 00459 00460 struct reloc_internal { 00461 bfd_vma r_address; /* offset of of data to relocate */ 00462 long r_index; /* symbol table index of symbol */ 00463 enum reloc_type r_type; /* relocation type */ 00464 bfd_vma r_addend; /* datum addend */ 00465 }; 00466 00467 /* Q. 00468 Should the length of the string table be 4 bytes or 8 bytes ? 00469 00470 Q. 00471 What about archive indexes ? 00472 00473 */ 00474 00475 #endif /* __A_OUT_64_H__ */
1.3.9.1