php-internal-docs
8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
ir_elf.h
Go to the documentation of this file.
1
/*
2
* IR - Lightweight JIT Compilation Framework
3
* (ELF header definitions)
4
* Copyright (C) 2022 Zend by Perforce.
5
* Authors: Dmitry Stogov <dmitry@php.net>
6
*/
7
8
#ifndef IR_ELF
9
#define IR_ELF
10
11
#if defined(IR_TARGET_X64) || defined(IR_TARGET_AARCH64)
12
# define ELF64
13
#else
14
# undef ELF64
15
#endif
16
17
typedef
struct
_ir_elf_header
{
18
uint8_t
emagic
[4];
19
uint8_t
eclass
;
20
uint8_t
eendian
;
21
uint8_t
eversion
;
22
uint8_t
eosabi
;
23
uint8_t
eabiversion
;
24
uint8_t
epad
[7];
25
uint16_t
type
;
26
uint16_t
machine
;
27
uint32_t
version
;
28
uintptr_t
entry
;
29
uintptr_t
phofs
;
30
uintptr_t
shofs
;
31
uint32_t
flags
;
32
uint16_t
ehsize
;
33
uint16_t
phentsize
;
34
uint16_t
phnum
;
35
uint16_t
shentsize
;
36
uint16_t
shnum
;
37
uint16_t
shstridx
;
38
}
ir_elf_header
;
39
40
typedef
struct
ir_elf_sectheader
{
41
uint32_t
name
;
42
uint32_t
type
;
43
uintptr_t
flags
;
44
uintptr_t
addr
;
45
uintptr_t
ofs
;
46
uintptr_t
size
;
47
uint32_t
link
;
48
uint32_t
info
;
49
uintptr_t
align
;
50
uintptr_t
entsize
;
51
}
ir_elf_sectheader
;
52
53
#define ELFSECT_IDX_ABS 0xfff1
54
55
enum
{
56
ELFSECT_TYPE_PROGBITS
= 1,
57
ELFSECT_TYPE_SYMTAB
= 2,
58
ELFSECT_TYPE_STRTAB
= 3,
59
ELFSECT_TYPE_NOBITS
= 8,
60
ELFSECT_TYPE_DYNSYM
= 11,
61
};
62
63
#define ELFSECT_FLAGS_WRITE (1 << 0)
64
#define ELFSECT_FLAGS_ALLOC (1 << 1)
65
#define ELFSECT_FLAGS_EXEC (1 << 2)
66
#define ELFSECT_FLAGS_TLS (1 << 10)
67
68
typedef
struct
ir_elf_symbol
{
69
#ifdef ELF64
70
uint32_t
name
;
71
uint8_t
info
;
72
uint8_t
other
;
73
uint16_t
sectidx
;
74
uintptr_t
value
;
75
uint64_t
size
;
76
#else
77
uint32_t
name
;
78
uintptr_t
value
;
79
uint32_t
size
;
80
uint8_t
info
;
81
uint8_t
other
;
82
uint16_t
sectidx
;
83
#endif
84
}
ir_elf_symbol
;
85
86
#define ELFSYM_BIND(info) ((info) >> 4)
87
#define ELFSYM_TYPE(info) ((info) & 0xf)
88
#define ELFSYM_INFO(bind, type) (((bind) << 4) | (type))
89
90
enum
{
91
ELFSYM_TYPE_DATA
= 2,
92
ELFSYM_TYPE_FUNC
= 2,
93
ELFSYM_TYPE_FILE
= 4,
94
};
95
96
enum
{
97
ELFSYM_BIND_LOCAL
= 0,
98
ELFSYM_BIND_GLOBAL
= 1,
99
};
100
101
#endif
ir_elf_header
struct _ir_elf_header ir_elf_header
ELFSYM_BIND_GLOBAL
@ ELFSYM_BIND_GLOBAL
Definition
ir_elf.h:98
ELFSYM_BIND_LOCAL
@ ELFSYM_BIND_LOCAL
Definition
ir_elf.h:97
ELFSYM_TYPE_DATA
@ ELFSYM_TYPE_DATA
Definition
ir_elf.h:91
ELFSYM_TYPE_FILE
@ ELFSYM_TYPE_FILE
Definition
ir_elf.h:93
ELFSYM_TYPE_FUNC
@ ELFSYM_TYPE_FUNC
Definition
ir_elf.h:92
ELFSECT_TYPE_DYNSYM
@ ELFSECT_TYPE_DYNSYM
Definition
ir_elf.h:60
ELFSECT_TYPE_STRTAB
@ ELFSECT_TYPE_STRTAB
Definition
ir_elf.h:58
ELFSECT_TYPE_SYMTAB
@ ELFSECT_TYPE_SYMTAB
Definition
ir_elf.h:57
ELFSECT_TYPE_NOBITS
@ ELFSECT_TYPE_NOBITS
Definition
ir_elf.h:59
ELFSECT_TYPE_PROGBITS
@ ELFSECT_TYPE_PROGBITS
Definition
ir_elf.h:56
_ir_elf_header
Definition
ir_elf.h:17
_ir_elf_header::shentsize
uint16_t shentsize
Definition
ir_elf.h:35
_ir_elf_header::eclass
uint8_t eclass
Definition
ir_elf.h:19
_ir_elf_header::phentsize
uint16_t phentsize
Definition
ir_elf.h:33
_ir_elf_header::epad
uint8_t epad[7]
Definition
ir_elf.h:24
_ir_elf_header::entry
uintptr_t entry
Definition
ir_elf.h:28
_ir_elf_header::shstridx
uint16_t shstridx
Definition
ir_elf.h:37
_ir_elf_header::emagic
uint8_t emagic[4]
Definition
ir_elf.h:18
_ir_elf_header::flags
uint32_t flags
Definition
ir_elf.h:31
_ir_elf_header::eabiversion
uint8_t eabiversion
Definition
ir_elf.h:23
_ir_elf_header::machine
uint16_t machine
Definition
ir_elf.h:26
_ir_elf_header::shnum
uint16_t shnum
Definition
ir_elf.h:36
_ir_elf_header::ehsize
uint16_t ehsize
Definition
ir_elf.h:32
_ir_elf_header::eversion
uint8_t eversion
Definition
ir_elf.h:21
_ir_elf_header::phofs
uintptr_t phofs
Definition
ir_elf.h:29
_ir_elf_header::phnum
uint16_t phnum
Definition
ir_elf.h:34
_ir_elf_header::eosabi
uint8_t eosabi
Definition
ir_elf.h:22
_ir_elf_header::shofs
uintptr_t shofs
Definition
ir_elf.h:30
_ir_elf_header::type
uint16_t type
Definition
ir_elf.h:25
_ir_elf_header::eendian
uint8_t eendian
Definition
ir_elf.h:20
_ir_elf_header::version
uint32_t version
Definition
ir_elf.h:27
ir_elf_sectheader
Definition
ir_elf.h:40
ir_elf_sectheader::ofs
uintptr_t ofs
Definition
ir_elf.h:45
ir_elf_sectheader::name
uint32_t name
Definition
ir_elf.h:41
ir_elf_sectheader::flags
uintptr_t flags
Definition
ir_elf.h:43
ir_elf_sectheader::align
uintptr_t align
Definition
ir_elf.h:49
ir_elf_sectheader::type
uint32_t type
Definition
ir_elf.h:42
ir_elf_sectheader::entsize
uintptr_t entsize
Definition
ir_elf.h:50
ir_elf_sectheader::size
uintptr_t size
Definition
ir_elf.h:46
ir_elf_sectheader::info
uint32_t info
Definition
ir_elf.h:48
ir_elf_sectheader::link
uint32_t link
Definition
ir_elf.h:47
ir_elf_sectheader::addr
uintptr_t addr
Definition
ir_elf.h:44
ir_elf_symbol
Definition
ir_elf.h:68
ir_elf_symbol::sectidx
uint16_t sectidx
Definition
ir_elf.h:82
ir_elf_symbol::value
uintptr_t value
Definition
ir_elf.h:78
ir_elf_symbol::name
uint32_t name
Definition
ir_elf.h:77
ir_elf_symbol::info
uint8_t info
Definition
ir_elf.h:80
ir_elf_symbol::other
uint8_t other
Definition
ir_elf.h:81
ir_elf_symbol::size
uint32_t size
Definition
ir_elf.h:79
ext
opcache
jit
ir
ir_elf.h
Generated on Sat Aug 23 2025 01:46:09 for php-internal-docs by
1.13.2