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
17typedef 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;
39
40typedef 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;
52
53#define ELFSECT_IDX_ABS 0xfff1
54
55enum {
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
68typedef 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
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
90enum {
94};
95
96enum {
99};
100
101#endif
struct _ir_elf_header ir_elf_header
@ ELFSYM_BIND_GLOBAL
Definition ir_elf.h:98
@ ELFSYM_BIND_LOCAL
Definition ir_elf.h:97
@ ELFSYM_TYPE_DATA
Definition ir_elf.h:91
@ ELFSYM_TYPE_FILE
Definition ir_elf.h:93
@ ELFSYM_TYPE_FUNC
Definition ir_elf.h:92
@ ELFSECT_TYPE_DYNSYM
Definition ir_elf.h:60
@ ELFSECT_TYPE_STRTAB
Definition ir_elf.h:58
@ ELFSECT_TYPE_SYMTAB
Definition ir_elf.h:57
@ ELFSECT_TYPE_NOBITS
Definition ir_elf.h:59
@ ELFSECT_TYPE_PROGBITS
Definition ir_elf.h:56
uint16_t shentsize
Definition ir_elf.h:35
uint8_t eclass
Definition ir_elf.h:19
uint16_t phentsize
Definition ir_elf.h:33
uint8_t epad[7]
Definition ir_elf.h:24
uintptr_t entry
Definition ir_elf.h:28
uint16_t shstridx
Definition ir_elf.h:37
uint8_t emagic[4]
Definition ir_elf.h:18
uint32_t flags
Definition ir_elf.h:31
uint8_t eabiversion
Definition ir_elf.h:23
uint16_t machine
Definition ir_elf.h:26
uint16_t shnum
Definition ir_elf.h:36
uint16_t ehsize
Definition ir_elf.h:32
uint8_t eversion
Definition ir_elf.h:21
uintptr_t phofs
Definition ir_elf.h:29
uint16_t phnum
Definition ir_elf.h:34
uint8_t eosabi
Definition ir_elf.h:22
uintptr_t shofs
Definition ir_elf.h:30
uint16_t type
Definition ir_elf.h:25
uint8_t eendian
Definition ir_elf.h:20
uint32_t version
Definition ir_elf.h:27
uintptr_t ofs
Definition ir_elf.h:45
uint32_t name
Definition ir_elf.h:41
uintptr_t flags
Definition ir_elf.h:43
uintptr_t align
Definition ir_elf.h:49
uint32_t type
Definition ir_elf.h:42
uintptr_t entsize
Definition ir_elf.h:50
uintptr_t size
Definition ir_elf.h:46
uint32_t info
Definition ir_elf.h:48
uint32_t link
Definition ir_elf.h:47
uintptr_t addr
Definition ir_elf.h:44
uint16_t sectidx
Definition ir_elf.h:82
uintptr_t value
Definition ir_elf.h:78
uint32_t name
Definition ir_elf.h:77
uint8_t info
Definition ir_elf.h:80
uint8_t other
Definition ir_elf.h:81
uint32_t size
Definition ir_elf.h:79