root / elf.h @ b03c60f3
History | View | Annotate | Download (10.7 kB)
1 | 31e31b8a | bellard | /*
|
---|---|---|---|
2 | 31e31b8a | bellard | * ELF register definitions..
|
3 | 31e31b8a | bellard | */
|
4 | 31e31b8a | bellard | |
5 | 31e31b8a | bellard | #include <inttypes.h> |
6 | 31e31b8a | bellard | |
7 | 31e31b8a | bellard | typedef uint32_t elf_greg_t;
|
8 | 31e31b8a | bellard | |
9 | 01ffc75b | bellard | #define ELF_NGREG (sizeof (struct target_pt_regs) / sizeof(elf_greg_t)) |
10 | 31e31b8a | bellard | typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
11 | 31e31b8a | bellard | |
12 | 31e31b8a | bellard | typedef struct user_i387_struct elf_fpregset_t; |
13 | 31e31b8a | bellard | |
14 | 31e31b8a | bellard | /*
|
15 | 31e31b8a | bellard | * This is used to ensure we don't load something for the wrong architecture.
|
16 | 31e31b8a | bellard | */
|
17 | 31e31b8a | bellard | #define elf_check_arch(x) ( ((x) == EM_386) || ((x) == EM_486) )
|
18 | 31e31b8a | bellard | |
19 | 31e31b8a | bellard | /*
|
20 | 31e31b8a | bellard | * These are used to set parameters in the core dumps.
|
21 | 31e31b8a | bellard | */
|
22 | 31e31b8a | bellard | #define ELF_CLASS ELFCLASS32
|
23 | 31e31b8a | bellard | #define ELF_DATA ELFDATA2LSB;
|
24 | 31e31b8a | bellard | #define ELF_ARCH EM_386
|
25 | 31e31b8a | bellard | |
26 | 31e31b8a | bellard | /* SVR4/i386 ABI (pages 3-31, 3-32) says that when the program
|
27 | 31e31b8a | bellard | starts %edx contains a pointer to a function which might be
|
28 | 31e31b8a | bellard | registered using `atexit'. This provides a mean for the
|
29 | 31e31b8a | bellard | dynamic linker to call DT_FINI functions for shared libraries
|
30 | 31e31b8a | bellard | that have been loaded before the code runs.
|
31 | 31e31b8a | bellard | |
32 | 31e31b8a | bellard | A value of 0 tells we have no such handler. */
|
33 | 31e31b8a | bellard | #define ELF_PLAT_INIT(_r) _r->edx = 0 |
34 | 31e31b8a | bellard | |
35 | 31e31b8a | bellard | #define USE_ELF_CORE_DUMP
|
36 | 31e31b8a | bellard | #define ELF_EXEC_PAGESIZE 4096 |
37 | 31e31b8a | bellard | |
38 | 31e31b8a | bellard | |
39 | 31e31b8a | bellard | typedef uint32_t Elf32_Addr;
|
40 | 31e31b8a | bellard | typedef uint16_t Elf32_Half;
|
41 | 31e31b8a | bellard | typedef uint32_t Elf32_Off;
|
42 | 31e31b8a | bellard | typedef int32_t Elf32_Sword;
|
43 | 31e31b8a | bellard | typedef uint32_t Elf32_Word;
|
44 | 31e31b8a | bellard | |
45 | 31e31b8a | bellard | /* These constants are for the segment types stored in the image headers */
|
46 | 31e31b8a | bellard | #define PT_NULL 0 |
47 | 31e31b8a | bellard | #define PT_LOAD 1 |
48 | 31e31b8a | bellard | #define PT_DYNAMIC 2 |
49 | 31e31b8a | bellard | #define PT_INTERP 3 |
50 | 31e31b8a | bellard | #define PT_NOTE 4 |
51 | 31e31b8a | bellard | #define PT_SHLIB 5 |
52 | 31e31b8a | bellard | #define PT_PHDR 6 |
53 | 31e31b8a | bellard | #define PT_LOPROC 0x70000000 |
54 | 31e31b8a | bellard | #define PT_HIPROC 0x7fffffff |
55 | 31e31b8a | bellard | |
56 | 31e31b8a | bellard | /* These constants define the different elf file types */
|
57 | 31e31b8a | bellard | #define ET_NONE 0 |
58 | 31e31b8a | bellard | #define ET_REL 1 |
59 | 31e31b8a | bellard | #define ET_EXEC 2 |
60 | 31e31b8a | bellard | #define ET_DYN 3 |
61 | 31e31b8a | bellard | #define ET_CORE 4 |
62 | 31e31b8a | bellard | #define ET_LOPROC 5 |
63 | 31e31b8a | bellard | #define ET_HIPROC 6 |
64 | 31e31b8a | bellard | |
65 | 31e31b8a | bellard | /* These constants define the various ELF target machines */
|
66 | 31e31b8a | bellard | #define EM_NONE 0 |
67 | 31e31b8a | bellard | #define EM_M32 1 |
68 | 31e31b8a | bellard | #define EM_SPARC 2 |
69 | 31e31b8a | bellard | #define EM_386 3 |
70 | 31e31b8a | bellard | #define EM_68K 4 |
71 | 31e31b8a | bellard | #define EM_88K 5 |
72 | 31e31b8a | bellard | #define EM_486 6 /* Perhaps disused */ |
73 | 31e31b8a | bellard | #define EM_860 7 |
74 | 31e31b8a | bellard | |
75 | 31e31b8a | bellard | #define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */ |
76 | 31e31b8a | bellard | |
77 | 31e31b8a | bellard | #define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */ |
78 | 31e31b8a | bellard | |
79 | 31e31b8a | bellard | #define EM_SPARC64 11 /* SPARC v9 (not official) 64-bit */ |
80 | 31e31b8a | bellard | |
81 | 31e31b8a | bellard | #define EM_PARISC 15 /* HPPA */ |
82 | 31e31b8a | bellard | |
83 | 31e31b8a | bellard | #define EM_SPARC32PLUS 18 /* Sun's "v8plus" */ |
84 | 31e31b8a | bellard | |
85 | 31e31b8a | bellard | #define EM_PPC 20 /* PowerPC */ |
86 | 31e31b8a | bellard | |
87 | 31e31b8a | bellard | /*
|
88 | 31e31b8a | bellard | * This is an interim value that we will use until the committee comes
|
89 | 31e31b8a | bellard | * up with a final number.
|
90 | 31e31b8a | bellard | */
|
91 | 31e31b8a | bellard | #define EM_ALPHA 0x9026 |
92 | 31e31b8a | bellard | |
93 | 31e31b8a | bellard | |
94 | 31e31b8a | bellard | /* This is the info that is needed to parse the dynamic section of the file */
|
95 | 31e31b8a | bellard | #define DT_NULL 0 |
96 | 31e31b8a | bellard | #define DT_NEEDED 1 |
97 | 31e31b8a | bellard | #define DT_PLTRELSZ 2 |
98 | 31e31b8a | bellard | #define DT_PLTGOT 3 |
99 | 31e31b8a | bellard | #define DT_HASH 4 |
100 | 31e31b8a | bellard | #define DT_STRTAB 5 |
101 | 31e31b8a | bellard | #define DT_SYMTAB 6 |
102 | 31e31b8a | bellard | #define DT_RELA 7 |
103 | 31e31b8a | bellard | #define DT_RELASZ 8 |
104 | 31e31b8a | bellard | #define DT_RELAENT 9 |
105 | 31e31b8a | bellard | #define DT_STRSZ 10 |
106 | 31e31b8a | bellard | #define DT_SYMENT 11 |
107 | 31e31b8a | bellard | #define DT_INIT 12 |
108 | 31e31b8a | bellard | #define DT_FINI 13 |
109 | 31e31b8a | bellard | #define DT_SONAME 14 |
110 | 31e31b8a | bellard | #define DT_RPATH 15 |
111 | 31e31b8a | bellard | #define DT_SYMBOLIC 16 |
112 | 31e31b8a | bellard | #define DT_REL 17 |
113 | 31e31b8a | bellard | #define DT_RELSZ 18 |
114 | 31e31b8a | bellard | #define DT_RELENT 19 |
115 | 31e31b8a | bellard | #define DT_PLTREL 20 |
116 | 31e31b8a | bellard | #define DT_DEBUG 21 |
117 | 31e31b8a | bellard | #define DT_TEXTREL 22 |
118 | 31e31b8a | bellard | #define DT_JMPREL 23 |
119 | 31e31b8a | bellard | #define DT_LOPROC 0x70000000 |
120 | 31e31b8a | bellard | #define DT_HIPROC 0x7fffffff |
121 | 31e31b8a | bellard | |
122 | 31e31b8a | bellard | /* This info is needed when parsing the symbol table */
|
123 | 31e31b8a | bellard | #define STB_LOCAL 0 |
124 | 31e31b8a | bellard | #define STB_GLOBAL 1 |
125 | 31e31b8a | bellard | #define STB_WEAK 2 |
126 | 31e31b8a | bellard | |
127 | 31e31b8a | bellard | #define STT_NOTYPE 0 |
128 | 31e31b8a | bellard | #define STT_OBJECT 1 |
129 | 31e31b8a | bellard | #define STT_FUNC 2 |
130 | 31e31b8a | bellard | #define STT_SECTION 3 |
131 | 31e31b8a | bellard | #define STT_FILE 4 |
132 | 31e31b8a | bellard | |
133 | 31e31b8a | bellard | #define ELF32_ST_BIND(x) ((x) >> 4) |
134 | 31e31b8a | bellard | #define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) |
135 | 31e31b8a | bellard | |
136 | 31e31b8a | bellard | /* Symbolic values for the entries in the auxiliary table
|
137 | 31e31b8a | bellard | put on the initial stack */
|
138 | 31e31b8a | bellard | #define AT_NULL 0 /* end of vector */ |
139 | 31e31b8a | bellard | #define AT_IGNORE 1 /* entry should be ignored */ |
140 | 31e31b8a | bellard | #define AT_EXECFD 2 /* file descriptor of program */ |
141 | 31e31b8a | bellard | #define AT_PHDR 3 /* program headers for program */ |
142 | 31e31b8a | bellard | #define AT_PHENT 4 /* size of program header entry */ |
143 | 31e31b8a | bellard | #define AT_PHNUM 5 /* number of program headers */ |
144 | 31e31b8a | bellard | #define AT_PAGESZ 6 /* system page size */ |
145 | 31e31b8a | bellard | #define AT_BASE 7 /* base address of interpreter */ |
146 | 31e31b8a | bellard | #define AT_FLAGS 8 /* flags */ |
147 | 31e31b8a | bellard | #define AT_ENTRY 9 /* entry point of program */ |
148 | 31e31b8a | bellard | #define AT_NOTELF 10 /* program is not ELF */ |
149 | 31e31b8a | bellard | #define AT_UID 11 /* real uid */ |
150 | 31e31b8a | bellard | #define AT_EUID 12 /* effective uid */ |
151 | 31e31b8a | bellard | #define AT_GID 13 /* real gid */ |
152 | 31e31b8a | bellard | #define AT_EGID 14 /* effective gid */ |
153 | 31e31b8a | bellard | |
154 | 31e31b8a | bellard | |
155 | 31e31b8a | bellard | typedef struct dynamic{ |
156 | 31e31b8a | bellard | Elf32_Sword d_tag; |
157 | 31e31b8a | bellard | union{
|
158 | 31e31b8a | bellard | Elf32_Sword d_val; |
159 | 31e31b8a | bellard | Elf32_Addr d_ptr; |
160 | 31e31b8a | bellard | } d_un; |
161 | 31e31b8a | bellard | } Elf32_Dyn; |
162 | 31e31b8a | bellard | |
163 | 31e31b8a | bellard | typedef struct { |
164 | 31e31b8a | bellard | unsigned long long d_tag; /* entry tag value */ |
165 | 31e31b8a | bellard | union {
|
166 | 31e31b8a | bellard | unsigned long long d_val; |
167 | 31e31b8a | bellard | unsigned long long d_ptr; |
168 | 31e31b8a | bellard | } d_un; |
169 | 31e31b8a | bellard | } Elf64_Dyn; |
170 | 31e31b8a | bellard | |
171 | 31e31b8a | bellard | /* The following are used with relocations */
|
172 | 31e31b8a | bellard | #define ELF32_R_SYM(x) ((x) >> 8) |
173 | 31e31b8a | bellard | #define ELF32_R_TYPE(x) ((x) & 0xff) |
174 | 31e31b8a | bellard | |
175 | 31e31b8a | bellard | #define R_386_NONE 0 |
176 | 31e31b8a | bellard | #define R_386_32 1 |
177 | 31e31b8a | bellard | #define R_386_PC32 2 |
178 | 31e31b8a | bellard | #define R_386_GOT32 3 |
179 | 31e31b8a | bellard | #define R_386_PLT32 4 |
180 | 31e31b8a | bellard | #define R_386_COPY 5 |
181 | 31e31b8a | bellard | #define R_386_GLOB_DAT 6 |
182 | 31e31b8a | bellard | #define R_386_JMP_SLOT 7 |
183 | 31e31b8a | bellard | #define R_386_RELATIVE 8 |
184 | 31e31b8a | bellard | #define R_386_GOTOFF 9 |
185 | 31e31b8a | bellard | #define R_386_GOTPC 10 |
186 | 31e31b8a | bellard | #define R_386_NUM 11 |
187 | 31e31b8a | bellard | |
188 | 31e31b8a | bellard | typedef struct elf32_rel { |
189 | 31e31b8a | bellard | Elf32_Addr r_offset; |
190 | 31e31b8a | bellard | Elf32_Word r_info; |
191 | 31e31b8a | bellard | } Elf32_Rel; |
192 | 31e31b8a | bellard | |
193 | 31e31b8a | bellard | typedef struct elf64_rel { |
194 | 31e31b8a | bellard | unsigned long long r_offset; /* Location at which to apply the action */ |
195 | 31e31b8a | bellard | unsigned long long r_info; /* index and type of relocation */ |
196 | 31e31b8a | bellard | } Elf64_Rel; |
197 | 31e31b8a | bellard | |
198 | 31e31b8a | bellard | typedef struct elf32_rela{ |
199 | 31e31b8a | bellard | Elf32_Addr r_offset; |
200 | 31e31b8a | bellard | Elf32_Word r_info; |
201 | 31e31b8a | bellard | Elf32_Sword r_addend; |
202 | 31e31b8a | bellard | } Elf32_Rela; |
203 | 31e31b8a | bellard | |
204 | 31e31b8a | bellard | typedef struct elf64_rela { |
205 | 31e31b8a | bellard | unsigned long long r_offset; /* Location at which to apply the action */ |
206 | 31e31b8a | bellard | unsigned long long r_info; /* index and type of relocation */ |
207 | 31e31b8a | bellard | unsigned long long r_addend; /* Constant addend used to compute value */ |
208 | 31e31b8a | bellard | } Elf64_Rela; |
209 | 31e31b8a | bellard | |
210 | 31e31b8a | bellard | typedef struct elf32_sym{ |
211 | 31e31b8a | bellard | Elf32_Word st_name; |
212 | 31e31b8a | bellard | Elf32_Addr st_value; |
213 | 31e31b8a | bellard | Elf32_Word st_size; |
214 | 31e31b8a | bellard | unsigned char st_info; |
215 | 31e31b8a | bellard | unsigned char st_other; |
216 | 31e31b8a | bellard | Elf32_Half st_shndx; |
217 | 31e31b8a | bellard | } Elf32_Sym; |
218 | 31e31b8a | bellard | |
219 | 31e31b8a | bellard | typedef struct elf64_sym { |
220 | 31e31b8a | bellard | unsigned int st_name; /* Symbol name, index in string tbl */ |
221 | 31e31b8a | bellard | unsigned char st_info; /* Type and binding attributes */ |
222 | 31e31b8a | bellard | unsigned char st_other; /* No defined meaning, 0 */ |
223 | 31e31b8a | bellard | unsigned short st_shndx; /* Associated section index */ |
224 | 31e31b8a | bellard | unsigned long long st_value; /* Value of the symbol */ |
225 | 31e31b8a | bellard | unsigned long long st_size; /* Associated symbol size */ |
226 | 31e31b8a | bellard | } Elf64_Sym; |
227 | 31e31b8a | bellard | |
228 | 31e31b8a | bellard | |
229 | 31e31b8a | bellard | #define EI_NIDENT 16 |
230 | 31e31b8a | bellard | |
231 | 31e31b8a | bellard | typedef struct elf32_hdr{ |
232 | 31e31b8a | bellard | unsigned char e_ident[EI_NIDENT]; |
233 | 31e31b8a | bellard | Elf32_Half e_type; |
234 | 31e31b8a | bellard | Elf32_Half e_machine; |
235 | 31e31b8a | bellard | Elf32_Word e_version; |
236 | 31e31b8a | bellard | Elf32_Addr e_entry; /* Entry point */
|
237 | 31e31b8a | bellard | Elf32_Off e_phoff; |
238 | 31e31b8a | bellard | Elf32_Off e_shoff; |
239 | 31e31b8a | bellard | Elf32_Word e_flags; |
240 | 31e31b8a | bellard | Elf32_Half e_ehsize; |
241 | 31e31b8a | bellard | Elf32_Half e_phentsize; |
242 | 31e31b8a | bellard | Elf32_Half e_phnum; |
243 | 31e31b8a | bellard | Elf32_Half e_shentsize; |
244 | 31e31b8a | bellard | Elf32_Half e_shnum; |
245 | 31e31b8a | bellard | Elf32_Half e_shstrndx; |
246 | 31e31b8a | bellard | } Elf32_Ehdr; |
247 | 31e31b8a | bellard | |
248 | 31e31b8a | bellard | typedef struct elf64_hdr { |
249 | 31e31b8a | bellard | unsigned char e_ident[16]; /* ELF "magic number" */ |
250 | 31e31b8a | bellard | short int e_type; |
251 | 31e31b8a | bellard | short unsigned int e_machine; |
252 | 31e31b8a | bellard | int e_version;
|
253 | 31e31b8a | bellard | unsigned long long e_entry; /* Entry point virtual address */ |
254 | 31e31b8a | bellard | unsigned long long e_phoff; /* Program header table file offset */ |
255 | 31e31b8a | bellard | unsigned long long e_shoff; /* Section header table file offset */ |
256 | 31e31b8a | bellard | int e_flags;
|
257 | 31e31b8a | bellard | short int e_ehsize; |
258 | 31e31b8a | bellard | short int e_phentsize; |
259 | 31e31b8a | bellard | short int e_phnum; |
260 | 31e31b8a | bellard | short int e_shentsize; |
261 | 31e31b8a | bellard | short int e_shnum; |
262 | 31e31b8a | bellard | short int e_shstrndx; |
263 | 31e31b8a | bellard | } Elf64_Ehdr; |
264 | 31e31b8a | bellard | |
265 | 31e31b8a | bellard | /* These constants define the permissions on sections in the program
|
266 | 31e31b8a | bellard | header, p_flags. */
|
267 | 31e31b8a | bellard | #define PF_R 0x4 |
268 | 31e31b8a | bellard | #define PF_W 0x2 |
269 | 31e31b8a | bellard | #define PF_X 0x1 |
270 | 31e31b8a | bellard | |
271 | 31e31b8a | bellard | typedef struct elf32_phdr{ |
272 | 31e31b8a | bellard | Elf32_Word p_type; |
273 | 31e31b8a | bellard | Elf32_Off p_offset; |
274 | 31e31b8a | bellard | Elf32_Addr p_vaddr; |
275 | 31e31b8a | bellard | Elf32_Addr p_paddr; |
276 | 31e31b8a | bellard | Elf32_Word p_filesz; |
277 | 31e31b8a | bellard | Elf32_Word p_memsz; |
278 | 31e31b8a | bellard | Elf32_Word p_flags; |
279 | 31e31b8a | bellard | Elf32_Word p_align; |
280 | 31e31b8a | bellard | } Elf32_Phdr; |
281 | 31e31b8a | bellard | |
282 | 31e31b8a | bellard | typedef struct elf64_phdr { |
283 | 31e31b8a | bellard | int p_type;
|
284 | 31e31b8a | bellard | int p_flags;
|
285 | 31e31b8a | bellard | unsigned long long p_offset; /* Segment file offset */ |
286 | 31e31b8a | bellard | unsigned long long p_vaddr; /* Segment virtual address */ |
287 | 31e31b8a | bellard | unsigned long long p_paddr; /* Segment physical address */ |
288 | 31e31b8a | bellard | unsigned long long p_filesz; /* Segment size in file */ |
289 | 31e31b8a | bellard | unsigned long long p_memsz; /* Segment size in memory */ |
290 | 31e31b8a | bellard | unsigned long long p_align; /* Segment alignment, file & memory */ |
291 | 31e31b8a | bellard | } Elf64_Phdr; |
292 | 31e31b8a | bellard | |
293 | 31e31b8a | bellard | /* sh_type */
|
294 | 31e31b8a | bellard | #define SHT_NULL 0 |
295 | 31e31b8a | bellard | #define SHT_PROGBITS 1 |
296 | 31e31b8a | bellard | #define SHT_SYMTAB 2 |
297 | 31e31b8a | bellard | #define SHT_STRTAB 3 |
298 | 31e31b8a | bellard | #define SHT_RELA 4 |
299 | 31e31b8a | bellard | #define SHT_HASH 5 |
300 | 31e31b8a | bellard | #define SHT_DYNAMIC 6 |
301 | 31e31b8a | bellard | #define SHT_NOTE 7 |
302 | 31e31b8a | bellard | #define SHT_NOBITS 8 |
303 | 31e31b8a | bellard | #define SHT_REL 9 |
304 | 31e31b8a | bellard | #define SHT_SHLIB 10 |
305 | 31e31b8a | bellard | #define SHT_DYNSYM 11 |
306 | 31e31b8a | bellard | #define SHT_NUM 12 |
307 | 31e31b8a | bellard | #define SHT_LOPROC 0x70000000 |
308 | 31e31b8a | bellard | #define SHT_HIPROC 0x7fffffff |
309 | 31e31b8a | bellard | #define SHT_LOUSER 0x80000000 |
310 | 31e31b8a | bellard | #define SHT_HIUSER 0xffffffff |
311 | 31e31b8a | bellard | |
312 | 31e31b8a | bellard | /* sh_flags */
|
313 | 31e31b8a | bellard | #define SHF_WRITE 0x1 |
314 | 31e31b8a | bellard | #define SHF_ALLOC 0x2 |
315 | 31e31b8a | bellard | #define SHF_EXECINSTR 0x4 |
316 | 31e31b8a | bellard | #define SHF_MASKPROC 0xf0000000 |
317 | 31e31b8a | bellard | |
318 | 31e31b8a | bellard | /* special section indexes */
|
319 | 31e31b8a | bellard | #define SHN_UNDEF 0 |
320 | 31e31b8a | bellard | #define SHN_LORESERVE 0xff00 |
321 | 31e31b8a | bellard | #define SHN_LOPROC 0xff00 |
322 | 31e31b8a | bellard | #define SHN_HIPROC 0xff1f |
323 | 31e31b8a | bellard | #define SHN_ABS 0xfff1 |
324 | 31e31b8a | bellard | #define SHN_COMMON 0xfff2 |
325 | 31e31b8a | bellard | #define SHN_HIRESERVE 0xffff |
326 | 31e31b8a | bellard | |
327 | 31e31b8a | bellard | typedef struct { |
328 | 31e31b8a | bellard | Elf32_Word sh_name; |
329 | 31e31b8a | bellard | Elf32_Word sh_type; |
330 | 31e31b8a | bellard | Elf32_Word sh_flags; |
331 | 31e31b8a | bellard | Elf32_Addr sh_addr; |
332 | 31e31b8a | bellard | Elf32_Off sh_offset; |
333 | 31e31b8a | bellard | Elf32_Word sh_size; |
334 | 31e31b8a | bellard | Elf32_Word sh_link; |
335 | 31e31b8a | bellard | Elf32_Word sh_info; |
336 | 31e31b8a | bellard | Elf32_Word sh_addralign; |
337 | 31e31b8a | bellard | Elf32_Word sh_entsize; |
338 | 31e31b8a | bellard | } Elf32_Shdr; |
339 | 31e31b8a | bellard | |
340 | 31e31b8a | bellard | typedef struct elf64_shdr { |
341 | 31e31b8a | bellard | unsigned int sh_name; /* Section name, index in string tbl */ |
342 | 31e31b8a | bellard | unsigned int sh_type; /* Type of section */ |
343 | 31e31b8a | bellard | unsigned long long sh_flags; /* Miscellaneous section attributes */ |
344 | 31e31b8a | bellard | unsigned long long sh_addr; /* Section virtual addr at execution */ |
345 | 31e31b8a | bellard | unsigned long long sh_offset; /* Section file offset */ |
346 | 31e31b8a | bellard | unsigned long long sh_size; /* Size of section in bytes */ |
347 | 31e31b8a | bellard | unsigned int sh_link; /* Index of another section */ |
348 | 31e31b8a | bellard | unsigned int sh_info; /* Additional section information */ |
349 | 31e31b8a | bellard | unsigned long long sh_addralign; /* Section alignment */ |
350 | 31e31b8a | bellard | unsigned long long sh_entsize; /* Entry size if section holds table */ |
351 | 31e31b8a | bellard | } Elf64_Shdr; |
352 | 31e31b8a | bellard | |
353 | 31e31b8a | bellard | #define EI_MAG0 0 /* e_ident[] indexes */ |
354 | 31e31b8a | bellard | #define EI_MAG1 1 |
355 | 31e31b8a | bellard | #define EI_MAG2 2 |
356 | 31e31b8a | bellard | #define EI_MAG3 3 |
357 | 31e31b8a | bellard | #define EI_CLASS 4 |
358 | 31e31b8a | bellard | #define EI_DATA 5 |
359 | 31e31b8a | bellard | #define EI_VERSION 6 |
360 | 31e31b8a | bellard | #define EI_PAD 7 |
361 | 31e31b8a | bellard | |
362 | 31e31b8a | bellard | #define ELFMAG0 0x7f /* EI_MAG */ |
363 | 31e31b8a | bellard | #define ELFMAG1 'E' |
364 | 31e31b8a | bellard | #define ELFMAG2 'L' |
365 | 31e31b8a | bellard | #define ELFMAG3 'F' |
366 | 31e31b8a | bellard | #define ELFMAG "\177ELF" |
367 | 31e31b8a | bellard | #define SELFMAG 4 |
368 | 31e31b8a | bellard | |
369 | 31e31b8a | bellard | #define ELFCLASSNONE 0 /* EI_CLASS */ |
370 | 31e31b8a | bellard | #define ELFCLASS32 1 |
371 | 31e31b8a | bellard | #define ELFCLASS64 2 |
372 | 31e31b8a | bellard | #define ELFCLASSNUM 3 |
373 | 31e31b8a | bellard | |
374 | 31e31b8a | bellard | #define ELFDATANONE 0 /* e_ident[EI_DATA] */ |
375 | 31e31b8a | bellard | #define ELFDATA2LSB 1 |
376 | 31e31b8a | bellard | #define ELFDATA2MSB 2 |
377 | 31e31b8a | bellard | |
378 | 31e31b8a | bellard | #define EV_NONE 0 /* e_version, EI_VERSION */ |
379 | 31e31b8a | bellard | #define EV_CURRENT 1 |
380 | 31e31b8a | bellard | #define EV_NUM 2 |
381 | 31e31b8a | bellard | |
382 | 31e31b8a | bellard | /* Notes used in ET_CORE */
|
383 | 31e31b8a | bellard | #define NT_PRSTATUS 1 |
384 | 31e31b8a | bellard | #define NT_PRFPREG 2 |
385 | 31e31b8a | bellard | #define NT_PRPSINFO 3 |
386 | 31e31b8a | bellard | #define NT_TASKSTRUCT 4 |
387 | 31e31b8a | bellard | |
388 | 31e31b8a | bellard | /* Note header in a PT_NOTE section */
|
389 | 31e31b8a | bellard | typedef struct elf32_note { |
390 | 31e31b8a | bellard | Elf32_Word n_namesz; /* Name size */
|
391 | 31e31b8a | bellard | Elf32_Word n_descsz; /* Content size */
|
392 | 31e31b8a | bellard | Elf32_Word n_type; /* Content type */
|
393 | 31e31b8a | bellard | } Elf32_Nhdr; |
394 | 31e31b8a | bellard | |
395 | 31e31b8a | bellard | /* Note header in a PT_NOTE section */
|
396 | 31e31b8a | bellard | /*
|
397 | 31e31b8a | bellard | * For now we use the 32 bit version of the structure until we figure
|
398 | 31e31b8a | bellard | * out whether we need anything better. Note - on the Alpha, "unsigned int"
|
399 | 31e31b8a | bellard | * is only 32 bits.
|
400 | 31e31b8a | bellard | */
|
401 | 31e31b8a | bellard | typedef struct elf64_note { |
402 | 31e31b8a | bellard | unsigned int n_namesz; /* Name size */ |
403 | 31e31b8a | bellard | unsigned int n_descsz; /* Content size */ |
404 | 31e31b8a | bellard | unsigned int n_type; /* Content type */ |
405 | 31e31b8a | bellard | } Elf64_Nhdr; |
406 | 31e31b8a | bellard | |
407 | 31e31b8a | bellard | #define ELF_START_MMAP 0x80000000 |
408 | 31e31b8a | bellard | |
409 | 31e31b8a | bellard | #if ELF_CLASS == ELFCLASS32
|
410 | 31e31b8a | bellard | |
411 | 31e31b8a | bellard | extern Elf32_Dyn _DYNAMIC [];
|
412 | 31e31b8a | bellard | #define elfhdr elf32_hdr
|
413 | 31e31b8a | bellard | #define elf_phdr elf32_phdr
|
414 | 31e31b8a | bellard | #define elf_note elf32_note
|
415 | 31e31b8a | bellard | |
416 | 31e31b8a | bellard | #else
|
417 | 31e31b8a | bellard | |
418 | 31e31b8a | bellard | extern Elf64_Dyn _DYNAMIC [];
|
419 | 31e31b8a | bellard | #define elfhdr elf64_hdr
|
420 | 31e31b8a | bellard | #define elf_phdr elf64_phdr
|
421 | 31e31b8a | bellard | #define elf_note elf64_note
|
422 | 31e31b8a | bellard | |
423 | 31e31b8a | bellard | #endif
|
424 | 31e31b8a | bellard |