TPDE
Loading...
Searching...
No Matches
DWARF.hpp
1// SPDX-FileCopyrightText: 2025 Contributors to TPDE <https://tpde.org>
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3#pragma once
4
5#include "base.hpp"
6
7namespace tpde::dwarf {
8// DWARF constants
9constexpr u8 DW_CFA_nop = 0;
10constexpr u8 DW_EH_PE_uleb128 = 0x01;
11constexpr u8 DW_EH_PE_pcrel = 0x10;
12constexpr u8 DW_EH_PE_indirect = 0x80;
13constexpr u8 DW_EH_PE_sdata4 = 0x0b;
14constexpr u8 DW_EH_PE_omit = 0xff;
15
16constexpr u8 DW_CFA_advance_loc1 = 0x02;
17constexpr u8 DW_CFA_advance_loc2 = 0x03;
18constexpr u8 DW_CFA_advance_loc4 = 0x04;
19constexpr u8 DW_CFA_offset_extended = 0x05;
20constexpr u8 DW_CFA_restore_extended = 0x06;
21constexpr u8 DW_CFA_undefined = 0x07;
22constexpr u8 DW_CFA_same_value = 0x08;
23constexpr u8 DW_CFA_register = 0x09;
24constexpr u8 DW_CFA_remember_state = 0x0a;
25constexpr u8 DW_CFA_restore_state = 0x0b;
26constexpr u8 DW_CFA_def_cfa = 0x0c;
27constexpr u8 DW_CFA_def_cfa_register = 0x0d;
28constexpr u8 DW_CFA_def_cfa_offset = 0x0e;
29constexpr u8 DW_CFA_advance_loc = 0x40;
30constexpr u8 DW_CFA_offset = 0x80;
31constexpr u8 DW_CFA_restore = 0xc0;
32
33constexpr u8 DWARF_CFI_PRIMARY_OPCODE_MASK = 0xc0;
34
35constexpr u32 EH_FDE_FUNC_START_OFF = 0x8;
36
37namespace x64 {
38constexpr u8 DW_reg_rax = 0;
39constexpr u8 DW_reg_rdx = 1;
40constexpr u8 DW_reg_rcx = 2;
41constexpr u8 DW_reg_rbx = 3;
42constexpr u8 DW_reg_rsi = 4;
43constexpr u8 DW_reg_rdi = 5;
44constexpr u8 DW_reg_rbp = 6;
45constexpr u8 DW_reg_rsp = 7;
46constexpr u8 DW_reg_r8 = 8;
47constexpr u8 DW_reg_r9 = 9;
48constexpr u8 DW_reg_r10 = 10;
49constexpr u8 DW_reg_r11 = 11;
50constexpr u8 DW_reg_r12 = 12;
51constexpr u8 DW_reg_r13 = 13;
52constexpr u8 DW_reg_r14 = 14;
53constexpr u8 DW_reg_r15 = 15;
54constexpr u8 DW_reg_ra = 16;
55} // namespace x64
56
57namespace a64 {
58constexpr u8 DW_reg_x0 = 0;
59constexpr u8 DW_reg_x1 = 1;
60constexpr u8 DW_reg_x2 = 2;
61constexpr u8 DW_reg_x3 = 3;
62constexpr u8 DW_reg_x4 = 4;
63constexpr u8 DW_reg_x5 = 5;
64constexpr u8 DW_reg_x6 = 6;
65constexpr u8 DW_reg_x7 = 7;
66constexpr u8 DW_reg_x8 = 8;
67constexpr u8 DW_reg_x9 = 9;
68constexpr u8 DW_reg_x10 = 10;
69constexpr u8 DW_reg_x11 = 11;
70constexpr u8 DW_reg_x12 = 12;
71constexpr u8 DW_reg_x13 = 13;
72constexpr u8 DW_reg_x14 = 14;
73constexpr u8 DW_reg_x15 = 15;
74constexpr u8 DW_reg_x16 = 16;
75constexpr u8 DW_reg_x17 = 17;
76constexpr u8 DW_reg_x18 = 18;
77constexpr u8 DW_reg_x19 = 19;
78constexpr u8 DW_reg_x20 = 20;
79constexpr u8 DW_reg_x21 = 21;
80constexpr u8 DW_reg_x22 = 22;
81constexpr u8 DW_reg_x23 = 23;
82constexpr u8 DW_reg_x24 = 24;
83constexpr u8 DW_reg_x25 = 25;
84constexpr u8 DW_reg_x26 = 26;
85constexpr u8 DW_reg_x27 = 27;
86constexpr u8 DW_reg_x28 = 28;
87constexpr u8 DW_reg_x29 = 29;
88constexpr u8 DW_reg_x30 = 30;
89
90constexpr u8 DW_reg_fp = 29;
91constexpr u8 DW_reg_lr = 30;
92
93constexpr u8 DW_reg_v0 = 64;
94constexpr u8 DW_reg_v1 = 65;
95constexpr u8 DW_reg_v2 = 66;
96constexpr u8 DW_reg_v3 = 67;
97constexpr u8 DW_reg_v4 = 68;
98constexpr u8 DW_reg_v5 = 69;
99constexpr u8 DW_reg_v6 = 70;
100constexpr u8 DW_reg_v7 = 71;
101constexpr u8 DW_reg_v8 = 72;
102constexpr u8 DW_reg_v9 = 73;
103constexpr u8 DW_reg_v10 = 74;
104constexpr u8 DW_reg_v11 = 75;
105constexpr u8 DW_reg_v12 = 76;
106constexpr u8 DW_reg_v13 = 77;
107constexpr u8 DW_reg_v14 = 78;
108constexpr u8 DW_reg_v15 = 79;
109constexpr u8 DW_reg_v16 = 80;
110constexpr u8 DW_reg_v17 = 81;
111constexpr u8 DW_reg_v18 = 82;
112constexpr u8 DW_reg_v19 = 83;
113constexpr u8 DW_reg_v20 = 84;
114constexpr u8 DW_reg_v21 = 85;
115constexpr u8 DW_reg_v22 = 86;
116constexpr u8 DW_reg_v23 = 87;
117constexpr u8 DW_reg_v24 = 88;
118constexpr u8 DW_reg_v25 = 89;
119constexpr u8 DW_reg_v26 = 90;
120constexpr u8 DW_reg_v27 = 91;
121constexpr u8 DW_reg_v28 = 92;
122constexpr u8 DW_reg_v29 = 93;
123constexpr u8 DW_reg_v30 = 94;
124
125constexpr u8 DW_reg_sp = 31;
126constexpr u8 DW_reg_pc = 32;
127} // namespace a64
128
129} // namespace tpde::dwarf