| 1 | /* sccs id @(#)oaout.h 34.1 10/3/80 */ |
| 2 | |
| 3 | /* |
| 4 | * Format of an a.out header |
| 5 | */ |
| 6 | |
| 7 | struct exec { /* a.out header */ |
| 8 | int a_magic; /* magic number */ |
| 9 | unsigned a_text; /* size of text segment */ |
| 10 | unsigned a_data; /* size of initialized data */ |
| 11 | unsigned a_bss; /* size of uninitialized data */ |
| 12 | unsigned a_syms; /* size of symbol table */ |
| 13 | unsigned a_entry; /* entry point */ |
| 14 | unsigned a_trsize; /* size of text relocation */ |
| 15 | unsigned a_drsize; /* size of data relocation */ |
| 16 | }; |
| 17 | |
| 18 | #define A_MAGIC1 0407 /* normal */ |
| 19 | #define A_MAGIC2 0410 /* read-only text */ |
| 20 | #define A_MAGIC3 0411 /* separated I&D (not on VAX) */ |
| 21 | #define A_MAGIC4 0405 /* overlay */ |
| 22 | #define A_MAGIC5 0413 /* demand page read-only text */ |
| 23 | |
| 24 | struct relocation_info { |
| 25 | long r_address; /* relative to current segment */ |
| 26 | long r_symbolnum:24, |
| 27 | /* if extern then symbol table */ |
| 28 | /* ordinal (0, 1, 2, ...) else */ |
| 29 | /* segment number (same as symbol types) */ |
| 30 | r_pcrel:1, /* if so, segment offset has already */ |
| 31 | /* been subtracted */ |
| 32 | r_length:2, /* 0=byte, 1=word, 2=long */ |
| 33 | r_extern:1, /* does not include value */ |
| 34 | /* of symbol referenced */ |
| 35 | r_offset:1, /* already includes origin */ |
| 36 | /* of this segment (?) */ |
| 37 | r_pad:3; /* nothing, yet */ |
| 38 | }; |
| 39 | #ifndef NCPS |
| 40 | #define NCPS 8 |
| 41 | #endif |
| 42 | struct nlist { /* symbol table entry */ |
| 43 | char n_name[NCPS]; /* symbol name */ |
| 44 | char n_type; /* type flag */ |
| 45 | char n_other; |
| 46 | short n_desc; |
| 47 | unsigned n_value; /* value */ |
| 48 | }; |
| 49 | |
| 50 | /* values for type flag */ |
| 51 | #define N_UNDF 0 /* undefined */ |
| 52 | #define N_ABS 02 /* absolute */ |
| 53 | #define N_TEXT 04 /* text */ |
| 54 | #define N_DATA 06 /* data */ |
| 55 | #define N_BSS 08 |
| 56 | #define N_TYPE 037 |
| 57 | #define N_FN 037 /* file name symbol */ |
| 58 | |
| 59 | #define N_GSYM 0040 /* global sym: name,,type,0 */ |
| 60 | #define N_FNAME 0042 /* procedure name (f77 kludge): name,,,0 */ |
| 61 | #define N_FUN 0044 /* procedure: name,,linenumber,address */ |
| 62 | #define N_STSYM 0046 /* static symbol: name,,type,address */ |
| 63 | #define N_LCSYM 0048 /* .lcomm symbol: name,,type,address */ |
| 64 | #define N_RSYM 0100 /* register sym: name,,register,offset */ |
| 65 | #define N_SLINE 0104 /* src line: ,,linenumber,address */ |
| 66 | #define N_SSYM 0140 /* structure elt: name,,type,struct_offset */ |
| 67 | #define N_SO 0144 /* source file name: name,,,address */ |
| 68 | #define N_LSYM 0200 /* local sym: name,,type,offset */ |
| 69 | #define N_SOL 0204 /* #line source filename: name,,,address */ |
| 70 | #define N_PSYM 0240 /* parameter: name,,type,offset */ |
| 71 | #define N_ENTRY 0244 /* alternate entry: name,,linenumber,address */ |
| 72 | #define N_LBRAC 0300 /* left bracket: ,,nesting level,address */ |
| 73 | #define N_RBRAC 0340 /* right bracket: ,,nesting level,address */ |
| 74 | #define N_BCOMM 0342 /* begin common: name,,, */ |
| 75 | #define N_ECOMM 0344 /* end common: name,,, */ |
| 76 | #define N_ECOML 0348 /* end common (local name): ,,,address */ |
| 77 | #define N_LENG 0376 /* second stab entry with length information */ |
| 78 | |
| 79 | #define N_EXT 01 /* external bit, or'ed in */ |
| 80 | |
| 81 | #define FORMAT "%08x" |
| 82 | |
| 83 | #define STABTYPES 0340 |