microfmt
Zero-allocation C++ formatting for constrained environments
Loading...
Searching...
No Matches
gdb_registers.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Jarosław Pelczar <jarek@jpelczar.com>
2// SPDX-License-Identifier: BSD-2-Clause
3
4#pragma once
5
6#include "../reloco.hpp"
7#include "dwarf_registers.hpp"
8#include <cstdint>
9
10namespace microfmt::gdb {
11
15struct MICROFMT_API_CLASS RELOCO_POINTER register_mapping {
16 string_view name;
17 uint32_t gdb_index{};
18 uint32_t dwarf_index{};
19 uint32_t bit_size{};
20 string_view gdb_type;
21};
22
27template <typename Traits> struct register_traits_base {
28 // decodes raw bytes of a target address space; casts, pointers and offsets are bounded by the explicit lengths
29 // checked here.
30 RELOCO_BEGIN_UNSAFE_CODE
31 [[nodiscard]] static constexpr const register_mapping *find_by_gdb(uint32_t index) noexcept {
32 for (const auto &reg : Traits::arch_layout) {
33 if (reg.gdb_index == index)
34 return &reg;
35 }
36 for (const auto &reg : Traits::extended_arch_layout) {
37 if (reg.gdb_index == index)
38 return &reg;
39 }
40 for (const auto &reg : Traits::non_standard_arch_layout) {
41 if (reg.gdb_index == index)
42 return &reg;
43 }
44 return nullptr;
45 }
47
48 // decodes raw bytes of a target address space; casts, pointers and offsets are bounded by the explicit lengths
49 // checked here.
50 RELOCO_BEGIN_UNSAFE_CODE
51 [[nodiscard]] static constexpr const register_mapping *find_by_dwarf(uint32_t index) noexcept {
52 for (const auto &reg : Traits::arch_layout) {
53 if (reg.dwarf_index == index)
54 return &reg;
55 }
56 for (const auto &reg : Traits::extended_arch_layout) {
57 if (reg.dwarf_index == index)
58 return &reg;
59 }
60 for (const auto &reg : Traits::non_standard_arch_layout) {
61 if (reg.dwarf_index == index)
62 return &reg;
63 }
64 return nullptr;
65 }
67
68 // decodes raw bytes of a target address space; casts, pointers and offsets are bounded by the explicit lengths
69 // checked here.
70 RELOCO_BEGIN_UNSAFE_CODE
71 [[nodiscard]] static constexpr const register_mapping *find_by_name(string_view name) noexcept {
72 for (const auto &reg : Traits::arch_layout) {
73 if (reg.name == name)
74 return &reg;
75 }
76 for (const auto &reg : Traits::extended_arch_layout) {
77 if (reg.name == name)
78 return &reg;
79 }
80 for (const auto &reg : Traits::non_standard_arch_layout) {
81 if (reg.name == name)
82 return &reg;
83 }
84 return nullptr;
85 }
87
88 [[nodiscard]] static constexpr span<const register_mapping> layout() noexcept {
89 return span<const register_mapping>{Traits::arch_layout.data(), Traits::arch_layout.size()};
90 }
91
95 [[nodiscard]] static constexpr span<const register_mapping> extended_layout() noexcept {
96 return {Traits::extended_arch_layout.data(), Traits::extended_arch_layout.size()};
97 }
98
102 [[nodiscard]] static constexpr span<const register_mapping> non_standard_layout() noexcept {
103 return {Traits::non_standard_arch_layout.data(), Traits::non_standard_arch_layout.size()};
104 }
105};
106
110template <typename ArchTag> struct register_traits;
111
112// ============================================================================
113// Architecture Tags
114// ============================================================================
115namespace tags {
116struct x86 {};
117struct x86_64 {};
118struct arm32 {};
119struct aarch64 {};
120struct riscv32 {};
121struct riscv64 {};
122} // namespace tags
123
124// ============================================================================
125// x86_64 (AMD64)
126// ============================================================================
127template <> struct register_traits<tags::x86_64> : register_traits_base<register_traits<tags::x86_64>> {
128 static constexpr microfmt::array arch_layout{// GDB order vs DWARF order (Notice RCX/RDX/RBX swaps)
129 register_mapping{"rax", 0, dwarf::x86_64::rax, 64, "int64"},
130 register_mapping{"rbx", 1, dwarf::x86_64::rbx, 64, "int64"},
131 register_mapping{"rcx", 2, dwarf::x86_64::rcx, 64, "int64"},
132 register_mapping{"rdx", 3, dwarf::x86_64::rdx, 64, "int64"},
133 register_mapping{"rsi", 4, dwarf::x86_64::rsi, 64, "int64"},
134 register_mapping{"rdi", 5, dwarf::x86_64::rdi, 64, "int64"},
135 register_mapping{"rbp", 6, dwarf::x86_64::rbp, 64, "data_ptr"},
136 register_mapping{"rsp", 7, dwarf::x86_64::rsp, 64, "data_ptr"},
137 register_mapping{"r8", 8, dwarf::x86_64::r8, 64, "int64"},
138 register_mapping{"r9", 9, dwarf::x86_64::r9, 64, "int64"},
139 register_mapping{"r10", 10, dwarf::x86_64::r10, 64, "int64"},
140 register_mapping{"r11", 11, dwarf::x86_64::r11, 64, "int64"},
141 register_mapping{"r12", 12, dwarf::x86_64::r12, 64, "int64"},
142 register_mapping{"r13", 13, dwarf::x86_64::r13, 64, "int64"},
143 register_mapping{"r14", 14, dwarf::x86_64::r14, 64, "int64"},
144 register_mapping{"r15", 15, dwarf::x86_64::r15, 64, "int64"},
145 register_mapping{"rip", 16, dwarf::x86_64::rip, 64, "code_ptr"},
146 register_mapping{"eflags", 17, dwarf::x86_64::eflags, 32, "int32"},
147 register_mapping{"cs", 18, dwarf::x86_64::cs, 32, "int32"},
148 register_mapping{"ss", 19, dwarf::x86_64::ss, 32, "int32"},
149 register_mapping{"ds", 20, dwarf::x86_64::ds, 32, "int32"},
150 register_mapping{"es", 21, dwarf::x86_64::es, 32, "int32"},
151 register_mapping{"fs", 22, dwarf::x86_64::fs, 32, "int32"},
152 register_mapping{"gs", 23, dwarf::x86_64::gs, 32, "int32"}};
153
154 static constexpr microfmt::array extended_arch_layout{register_mapping{"xmm0", 40, dwarf::x86_64::xmm0, 128, ""},
155 register_mapping{"xmm1", 41, dwarf::x86_64::xmm1, 128, ""},
156 register_mapping{"xmm2", 42, dwarf::x86_64::xmm2, 128, ""},
157 register_mapping{"xmm3", 43, dwarf::x86_64::xmm3, 128, ""},
158 register_mapping{"xmm4", 44, dwarf::x86_64::xmm4, 128, ""},
159 register_mapping{"xmm5", 45, dwarf::x86_64::xmm5, 128, ""},
160 register_mapping{"xmm6", 46, dwarf::x86_64::xmm6, 128, ""},
161 register_mapping{"xmm7", 47, dwarf::x86_64::xmm7, 128, ""},
162 register_mapping{"xmm8", 48, dwarf::x86_64::xmm8, 128, ""},
163 register_mapping{"xmm9", 49, dwarf::x86_64::xmm9, 128, ""},
164 register_mapping{"xmm10", 50, dwarf::x86_64::xmm10, 128, ""},
165 register_mapping{"xmm11", 51, dwarf::x86_64::xmm11, 128, ""},
166 register_mapping{"xmm12", 52, dwarf::x86_64::xmm12, 128, ""},
167 register_mapping{"xmm13", 53, dwarf::x86_64::xmm13, 128, ""},
168 register_mapping{"xmm14", 54, dwarf::x86_64::xmm14, 128, ""},
169 register_mapping{"xmm15", 55, dwarf::x86_64::xmm15, 128, ""}};
170
171 static constexpr microfmt::array non_standard_arch_layout{
172 register_mapping{"fs_base", 58, dwarf::x86_64::fs_base, 64, "data_ptr"},
173 register_mapping{"gs_base", 59, dwarf::x86_64::gs_base, 64, "data_ptr"},
174 register_mapping{"kernel_gs_base", 66, dwarf::x86_64::kernel_gs_base, 64, "data_ptr"},
175 register_mapping{"cr0", 100, dwarf::x86_64::cr0, 64, "int64"},
176 register_mapping{"cr2", 102, dwarf::x86_64::cr2, 64, "data_ptr"},
177 register_mapping{"cr3", 103, dwarf::x86_64::cr3, 64, "data_ptr"},
178 register_mapping{"cr4", 104, dwarf::x86_64::cr4, 64, "int64"},
179 register_mapping{"cr8", 108, dwarf::x86_64::cr8, 64, "int64"},
180 register_mapping{"dr0", 120, dwarf::x86_64::dr0, 64, "data_ptr"},
181 register_mapping{"dr1", 121, dwarf::x86_64::dr1, 64, "data_ptr"},
182 register_mapping{"dr2", 122, dwarf::x86_64::dr2, 64, "data_ptr"},
183 register_mapping{"dr3", 123, dwarf::x86_64::dr3, 64, "data_ptr"},
184 register_mapping{"dr6", 126, dwarf::x86_64::dr6, 64, "int64"},
185 register_mapping{"dr7", 127, dwarf::x86_64::dr7, 64, "int64"}};
186};
187
188// ============================================================================
189// x86 (IA-32)
190// ============================================================================
191template <> struct register_traits<tags::x86> : register_traits_base<register_traits<tags::x86>> {
192 static constexpr microfmt::array arch_layout{// x86 GDB and DWARF match exactly for the first 9 registers
193 register_mapping{"eax", 0, dwarf::x86::eax, 32, "int32"},
194 register_mapping{"ecx", 1, dwarf::x86::ecx, 32, "int32"},
195 register_mapping{"edx", 2, dwarf::x86::edx, 32, "int32"},
196 register_mapping{"ebx", 3, dwarf::x86::ebx, 32, "int32"},
197 register_mapping{"esp", 4, dwarf::x86::esp, 32, "data_ptr"},
198 register_mapping{"ebp", 5, dwarf::x86::ebp, 32, "data_ptr"},
199 register_mapping{"esi", 6, dwarf::x86::esi, 32, "int32"},
200 register_mapping{"edi", 7, dwarf::x86::edi, 32, "int32"},
201 register_mapping{"eip", 8, dwarf::x86::eip, 32, "code_ptr"}};
202
203 static constexpr microfmt::array extended_arch_layout{register_mapping{"st0", 16, dwarf::x86::st0, 80, "i387_ext"},
204 register_mapping{"st1", 17, dwarf::x86::st1, 80, "i387_ext"},
205 register_mapping{"st2", 18, dwarf::x86::st2, 80, "i387_ext"},
206 register_mapping{"st3", 19, dwarf::x86::st3, 80, "i387_ext"},
207 register_mapping{"st4", 20, dwarf::x86::st4, 80, "i387_ext"},
208 register_mapping{"st5", 21, dwarf::x86::st5, 80, "i387_ext"},
209 register_mapping{"st6", 22, dwarf::x86::st6, 80, "i387_ext"},
210 register_mapping{"st7", 23, dwarf::x86::st7, 80, "i387_ext"},
211 register_mapping{"xmm0", 32, dwarf::x86::xmm0, 128, ""},
212 register_mapping{"xmm1", 33, dwarf::x86::xmm1, 128, ""},
213 register_mapping{"xmm2", 34, dwarf::x86::xmm2, 128, ""},
214 register_mapping{"xmm3", 35, dwarf::x86::xmm3, 128, ""},
215 register_mapping{"xmm4", 36, dwarf::x86::xmm4, 128, ""},
216 register_mapping{"xmm5", 37, dwarf::x86::xmm5, 128, ""},
217 register_mapping{"xmm6", 38, dwarf::x86::xmm6, 128, ""},
218 register_mapping{"xmm7", 39, dwarf::x86::xmm7, 128, ""}};
219
220 static constexpr microfmt::array non_standard_arch_layout{
221 register_mapping{"gs_base", 58, dwarf::x86::gs_base, 32, "data_ptr"},
222 register_mapping{"fs_base", 59, dwarf::x86::fs_base, 32, "data_ptr"},
223 register_mapping{"cr0", 100, dwarf::x86::cr0, 32, "int32"},
224 register_mapping{"cr3", 103, dwarf::x86::cr3, 32, "data_ptr"},
225 register_mapping{"cr4", 104, dwarf::x86::cr4, 32, "int32"}};
226};
227
228// ============================================================================
229// AArch64 (ARM 64-bit)
230// ============================================================================
231template <> struct register_traits<tags::aarch64> : register_traits_base<register_traits<tags::aarch64>> {
232 static constexpr microfmt::array arch_layout{
233 register_mapping{"x0", 0, dwarf::aarch64::x0, 64, "int64"},
234 register_mapping{"x1", 1, dwarf::aarch64::x1, 64, "int64"},
235 register_mapping{"x2", 2, dwarf::aarch64::x2, 64, "int64"},
236 register_mapping{"x3", 3, dwarf::aarch64::x3, 64, "int64"},
237 register_mapping{"x4", 4, dwarf::aarch64::x4, 64, "int64"},
238 register_mapping{"x5", 5, dwarf::aarch64::x5, 64, "int64"},
239 register_mapping{"x6", 6, dwarf::aarch64::x6, 64, "int64"},
240 register_mapping{"x7", 7, dwarf::aarch64::x7, 64, "int64"},
241 register_mapping{"x8", 8, dwarf::aarch64::x8, 64, "int64"},
242 register_mapping{"x9", 9, dwarf::aarch64::x9, 64, "int64"},
243 register_mapping{"x10", 10, dwarf::aarch64::x10, 64, "int64"},
244 register_mapping{"x11", 11, dwarf::aarch64::x11, 64, "int64"},
245 register_mapping{"x12", 12, dwarf::aarch64::x12, 64, "int64"},
246 register_mapping{"x13", 13, dwarf::aarch64::x13, 64, "int64"},
247 register_mapping{"x14", 14, dwarf::aarch64::x14, 64, "int64"},
248 register_mapping{"x15", 15, dwarf::aarch64::x15, 64, "int64"},
249 register_mapping{"x16", 16, dwarf::aarch64::x16, 64, "int64"},
250 register_mapping{"x17", 17, dwarf::aarch64::x17, 64, "int64"},
251 register_mapping{"x18", 18, dwarf::aarch64::x18, 64, "int64"},
252 register_mapping{"x19", 19, dwarf::aarch64::x19, 64, "int64"},
253 register_mapping{"x20", 20, dwarf::aarch64::x20, 64, "int64"},
254 register_mapping{"x21", 21, dwarf::aarch64::x21, 64, "int64"},
255 register_mapping{"x22", 22, dwarf::aarch64::x22, 64, "int64"},
256 register_mapping{"x23", 23, dwarf::aarch64::x23, 64, "int64"},
257 register_mapping{"x24", 24, dwarf::aarch64::x24, 64, "int64"},
258 register_mapping{"x25", 25, dwarf::aarch64::x25, 64, "int64"},
259 register_mapping{"x26", 26, dwarf::aarch64::x26, 64, "int64"},
260 register_mapping{"x27", 27, dwarf::aarch64::x27, 64, "int64"},
261 register_mapping{"x28", 28, dwarf::aarch64::x28, 64, "int64"},
262 register_mapping{"x29", 29, dwarf::aarch64::fp, 64, "data_ptr"},
263 register_mapping{"x30", 30, dwarf::aarch64::lr, 64, "code_ptr"},
264 register_mapping{"sp", 31, dwarf::aarch64::sp, 64, "data_ptr"},
265 register_mapping{"pc", 32, dwarf::aarch64::pc, 64, "code_ptr"},
266 register_mapping{"cpsr", 33, dwarf::aarch64::pstate, 32, "int32"} // PSTATE sent as 32-bit CPSR equivalent
267 };
268
269 static constexpr microfmt::array extended_arch_layout{register_mapping{"v0", 34, dwarf::aarch64::v0, 128, ""},
270 register_mapping{"v1", 35, dwarf::aarch64::v1, 128, ""},
271 register_mapping{"v2", 36, dwarf::aarch64::v2, 128, ""},
272 register_mapping{"v3", 37, dwarf::aarch64::v3, 128, ""},
273 register_mapping{"v4", 38, dwarf::aarch64::v4, 128, ""},
274 register_mapping{"v5", 39, dwarf::aarch64::v5, 128, ""},
275 register_mapping{"v6", 40, dwarf::aarch64::v6, 128, ""},
276 register_mapping{"v7", 41, dwarf::aarch64::v7, 128, ""},
277 register_mapping{"v8", 42, dwarf::aarch64::v8, 128, ""},
278 register_mapping{"v9", 43, dwarf::aarch64::v9, 128, ""},
279 register_mapping{"v10", 44, dwarf::aarch64::v10, 128, ""},
280 register_mapping{"v11", 45, dwarf::aarch64::v11, 128, ""},
281 register_mapping{"v12", 46, dwarf::aarch64::v12, 128, ""},
282 register_mapping{"v13", 47, dwarf::aarch64::v13, 128, ""},
283 register_mapping{"v14", 48, dwarf::aarch64::v14, 128, ""},
284 register_mapping{"v15", 49, dwarf::aarch64::v15, 128, ""},
285 register_mapping{"v16", 50, dwarf::aarch64::v16, 128, ""},
286 register_mapping{"v17", 51, dwarf::aarch64::v17, 128, ""},
287 register_mapping{"v18", 52, dwarf::aarch64::v18, 128, ""},
288 register_mapping{"v19", 53, dwarf::aarch64::v19, 128, ""},
289 register_mapping{"v20", 54, dwarf::aarch64::v20, 128, ""},
290 register_mapping{"v21", 55, dwarf::aarch64::v21, 128, ""},
291 register_mapping{"v22", 56, dwarf::aarch64::v22, 128, ""},
292 register_mapping{"v23", 57, dwarf::aarch64::v23, 128, ""},
293 register_mapping{"v24", 58, dwarf::aarch64::v24, 128, ""},
294 register_mapping{"v25", 59, dwarf::aarch64::v25, 128, ""},
295 register_mapping{"v26", 60, dwarf::aarch64::v26, 128, ""},
296 register_mapping{"v27", 61, dwarf::aarch64::v27, 128, ""},
297 register_mapping{"v28", 62, dwarf::aarch64::v28, 128, ""},
298 register_mapping{"v29", 63, dwarf::aarch64::v29, 128, ""},
299 register_mapping{"v30", 64, dwarf::aarch64::v30, 128, ""},
300 register_mapping{"v31", 65, dwarf::aarch64::v31, 128, ""}};
301
302 static constexpr microfmt::array non_standard_arch_layout{
338 "int64"},
340 "int64"},
342 "int64"},
375 "int32"},
378 "int64"},
380 "int32"},
383 "int64"},
385};
386
387// ============================================================================
388// ARM32 (AArch32)
389// ============================================================================
390template <> struct register_traits<tags::arm32> : register_traits_base<register_traits<tags::arm32>> {
391 static constexpr microfmt::array arch_layout{
392 register_mapping{"r0", 0, dwarf::arm32::r0, 32, "int32"},
393 register_mapping{"r1", 1, dwarf::arm32::r1, 32, "int32"},
394 register_mapping{"r2", 2, dwarf::arm32::r2, 32, "int32"},
395 register_mapping{"r3", 3, dwarf::arm32::r3, 32, "int32"},
396 register_mapping{"r4", 4, dwarf::arm32::r4, 32, "int32"},
397 register_mapping{"r5", 5, dwarf::arm32::r5, 32, "int32"},
398 register_mapping{"r6", 6, dwarf::arm32::r6, 32, "int32"},
399 register_mapping{"r7", 7, dwarf::arm32::r7, 32, "int32"},
400 register_mapping{"r8", 8, dwarf::arm32::r8, 32, "int32"},
401 register_mapping{"r9", 9, dwarf::arm32::r9, 32, "int32"},
402 register_mapping{"r10", 10, dwarf::arm32::r10, 32, "int32"},
403 register_mapping{"r11", 11, dwarf::arm32::fp, 32, "data_ptr"},
404 register_mapping{"r12", 12, dwarf::arm32::r12, 32, "int32"},
405 register_mapping{"sp", 13, dwarf::arm32::sp, 32, "data_ptr"},
406 register_mapping{"lr", 14, dwarf::arm32::lr, 32, "code_ptr"},
407 register_mapping{"pc", 15, dwarf::arm32::pc, 32, "code_ptr"},
408
409 // Note: GDB ARM layouts typically map FPA floats at 16-24. CPSR is commonly 25.
410 register_mapping{"cpsr", 25, dwarf::arm32::cpsr, 32, "int32"}};
411
412 static constexpr microfmt::array extended_arch_layout{
413 register_mapping{"d0", 26, dwarf::arm32::d0, 64, "ieee_double"},
414 register_mapping{"d1", 27, dwarf::arm32::d1, 64, "ieee_double"},
415 register_mapping{"d2", 28, dwarf::arm32::d2, 64, "ieee_double"},
416 register_mapping{"d3", 29, dwarf::arm32::d3, 64, "ieee_double"},
417 register_mapping{"d4", 30, dwarf::arm32::d4, 64, "ieee_double"},
418 register_mapping{"d5", 31, dwarf::arm32::d5, 64, "ieee_double"},
419 register_mapping{"d6", 32, dwarf::arm32::d6, 64, "ieee_double"},
420 register_mapping{"d7", 33, dwarf::arm32::d7, 64, "ieee_double"},
421 register_mapping{"d8", 34, dwarf::arm32::d8, 64, "ieee_double"},
422 register_mapping{"d9", 35, dwarf::arm32::d9, 64, "ieee_double"},
423 register_mapping{"d10", 36, dwarf::arm32::d10, 64, "ieee_double"},
424 register_mapping{"d11", 37, dwarf::arm32::d11, 64, "ieee_double"},
425 register_mapping{"d12", 38, dwarf::arm32::d12, 64, "ieee_double"},
426 register_mapping{"d13", 39, dwarf::arm32::d13, 64, "ieee_double"},
427 register_mapping{"d14", 40, dwarf::arm32::d14, 64, "ieee_double"},
428 register_mapping{"d15", 41, dwarf::arm32::d15, 64, "ieee_double"},
429 register_mapping{"d16", 42, dwarf::arm32::d16, 64, "ieee_double"},
430 register_mapping{"d17", 43, dwarf::arm32::d17, 64, "ieee_double"},
431 register_mapping{"d18", 44, dwarf::arm32::d18, 64, "ieee_double"},
432 register_mapping{"d19", 45, dwarf::arm32::d19, 64, "ieee_double"},
433 register_mapping{"d20", 46, dwarf::arm32::d20, 64, "ieee_double"},
434 register_mapping{"d21", 47, dwarf::arm32::d21, 64, "ieee_double"},
435 register_mapping{"d22", 48, dwarf::arm32::d22, 64, "ieee_double"},
436 register_mapping{"d23", 49, dwarf::arm32::d23, 64, "ieee_double"},
437 register_mapping{"d24", 50, dwarf::arm32::d24, 64, "ieee_double"},
438 register_mapping{"d25", 51, dwarf::arm32::d25, 64, "ieee_double"},
439 register_mapping{"d26", 52, dwarf::arm32::d26, 64, "ieee_double"},
440 register_mapping{"d27", 53, dwarf::arm32::d27, 64, "ieee_double"},
441 register_mapping{"d28", 54, dwarf::arm32::d28, 64, "ieee_double"},
442 register_mapping{"d29", 55, dwarf::arm32::d29, 64, "ieee_double"},
443 register_mapping{"d30", 56, dwarf::arm32::d30, 64, "ieee_double"},
444 register_mapping{"d31", 57, dwarf::arm32::d31, 64, "ieee_double"}};
445
446 static constexpr microfmt::array non_standard_arch_layout{
508};
509
510// ============================================================================
511// RISC-V 64
512// ============================================================================
513template <> struct register_traits<tags::riscv64> : register_traits_base<register_traits<tags::riscv64>> {
514 static constexpr microfmt::array arch_layout{// GDB exactly matches DWARF for x0-x31
515 register_mapping{"zero", 0, dwarf::riscv::x0, 64, "int64"},
516 register_mapping{"ra", 1, dwarf::riscv::ra, 64, "code_ptr"},
517 register_mapping{"sp", 2, dwarf::riscv::sp, 64, "data_ptr"},
518 register_mapping{"gp", 3, dwarf::riscv::gp, 64, "data_ptr"},
519 register_mapping{"tp", 4, dwarf::riscv::tp, 64, "data_ptr"},
520 register_mapping{"t0", 5, dwarf::riscv::t0, 64, "int64"},
521 register_mapping{"t1", 6, dwarf::riscv::t1, 64, "int64"},
522 register_mapping{"t2", 7, dwarf::riscv::t2, 64, "int64"},
523 register_mapping{"s0", 8, dwarf::riscv::s0, 64, "data_ptr"},
524 register_mapping{"s1", 9, dwarf::riscv::s1, 64, "int64"},
525 register_mapping{"a0", 10, dwarf::riscv::a0, 64, "int64"},
526 register_mapping{"a1", 11, dwarf::riscv::a1, 64, "int64"},
527 register_mapping{"a2", 12, dwarf::riscv::a2, 64, "int64"},
528 register_mapping{"a3", 13, dwarf::riscv::a3, 64, "int64"},
529 register_mapping{"a4", 14, dwarf::riscv::a4, 64, "int64"},
530 register_mapping{"a5", 15, dwarf::riscv::a5, 64, "int64"},
531 register_mapping{"a6", 16, dwarf::riscv::a6, 64, "int64"},
532 register_mapping{"a7", 17, dwarf::riscv::a7, 64, "int64"},
533 register_mapping{"s2", 18, dwarf::riscv::s2, 64, "int64"},
534 register_mapping{"s3", 19, dwarf::riscv::s3, 64, "int64"},
535 register_mapping{"s4", 20, dwarf::riscv::s4, 64, "int64"},
536 register_mapping{"s5", 21, dwarf::riscv::s5, 64, "int64"},
537 register_mapping{"s6", 22, dwarf::riscv::s6, 64, "int64"},
538 register_mapping{"s7", 23, dwarf::riscv::s7, 64, "int64"},
539 register_mapping{"s8", 24, dwarf::riscv::s8, 64, "int64"},
540 register_mapping{"s9", 25, dwarf::riscv::s9, 64, "int64"},
541 register_mapping{"s10", 26, dwarf::riscv::s10, 64, "int64"},
542 register_mapping{"s11", 27, dwarf::riscv::s11, 64, "int64"},
543 register_mapping{"t3", 28, dwarf::riscv::t3, 64, "int64"},
544 register_mapping{"t4", 29, dwarf::riscv::t4, 64, "int64"},
545 register_mapping{"t5", 30, dwarf::riscv::t5, 64, "int64"},
546 register_mapping{"t6", 31, dwarf::riscv::t6, 64, "int64"},
547
548 // Divergence: GDB PC is 32, DWARF PC is 65
549 register_mapping{"pc", 32, dwarf::riscv::pc, 64, "code_ptr"}};
550
551 static constexpr microfmt::array extended_arch_layout{
552 register_mapping{"f0", 33, dwarf::riscv::f0, 64, "ieee_double"},
553 register_mapping{"f1", 34, dwarf::riscv::f1, 64, "ieee_double"},
554 register_mapping{"f2", 35, dwarf::riscv::f2, 64, "ieee_double"},
555 register_mapping{"f3", 36, dwarf::riscv::f3, 64, "ieee_double"},
556 register_mapping{"f4", 37, dwarf::riscv::f4, 64, "ieee_double"},
557 register_mapping{"f5", 38, dwarf::riscv::f5, 64, "ieee_double"},
558 register_mapping{"f6", 39, dwarf::riscv::f6, 64, "ieee_double"},
559 register_mapping{"f7", 40, dwarf::riscv::f7, 64, "ieee_double"},
560 register_mapping{"f8", 41, dwarf::riscv::f8, 64, "ieee_double"},
561 register_mapping{"f9", 42, dwarf::riscv::f9, 64, "ieee_double"},
562 register_mapping{"f10", 43, dwarf::riscv::f10, 64, "ieee_double"},
563 register_mapping{"f11", 44, dwarf::riscv::f11, 64, "ieee_double"},
564 register_mapping{"f12", 45, dwarf::riscv::f12, 64, "ieee_double"},
565 register_mapping{"f13", 46, dwarf::riscv::f13, 64, "ieee_double"},
566 register_mapping{"f14", 47, dwarf::riscv::f14, 64, "ieee_double"},
567 register_mapping{"f15", 48, dwarf::riscv::f15, 64, "ieee_double"},
568 register_mapping{"f16", 49, dwarf::riscv::f16, 64, "ieee_double"},
569 register_mapping{"f17", 50, dwarf::riscv::f17, 64, "ieee_double"},
570 register_mapping{"f18", 51, dwarf::riscv::f18, 64, "ieee_double"},
571 register_mapping{"f19", 52, dwarf::riscv::f19, 64, "ieee_double"},
572 register_mapping{"f20", 53, dwarf::riscv::f20, 64, "ieee_double"},
573 register_mapping{"f21", 54, dwarf::riscv::f21, 64, "ieee_double"},
574 register_mapping{"f22", 55, dwarf::riscv::f22, 64, "ieee_double"},
575 register_mapping{"f23", 56, dwarf::riscv::f23, 64, "ieee_double"},
576 register_mapping{"f24", 57, dwarf::riscv::f24, 64, "ieee_double"},
577 register_mapping{"f25", 58, dwarf::riscv::f25, 64, "ieee_double"},
578 register_mapping{"f26", 59, dwarf::riscv::f26, 64, "ieee_double"},
579 register_mapping{"f27", 60, dwarf::riscv::f27, 64, "ieee_double"},
580 register_mapping{"f28", 61, dwarf::riscv::f28, 64, "ieee_double"},
581 register_mapping{"f29", 62, dwarf::riscv::f29, 64, "ieee_double"},
582 register_mapping{"f30", 63, dwarf::riscv::f30, 64, "ieee_double"},
583 register_mapping{"f31", 64, dwarf::riscv::f31, 64, "ieee_double"}};
584
585 static constexpr microfmt::array non_standard_arch_layout{
592 register_mapping{"mtvec", dwarf::riscv::mtvec, dwarf::riscv::mtvec, 64, "code_ptr"}};
593};
594
595// ============================================================================
596// RISC-V 32
597// ============================================================================
598template <> struct register_traits<tags::riscv32> : register_traits_base<register_traits<tags::riscv32>> {
599 static constexpr microfmt::array arch_layout{register_mapping{"zero", 0, dwarf::riscv::x0, 32, "int32"},
600 register_mapping{"ra", 1, dwarf::riscv::ra, 32, "code_ptr"},
601 register_mapping{"sp", 2, dwarf::riscv::sp, 32, "data_ptr"},
602 register_mapping{"gp", 3, dwarf::riscv::gp, 32, "data_ptr"},
603 register_mapping{"tp", 4, dwarf::riscv::tp, 32, "data_ptr"},
604 register_mapping{"t0", 5, dwarf::riscv::t0, 32, "int32"},
605 register_mapping{"t1", 6, dwarf::riscv::t1, 32, "int32"},
606 register_mapping{"t2", 7, dwarf::riscv::t2, 32, "int32"},
607 register_mapping{"s0", 8, dwarf::riscv::s0, 32, "data_ptr"},
608 register_mapping{"s1", 9, dwarf::riscv::s1, 32, "int32"},
609 register_mapping{"a0", 10, dwarf::riscv::a0, 32, "int32"},
610 register_mapping{"a1", 11, dwarf::riscv::a1, 32, "int32"},
611 register_mapping{"a2", 12, dwarf::riscv::a2, 32, "int32"},
612 register_mapping{"a3", 13, dwarf::riscv::a3, 32, "int32"},
613 register_mapping{"a4", 14, dwarf::riscv::a4, 32, "int32"},
614 register_mapping{"a5", 15, dwarf::riscv::a5, 32, "int32"},
615 register_mapping{"a6", 16, dwarf::riscv::a6, 32, "int32"},
616 register_mapping{"a7", 17, dwarf::riscv::a7, 32, "int32"},
617 register_mapping{"s2", 18, dwarf::riscv::s2, 32, "int32"},
618 register_mapping{"s3", 19, dwarf::riscv::s3, 32, "int32"},
619 register_mapping{"s4", 20, dwarf::riscv::s4, 32, "int32"},
620 register_mapping{"s5", 21, dwarf::riscv::s5, 32, "int32"},
621 register_mapping{"s6", 22, dwarf::riscv::s6, 32, "int32"},
622 register_mapping{"s7", 23, dwarf::riscv::s7, 32, "int32"},
623 register_mapping{"s8", 24, dwarf::riscv::s8, 32, "int32"},
624 register_mapping{"s9", 25, dwarf::riscv::s9, 32, "int32"},
625 register_mapping{"s10", 26, dwarf::riscv::s10, 32, "int32"},
626 register_mapping{"s11", 27, dwarf::riscv::s11, 32, "int32"},
627 register_mapping{"t3", 28, dwarf::riscv::t3, 32, "int32"},
628 register_mapping{"t4", 29, dwarf::riscv::t4, 32, "int32"},
629 register_mapping{"t5", 30, dwarf::riscv::t5, 32, "int32"},
630 register_mapping{"t6", 31, dwarf::riscv::t6, 32, "int32"},
631 register_mapping{"pc", 32, dwarf::riscv::pc, 32, "code_ptr"}};
632
633 static constexpr microfmt::array extended_arch_layout{
634 register_mapping{"f0", 33, dwarf::riscv::f0, 32, "ieee_single"},
635 register_mapping{"f1", 34, dwarf::riscv::f1, 32, "ieee_single"},
636 register_mapping{"f2", 35, dwarf::riscv::f2, 32, "ieee_single"},
637 register_mapping{"f3", 36, dwarf::riscv::f3, 32, "ieee_single"},
638 register_mapping{"f4", 37, dwarf::riscv::f4, 32, "ieee_single"},
639 register_mapping{"f5", 38, dwarf::riscv::f5, 32, "ieee_single"},
640 register_mapping{"f6", 39, dwarf::riscv::f6, 32, "ieee_single"},
641 register_mapping{"f7", 40, dwarf::riscv::f7, 32, "ieee_single"},
642 register_mapping{"f8", 41, dwarf::riscv::f8, 32, "ieee_single"},
643 register_mapping{"f9", 42, dwarf::riscv::f9, 32, "ieee_single"},
644 register_mapping{"f10", 43, dwarf::riscv::f10, 32, "ieee_single"},
645 register_mapping{"f11", 44, dwarf::riscv::f11, 32, "ieee_single"},
646 register_mapping{"f12", 45, dwarf::riscv::f12, 32, "ieee_single"},
647 register_mapping{"f13", 46, dwarf::riscv::f13, 32, "ieee_single"},
648 register_mapping{"f14", 47, dwarf::riscv::f14, 32, "ieee_single"},
649 register_mapping{"f15", 48, dwarf::riscv::f15, 32, "ieee_single"},
650 register_mapping{"f16", 49, dwarf::riscv::f16, 32, "ieee_single"},
651 register_mapping{"f17", 50, dwarf::riscv::f17, 32, "ieee_single"},
652 register_mapping{"f18", 51, dwarf::riscv::f18, 32, "ieee_single"},
653 register_mapping{"f19", 52, dwarf::riscv::f19, 32, "ieee_single"},
654 register_mapping{"f20", 53, dwarf::riscv::f20, 32, "ieee_single"},
655 register_mapping{"f21", 54, dwarf::riscv::f21, 32, "ieee_single"},
656 register_mapping{"f22", 55, dwarf::riscv::f22, 32, "ieee_single"},
657 register_mapping{"f23", 56, dwarf::riscv::f23, 32, "ieee_single"},
658 register_mapping{"f24", 57, dwarf::riscv::f24, 32, "ieee_single"},
659 register_mapping{"f25", 58, dwarf::riscv::f25, 32, "ieee_single"},
660 register_mapping{"f26", 59, dwarf::riscv::f26, 32, "ieee_single"},
661 register_mapping{"f27", 60, dwarf::riscv::f27, 32, "ieee_single"},
662 register_mapping{"f28", 61, dwarf::riscv::f28, 32, "ieee_single"},
663 register_mapping{"f29", 62, dwarf::riscv::f29, 32, "ieee_single"},
664 register_mapping{"f30", 63, dwarf::riscv::f30, 32, "ieee_single"},
665 register_mapping{"f31", 64, dwarf::riscv::f31, 32, "ieee_single"}};
666
667 static constexpr microfmt::array non_standard_arch_layout{
674 register_mapping{"mtvec", dwarf::riscv::mtvec, dwarf::riscv::mtvec, 32, "code_ptr"}};
675};
676
677} // namespace microfmt::gdb
#define MICROFMT_API_CLASS
Definition compat.hpp:181
@ v3
Definition dwarf_registers.hpp:274
@ v6
Definition dwarf_registers.hpp:277
@ x10
Definition dwarf_registers.hpp:242
@ cnthv_ctl_el2
Definition dwarf_registers.hpp:373
@ mpidr_el1
Definition dwarf_registers.hpp:337
@ x27
Definition dwarf_registers.hpp:259
@ esr_el2
Definition dwarf_registers.hpp:345
@ cnthp_tval_el2
Definition dwarf_registers.hpp:367
@ x15
Definition dwarf_registers.hpp:247
@ v27
Definition dwarf_registers.hpp:298
@ v8
Definition dwarf_registers.hpp:279
@ x6
Definition dwarf_registers.hpp:238
@ cpacr_el1
Definition dwarf_registers.hpp:335
@ x17
Definition dwarf_registers.hpp:249
@ sctlr_el2
Definition dwarf_registers.hpp:323
@ x22
Definition dwarf_registers.hpp:254
@ currentel
Definition dwarf_registers.hpp:354
@ cnthvs_cval_el2
Definition dwarf_registers.hpp:380
@ daif
Definition dwarf_registers.hpp:355
@ x2
Definition dwarf_registers.hpp:234
@ x4
Definition dwarf_registers.hpp:236
@ v24
Definition dwarf_registers.hpp:295
@ cntvct_el0
Definition dwarf_registers.hpp:360
@ contextidr_el1
Definition dwarf_registers.hpp:334
@ cnthp_ctl_el2
Definition dwarf_registers.hpp:368
@ v26
Definition dwarf_registers.hpp:297
@ cnthv_tval_el2
Definition dwarf_registers.hpp:372
@ v2
Definition dwarf_registers.hpp:273
@ cnthv_cval_el2
Definition dwarf_registers.hpp:374
@ id_aa64mmfr0_el1
Definition dwarf_registers.hpp:340
@ x28
Definition dwarf_registers.hpp:260
@ pstate
Definition dwarf_registers.hpp:353
@ esr_el1
Definition dwarf_registers.hpp:331
@ v18
Definition dwarf_registers.hpp:289
@ cntvoff_el2
Definition dwarf_registers.hpp:370
@ far_el2
Definition dwarf_registers.hpp:346
@ v20
Definition dwarf_registers.hpp:291
@ nzcv
Definition dwarf_registers.hpp:356
@ x9
Definition dwarf_registers.hpp:241
@ cntv_tval_el0
Definition dwarf_registers.hpp:364
@ sp_el3
Definition dwarf_registers.hpp:318
@ x26
Definition dwarf_registers.hpp:258
@ vttbr_el2
Definition dwarf_registers.hpp:349
@ cntpct_el0
Definition dwarf_registers.hpp:359
@ v11
Definition dwarf_registers.hpp:282
@ cntp_ctl_el0
Definition dwarf_registers.hpp:362
@ lr
Definition dwarf_registers.hpp:268
@ par_el1
Definition dwarf_registers.hpp:333
@ tpidr_el2
Definition dwarf_registers.hpp:308
@ cnthps_ctl_el2
Definition dwarf_registers.hpp:376
@ x18
Definition dwarf_registers.hpp:250
@ cnthctl_el2
Definition dwarf_registers.hpp:371
@ id_aa64isar0_el1
Definition dwarf_registers.hpp:341
@ mair_el1
Definition dwarf_registers.hpp:329
@ x16
Definition dwarf_registers.hpp:248
@ v22
Definition dwarf_registers.hpp:293
@ x14
Definition dwarf_registers.hpp:246
@ scr_el3
Definition dwarf_registers.hpp:350
@ x23
Definition dwarf_registers.hpp:255
@ revidr_el1
Definition dwarf_registers.hpp:338
@ cntfrq_el0
Definition dwarf_registers.hpp:358
@ vtcr_el2
Definition dwarf_registers.hpp:348
@ vbar_el3
Definition dwarf_registers.hpp:325
@ x20
Definition dwarf_registers.hpp:252
@ tpidr_el3
Definition dwarf_registers.hpp:309
@ fp
Definition dwarf_registers.hpp:267
@ x19
Definition dwarf_registers.hpp:251
@ sctlr_el3
Definition dwarf_registers.hpp:324
@ v16
Definition dwarf_registers.hpp:287
@ v1
Definition dwarf_registers.hpp:272
@ cntv_ctl_el0
Definition dwarf_registers.hpp:365
@ x5
Definition dwarf_registers.hpp:237
@ vbar_el2
Definition dwarf_registers.hpp:316
@ v12
Definition dwarf_registers.hpp:283
@ v19
Definition dwarf_registers.hpp:290
@ v17
Definition dwarf_registers.hpp:288
@ spsr_el2
Definition dwarf_registers.hpp:321
@ sctlr_el1
Definition dwarf_registers.hpp:314
@ tpidrro_el0
Definition dwarf_registers.hpp:306
@ x0
Definition dwarf_registers.hpp:232
@ x11
Definition dwarf_registers.hpp:243
@ sp_el0
Definition dwarf_registers.hpp:310
@ esr_el3
Definition dwarf_registers.hpp:351
@ far_el3
Definition dwarf_registers.hpp:352
@ amair_el1
Definition dwarf_registers.hpp:330
@ sp
Definition dwarf_registers.hpp:263
@ x8
Definition dwarf_registers.hpp:240
@ v21
Definition dwarf_registers.hpp:292
@ v4
Definition dwarf_registers.hpp:275
@ v0
Definition dwarf_registers.hpp:271
@ v9
Definition dwarf_registers.hpp:280
@ elr_el1
Definition dwarf_registers.hpp:312
@ ttbr0_el1
Definition dwarf_registers.hpp:326
@ hcr_el2
Definition dwarf_registers.hpp:347
@ far_el1
Definition dwarf_registers.hpp:332
@ v30
Definition dwarf_registers.hpp:301
@ mair_el2
Definition dwarf_registers.hpp:344
@ cnthp_cval_el2
Definition dwarf_registers.hpp:369
@ x21
Definition dwarf_registers.hpp:253
@ id_aa64pfr0_el1
Definition dwarf_registers.hpp:339
@ spsr_el1
Definition dwarf_registers.hpp:313
@ elr_el3
Definition dwarf_registers.hpp:320
@ v15
Definition dwarf_registers.hpp:286
@ cnthps_tval_el2
Definition dwarf_registers.hpp:375
@ v23
Definition dwarf_registers.hpp:294
@ v5
Definition dwarf_registers.hpp:276
@ tpidr_el0
Definition dwarf_registers.hpp:305
@ sp_el1
Definition dwarf_registers.hpp:311
@ cntv_cval_el0
Definition dwarf_registers.hpp:366
@ x3
Definition dwarf_registers.hpp:235
@ tcr_el1
Definition dwarf_registers.hpp:328
@ pc
Definition dwarf_registers.hpp:264
@ v28
Definition dwarf_registers.hpp:299
@ ttbr0_el2
Definition dwarf_registers.hpp:342
@ tpidr_el1
Definition dwarf_registers.hpp:307
@ cnthvs_tval_el2
Definition dwarf_registers.hpp:378
@ x7
Definition dwarf_registers.hpp:239
@ x1
Definition dwarf_registers.hpp:233
@ spsr_el3
Definition dwarf_registers.hpp:322
@ cntp_cval_el0
Definition dwarf_registers.hpp:363
@ x24
Definition dwarf_registers.hpp:256
@ v7
Definition dwarf_registers.hpp:278
@ x25
Definition dwarf_registers.hpp:257
@ v25
Definition dwarf_registers.hpp:296
@ cntp_tval_el0
Definition dwarf_registers.hpp:361
@ v31
Definition dwarf_registers.hpp:302
@ ttbr1_el1
Definition dwarf_registers.hpp:327
@ cnthps_cval_el2
Definition dwarf_registers.hpp:377
@ elr_el2
Definition dwarf_registers.hpp:319
@ cnthvs_ctl_el2
Definition dwarf_registers.hpp:379
@ x13
Definition dwarf_registers.hpp:245
@ v14
Definition dwarf_registers.hpp:285
@ x12
Definition dwarf_registers.hpp:244
@ midr_el1
Definition dwarf_registers.hpp:336
@ v13
Definition dwarf_registers.hpp:284
@ v29
Definition dwarf_registers.hpp:300
@ tcr_el2
Definition dwarf_registers.hpp:343
@ sp_el2
Definition dwarf_registers.hpp:317
@ v10
Definition dwarf_registers.hpp:281
@ vbar_el1
Definition dwarf_registers.hpp:315
@ cntkctl_el1
Definition dwarf_registers.hpp:381
@ d13
Definition dwarf_registers.hpp:526
@ cntp_tval
Definition dwarf_registers.hpp:589
@ d3
Definition dwarf_registers.hpp:516
@ spsr
Definition dwarf_registers.hpp:551
@ d17
Definition dwarf_registers.hpp:530
@ cpacr
Definition dwarf_registers.hpp:568
@ d27
Definition dwarf_registers.hpp:540
@ r4
Definition dwarf_registers.hpp:494
@ cntpct
Definition dwarf_registers.hpp:587
@ cntvoff
Definition dwarf_registers.hpp:598
@ d6
Definition dwarf_registers.hpp:519
@ d22
Definition dwarf_registers.hpp:535
@ cnthv_cval
Definition dwarf_registers.hpp:602
@ iepsr
Definition dwarf_registers.hpp:558
@ ttbr0
Definition dwarf_registers.hpp:569
@ mpidr
Definition dwarf_registers.hpp:584
@ actlr
Definition dwarf_registers.hpp:567
@ d10
Definition dwarf_registers.hpp:523
@ ipsr
Definition dwarf_registers.hpp:556
@ d23
Definition dwarf_registers.hpp:536
@ iapsr
Definition dwarf_registers.hpp:553
@ mair1
Definition dwarf_registers.hpp:580
@ d11
Definition dwarf_registers.hpp:524
@ apsr
Definition dwarf_registers.hpp:552
@ d4
Definition dwarf_registers.hpp:517
@ d8
Definition dwarf_registers.hpp:521
@ cnthv_tval
Definition dwarf_registers.hpp:600
@ control
Definition dwarf_registers.hpp:565
@ cnthps_ctl
Definition dwarf_registers.hpp:604
@ d12
Definition dwarf_registers.hpp:525
@ d18
Definition dwarf_registers.hpp:531
@ d7
Definition dwarf_registers.hpp:520
@ d15
Definition dwarf_registers.hpp:528
@ d28
Definition dwarf_registers.hpp:541
@ cnthvs_tval
Definition dwarf_registers.hpp:606
@ tpidruro
Definition dwarf_registers.hpp:548
@ msp
Definition dwarf_registers.hpp:559
@ cnthp_ctl
Definition dwarf_registers.hpp:596
@ pc
Definition dwarf_registers.hpp:510
@ cnthvs_cval
Definition dwarf_registers.hpp:608
@ cntv_ctl
Definition dwarf_registers.hpp:593
@ tpidrprw
Definition dwarf_registers.hpp:549
@ ifsr
Definition dwarf_registers.hpp:574
@ cntp_ctl
Definition dwarf_registers.hpp:590
@ mair0
Definition dwarf_registers.hpp:579
@ dfsr
Definition dwarf_registers.hpp:573
@ lr
Definition dwarf_registers.hpp:509
@ r6
Definition dwarf_registers.hpp:496
@ vbar
Definition dwarf_registers.hpp:577
@ d0
Definition dwarf_registers.hpp:513
@ d19
Definition dwarf_registers.hpp:532
@ contextidr
Definition dwarf_registers.hpp:578
@ amair0
Definition dwarf_registers.hpp:581
@ cnthps_tval
Definition dwarf_registers.hpp:603
@ r9
Definition dwarf_registers.hpp:499
@ cntfrq
Definition dwarf_registers.hpp:586
@ d24
Definition dwarf_registers.hpp:537
@ d31
Definition dwarf_registers.hpp:544
@ amair1
Definition dwarf_registers.hpp:582
@ cnthv_ctl
Definition dwarf_registers.hpp:601
@ d1
Definition dwarf_registers.hpp:514
@ midr
Definition dwarf_registers.hpp:583
@ dfar
Definition dwarf_registers.hpp:575
@ primask
Definition dwarf_registers.hpp:561
@ r2
Definition dwarf_registers.hpp:492
@ faultmask
Definition dwarf_registers.hpp:564
@ d5
Definition dwarf_registers.hpp:518
@ sctlr
Definition dwarf_registers.hpp:566
@ r8
Definition dwarf_registers.hpp:498
@ r5
Definition dwarf_registers.hpp:495
@ psp
Definition dwarf_registers.hpp:560
@ cnthvs_ctl
Definition dwarf_registers.hpp:607
@ fp
Definition dwarf_registers.hpp:507
@ d25
Definition dwarf_registers.hpp:538
@ cnthp_cval
Definition dwarf_registers.hpp:597
@ ifar
Definition dwarf_registers.hpp:576
@ d9
Definition dwarf_registers.hpp:522
@ r1
Definition dwarf_registers.hpp:491
@ cntv_cval
Definition dwarf_registers.hpp:594
@ ttbcr
Definition dwarf_registers.hpp:571
@ cntp_cval
Definition dwarf_registers.hpp:591
@ r3
Definition dwarf_registers.hpp:493
@ cntvct
Definition dwarf_registers.hpp:588
@ basepri
Definition dwarf_registers.hpp:562
@ d21
Definition dwarf_registers.hpp:534
@ epsr
Definition dwarf_registers.hpp:557
@ cpsr
Definition dwarf_registers.hpp:550
@ cntkctl
Definition dwarf_registers.hpp:609
@ d29
Definition dwarf_registers.hpp:542
@ tpidrurw
Definition dwarf_registers.hpp:547
@ basepri_max
Definition dwarf_registers.hpp:563
@ d2
Definition dwarf_registers.hpp:515
@ eapsr
Definition dwarf_registers.hpp:554
@ sp
Definition dwarf_registers.hpp:508
@ xpsr
Definition dwarf_registers.hpp:555
@ cnthctl
Definition dwarf_registers.hpp:599
@ cnthp_tval
Definition dwarf_registers.hpp:595
@ dacr
Definition dwarf_registers.hpp:572
@ d16
Definition dwarf_registers.hpp:529
@ ttbr1
Definition dwarf_registers.hpp:570
@ r7
Definition dwarf_registers.hpp:497
@ d26
Definition dwarf_registers.hpp:539
@ d14
Definition dwarf_registers.hpp:527
@ cnthps_cval
Definition dwarf_registers.hpp:605
@ d20
Definition dwarf_registers.hpp:533
@ r10
Definition dwarf_registers.hpp:500
@ d30
Definition dwarf_registers.hpp:543
@ r12
Definition dwarf_registers.hpp:502
@ cntv_tval
Definition dwarf_registers.hpp:592
@ r0
Definition dwarf_registers.hpp:490
@ s9
Definition dwarf_registers.hpp:760
@ mstatus
Definition dwarf_registers.hpp:820
@ s7
Definition dwarf_registers.hpp:756
@ f7
Definition dwarf_registers.hpp:786
@ f8
Definition dwarf_registers.hpp:787
@ t2
Definition dwarf_registers.hpp:723
@ f23
Definition dwarf_registers.hpp:802
@ mepc
Definition dwarf_registers.hpp:821
@ s2
Definition dwarf_registers.hpp:746
@ f9
Definition dwarf_registers.hpp:788
@ s8
Definition dwarf_registers.hpp:758
@ ra
Definition dwarf_registers.hpp:711
@ mtvec
Definition dwarf_registers.hpp:822
@ f10
Definition dwarf_registers.hpp:789
@ a7
Definition dwarf_registers.hpp:744
@ gp
Definition dwarf_registers.hpp:715
@ a2
Definition dwarf_registers.hpp:734
@ f15
Definition dwarf_registers.hpp:794
@ s4
Definition dwarf_registers.hpp:750
@ f12
Definition dwarf_registers.hpp:791
@ f3
Definition dwarf_registers.hpp:782
@ f11
Definition dwarf_registers.hpp:790
@ t4
Definition dwarf_registers.hpp:770
@ s3
Definition dwarf_registers.hpp:748
@ sstatus
Definition dwarf_registers.hpp:816
@ f29
Definition dwarf_registers.hpp:808
@ tp
Definition dwarf_registers.hpp:717
@ f0
Definition dwarf_registers.hpp:779
@ s0
Definition dwarf_registers.hpp:725
@ t1
Definition dwarf_registers.hpp:721
@ f24
Definition dwarf_registers.hpp:803
@ s11
Definition dwarf_registers.hpp:764
@ a3
Definition dwarf_registers.hpp:736
@ f17
Definition dwarf_registers.hpp:796
@ f20
Definition dwarf_registers.hpp:799
@ f25
Definition dwarf_registers.hpp:804
@ f5
Definition dwarf_registers.hpp:784
@ t6
Definition dwarf_registers.hpp:776
@ f1
Definition dwarf_registers.hpp:780
@ f16
Definition dwarf_registers.hpp:795
@ f19
Definition dwarf_registers.hpp:798
@ f30
Definition dwarf_registers.hpp:809
@ f26
Definition dwarf_registers.hpp:805
@ f27
Definition dwarf_registers.hpp:806
@ a5
Definition dwarf_registers.hpp:740
@ s1
Definition dwarf_registers.hpp:728
@ sp
Definition dwarf_registers.hpp:713
@ a1
Definition dwarf_registers.hpp:732
@ satp
Definition dwarf_registers.hpp:819
@ sepc
Definition dwarf_registers.hpp:817
@ pc
Definition dwarf_registers.hpp:813
@ f21
Definition dwarf_registers.hpp:800
@ t3
Definition dwarf_registers.hpp:767
@ t0
Definition dwarf_registers.hpp:719
@ f31
Definition dwarf_registers.hpp:810
@ f14
Definition dwarf_registers.hpp:793
@ s10
Definition dwarf_registers.hpp:762
@ t5
Definition dwarf_registers.hpp:773
@ f13
Definition dwarf_registers.hpp:792
@ s6
Definition dwarf_registers.hpp:754
@ a4
Definition dwarf_registers.hpp:738
@ x0
Definition dwarf_registers.hpp:708
@ stval
Definition dwarf_registers.hpp:818
@ f6
Definition dwarf_registers.hpp:785
@ s5
Definition dwarf_registers.hpp:752
@ a0
Definition dwarf_registers.hpp:730
@ f28
Definition dwarf_registers.hpp:807
@ a6
Definition dwarf_registers.hpp:742
@ f2
Definition dwarf_registers.hpp:781
@ f22
Definition dwarf_registers.hpp:801
@ f4
Definition dwarf_registers.hpp:783
@ f18
Definition dwarf_registers.hpp:797
@ dr6
Definition dwarf_registers.hpp:117
@ fs
Definition dwarf_registers.hpp:103
@ eflags
Definition dwarf_registers.hpp:94
@ r13
Definition dwarf_registers.hpp:65
@ xmm8
Definition dwarf_registers.hpp:84
@ dr7
Definition dwarf_registers.hpp:118
@ dr3
Definition dwarf_registers.hpp:116
@ r14
Definition dwarf_registers.hpp:66
@ rbx
Definition dwarf_registers.hpp:55
@ r10
Definition dwarf_registers.hpp:62
@ r9
Definition dwarf_registers.hpp:61
@ xmm4
Definition dwarf_registers.hpp:80
@ cr8
Definition dwarf_registers.hpp:112
@ ds
Definition dwarf_registers.hpp:101
@ rsi
Definition dwarf_registers.hpp:56
@ fs_base
Definition dwarf_registers.hpp:97
@ gs_base
Definition dwarf_registers.hpp:98
@ cr3
Definition dwarf_registers.hpp:110
@ kernel_gs_base
Definition dwarf_registers.hpp:107
@ r15
Definition dwarf_registers.hpp:67
@ rbp
Definition dwarf_registers.hpp:58
@ dr0
Definition dwarf_registers.hpp:113
@ rdx
Definition dwarf_registers.hpp:53
@ rip
Definition dwarf_registers.hpp:68
@ gs
Definition dwarf_registers.hpp:104
@ xmm15
Definition dwarf_registers.hpp:91
@ xmm3
Definition dwarf_registers.hpp:79
@ xmm0
Definition dwarf_registers.hpp:76
@ xmm6
Definition dwarf_registers.hpp:82
@ rcx
Definition dwarf_registers.hpp:54
@ rsp
Definition dwarf_registers.hpp:59
@ rdi
Definition dwarf_registers.hpp:57
@ rax
Definition dwarf_registers.hpp:52
@ cs
Definition dwarf_registers.hpp:99
@ xmm13
Definition dwarf_registers.hpp:89
@ r8
Definition dwarf_registers.hpp:60
@ xmm9
Definition dwarf_registers.hpp:85
@ xmm7
Definition dwarf_registers.hpp:83
@ dr1
Definition dwarf_registers.hpp:114
@ es
Definition dwarf_registers.hpp:102
@ xmm10
Definition dwarf_registers.hpp:86
@ xmm5
Definition dwarf_registers.hpp:81
@ xmm2
Definition dwarf_registers.hpp:78
@ cr4
Definition dwarf_registers.hpp:111
@ xmm12
Definition dwarf_registers.hpp:88
@ xmm1
Definition dwarf_registers.hpp:77
@ cr0
Definition dwarf_registers.hpp:108
@ cr2
Definition dwarf_registers.hpp:109
@ xmm14
Definition dwarf_registers.hpp:90
@ ss
Definition dwarf_registers.hpp:100
@ r12
Definition dwarf_registers.hpp:64
@ xmm11
Definition dwarf_registers.hpp:87
@ r11
Definition dwarf_registers.hpp:63
@ dr2
Definition dwarf_registers.hpp:115
@ st1
Definition dwarf_registers.hpp:185
@ st0
Definition dwarf_registers.hpp:184
@ esp
Definition dwarf_registers.hpp:172
@ xmm6
Definition dwarf_registers.hpp:200
@ ecx
Definition dwarf_registers.hpp:169
@ xmm5
Definition dwarf_registers.hpp:199
@ st4
Definition dwarf_registers.hpp:188
@ edi
Definition dwarf_registers.hpp:175
@ ebx
Definition dwarf_registers.hpp:171
@ st7
Definition dwarf_registers.hpp:191
@ xmm3
Definition dwarf_registers.hpp:197
@ fs_base
Definition dwarf_registers.hpp:205
@ cr0
Definition dwarf_registers.hpp:206
@ esi
Definition dwarf_registers.hpp:174
@ eip
Definition dwarf_registers.hpp:176
@ cr3
Definition dwarf_registers.hpp:207
@ xmm7
Definition dwarf_registers.hpp:201
@ st5
Definition dwarf_registers.hpp:189
@ st6
Definition dwarf_registers.hpp:190
@ st2
Definition dwarf_registers.hpp:186
@ cr4
Definition dwarf_registers.hpp:208
@ xmm2
Definition dwarf_registers.hpp:196
@ st3
Definition dwarf_registers.hpp:187
@ xmm0
Definition dwarf_registers.hpp:194
@ xmm4
Definition dwarf_registers.hpp:198
@ gs_base
Definition dwarf_registers.hpp:204
@ eax
Definition dwarf_registers.hpp:168
@ edx
Definition dwarf_registers.hpp:170
@ ebp
Definition dwarf_registers.hpp:173
@ xmm1
Definition dwarf_registers.hpp:195
Definition gdb_decoders.hpp:15
RELOCO_END_UNSAFE_CODE
Definition remote_object.hpp:132
Maps a single register between GDB and DWARF definitions.
Definition gdb_registers.hpp:15
string_view name
Definition gdb_registers.hpp:16
string_view gdb_type
Definition gdb_registers.hpp:20
Shared lookup implementation for architecture-specific GDB register traits.
Definition gdb_registers.hpp:27
static constexpr span< const register_mapping > non_standard_layout() noexcept
Target-specific system, control, debug, and privileged mappings.
Definition gdb_registers.hpp:102
RELOCO_END_UNSAFE_CODE static RELOCO_BEGIN_UNSAFE_CODE constexpr const register_mapping * find_by_dwarf(uint32_t index) noexcept
Definition gdb_registers.hpp:51
static constexpr span< const register_mapping > extended_layout() noexcept
Standard floating-point and vector register mappings.
Definition gdb_registers.hpp:95
static RELOCO_BEGIN_UNSAFE_CODE constexpr const register_mapping * find_by_gdb(uint32_t index) noexcept
Definition gdb_registers.hpp:31
RELOCO_END_UNSAFE_CODE static RELOCO_BEGIN_UNSAFE_CODE constexpr const register_mapping * find_by_name(string_view name) noexcept
Definition gdb_registers.hpp:71
static RELOCO_END_UNSAFE_CODE constexpr span< const register_mapping > layout() noexcept
Definition gdb_registers.hpp:88
Base template for architecture-specific GDB register traits.
Definition gdb_registers.hpp:110
Definition gdb_registers.hpp:119
Definition gdb_registers.hpp:118
Definition gdb_registers.hpp:120
Definition gdb_registers.hpp:121
Definition gdb_registers.hpp:117
Definition gdb_registers.hpp:116