42 uintptr_t &next_fp, uintptr_t &next_pc)
noexcept {
46 uintptr_t trial_fp = 0;
47 uintptr_t trial_pc = 0;
49 if (context->exidx_unwinder && context->exidx_unwinder.step(reg_ctx, current_pc, trial_fp, trial_pc)) {
55 if (context->dwarf_unwinder && context->dwarf_unwinder.step(reg_ctx, current_pc, trial_fp, trial_pc)) {
61 if (context->fp_unwinder && context->fp_unwinder.step(reg_ctx, current_pc, trial_fp, trial_pc)) {
74 if (!context->hints.find_hint(AbiTraits::normalize_pc(current_pc), hint) || !hint.routine)
80 if (!hint.routine(context->space, reg_ctx, next_fp, next_pc))
96 const auto fp_value =
static_cast<typename AbiTraits::register_type
>(next_fp);
97 const auto ra_value =
static_cast<typename AbiTraits::register_type
>(next_pc);
98 std::ignore = reg_ctx.write_raw(resolve_fp_register<AbiTraits>(reg_ctx), &fp_value, AbiTraits::pointer_size);
99 std::ignore = reg_ctx.write_raw(AbiTraits::ra_reg, &ra_value, AbiTraits::pointer_size);
Type-erased, two-word handle to a remote address space.
Definition address_space.hpp:204
Type-erased, two-word handle to a frame unwinder.
Definition frame_pointer.hpp:68
Zero-allocation, type-erased handle for inspecting and modifying CPU registers from a frame context.
Definition register_context.hpp:118
Type-erased, two-word handle to an unwind hint registry.
Definition unwind_hint.hpp:95
Per-architecture ABI traits describing registers used during DWARF unwinding.
Type-erased frame unwinder handles, frame cursor iteration, and backtrace views.
Definition chained_unwinder.hpp:18
frame_unwinder_ref exidx_unwinder
Definition chained_unwinder.hpp:20
frame_unwinder_ref fp_unwinder
Definition chained_unwinder.hpp:22
address_space_ref space
Definition chained_unwinder.hpp:19
frame_unwinder_ref dwarf_unwinder
Definition chained_unwinder.hpp:21
unwind_hint_registry_ref hints
Definition chained_unwinder.hpp:23
Definition chained_unwinder.hpp:26
static bool step(value_ref< const context_type > context, register_context_ref reg_ctx, uintptr_t current_pc, uintptr_t &next_fp, uintptr_t &next_pc) noexcept
Walks one frame by trying EXIDX, DWARF, frame-pointer, then hints.
Definition chained_unwinder.hpp:41
Static customization point describing a frame unwinder backend.
Definition frame_pointer.hpp:56
PC-range descriptor for direct, layout-based fallback unwinding.
Definition unwind_hint.hpp:35
PC-range unwind hint tables for direct, layout-based fallback unwinding.