AquilaOS documentation
How it works, and its code
Loading...
Searching...
No Matches
elf.h
Go to the documentation of this file.
1#ifndef _ELF_H
2#define _ELF_H
3
4#include <stdint.h>
5
6/*
7 * The ELF format's structures and constants, as the ELF specification
8 * names them: the kernel loads ELF programs (sys/binfmt/elf.c), and reads
9 * its own symbols from its ELF file's sections.
10 */
11
17
23
24#define ET_NONE 0x0000
25#define ET_REL 0x0001
26#define ET_EXEC 0x0002
27#define ET_DYN 0x0003
28#define ET_CORE 0x0004
29#define ET_LOPROC 0xff00
30#define ET_HIPROC 0xffff
31
32#define EM_NONE 0x0000
33#define EM_M32 0x0001
34#define EM_SPARC 0x0002
35#define EM_386 0x0003
36#define EM_68K 0x0004
37#define EM_88K 0x0005
38#define EM_860 0x0007
39#define EM_MIPS 0x0008
40#define EM_X86_64 0x003E
41#define EM_AARCH64 0x00B7
42
43#define EV_NONE 0x0000
44#define EV_CURRENT 0x0001
45
46#define EI_MAG0 0
47#define EI_MAG1 1
48#define EI_MAG2 2
49#define EI_MAG3 3
50#define EI_CLASS 4
51#define EI_DATA 5
52#define EI_VERSION 6
53#define EI_PAD 7
54#define EI_NIDENT 16
55
56#define ELFMAG0 0x7f
57#define ELFMAG1 'E'
58#define ELFMAG2 'L'
59#define ELFMAG3 'F'
60
61#define ELFCLASSNONE 0
62#define ELFCLASS32 1
63#define ELFCLASS64 2
64
65#define SHN_UNDEF 0x0000
66#define SHN_LORESERVE 0xff00
67#define SHN_LOPROC 0xff00
68#define SHN_HIPROC 0xff1f
69#define SHN_ABS 0xfff1
70#define SHN_COMMON 0xfff2
71#define SHN_HIRESERVE 0xffff
72
73#define SHT_NULL 0
74#define SHT_PROGBITS 1
75#define SHT_SYMTAB 2
76#define SHT_STRTAB 3
77#define SHT_RELA 4
78#define SHT_HASH 5
79#define SHT_DYNAMIC 6
80#define SHT_NOTE 7
81#define SHT_NOBITS 8
82#define SHT_REL 9
83#define SHT_SHLIB 10
84#define SHT_DYNSYM 11
85#define SHT_LOPROC 0x70000000
86#define SHT_HIPROC 0x7fffffff
87#define SHT_LOUSER 0x80000000
88#define SHT_HIUSER 0xffffffff
89
90#define DT_NULL 0
91#define DT_NEEDED 1
92#define DT_PLTRELSZ 2
93#define DT_PLTGOT 3
94#define DT_HASH 4
95#define DT_STRTAB 5
96#define DT_SYMTAB 6
97#define DT_RELA 7
98#define DT_RELASZ 8
99#define DT_RELAENT 9
100#define DT_STRSZ 10
101#define DT_SYMENT 11
102#define DT_INIT 12
103#define DT_FINI 13
104#define DT_SONAME 14
105#define DT_RPATH 15
106#define DT_SYMBOLIC 16
107#define DT_REL 17
108#define DT_RELSZ 18
109#define DT_RELENT 19
110#define DT_PLTREL 20
111#define DT_DEBUG 21
112#define DT_TEXTREL 22
113#define DT_JMPREL 23
114#define DT_LOPROC 0x70000000
115#define DT_HIPROC 0x7fffffff
116
117#define PT_NULL 0
118#define PT_LOAD 1
119#define PT_DYNAMIC 2
120#define PT_INTERP 3
121#define PT_NOTE 4
122#define PT_SHLIB 5
123#define PT_PHDR 6
124#define PT_LOPROC 0x70000000
125#define PT_HIPROC 0x7fffffff
126
127#define PF_X 0x1
128#define PF_W 0x2
129#define PF_R 0x4
130#define PF_MASKPROC 0xf0000000
131
132#define ELF32_ST_BIND(i) ((i) >> 4)
133#define ELF32_ST_TYPE(i) ((i) & 0xf)
134#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf))
135
136#define STB_LOCAL 0
137#define STB_GLOBAL 1
138#define STB_WEAK 2
139#define STB_LOPROC 13
140#define STB_HIPROC 15
141
142#define STT_NOTYPE 0
143#define STT_OBJECT 1
144#define STT_FUNC 2
145#define STT_SECTION 3
146#define STT_FILE 4
147#define STT_LOPROC 13
148#define STT_HIPROC 15
149
167
181
191
205
215
216/* The kernel's own section header and symbol types: its ELF class is
217 * the word size. A Multiboot loader passes the kernel file's own section
218 * headers and symbols. */
219#if __SIZEOF_POINTER__ == 8
220typedef struct elf64_shdr elf_shdr_t;
221typedef struct elf64_sym elf_sym_t;
222#else
223typedef struct elf32_shdr elf_shdr_t;
224typedef struct elf32_sym elf_sym_t;
225#endif
226
238
247
265
277
278#endif /* ! _ELF_H */
int32_t elf32_sword
Definition elf.h:12
uint16_t elf32_half
Definition elf.h:16
uint16_t elf64_half
Definition elf.h:22
uint64_t elf64_addr
Definition elf.h:18
uint32_t elf32_addr
Definition elf.h:14
uint64_t elf64_xword
Definition elf.h:20
struct elf32_sym elf_sym_t
Definition elf.h:224
uint64_t elf64_off
Definition elf.h:19
struct elf32_shdr elf_shdr_t
Definition elf.h:223
uint32_t elf64_word
Definition elf.h:21
uint32_t elf32_off
Definition elf.h:15
uint32_t elf32_word
Definition elf.h:13
#define EI_NIDENT
Definition elf.h:54
unsigned int uint32_t
Definition stddef.h:22
signed int int32_t
Definition stddef.h:18
unsigned char uint8_t
Definition stddef.h:20
unsigned long long int uint64_t
Definition stddef.h:23
unsigned short int uint16_t
Definition stddef.h:21
An ELF32 dynamic section's entry.
Definition elf.h:240
elf32_sword d_tag
Definition elf.h:241
union elf32_dyn::@210366253301142347214236302261203016225264370231 d_un
An ELF32 file's header.
Definition elf.h:151
elf32_addr e_entry
Definition elf.h:156
elf32_half e_shentsize
Definition elf.h:163
elf32_word e_version
Definition elf.h:155
elf32_word e_flags
Definition elf.h:159
uint8_t e_ident[EI_NIDENT]
Definition elf.h:152
elf32_half e_shstrndx
Definition elf.h:165
elf32_half e_ehsize
Definition elf.h:160
elf32_off e_phoff
Definition elf.h:157
elf32_half e_machine
Definition elf.h:154
elf32_off e_shoff
Definition elf.h:158
elf32_half e_phnum
Definition elf.h:162
elf32_half e_phentsize
Definition elf.h:161
elf32_half e_shnum
Definition elf.h:164
elf32_half e_type
Definition elf.h:153
An ELF32 program header: a segment to load.
Definition elf.h:228
elf32_word p_flags
Definition elf.h:235
elf32_addr p_paddr
Definition elf.h:232
elf32_word p_memsz
Definition elf.h:234
elf32_off p_offset
Definition elf.h:230
elf32_addr p_vaddr
Definition elf.h:231
elf32_word p_align
Definition elf.h:236
elf32_word p_type
Definition elf.h:229
elf32_word p_filesz
Definition elf.h:233
An ELF32 section header.
Definition elf.h:169
elf32_addr sh_addr
Definition elf.h:173
elf32_word sh_name
Definition elf.h:170
elf32_word sh_type
Definition elf.h:171
elf32_word sh_flags
Definition elf.h:172
elf32_word sh_size
Definition elf.h:175
elf32_word sh_info
Definition elf.h:177
elf32_word sh_addralign
Definition elf.h:178
elf32_off sh_offset
Definition elf.h:174
elf32_word sh_entsize
Definition elf.h:179
elf32_word sh_link
Definition elf.h:176
An ELF32 symbol.
Definition elf.h:183
elf32_half st_shndx
Definition elf.h:189
elf32_word st_name
Definition elf.h:184
uint8_t st_info
Definition elf.h:187
uint8_t st_other
Definition elf.h:188
elf32_word st_value
Definition elf.h:185
elf32_word st_size
Definition elf.h:186
An ELF64 file's header.
Definition elf.h:249
elf64_half e_type
Definition elf.h:251
uint8_t e_ident[EI_NIDENT]
Definition elf.h:250
elf64_off e_shoff
Definition elf.h:256
elf64_half e_ehsize
Definition elf.h:258
elf64_half e_shnum
Definition elf.h:262
elf64_half e_machine
Definition elf.h:252
elf64_off e_phoff
Definition elf.h:255
elf64_addr e_entry
Definition elf.h:254
elf64_half e_shentsize
Definition elf.h:261
elf64_half e_phentsize
Definition elf.h:259
elf64_word e_version
Definition elf.h:253
elf64_half e_phnum
Definition elf.h:260
elf64_half e_shstrndx
Definition elf.h:263
elf64_word e_flags
Definition elf.h:257
An ELF64 program header: a segment to load.
Definition elf.h:267
elf64_xword p_filesz
Definition elf.h:273
elf64_addr p_vaddr
Definition elf.h:271
elf64_word p_type
Definition elf.h:268
elf64_addr p_paddr
Definition elf.h:272
elf64_word p_flags
Definition elf.h:269
elf64_xword p_align
Definition elf.h:275
elf64_xword p_memsz
Definition elf.h:274
elf64_off p_offset
Definition elf.h:270
An ELF64 section header.
Definition elf.h:193
elf64_xword sh_size
Definition elf.h:199
elf64_xword sh_entsize
Definition elf.h:203
elf64_word sh_link
Definition elf.h:200
elf64_addr sh_addr
Definition elf.h:197
elf64_off sh_offset
Definition elf.h:198
elf64_xword sh_addralign
Definition elf.h:202
elf64_word sh_info
Definition elf.h:201
elf64_xword sh_flags
Definition elf.h:196
elf64_word sh_type
Definition elf.h:195
elf64_word sh_name
Definition elf.h:194
An ELF64 symbol.
Definition elf.h:207
elf64_half st_shndx
Definition elf.h:211
elf64_addr st_value
Definition elf.h:212
elf64_xword st_size
Definition elf.h:213
uint8_t st_info
Definition elf.h:209
uint8_t st_other
Definition elf.h:210
elf64_word st_name
Definition elf.h:208