AquilaOS documentation
How it works, and its code
Toggle main menu visibility
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
12
typedef
int32_t
elf32_sword
;
13
typedef
uint32_t
elf32_word
;
14
typedef
uint32_t
elf32_addr
;
15
typedef
uint32_t
elf32_off
;
16
typedef
uint16_t
elf32_half
;
17
18
typedef
uint64_t
elf64_addr
;
19
typedef
uint64_t
elf64_off
;
20
typedef
uint64_t
elf64_xword
;
21
typedef
uint32_t
elf64_word
;
22
typedef
uint16_t
elf64_half
;
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
151
struct
elf32_hdr
{
152
uint8_t
e_ident
[
EI_NIDENT
];
153
elf32_half
e_type
;
154
elf32_half
e_machine
;
155
elf32_word
e_version
;
156
elf32_addr
e_entry
;
157
elf32_off
e_phoff
;
158
elf32_off
e_shoff
;
159
elf32_word
e_flags
;
160
elf32_half
e_ehsize
;
161
elf32_half
e_phentsize
;
162
elf32_half
e_phnum
;
163
elf32_half
e_shentsize
;
164
elf32_half
e_shnum
;
165
elf32_half
e_shstrndx
;
166
};
167
169
struct
elf32_shdr
{
170
elf32_word
sh_name
;
171
elf32_word
sh_type
;
172
elf32_word
sh_flags
;
173
elf32_addr
sh_addr
;
174
elf32_off
sh_offset
;
175
elf32_word
sh_size
;
176
elf32_word
sh_link
;
177
elf32_word
sh_info
;
178
elf32_word
sh_addralign
;
179
elf32_word
sh_entsize
;
180
};
181
183
struct
elf32_sym
{
184
elf32_word
st_name
;
185
elf32_word
st_value
;
186
elf32_word
st_size
;
187
uint8_t
st_info
;
188
uint8_t
st_other
;
189
elf32_half
st_shndx
;
190
};
191
193
struct
elf64_shdr
{
194
elf64_word
sh_name
;
195
elf64_word
sh_type
;
196
elf64_xword
sh_flags
;
197
elf64_addr
sh_addr
;
198
elf64_off
sh_offset
;
199
elf64_xword
sh_size
;
200
elf64_word
sh_link
;
201
elf64_word
sh_info
;
202
elf64_xword
sh_addralign
;
203
elf64_xword
sh_entsize
;
204
};
205
207
struct
elf64_sym
{
208
elf64_word
st_name
;
209
uint8_t
st_info
;
210
uint8_t
st_other
;
211
elf64_half
st_shndx
;
212
elf64_addr
st_value
;
213
elf64_xword
st_size
;
214
};
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
220
typedef
struct
elf64_shdr
elf_shdr_t
;
221
typedef
struct
elf64_sym
elf_sym_t
;
222
#else
223
typedef
struct
elf32_shdr
elf_shdr_t
;
224
typedef
struct
elf32_sym
elf_sym_t
;
225
#endif
226
228
struct
elf32_phdr
{
229
elf32_word
p_type
;
230
elf32_off
p_offset
;
231
elf32_addr
p_vaddr
;
232
elf32_addr
p_paddr
;
233
elf32_word
p_filesz
;
234
elf32_word
p_memsz
;
235
elf32_word
p_flags
;
236
elf32_word
p_align
;
237
};
238
240
struct
elf32_dyn
{
241
elf32_sword
d_tag
;
242
union
{
243
elf32_word
d_val
;
244
elf32_addr
d_ptr
;
245
}
d_un
;
246
};
247
249
struct
elf64_hdr
{
250
uint8_t
e_ident
[
EI_NIDENT
];
251
elf64_half
e_type
;
252
elf64_half
e_machine
;
253
elf64_word
e_version
;
254
elf64_addr
e_entry
;
255
elf64_off
e_phoff
;
256
elf64_off
e_shoff
;
257
elf64_word
e_flags
;
258
elf64_half
e_ehsize
;
259
elf64_half
e_phentsize
;
260
elf64_half
e_phnum
;
261
elf64_half
e_shentsize
;
262
elf64_half
e_shnum
;
263
elf64_half
e_shstrndx
;
264
};
265
267
struct
elf64_phdr
{
268
elf64_word
p_type
;
269
elf64_word
p_flags
;
270
elf64_off
p_offset
;
271
elf64_addr
p_vaddr
;
272
elf64_addr
p_paddr
;
273
elf64_xword
p_filesz
;
274
elf64_xword
p_memsz
;
275
elf64_xword
p_align
;
276
};
277
278
#endif
/* ! _ELF_H */
elf32_sword
int32_t elf32_sword
Definition
elf.h:12
elf32_half
uint16_t elf32_half
Definition
elf.h:16
elf64_half
uint16_t elf64_half
Definition
elf.h:22
elf64_addr
uint64_t elf64_addr
Definition
elf.h:18
elf32_addr
uint32_t elf32_addr
Definition
elf.h:14
elf64_xword
uint64_t elf64_xword
Definition
elf.h:20
elf_sym_t
struct elf32_sym elf_sym_t
Definition
elf.h:224
elf64_off
uint64_t elf64_off
Definition
elf.h:19
elf_shdr_t
struct elf32_shdr elf_shdr_t
Definition
elf.h:223
elf64_word
uint32_t elf64_word
Definition
elf.h:21
elf32_off
uint32_t elf32_off
Definition
elf.h:15
elf32_word
uint32_t elf32_word
Definition
elf.h:13
EI_NIDENT
#define EI_NIDENT
Definition
elf.h:54
uint32_t
unsigned int uint32_t
Definition
stddef.h:22
int32_t
signed int int32_t
Definition
stddef.h:18
uint8_t
unsigned char uint8_t
Definition
stddef.h:20
uint64_t
unsigned long long int uint64_t
Definition
stddef.h:23
uint16_t
unsigned short int uint16_t
Definition
stddef.h:21
stdint.h
elf32_dyn
An ELF32 dynamic section's entry.
Definition
elf.h:240
elf32_dyn::d_tag
elf32_sword d_tag
Definition
elf.h:241
elf32_dyn::d_un
union elf32_dyn::@210366253301142347214236302261203016225264370231 d_un
elf32_hdr
An ELF32 file's header.
Definition
elf.h:151
elf32_hdr::e_entry
elf32_addr e_entry
Definition
elf.h:156
elf32_hdr::e_shentsize
elf32_half e_shentsize
Definition
elf.h:163
elf32_hdr::e_version
elf32_word e_version
Definition
elf.h:155
elf32_hdr::e_flags
elf32_word e_flags
Definition
elf.h:159
elf32_hdr::e_ident
uint8_t e_ident[EI_NIDENT]
Definition
elf.h:152
elf32_hdr::e_shstrndx
elf32_half e_shstrndx
Definition
elf.h:165
elf32_hdr::e_ehsize
elf32_half e_ehsize
Definition
elf.h:160
elf32_hdr::e_phoff
elf32_off e_phoff
Definition
elf.h:157
elf32_hdr::e_machine
elf32_half e_machine
Definition
elf.h:154
elf32_hdr::e_shoff
elf32_off e_shoff
Definition
elf.h:158
elf32_hdr::e_phnum
elf32_half e_phnum
Definition
elf.h:162
elf32_hdr::e_phentsize
elf32_half e_phentsize
Definition
elf.h:161
elf32_hdr::e_shnum
elf32_half e_shnum
Definition
elf.h:164
elf32_hdr::e_type
elf32_half e_type
Definition
elf.h:153
elf32_phdr
An ELF32 program header: a segment to load.
Definition
elf.h:228
elf32_phdr::p_flags
elf32_word p_flags
Definition
elf.h:235
elf32_phdr::p_paddr
elf32_addr p_paddr
Definition
elf.h:232
elf32_phdr::p_memsz
elf32_word p_memsz
Definition
elf.h:234
elf32_phdr::p_offset
elf32_off p_offset
Definition
elf.h:230
elf32_phdr::p_vaddr
elf32_addr p_vaddr
Definition
elf.h:231
elf32_phdr::p_align
elf32_word p_align
Definition
elf.h:236
elf32_phdr::p_type
elf32_word p_type
Definition
elf.h:229
elf32_phdr::p_filesz
elf32_word p_filesz
Definition
elf.h:233
elf32_shdr
An ELF32 section header.
Definition
elf.h:169
elf32_shdr::sh_addr
elf32_addr sh_addr
Definition
elf.h:173
elf32_shdr::sh_name
elf32_word sh_name
Definition
elf.h:170
elf32_shdr::sh_type
elf32_word sh_type
Definition
elf.h:171
elf32_shdr::sh_flags
elf32_word sh_flags
Definition
elf.h:172
elf32_shdr::sh_size
elf32_word sh_size
Definition
elf.h:175
elf32_shdr::sh_info
elf32_word sh_info
Definition
elf.h:177
elf32_shdr::sh_addralign
elf32_word sh_addralign
Definition
elf.h:178
elf32_shdr::sh_offset
elf32_off sh_offset
Definition
elf.h:174
elf32_shdr::sh_entsize
elf32_word sh_entsize
Definition
elf.h:179
elf32_shdr::sh_link
elf32_word sh_link
Definition
elf.h:176
elf32_sym
An ELF32 symbol.
Definition
elf.h:183
elf32_sym::st_shndx
elf32_half st_shndx
Definition
elf.h:189
elf32_sym::st_name
elf32_word st_name
Definition
elf.h:184
elf32_sym::st_info
uint8_t st_info
Definition
elf.h:187
elf32_sym::st_other
uint8_t st_other
Definition
elf.h:188
elf32_sym::st_value
elf32_word st_value
Definition
elf.h:185
elf32_sym::st_size
elf32_word st_size
Definition
elf.h:186
elf64_hdr
An ELF64 file's header.
Definition
elf.h:249
elf64_hdr::e_type
elf64_half e_type
Definition
elf.h:251
elf64_hdr::e_ident
uint8_t e_ident[EI_NIDENT]
Definition
elf.h:250
elf64_hdr::e_shoff
elf64_off e_shoff
Definition
elf.h:256
elf64_hdr::e_ehsize
elf64_half e_ehsize
Definition
elf.h:258
elf64_hdr::e_shnum
elf64_half e_shnum
Definition
elf.h:262
elf64_hdr::e_machine
elf64_half e_machine
Definition
elf.h:252
elf64_hdr::e_phoff
elf64_off e_phoff
Definition
elf.h:255
elf64_hdr::e_entry
elf64_addr e_entry
Definition
elf.h:254
elf64_hdr::e_shentsize
elf64_half e_shentsize
Definition
elf.h:261
elf64_hdr::e_phentsize
elf64_half e_phentsize
Definition
elf.h:259
elf64_hdr::e_version
elf64_word e_version
Definition
elf.h:253
elf64_hdr::e_phnum
elf64_half e_phnum
Definition
elf.h:260
elf64_hdr::e_shstrndx
elf64_half e_shstrndx
Definition
elf.h:263
elf64_hdr::e_flags
elf64_word e_flags
Definition
elf.h:257
elf64_phdr
An ELF64 program header: a segment to load.
Definition
elf.h:267
elf64_phdr::p_filesz
elf64_xword p_filesz
Definition
elf.h:273
elf64_phdr::p_vaddr
elf64_addr p_vaddr
Definition
elf.h:271
elf64_phdr::p_type
elf64_word p_type
Definition
elf.h:268
elf64_phdr::p_paddr
elf64_addr p_paddr
Definition
elf.h:272
elf64_phdr::p_flags
elf64_word p_flags
Definition
elf.h:269
elf64_phdr::p_align
elf64_xword p_align
Definition
elf.h:275
elf64_phdr::p_memsz
elf64_xword p_memsz
Definition
elf.h:274
elf64_phdr::p_offset
elf64_off p_offset
Definition
elf.h:270
elf64_shdr
An ELF64 section header.
Definition
elf.h:193
elf64_shdr::sh_size
elf64_xword sh_size
Definition
elf.h:199
elf64_shdr::sh_entsize
elf64_xword sh_entsize
Definition
elf.h:203
elf64_shdr::sh_link
elf64_word sh_link
Definition
elf.h:200
elf64_shdr::sh_addr
elf64_addr sh_addr
Definition
elf.h:197
elf64_shdr::sh_offset
elf64_off sh_offset
Definition
elf.h:198
elf64_shdr::sh_addralign
elf64_xword sh_addralign
Definition
elf.h:202
elf64_shdr::sh_info
elf64_word sh_info
Definition
elf.h:201
elf64_shdr::sh_flags
elf64_xword sh_flags
Definition
elf.h:196
elf64_shdr::sh_type
elf64_word sh_type
Definition
elf.h:195
elf64_shdr::sh_name
elf64_word sh_name
Definition
elf.h:194
elf64_sym
An ELF64 symbol.
Definition
elf.h:207
elf64_sym::st_shndx
elf64_half st_shndx
Definition
elf.h:211
elf64_sym::st_value
elf64_addr st_value
Definition
elf.h:212
elf64_sym::st_size
elf64_xword st_size
Definition
elf.h:213
elf64_sym::st_info
uint8_t st_info
Definition
elf.h:209
elf64_sym::st_other
uint8_t st_other
Definition
elf.h:210
elf64_sym::st_name
elf64_word st_name
Definition
elf.h:208
elf32_dyn::[union].d_un::d_val
elf32_word d_val
elf32_dyn::[union].d_un::d_ptr
elf32_addr d_ptr
kernel
include
sys
elf.h
Generated by
1.18.0