FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
linux/include/uapi/linux/elf.h at master · fabgithub/linux · GitHub
fabgithub
linux
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
linux
/
include
/
uapi
/
linux
/
elf.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
417 lines (372 loc) · 11.5 KB
Breadcrumbs
linux
/
include
/
uapi
/
linux
/
elf.h
Copy path
File metadata and controls
417 lines (372 loc) · 11.5 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
#ifndef
_UAPI_LINUX_ELF_H
#define
_UAPI_LINUX_ELF_H
#include
<linux/types.h>
#include
<linux/elf-em.h>
/* 32-bit ELF base types. */
typedef
__u32
Elf32_Addr
;
typedef
__u16
Elf32_Half
;
typedef
__u32
Elf32_Off
;
typedef
__s32
Elf32_Sword
;
typedef
__u32
Elf32_Word
;
/* 64-bit ELF base types. */
typedef
__u64
Elf64_Addr
;
typedef
__u16
Elf64_Half
;
typedef
__s16
Elf64_SHalf
;
typedef
__u64
Elf64_Off
;
typedef
__s32
Elf64_Sword
;
typedef
__u32
Elf64_Word
;
typedef
__u64
Elf64_Xword
;
typedef
__s64
Elf64_Sxword
;
/* These constants are for the segment types stored in the image headers */
#define
PT_NULL
0
#define
PT_LOAD
1
#define
PT_DYNAMIC
2
#define
PT_INTERP
3
#define
PT_NOTE
4
#define
PT_SHLIB
5
#define
PT_PHDR
6
#define
PT_TLS
7
/* Thread local storage segment */
#define
PT_LOOS
0x60000000
/* OS-specific */
#define
PT_HIOS
0x6fffffff
/* OS-specific */
#define
PT_LOPROC
0x70000000
#define
PT_HIPROC
0x7fffffff
#define
PT_GNU_EH_FRAME
0x6474e550
#define
PT_GNU_STACK
(PT_LOOS + 0x474e551)
/*
* Extended Numbering
*
* If the real number of program header table entries is larger than
* or equal to PN_XNUM(0xffff), it is set to sh_info field of the
* section header at index 0, and PN_XNUM is set to e_phnum
* field. Otherwise, the section header at index 0 is zero
* initialized, if it exists.
*
* Specifications are available in:
*
* - Oracle: Linker and Libraries.
* Part No: 817–1984–19, August 2011.
* http://docs.oracle.com/cd/E18752_01/pdf/817-1984.pdf
*
* - System V ABI AMD64 Architecture Processor Supplement
* Draft Version 0.99.4,
* January 13, 2010.
* http://www.cs.washington.edu/education/courses/cse351/12wi/supp-docs/abi.pdf
*/
#define
PN_XNUM
0xffff
/* These constants define the different elf file types */
#define
ET_NONE
0
#define
ET_REL
1
#define
ET_EXEC
2
#define
ET_DYN
3
#define
ET_CORE
4
#define
ET_LOPROC
0xff00
#define
ET_HIPROC
0xffff
/* This is the info that is needed to parse the dynamic section of the file */
#define
DT_NULL
0
#define
DT_NEEDED
1
#define
DT_PLTRELSZ
2
#define
DT_PLTGOT
3
#define
DT_HASH
4
#define
DT_STRTAB
5
#define
DT_SYMTAB
6
#define
DT_RELA
7
#define
DT_RELASZ
8
#define
DT_RELAENT
9
#define
DT_STRSZ
10
#define
DT_SYMENT
11
#define
DT_INIT
12
#define
DT_FINI
13
#define
DT_SONAME
14
#define
DT_RPATH
15
#define
DT_SYMBOLIC
16
#define
DT_REL
17
#define
DT_RELSZ
18
#define
DT_RELENT
19
#define
DT_PLTREL
20
#define
DT_DEBUG
21
#define
DT_TEXTREL
22
#define
DT_JMPREL
23
#define
DT_ENCODING
32
#define
OLD_DT_LOOS
0x60000000
#define
DT_LOOS
0x6000000d
#define
DT_HIOS
0x6ffff000
#define
DT_VALRNGLO
0x6ffffd00
#define
DT_VALRNGHI
0x6ffffdff
#define
DT_ADDRRNGLO
0x6ffffe00
#define
DT_ADDRRNGHI
0x6ffffeff
#define
DT_VERSYM
0x6ffffff0
#define
DT_RELACOUNT
0x6ffffff9
#define
DT_RELCOUNT
0x6ffffffa
#define
DT_FLAGS_1
0x6ffffffb
#define
DT_VERDEF
0x6ffffffc
#define
DT_VERDEFNUM
0x6ffffffd
#define
DT_VERNEED
0x6ffffffe
#define
DT_VERNEEDNUM
0x6fffffff
#define
OLD_DT_HIOS
0x6fffffff
#define
DT_LOPROC
0x70000000
#define
DT_HIPROC
0x7fffffff
/* This info is needed when parsing the symbol table */
#define
STB_LOCAL
0
#define
STB_GLOBAL
1
#define
STB_WEAK
2
#define
STT_NOTYPE
0
#define
STT_OBJECT
1
#define
STT_FUNC
2
#define
STT_SECTION
3
#define
STT_FILE
4
#define
STT_COMMON
5
#define
STT_TLS
6
#define
ELF_ST_BIND
(
x
) ((x) >> 4)
#define
ELF_ST_TYPE
(
x
) (((unsigned int) x) & 0xf)
#define
ELF32_ST_BIND
(
x
) ELF_ST_BIND(x)
#define
ELF32_ST_TYPE
(
x
) ELF_ST_TYPE(x)
#define
ELF64_ST_BIND
(
x
) ELF_ST_BIND(x)
#define
ELF64_ST_TYPE
(
x
) ELF_ST_TYPE(x)
typedef
struct
dynamic
{
Elf32_Sword
d_tag
;
union
{
Elf32_Sword
d_val
;
Elf32_Addr
d_ptr
;
}
d_un
;
}
Elf32_Dyn
;
typedef
struct
{
Elf64_Sxword
d_tag
;
/* entry tag value */
union
{
Elf64_Xword
d_val
;
Elf64_Addr
d_ptr
;
}
d_un
;
}
Elf64_Dyn
;
/* The following are used with relocations */
#define
ELF32_R_SYM
(
x
) ((x) >> 8)
#define
ELF32_R_TYPE
(
x
) ((x) & 0xff)
#define
ELF64_R_SYM
(
i
) ((i) >> 32)
#define
ELF64_R_TYPE
(
i
) ((i) & 0xffffffff)
typedef
struct
elf32_rel
{
Elf32_Addr
r_offset
;
Elf32_Word
r_info
;
}
Elf32_Rel
;
typedef
struct
elf64_rel
{
Elf64_Addr
r_offset
;
/* Location at which to apply the action */
Elf64_Xword
r_info
;
/* index and type of relocation */
}
Elf64_Rel
;
typedef
struct
elf32_rela
{
Elf32_Addr
r_offset
;
Elf32_Word
r_info
;
Elf32_Sword
r_addend
;
}
Elf32_Rela
;
typedef
struct
elf64_rela
{
Elf64_Addr
r_offset
;
/* Location at which to apply the action */
Elf64_Xword
r_info
;
/* index and type of relocation */
Elf64_Sxword
r_addend
;
/* Constant addend used to compute value */
}
Elf64_Rela
;
typedef
struct
elf32_sym
{
Elf32_Word
st_name
;
Elf32_Addr
st_value
;
Elf32_Word
st_size
;
unsigned
char
st_info
;
unsigned
char
st_other
;
Elf32_Half
st_shndx
;
}
Elf32_Sym
;
typedef
struct
elf64_sym
{
Elf64_Word
st_name
;
/* Symbol name, index in string tbl */
unsigned
char
st_info
;
/* Type and binding attributes */
unsigned
char
st_other
;
/* No defined meaning, 0 */
Elf64_Half
st_shndx
;
/* Associated section index */
Elf64_Addr
st_value
;
/* Value of the symbol */
Elf64_Xword
st_size
;
/* Associated symbol size */
}
Elf64_Sym
;
#define
EI_NIDENT
16
typedef
struct
elf32_hdr
{
unsigned
char
e_ident
[
EI_NIDENT
];
Elf32_Half
e_type
;
Elf32_Half
e_machine
;
Elf32_Word
e_version
;
Elf32_Addr
e_entry
;
/* Entry point */
Elf32_Off
e_phoff
;
Elf32_Off
e_shoff
;
Elf32_Word
e_flags
;
Elf32_Half
e_ehsize
;
Elf32_Half
e_phentsize
;
Elf32_Half
e_phnum
;
Elf32_Half
e_shentsize
;
Elf32_Half
e_shnum
;
Elf32_Half
e_shstrndx
;
}
Elf32_Ehdr
;
typedef
struct
elf64_hdr
{
unsigned
char
e_ident
[
EI_NIDENT
];
/* ELF "magic number" */
Elf64_Half
e_type
;
Elf64_Half
e_machine
;
Elf64_Word
e_version
;
Elf64_Addr
e_entry
;
/* Entry point virtual address */
Elf64_Off
e_phoff
;
/* Program header table file offset */
Elf64_Off
e_shoff
;
/* Section header table file offset */
Elf64_Word
e_flags
;
Elf64_Half
e_ehsize
;
Elf64_Half
e_phentsize
;
Elf64_Half
e_phnum
;
Elf64_Half
e_shentsize
;
Elf64_Half
e_shnum
;
Elf64_Half
e_shstrndx
;
}
Elf64_Ehdr
;
/* These constants define the permissions on sections in the program
header, p_flags. */
#define
PF_R
0x4
#define
PF_W
0x2
#define
PF_X
0x1
typedef
struct
elf32_phdr
{
Elf32_Word
p_type
;
Elf32_Off
p_offset
;
Elf32_Addr
p_vaddr
;
Elf32_Addr
p_paddr
;
Elf32_Word
p_filesz
;
Elf32_Word
p_memsz
;
Elf32_Word
p_flags
;
Elf32_Word
p_align
;
}
Elf32_Phdr
;
typedef
struct
elf64_phdr
{
Elf64_Word
p_type
;
Elf64_Word
p_flags
;
Elf64_Off
p_offset
;
/* Segment file offset */
Elf64_Addr
p_vaddr
;
/* Segment virtual address */
Elf64_Addr
p_paddr
;
/* Segment physical address */
Elf64_Xword
p_filesz
;
/* Segment size in file */
Elf64_Xword
p_memsz
;
/* Segment size in memory */
Elf64_Xword
p_align
;
/* Segment alignment, file & memory */
}
Elf64_Phdr
;
/* sh_type */
#define
SHT_NULL
0
#define
SHT_PROGBITS
1
#define
SHT_SYMTAB
2
#define
SHT_STRTAB
3
#define
SHT_RELA
4
#define
SHT_HASH
5
#define
SHT_DYNAMIC
6
#define
SHT_NOTE
7
#define
SHT_NOBITS
8
#define
SHT_REL
9
#define
SHT_SHLIB
10
#define
SHT_DYNSYM
11
#define
SHT_NUM
12
#define
SHT_LOPROC
0x70000000
#define
SHT_HIPROC
0x7fffffff
#define
SHT_LOUSER
0x80000000
#define
SHT_HIUSER
0xffffffff
/* sh_flags */
#define
SHF_WRITE
0x1
#define
SHF_ALLOC
0x2
#define
SHF_EXECINSTR
0x4
#define
SHF_MASKPROC
0xf0000000
/* special section indexes */
#define
SHN_UNDEF
0
#define
SHN_LORESERVE
0xff00
#define
SHN_LOPROC
0xff00
#define
SHN_HIPROC
0xff1f
#define
SHN_ABS
0xfff1
#define
SHN_COMMON
0xfff2
#define
SHN_HIRESERVE
0xffff
typedef
struct
elf32_shdr
{
Elf32_Word
sh_name
;
Elf32_Word
sh_type
;
Elf32_Word
sh_flags
;
Elf32_Addr
sh_addr
;
Elf32_Off
sh_offset
;
Elf32_Word
sh_size
;
Elf32_Word
sh_link
;
Elf32_Word
sh_info
;
Elf32_Word
sh_addralign
;
Elf32_Word
sh_entsize
;
}
Elf32_Shdr
;
typedef
struct
elf64_shdr
{
Elf64_Word
sh_name
;
/* Section name, index in string tbl */
Elf64_Word
sh_type
;
/* Type of section */
Elf64_Xword
sh_flags
;
/* Miscellaneous section attributes */
Elf64_Addr
sh_addr
;
/* Section virtual addr at execution */
Elf64_Off
sh_offset
;
/* Section file offset */
Elf64_Xword
sh_size
;
/* Size of section in bytes */
Elf64_Word
sh_link
;
/* Index of another section */
Elf64_Word
sh_info
;
/* Additional section information */
Elf64_Xword
sh_addralign
;
/* Section alignment */
Elf64_Xword
sh_entsize
;
/* Entry size if section holds table */
}
Elf64_Shdr
;
#define
EI_MAG0
0
/* e_ident[] indexes */
#define
EI_MAG1
1
#define
EI_MAG2
2
#define
EI_MAG3
3
#define
EI_CLASS
4
#define
EI_DATA
5
#define
EI_VERSION
6
#define
EI_OSABI
7
#define
EI_PAD
8
#define
ELFMAG0
0x7f
/* EI_MAG */
#define
ELFMAG1
'E'
#define
ELFMAG2
'L'
#define
ELFMAG3
'F'
#define
ELFMAG
"\177ELF"
#define
SELFMAG
4
#define
ELFCLASSNONE
0
/* EI_CLASS */
#define
ELFCLASS32
1
#define
ELFCLASS64
2
#define
ELFCLASSNUM
3
#define
ELFDATANONE
0
/* e_ident[EI_DATA] */
#define
ELFDATA2LSB
1
#define
ELFDATA2MSB
2
#define
EV_NONE
0
/* e_version, EI_VERSION */
#define
EV_CURRENT
1
#define
EV_NUM
2
#define
ELFOSABI_NONE
0
#define
ELFOSABI_LINUX
3
#ifndef
ELF_OSABI
#define
ELF_OSABI
ELFOSABI_NONE
#endif
/*
* Notes used in ET_CORE. Architectures export some of the arch register sets
* using the corresponding note types via the PTRACE_GETREGSET and
* PTRACE_SETREGSET requests.
*/
#define
NT_PRSTATUS
1
#define
NT_PRFPREG
2
#define
NT_PRPSINFO
3
#define
NT_TASKSTRUCT
4
#define
NT_AUXV
6
/*
* Note to userspace developers: size of NT_SIGINFO note may increase
* in the future to accomodate more fields, don't assume it is fixed!
*/
#define
NT_SIGINFO
0x53494749
#define
NT_FILE
0x46494c45
#define
NT_PRXFPREG
0x46e62b7f
/* copied from gdb5.1/include/elf/common.h */
#define
NT_PPC_VMX
0x100
/* PowerPC Altivec/VMX registers */
#define
NT_PPC_SPE
0x101
/* PowerPC SPE/EVR registers */
#define
NT_PPC_VSX
0x102
/* PowerPC VSX registers */
#define
NT_386_TLS
0x200
/* i386 TLS slots (struct user_desc) */
#define
NT_386_IOPERM
0x201
/* x86 io permission bitmap (1=deny) */
#define
NT_X86_XSTATE
0x202
/* x86 extended state using xsave */
#define
NT_S390_HIGH_GPRS
0x300
/* s390 upper register halves */
#define
NT_S390_TIMER
0x301
/* s390 timer register */
#define
NT_S390_TODCMP
0x302
/* s390 TOD clock comparator register */
#define
NT_S390_TODPREG
0x303
/* s390 TOD programmable register */
#define
NT_S390_CTRS
0x304
/* s390 control registers */
#define
NT_S390_PREFIX
0x305
/* s390 prefix register */
#define
NT_S390_LAST_BREAK
0x306
/* s390 breaking event address */
#define
NT_S390_SYSTEM_CALL
0x307
/* s390 system call restart data */
#define
NT_S390_TDB
0x308
/* s390 transaction diagnostic block */
#define
NT_ARM_VFP
0x400
/* ARM VFP/NEON registers */
#define
NT_ARM_TLS
0x401
/* ARM TLS register */
#define
NT_ARM_HW_BREAK
0x402
/* ARM hardware breakpoint registers */
#define
NT_ARM_HW_WATCH
0x403
/* ARM hardware watchpoint registers */
#define
NT_METAG_CBUF
0x500
/* Metag catch buffer registers */
#define
NT_METAG_RPIPE
0x501
/* Metag read pipeline state */
#define
NT_METAG_TLS
0x502
/* Metag TLS pointer */
/* Note header in a PT_NOTE section */
typedef
struct
elf32_note
{
Elf32_Word
n_namesz
;
/* Name size */
Elf32_Word
n_descsz
;
/* Content size */
Elf32_Word
n_type
;
/* Content type */
}
Elf32_Nhdr
;
/* Note header in a PT_NOTE section */
typedef
struct
elf64_note
{
Elf64_Word
n_namesz
;
/* Name size */
Elf64_Word
n_descsz
;
/* Content size */
Elf64_Word
n_type
;
/* Content type */
}
Elf64_Nhdr
;
#endif
/* _UAPI_LINUX_ELF_H */
Back
|
FazBrowse Home
|
New Git URL