11#include "../microfmt.hpp"
37inline void write_register_separator(
const sink &out,
size_t printed,
size_t columns)
noexcept {
40 out.write((printed % columns) == 0 ?
"\n" :
" ");
54 out.
write(
"<null register context>");
62 const auto format_registers = [®_ctx, &val, &out, &printed](
const auto ®isters)
noexcept {
63 for (
const auto ® : registers) {
64 if (!reg_ctx.
read_raw(reg.index, &val,
sizeof(val)))
66 detail::write_register_separator(out, printed, 2);
72 format_registers(register_traits::gpr_registers);
73 format_registers(register_traits::system_registers);
86 out.
write(
"<null register context>");
94 const auto format_registers = [®_ctx, &val, &out, &printed](
const auto ®isters)
noexcept {
95 for (
const auto ® : registers) {
96 if (!reg_ctx.
read_raw(reg.index, &val,
sizeof(val)))
98 detail::write_register_separator(out, printed, 3);
104 format_registers(register_traits::gpr_registers);
105 format_registers(register_traits::system_registers);
118 out.
write(
"<null register context>");
126 const auto format_registers = [®_ctx, &val, &out, &printed](
const auto ®isters)
noexcept {
127 for (
const auto ® : registers) {
128 if (!reg_ctx.
read_raw(reg.index, &val,
sizeof(val)))
130 detail::write_register_separator(out, printed, 2);
132 uint64_t display_val = val;
141 format_registers(register_traits::gpr_registers);
142 format_registers(register_traits::system_registers);
155 out.
write(
"<null register context>");
163 const auto format_registers = [®_ctx, &val, &out, &printed](
const auto ®isters)
noexcept {
164 for (
const auto ® : registers) {
165 if (!reg_ctx.
read_raw(reg.index, &val,
sizeof(val)))
167 detail::write_register_separator(out, printed, 3);
173 format_registers(register_traits::gpr_registers);
174 format_registers(register_traits::system_registers);
187 out.
write(
"<null register context>");
195 const auto format_registers = [®_ctx, &val, &out, &printed](
const auto ®isters)
noexcept {
196 for (
const auto ® : registers) {
197 if (!reg_ctx.
read_raw(reg.index, &val,
sizeof(val)))
199 detail::write_register_separator(out, printed, 3);
205 format_registers(register_traits::gpr_registers);
206 format_registers(register_traits::system_registers);
219 out.
write(
"<null register context>");
227 const auto format_registers = [®_ctx, &val, &out, &printed](
const auto ®isters)
noexcept {
228 for (
const auto ® : registers) {
229 if (!reg_ctx.
read_raw(reg.index, &val,
sizeof(val)))
231 detail::write_register_separator(out, printed, 2);
237 format_registers(register_traits::gpr_registers);
238 format_registers(register_traits::system_registers);
Definition microfmt.hpp:881
Zero-allocation, type-erased handle for inspecting and modifying CPU registers from a frame context.
Definition register_context.hpp:118
bool read_raw(uint32_t dwarf_reg_index, void *dest, size_t size) const noexcept
Reads raw register bytes into a buffer.
Definition register_context.hpp:157
bool write(uint32_t dwarf_reg_index, const T &value) const noexcept
Writes a typed value into a register by its DWARF index.
Definition register_context.hpp:166
Formattable view wrapping a register_context_ref for a specific architecture ABI.
Definition register_view.hpp:25
constexpr register_context_view(register_context_ref reg_ctx) noexcept
Definition register_view.hpp:27
constexpr register_context_ref reg_context() const noexcept
Definition register_view.hpp:29
Per-architecture ABI traits describing registers used during DWARF unwinding.
@ lr
Definition dwarf_registers.hpp:268
@ pc
Definition dwarf_registers.hpp:264
reloco::sink sink
Type-erased, zero-allocation output sink.
Definition microfmt.hpp:46
RELOCO_CONSTEXPR20 void format_to(const sink &out, microfmt::string_view fmt, const Args &...args) noexcept
Definition microfmt.hpp:1766
DWARF unwind ABI traits for AArch64 (64-bit ARM).
Definition dwarf_abi.hpp:168
static constexpr uintptr_t normalize_pc(uintptr_t raw_ra) noexcept
Definition dwarf_abi.hpp:201
dwarf::aarch64::register_traits register_traits
Architecture register name/index catalog.
Definition dwarf_abi.hpp:172
DWARF unwind ABI traits for ARM / Thumb (32-bit EABI).
Definition dwarf_abi.hpp:27
dwarf::arm32::register_traits register_traits
Architecture register name/index catalog.
Definition dwarf_abi.hpp:31
constexpr void parse(format_parse_context &) noexcept
Definition register_view.hpp:113
void format(const register_context_view< aarch64_abi_traits > &view, const sink &out) const noexcept
Definition register_view.hpp:115
constexpr void parse(format_parse_context &) noexcept
Definition register_view.hpp:150
void format(const register_context_view< arm_abi_traits > &view, const sink &out) const noexcept
Definition register_view.hpp:152
void format(const register_context_view< riscv32_abi_traits > &view, const sink &out) const noexcept
Definition register_view.hpp:184
constexpr void parse(format_parse_context &) noexcept
Definition register_view.hpp:182
constexpr void parse(format_parse_context &) noexcept
Definition register_view.hpp:214
void format(const register_context_view< riscv64_abi_traits > &view, const sink &out) const noexcept
Definition register_view.hpp:216
constexpr void parse(format_parse_context &) noexcept
Definition register_view.hpp:49
void format(const register_context_view< x86_64_abi_traits > &view, const sink &out) const noexcept
Definition register_view.hpp:51
void format(const register_context_view< x86_abi_traits > &view, const sink &out) const noexcept
Definition register_view.hpp:83
constexpr void parse(format_parse_context &) noexcept
Definition register_view.hpp:81
DWARF unwind ABI traits for RISC-V 32-bit (RV32).
Definition dwarf_abi.hpp:226
dwarf::riscv::register_traits register_traits
Architecture register name/index catalog.
Definition dwarf_abi.hpp:230
DWARF unwind ABI traits for RISC-V 64-bit (RV64).
Definition dwarf_abi.hpp:272
dwarf::riscv::register_traits register_traits
Architecture register name/index catalog.
Definition dwarf_abi.hpp:276
DWARF unwind ABI traits for x86-64 (AMD64 / x86_64).
Definition dwarf_abi.hpp:361
dwarf::x86_64::register_traits register_traits
Architecture register name/index catalog.
Definition dwarf_abi.hpp:365
DWARF unwind ABI traits for x86 (32-bit IA-32).
Definition dwarf_abi.hpp:315
dwarf::x86::register_traits register_traits
Architecture register name/index catalog.
Definition dwarf_abi.hpp:319