class CfiParser

Defined at line 21 of file ../../src/lib/unwinder/cfi_parser.h

Parse the call frame instructions to get the locations of CFA and registers.

Public Methods

void Snapshot ()

Helper for DW_CFA_restore. This function should be called after CIE instructions are parsed but

before the FDE instructions are parsed.

Defined at line 33 of file ../../src/lib/unwinder/cfi_parser.h

void CfiParser (Registers::Arch arch, Module::AddressSize size, uint64_t code_alignment_factor, int64_t data_alignment_factor)

arch is needed to default initialize register_locations_.

Defined at line 38 of file ../../src/lib/unwinder/cfi_parser.cc

Error ParseInstructions (Memory * elf, uint64_t instructions_begin, uint64_t instructions_end, uint64_t pc_limit)

Instruction High 2 Bits Low 6 Bits Operand 1 Operand 2

DW_CFA_advance_loc 0x1 delta

DW_CFA_offset 0x2 register ULEB128 offset

DW_CFA_restore 0x3 register

DW_CFA_set_loc 0 0x01 address

DW_CFA_advance_loc1 0 0x02 1-byte delta

DW_CFA_advance_loc2 0 0x03 2-byte delta

DW_CFA_advance_loc4 0 0x04 4-byte delta

DW_CFA_offset_extended 0 0x05 ULEB128 register ULEB128 offset

DW_CFA_restore_extended 0 0x06 ULEB128 register

DW_CFA_undefined 0 0x07 ULEB128 register

DW_CFA_same_value 0 0x08 ULEB128 register

DW_CFA_register 0 0x09 ULEB128 register ULEB128 register

DW_CFA_remember_state 0 0x0a

DW_CFA_restore_state 0 0x0b

DW_CFA_def_cfa 0 0x0c ULEB128 register ULEB128 offset

DW_CFA_def_cfa_register 0 0x0d ULEB128 register

DW_CFA_def_cfa_offset 0 0x0e ULEB128 offset

DW_CFA_nop 0 0

DW_CFA_def_cfa_expression 0 0x0f BLOCK

DW_CFA_expression 0 0x10 ULEB128 register BLOCK

DW_CFA_offset_extended_sf 0 0x11 ULEB128 register SLEB128 offset

DW_CFA_def_cfa_sf 0 0x12 ULEB128 register SLEB128 offset

DW_CFA_def_cfa_offset_sf 0 0x13 SLEB128 offset

DW_CFA_val_offset 0 0x14 ULEB128 register ULEB128 offset

DW_CFA_val_offset_sf 0 0x15 ULEB128 register SLEB128 offset

DW_CFA_val_expression 0 0x16 ULEB128 register BLOCK

DW_CFA_lo_user 0 0x1c

DW_CFA_hi_user 0 0x3f

Defined at line 137 of file ../../src/lib/unwinder/cfi_parser.cc

Error Step (Memory * stack, RegisterID return_address_register, const Registers & current, Registers & next, std::optional<uint64_t> maybe_cfa)

Apply the frame info to unwind one frame. |maybe_cfa| can be supplied if |PrepareToStep| has

been called before this function, which is typically the case of the |AsyncStep| function

before fetching necessary memory ahead of calling this synchronous method.

Defined at line 470 of file ../../src/lib/unwinder/cfi_parser.cc

void AsyncStep (AsyncMemory * stack, RegisterID return_address_register, const Registers & current, fit::callback<void (Error, Registers)> cb)

Defined at line 560 of file ../../src/lib/unwinder/cfi_parser.cc