1/*
2 * Copyright 2002-2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6// No header guard: The file is included twice by <Elf.h> and must not be
7// included elsewhere. The _ELFX_BITS macro must be define before inclusion.
8
9
10#undef ElfX
11
12#if _ELFX_BITS == 32
13#	define ElfX(x)	Elf32_##x
14#elif _ELFX_BITS == 64
15#	define ElfX(x)	Elf64_##x
16#endif
17
18
19// object file header
20typedef struct {
21	unsigned char	e_ident[EI_NIDENT];
22	ElfX(Half)		e_type;
23	ElfX(Half)		e_machine;
24	ElfX(Word)		e_version;
25	ElfX(Addr)		e_entry;
26	ElfX(Off)		e_phoff;
27	ElfX(Off)		e_shoff;
28	ElfX(Word)		e_flags;
29	ElfX(Half)		e_ehsize;
30	ElfX(Half)		e_phentsize;
31	ElfX(Half)		e_phnum;
32	ElfX(Half)		e_shentsize;
33	ElfX(Half)		e_shnum;
34	ElfX(Half)		e_shstrndx;
35} ElfX(Ehdr);
36
37// program header
38typedef struct {
39	ElfX(Word)	p_type;
40#if _ELFX_BITS == 64
41	ElfX(Word)	p_flags;
42#endif
43	ElfX(Off)	p_offset;
44	ElfX(Addr)	p_vaddr;
45	ElfX(Addr)	p_paddr;
46	ElfX(Xword)	p_filesz;
47	ElfX(Xword)	p_memsz;
48#if _ELFX_BITS == 32
49	ElfX(Word)	p_flags;
50#endif
51	ElfX(Xword)	p_align;
52} ElfX(Phdr);
53
54// section header
55typedef struct {
56	ElfX(Word)	sh_name;
57	ElfX(Word)	sh_type;
58	ElfX(Xword)	sh_flags;
59	ElfX(Addr)	sh_addr;
60	ElfX(Off)	sh_offset;
61	ElfX(Xword)	sh_size;
62	ElfX(Word)	sh_link;
63	ElfX(Word)	sh_info;
64	ElfX(Xword)	sh_addralign;
65	ElfX(Xword)	sh_entsize;
66} ElfX(Shdr);
67
68#undef ElfX
69