1: #ifndef _QEMU_ELF_H
2: #define _QEMU_ELF_H
3:
4: #include <inttypes.h>
5:
6:
7: typedef uint32_t Elf32_Addr;
8: typedef uint16_t Elf32_Half;
9: typedef uint32_t Elf32_Off;
10: typedef int32_t Elf32_Sword;
11: typedef uint32_t Elf32_Word;
12:
13:
14: typedef uint64_t Elf64_Addr;
15: typedef uint16_t Elf64_Half;
16: typedef int16_t Elf64_SHalf;
17: typedef uint64_t Elf64_Off;
18: typedef int32_t Elf64_Sword;
19: typedef uint32_t Elf64_Word;
20: typedef uint64_t Elf64_Xword;
21: typedef int64_t Elf64_Sxword;
22:
23:
24: #define PT_NULL 0
25: #define PT_LOAD 1
26: #define PT_DYNAMIC 2
27: #define PT_INTERP 3
28: #define PT_NOTE 4
29: #define PT_SHLIB 5
30: #define PT_PHDR 6
31: #define PT_LOPROC 0x70000000
32: #define PT_HIPROC 0x7fffffff
33: #define PT_MIPS_REGINFO 0x70000000
34: #define PT_MIPS_OPTIONS 0x70000001
35:
36:
37:
38: #define EF_MIPS_ARCH_1 0x00000000
39: #define EF_MIPS_ARCH_2 0x10000000
40: #define EF_MIPS_ARCH_3 0x20000000
41: #define EF_MIPS_ARCH_4 0x30000000
42: #define EF_MIPS_ARCH_5 0x40000000
43: #define EF_MIPS_ARCH_32 0x50000000
44: #define EF_MIPS_ARCH_64 0x60000000
45:
46:
47: #define EF_MIPS_ABI_O32 0x00001000
48: #define EF_MIPS_ABI_O64 0x00002000
49:
50: #define EF_MIPS_NOREORDER 0x00000001
51: #define EF_MIPS_PIC 0x00000002
52: #define EF_MIPS_CPIC 0x00000004
53: #define EF_MIPS_ABI2 0x00000020
54: #define EF_MIPS_OPTIONS_FIRST 0x00000080
55: #define EF_MIPS_32BITMODE 0x00000100
56: #define EF_MIPS_ABI 0x0000f000
57: #define EF_MIPS_ARCH 0xf0000000
58:
59:
60: #define ET_NONE 0
61: #define ET_REL 1
62: #define ET_EXEC 2
63: #define ET_DYN 3
64: #define ET_CORE 4
65: #define ET_LOPROC 0xff00
66: #define ET_HIPROC 0xffff
67:
68:
69: #define EM_NONE 0
70: #define EM_M32 1
71: #define EM_SPARC 2
72: #define EM_386 3
73: #define EM_68K 4
74: #define EM_88K 5
75: #define EM_486 6
76: #define EM_860 7
77:
78: #define EM_MIPS 8
79:
80: #define EM_MIPS_RS4_BE 10
81:
82: #define EM_PARISC 15
83:
84: #define EM_SPARC32PLUS 18
85:
86: #define EM_PPC 20
87: #define EM_PPC64 21
88:
89: #define EM_ARM 40
90:
91: #define EM_SH 42
92:
93: #define EM_SPARCV9 43
94:
95: #define EM_IA_64 50
96:
97: #define EM_X86_64 62
98:
99: #define EM_S390 22
100:
101: #define EM_CRIS 76
102:
103: #define EM_V850 87
104:
105: #define EM_H8_300H 47
106: #define EM_H8S 48
107:
108:
109:
110:
111:
112: #define EM_ALPHA 0x9026
113:
114:
115: #define EM_CYGNUS_V850 0x9080
116:
117:
118:
119:
120: #define EM_S390_OLD 0xA390
121:
122:
123: #define DT_NULL 0
124: #define DT_NEEDED 1
125: #define DT_PLTRELSZ 2
126: #define DT_PLTGOT 3
127: #define DT_HASH 4
128: #define DT_STRTAB 5
129: #define DT_SYMTAB 6
130: #define DT_RELA 7
131: #define DT_RELASZ 8
132: #define DT_RELAENT 9
133: #define DT_STRSZ 10
134: #define DT_SYMENT 11
135: #define DT_INIT 12
136: #define DT_FINI 13
137: #define DT_SONAME 14
138: #define DT_RPATH 15
139: #define DT_SYMBOLIC 16
140: #define DT_REL 17
141: #define DT_RELSZ 18
142: #define DT_RELENT 19
143: #define DT_PLTREL 20
144: #define DT_DEBUG 21
145: #define DT_TEXTREL 22
146: #define DT_JMPREL 23
147: #define DT_LOPROC 0x70000000
148: #define DT_HIPROC 0x7fffffff
149: #define DT_MIPS_RLD_VERSION 0x70000001
150: #define DT_MIPS_TIME_STAMP 0x70000002
151: #define DT_MIPS_ICHECKSUM 0x70000003
152: #define DT_MIPS_IVERSION 0x70000004
153: #define DT_MIPS_FLAGS 0x70000005
154: #define RHF_NONE 0
155: #define RHF_HARDWAY 1
156: #define RHF_NOTPOT 2
157: #define DT_MIPS_BASE_ADDRESS 0x70000006
158: #define DT_MIPS_CONFLICT 0x70000008
159: #define DT_MIPS_LIBLIST 0x70000009
160: #define DT_MIPS_LOCAL_GOTNO 0x7000000a
161: #define DT_MIPS_CONFLICTNO 0x7000000b
162: #define DT_MIPS_LIBLISTNO 0x70000010
163: #define DT_MIPS_SYMTABNO 0x70000011
164: #define DT_MIPS_UNREFEXTNO 0x70000012
165: #define DT_MIPS_GOTSYM 0x70000013
166: #define DT_MIPS_HIPAGENO 0x70000014
167: #define DT_MIPS_RLD_MAP 0x70000016
168:
169:
170: #define STB_LOCAL 0
171: #define STB_GLOBAL 1
172: #define STB_WEAK 2
173:
174: #define STT_NOTYPE 0
175: #define STT_OBJECT 1
176: #define STT_FUNC 2
177: #define STT_SECTION 3
178: #define STT_FILE 4
179:
180: #define ELF_ST_BIND(x) ((x) >> 4)
181: #define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf)
182: #define ELF32_ST_BIND(x) ELF_ST_BIND(x)
183: #define ELF32_ST_TYPE(x) ELF_ST_TYPE(x)
184: #define ELF64_ST_BIND(x) ELF_ST_BIND(x)
185: #define ELF64_ST_TYPE(x) ELF_ST_TYPE(x)
186:
187:
188:
189: #define AT_NULL 0
190: #define AT_IGNORE 1
191: #define AT_EXECFD 2
192: #define AT_PHDR 3
193: #define AT_PHENT 4
194: #define AT_PHNUM 5
195: #define AT_PAGESZ 6
196: #define AT_BASE 7
197: #define AT_FLAGS 8
198: #define AT_ENTRY 9
199: #define AT_NOTELF 10
200: #define AT_UID 11
201: #define AT_EUID 12
202: #define AT_GID 13
203: #define AT_EGID 14
204: #define AT_PLATFORM 15
205: #define AT_HWCAP 16
206: #define AT_CLKTCK 17
207:
208: typedef struct dynamic{
209: Elf32_Sword d_tag;
210: union{
211: Elf32_Sword d_val;
212: Elf32_Addr d_ptr;
213: } d_un;
214: } Elf32_Dyn;
215:
216: typedef struct {
217: Elf64_Sxword d_tag;
218: union {
219: Elf64_Xword d_val;
220: Elf64_Addr d_ptr;
221: } d_un;
222: } Elf64_Dyn;
223:
224:
225: #define ELF32_R_SYM(x) ((x) >> 8)
226: #define ELF32_R_TYPE(x) ((x) & 0xff)
227:
228: #define ELF64_R_SYM(i) ((i) >> 32)
229: #define ELF64_R_TYPE(i) ((i) & 0xffffffff)
230: #define ELF64_R_TYPE_DATA(i) (((ELF64_R_TYPE(i) >> 8) ^ 0x00800000) - 0x00800000)
231:
232: #define R_386_NONE 0
233: #define R_386_32 1
234: #define R_386_PC32 2
235: #define R_386_GOT32 3
236: #define R_386_PLT32 4
237: #define R_386_COPY 5
238: #define R_386_GLOB_DAT 6
239: #define R_386_JMP_SLOT 7
240: #define R_386_RELATIVE 8
241: #define R_386_GOTOFF 9
242: #define R_386_GOTPC 10
243: #define R_386_NUM 11
244:
245: #define R_MIPS_NONE 0
246: #define R_MIPS_16 1
247: #define R_MIPS_32 2
248: #define R_MIPS_REL32 3
249: #define R_MIPS_26 4
250: #define R_MIPS_HI16 5
251: #define R_MIPS_LO16 6
252: #define R_MIPS_GPREL16 7
253: #define R_MIPS_LITERAL 8
254: #define R_MIPS_GOT16 9
255: #define R_MIPS_PC16 10
256: #define R_MIPS_CALL16 11
257: #define R_MIPS_GPREL32 12
258:
259:
260: #define R_MIPS_UNUSED1 13
261: #define R_MIPS_UNUSED2 14
262: #define R_MIPS_UNUSED3 15
263: #define R_MIPS_SHIFT5 16
264: #define R_MIPS_SHIFT6 17
265: #define R_MIPS_64 18
266: #define R_MIPS_GOT_DISP 19
267: #define R_MIPS_GOT_PAGE 20
268: #define R_MIPS_GOT_OFST 21
269:
270:
271:
272:
273: #define R_MIPS_GOTHI16 22
274: #define R_MIPS_GOTLO16 23
275: #define R_MIPS_SUB 24
276: #define R_MIPS_INSERT_A 25
277: #define R_MIPS_INSERT_B 26
278: #define R_MIPS_DELETE 27
279: #define R_MIPS_HIGHER 28
280: #define R_MIPS_HIGHEST 29
281:
282:
283:
284:
285: #define R_MIPS_CALLHI16 30
286: #define R_MIPS_CALLLO16 31
287:
288:
289:
290: #define R_MIPS_LOVENDOR 100
291: #define R_MIPS_HIVENDOR 127
292:
293:
294:
295:
296:
297: #define R_SPARC_NONE 0
298: #define R_SPARC_8 1
299: #define R_SPARC_16 2
300: #define R_SPARC_32 3
301: #define R_SPARC_DISP8 4
302: #define R_SPARC_DISP16 5
303: #define R_SPARC_DISP32 6
304: #define R_SPARC_WDISP30 7
305: #define R_SPARC_WDISP22 8
306: #define R_SPARC_HI22 9
307: #define R_SPARC_22 10
308: #define R_SPARC_13 11
309: #define R_SPARC_LO10 12
310: #define R_SPARC_GOT10 13
311: #define R_SPARC_GOT13 14
312: #define R_SPARC_GOT22 15
313: #define R_SPARC_PC10 16
314: #define R_SPARC_PC22 17
315: #define R_SPARC_WPLT30 18
316: #define R_SPARC_COPY 19
317: #define R_SPARC_GLOB_DAT 20
318: #define R_SPARC_JMP_SLOT 21
319: #define R_SPARC_RELATIVE 22
320: #define R_SPARC_UA32 23
321: #define R_SPARC_PLT32 24
322: #define R_SPARC_HIPLT22 25
323: #define R_SPARC_LOPLT10 26
324: #define R_SPARC_PCPLT32 27
325: #define R_SPARC_PCPLT22 28
326: #define R_SPARC_PCPLT10 29
327: #define R_SPARC_10 30
328: #define R_SPARC_11 31
329: #define R_SPARC_64 32
330: #define R_SPARC_OLO10 33
331: #define R_SPARC_HH22 34
332: #define R_SPARC_HM10 35
333: #define R_SPARC_LM22 36
334: #define R_SPARC_WDISP16 40
335: #define R_SPARC_WDISP19 41
336: #define R_SPARC_7 43
337: #define R_SPARC_5 44
338: #define R_SPARC_6 45
339:
340:
341:
342: #define HWCAP_SPARC_FLUSH 1
343: #define HWCAP_SPARC_STBAR 2
344: #define HWCAP_SPARC_SWAP 4
345: #define HWCAP_SPARC_MULDIV 8
346: #define HWCAP_SPARC_V9 16
347: #define HWCAP_SPARC_ULTRA3 32
348:
349:
350:
351:
352: #define R_68K_NONE 0
353: #define R_68K_32 1
354: #define R_68K_16 2
355: #define R_68K_8 3
356: #define R_68K_PC32 4
357: #define R_68K_PC16 5
358: #define R_68K_PC8 6
359: #define R_68K_GOT32 7
360: #define R_68K_GOT16 8
361: #define R_68K_GOT8 9
362: #define R_68K_GOT32O 10
363: #define R_68K_GOT16O 11
364: #define R_68K_GOT8O 12
365: #define R_68K_PLT32 13
366: #define R_68K_PLT16 14
367: #define R_68K_PLT8 15
368: #define R_68K_PLT32O 16
369: #define R_68K_PLT16O 17
370: #define R_68K_PLT8O 18
371: #define R_68K_COPY 19
372: #define R_68K_GLOB_DAT 20
373: #define R_68K_JMP_SLOT 21
374: #define R_68K_RELATIVE 22
375:
376:
377:
378:
379: #define R_ALPHA_NONE 0
380: #define R_ALPHA_REFLONG 1
381: #define R_ALPHA_REFQUAD 2
382: #define R_ALPHA_GPREL32 3
383: #define R_ALPHA_LITERAL 4
384: #define R_ALPHA_LITUSE 5
385: #define R_ALPHA_GPDISP 6
386: #define R_ALPHA_BRADDR 7
387: #define R_ALPHA_HINT 8
388: #define R_ALPHA_SREL16 9
389: #define R_ALPHA_SREL32 10
390: #define R_ALPHA_SREL64 11
391: #define R_ALPHA_GPRELHIGH 17
392: #define R_ALPHA_GPRELLOW 18
393: #define R_ALPHA_GPREL16 19
394: #define R_ALPHA_COPY 24
395: #define R_ALPHA_GLOB_DAT 25
396: #define R_ALPHA_JMP_SLOT 26
397: #define R_ALPHA_RELATIVE 27
398: #define R_ALPHA_BRSGP 28
399: #define R_ALPHA_TLSGD 29
400: #define R_ALPHA_TLS_LDM 30
401: #define R_ALPHA_DTPMOD64 31
402: #define R_ALPHA_GOTDTPREL 32
403: #define R_ALPHA_DTPREL64 33
404: #define R_ALPHA_DTPRELHI 34
405: #define R_ALPHA_DTPRELLO 35
406: #define R_ALPHA_DTPREL16 36
407: #define R_ALPHA_GOTTPREL 37
408: #define R_ALPHA_TPREL64 38
409: #define R_ALPHA_TPRELHI 39
410: #define R_ALPHA_TPRELLO 40
411: #define R_ALPHA_TPREL16 41
412:
413: #define SHF_ALPHA_GPREL 0x10000000
414:
415:
416:
417: #define R_PPC_NONE 0
418: #define R_PPC_ADDR32 1
419: #define R_PPC_ADDR24 2
420: #define R_PPC_ADDR16 3
421: #define R_PPC_ADDR16_LO 4
422: #define R_PPC_ADDR16_HI 5
423: #define R_PPC_ADDR16_HA 6
424: #define R_PPC_ADDR14 7
425: #define R_PPC_ADDR14_BRTAKEN 8
426: #define R_PPC_ADDR14_BRNTAKEN 9
427: #define R_PPC_REL24 10
428: #define R_PPC_REL14 11
429: #define R_PPC_REL14_BRTAKEN 12
430: #define R_PPC_REL14_BRNTAKEN 13
431: #define R_PPC_GOT16 14
432: #define R_PPC_GOT16_LO 15
433: #define R_PPC_GOT16_HI 16
434: #define R_PPC_GOT16_HA 17
435: #define R_PPC_PLTREL24 18
436: #define R_PPC_COPY 19
437: #define R_PPC_GLOB_DAT 20
438: #define R_PPC_JMP_SLOT 21
439: #define R_PPC_RELATIVE 22
440: #define R_PPC_LOCAL24PC 23
441: #define R_PPC_UADDR32 24
442: #define R_PPC_UADDR16 25
443: #define R_PPC_REL32 26
444: #define R_PPC_PLT32 27
445: #define R_PPC_PLTREL32 28
446: #define R_PPC_PLT16_LO 29
447: #define R_PPC_PLT16_HI 30
448: #define R_PPC_PLT16_HA 31
449: #define R_PPC_SDAREL16 32
450: #define R_PPC_SECTOFF 33
451: #define R_PPC_SECTOFF_LO 34
452: #define R_PPC_SECTOFF_HI 35
453: #define R_PPC_SECTOFF_HA 36
454:
455: #define R_PPC_NUM 37
456:
457:
458:
459:
460: #define EF_ARM_RELEXEC 0x01
461: #define EF_ARM_HASENTRY 0x02
462: #define EF_ARM_INTERWORK 0x04
463: #define EF_ARM_APCS_26 0x08
464: #define EF_ARM_APCS_FLOAT 0x10
465: #define EF_ARM_PIC 0x20
466: #define EF_ALIGN8 0x40