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