-
Notifications
You must be signed in to change notification settings - Fork 10
/
output_aout.h
136 lines (116 loc) · 3.79 KB
/
output_aout.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* output_aout.h header file for a.out objects */
/* (c) in 2008 by Frank Wille */
#include "stabs.h"
/* a.out header */
struct aout_hdr {
uint8_t a_midmag[4];
uint8_t a_text[4];
uint8_t a_data[4];
uint8_t a_bss[4];
uint8_t a_syms[4];
uint8_t a_entry[4];
uint8_t a_trsize[4];
uint8_t a_drsize[4];
};
/* a_magic */
#define OMAGIC 0407 /* old impure format */
#define NMAGIC 0410 /* read-only text */
#define ZMAGIC 0413 /* demand load format */
#define QMAGIC 0314 /* not supported */
/* a_mid - machine id */
#define MID_SUN010 1 /* sun 68010/68020 binary */
#define MID_SUN020 2 /* sun 68020-only binary */
#define MID_PC386 100 /* 386 PC binary. (so quoth BFD) */
#define MID_HP200 200 /* hp200 (68010) BSD binary */
#define MID_I386 134 /* i386 BSD binary */
#define MID_M68K 135 /* m68k BSD binary with 8K page sizes */
#define MID_M68K4K 136 /* m68k BSD binary with 4K page sizes */
#define MID_NS32532 137 /* ns32532 */
#define MID_SPARC 138 /* sparc */
#define MID_PMAX 139 /* pmax */
#define MID_VAX1K 140 /* vax 1K page size binaries */
#define MID_ALPHA 141 /* Alpha BSD binary */
#define MID_MIPS 142 /* big-endian MIPS */
#define MID_ARM6 143 /* ARM6 */
#define MID_SH3 145 /* SH3 */
#define MID_POWERPC 149 /* big-endian PowerPC */
#define MID_VAX 150 /* vax */
#define MID_SPARC64 151 /* LP64 sparc */
#define MID_HP300 300 /* hp300 (68020+68881) BSD binary */
#define MID_HPUX 0x20C /* hp200/300 HP-UX binary */
#define MID_HPUX800 0x20B /* hp800 HP-UX binary */
/* a_flags */
#define EX_DYNAMIC 0x20
#define EX_PIC 0x10
#define EX_DPMASK 0x30
/* a_midmag macros */
#define SETMIDMAG(a,mag,mid,flag) setval(1,(a)->a_midmag,4, \
((flag)&0x3f)<<26|((mid)&0x3ff)<<16|((mag)&0xffff))
/* Relocation info structures */
struct relocation_info {
uint8_t r_address[4];
uint8_t r_info[4];
};
#define RELB_symbolnum 0 /* ordinal number of add symbol */
#define RELS_symbolnum 24
#define RELB_reloc 24 /* the whole reloc field */
#define RELS_reloc 8
/* standard relocs: M68k, x86, ... */
#define RSTDB_pcrel 24 /* 1 if value should be pc-relative */
#define RSTDS_pcrel 1
#define RSTDB_length 25 /* log base 2 of value's width */
#define RSTDS_length 2
#define RSTDB_extern 27 /* 1 if need to add symbol to value */
#define RSTDS_extern 1
#define RSTDB_baserel 28 /* linkage table relative */
#define RSTDS_baserel 1
#define RSTDB_jmptable 29 /* relocate to jump table */
#define RSTDS_jmptable 1
#define RSTDB_relative 30 /* load address relative */
#define RSTDS_relative 1
#define RSTDB_copy 31 /* run time copy */
#define RSTDS_copy 1
/* vasm specific - used to generate a.out files */
#define STRHTABSIZE 0x10000
#define SYMHTABSIZE 0x10000
#define _TEXT 0
#define _DATA 1
#define _BSS 2
struct StrTabNode {
struct node n;
struct StrTabNode *hashchain;
char *str;
uint32_t offset;
};
struct StrTabList {
struct list l;
struct StrTabNode **hashtab;
uint32_t nextoffset;
};
struct SymbolNode {
struct node n;
struct SymbolNode *hashchain;
char *name;
struct nlist32 s;
uint32_t index;
};
struct SymTabList {
struct list l;
struct SymbolNode **hashtab;
uint32_t nextindex;
};
struct RelocNode {
struct node n;
struct relocation_info r;
};
#if defined(VASM_CPU_M68K)
/* MID defined in cpus/m68k/cpu.h */
#elif defined(VASM_CPU_PPC)
#define MID MID_POWERPC
#elif defined(VASM_CPU_ARM)
#define MID MID_ARM6
#elif defined(VASM_CPU_X86)
#define MID MID_PC386
#elif defined(VASM_CPU_JAGRISC)
#define MID (0)
#endif