microfmt
Zero-allocation C++ formatting for constrained environments
Loading...
Searching...
No Matches
Classes | Public Types | Static Public Member Functions | Static Public Attributes | List of all members
microfmt::dwarf_cfi_decoder< AbiTraits > Class Template Reference

Decoder executing DWARF CFI bytecode against an address space and selective register context. More...

#include <dwarf_decoder.hpp>

Classes

struct  frame_state
 
struct  reg_location
 
struct  scratch_context
 

Public Types

enum class  reg_rule_type : uint8_t { unspecified , from_memory_cfa_offset , from_register }
 Tracks location type for saved registers (Memory offset vs Live Register). More...
 
using register_type = typename AbiTraits::register_type
 

Static Public Member Functions

static bool read_uleb128 (address_space_ref space, uintptr_t &addr, uint64_t &out_val) noexcept
 
static bool read_sleb128 (address_space_ref space, uintptr_t &addr, int64_t &out_val) noexcept
 
template<size_t MaxStateStackDepth>
static bool execute_fde (register_context_ref reg_ctx, uintptr_t fde_addr, uintptr_t target_pc, uintptr_t &out_fp, uintptr_t &out_pc, scratch_context< MaxStateStackDepth > &scratch) noexcept
 Executes FDE bytecode, selectively querying register_context_ref only when virtual registers are needed for CFA resolution or register-to-register mapping.
 

Static Public Attributes

static constexpr uint8_t DW_CFA_advance_loc = 0x40
 
static constexpr uint8_t DW_CFA_offset = 0x80
 
static constexpr uint8_t DW_CFA_restore = 0xC0
 
static constexpr uint8_t DW_CFA_nop = 0x00
 
static constexpr uint8_t DW_CFA_register = 0x09
 
static constexpr uint8_t DW_CFA_advance_loc1 = 0x02
 
static constexpr uint8_t DW_CFA_advance_loc2 = 0x03
 
static constexpr uint8_t DW_CFA_offset_extended = 0x05
 
static constexpr uint8_t DW_CFA_remember_state = 0x0A
 
static constexpr uint8_t DW_CFA_restore_state = 0x0B
 
static constexpr uint8_t DW_CFA_def_cfa = 0x0C
 
static constexpr uint8_t DW_CFA_def_cfa_register = 0x0D
 
static constexpr uint8_t DW_CFA_def_cfa_offset = 0x0E
 
static constexpr uint8_t DW_CFA_offset_extended_sf = 0x11
 
static constexpr uint8_t DW_CFA_def_cfa_sf = 0x12
 
static constexpr uint8_t DW_CFA_def_cfa_offset_sf = 0x13
 

Detailed Description

template<typename AbiTraits>
class microfmt::dwarf_cfi_decoder< AbiTraits >

Decoder executing DWARF CFI bytecode against an address space and selective register context.

Template Parameters
AbiTraitsABI traits describing registers for the target architecture.

Member Typedef Documentation

◆ register_type

template<typename AbiTraits >
using microfmt::dwarf_cfi_decoder< AbiTraits >::register_type = typename AbiTraits::register_type

Member Enumeration Documentation

◆ reg_rule_type

template<typename AbiTraits >
enum class microfmt::dwarf_cfi_decoder::reg_rule_type : uint8_t
strong

Tracks location type for saved registers (Memory offset vs Live Register).

Enumerator
unspecified 
from_memory_cfa_offset 
from_register 

Member Function Documentation

◆ execute_fde()

template<typename AbiTraits >
template<size_t MaxStateStackDepth>
static bool microfmt::dwarf_cfi_decoder< AbiTraits >::execute_fde ( register_context_ref  reg_ctx,
uintptr_t  fde_addr,
uintptr_t  target_pc,
uintptr_t &  out_fp,
uintptr_t &  out_pc,
scratch_context< MaxStateStackDepth > &  scratch 
)
inlinestaticnoexcept

Executes FDE bytecode, selectively querying register_context_ref only when virtual registers are needed for CFA resolution or register-to-register mapping.

◆ read_sleb128()

template<typename AbiTraits >
static bool microfmt::dwarf_cfi_decoder< AbiTraits >::read_sleb128 ( address_space_ref  space,
uintptr_t &  addr,
int64_t &  out_val 
)
inlinestaticnoexcept

◆ read_uleb128()

template<typename AbiTraits >
static bool microfmt::dwarf_cfi_decoder< AbiTraits >::read_uleb128 ( address_space_ref  space,
uintptr_t &  addr,
uint64_t &  out_val 
)
inlinestaticnoexcept

Member Data Documentation

◆ DW_CFA_advance_loc

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_advance_loc = 0x40
staticconstexpr

◆ DW_CFA_advance_loc1

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_advance_loc1 = 0x02
staticconstexpr

◆ DW_CFA_advance_loc2

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_advance_loc2 = 0x03
staticconstexpr

◆ DW_CFA_def_cfa

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_def_cfa = 0x0C
staticconstexpr

◆ DW_CFA_def_cfa_offset

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_def_cfa_offset = 0x0E
staticconstexpr

◆ DW_CFA_def_cfa_offset_sf

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_def_cfa_offset_sf = 0x13
staticconstexpr

◆ DW_CFA_def_cfa_register

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_def_cfa_register = 0x0D
staticconstexpr

◆ DW_CFA_def_cfa_sf

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_def_cfa_sf = 0x12
staticconstexpr

◆ DW_CFA_nop

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_nop = 0x00
staticconstexpr

◆ DW_CFA_offset

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_offset = 0x80
staticconstexpr

◆ DW_CFA_offset_extended

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_offset_extended = 0x05
staticconstexpr

◆ DW_CFA_offset_extended_sf

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_offset_extended_sf = 0x11
staticconstexpr

◆ DW_CFA_register

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_register = 0x09
staticconstexpr

◆ DW_CFA_remember_state

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_remember_state = 0x0A
staticconstexpr

◆ DW_CFA_restore

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_restore = 0xC0
staticconstexpr

◆ DW_CFA_restore_state

template<typename AbiTraits >
constexpr uint8_t microfmt::dwarf_cfi_decoder< AbiTraits >::DW_CFA_restore_state = 0x0B
staticconstexpr

The documentation for this class was generated from the following file: