UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
syms_unwind_elf_x64.h File Reference

Go to the source code of this file.

Classes

struct  SYMS_DwEhPtrCtx
 
struct  SYMS_DwCIEUnpacked
 
struct  SYMS_DwCIEUnpackedNode
 
struct  SYMS_DwFDEUnpacked
 
struct  SYMS_DwCFIRecords
 
struct  SYMS_DwCFICFACell
 
struct  SYMS_DwCFICell
 
struct  SYMS_DwCFIRow
 
struct  SYMS_DwCFIMachine
 

Macros

#define SYMS_UNWIND_ELF_X64__REG_SLOT_COUNT   17
 

Typedefs

typedef SYMS_U8 SYMS_DwEhPtrEnc
 
typedef struct SYMS_DwEhPtrCtx SYMS_DwEhPtrCtx
 
typedef struct SYMS_DwCIEUnpacked SYMS_DwCIEUnpacked
 
typedef struct SYMS_DwCIEUnpackedNode SYMS_DwCIEUnpackedNode
 
typedef struct SYMS_DwFDEUnpacked SYMS_DwFDEUnpacked
 
typedef struct SYMS_DwCFIRecords SYMS_DwCFIRecords
 
typedef enum SYMS_DwCFICFARule SYMS_DwCFICFARule
 
typedef struct SYMS_DwCFICFACell SYMS_DwCFICFACell
 
typedef enum SYMS_DwCFIRegisterRule SYMS_DwCFIRegisterRule
 
typedef struct SYMS_DwCFICell SYMS_DwCFICell
 
typedef struct SYMS_DwCFIRow SYMS_DwCFIRow
 
typedef struct SYMS_DwCFIMachine SYMS_DwCFIMachine
 
typedef SYMS_U8 SYMS_DwCFADecode
 
typedef SYMS_U16 SYMS_DwCFAControlBits
 

Enumerations

enum  {
  SYMS_DwEhPtrEnc_TYPE_MASK = 0x0F , SYMS_DwEhPtrEnc_PTR = 0x00 , SYMS_DwEhPtrEnc_ULEB128 = 0x01 , SYMS_DwEhPtrEnc_UDATA2 = 0x02 ,
  SYMS_DwEhPtrEnc_UDATA4 = 0x03 , SYMS_DwEhPtrEnc_UDATA8 = 0x04 , SYMS_DwEhPtrEnc_SIGNED = 0x08 , SYMS_DwEhPtrEnc_SLEB128 = 0x09 ,
  SYMS_DwEhPtrEnc_SDATA2 = 0x0A , SYMS_DwEhPtrEnc_SDATA4 = 0x0B , SYMS_DwEhPtrEnc_SDATA8 = 0x0C
}
 
enum  {
  SYMS_DwEhPtrEnc_MODIF_MASK = 0x70 , SYMS_DwEhPtrEnc_PCREL = 0x10 , SYMS_DwEhPtrEnc_TEXTREL = 0x20 , SYMS_DwEhPtrEnc_DATAREL = 0x30 ,
  SYMS_DwEhPtrEnc_FUNCREL = 0x40 , SYMS_DwEhPtrEnc_ALIGNED = 0x50
}
 
enum  { SYMS_DwEhPtrEnc_INDIRECT = 0x80 , SYMS_DwEhPtrEnc_OMIT = 0xFF }
 
enum  SYMS_DwCFICFARule { SYMS_DwCFICFARule_REGOFF , SYMS_DwCFICFARule_EXPR }
 
enum  SYMS_DwCFIRegisterRule {
  SYMS_DwCFIRegisterRule_SAME_VALUE , SYMS_DwCFIRegisterRule_UNDEFINED , SYMS_DwCFIRegisterRule_OFFSET , SYMS_DwCFIRegisterRule_VAL_OFFSET ,
  SYMS_DwCFIRegisterRule_REGISTER , SYMS_DwCFIRegisterRule_EXPRESSION , SYMS_DwCFIRegisterRule_VAL_EXPRESSION
}
 
enum  { SYMS_DwCFADecode_NOP = 0x0 , SYMS_DwCFADecode_ADDRESS = 0x9 , SYMS_DwCFADecode_ULEB128 = 0xA , SYMS_DwCFADecode_SLEB128 = 0xB }
 
enum  {
  SYMS_DwCFAControlBits_DEC1_MASK = 0x00F , SYMS_DwCFAControlBits_DEC2_MASK = 0x0F0 , SYMS_DwCFAControlBits_IS_REG_0 = 0x100 , SYMS_DwCFAControlBits_IS_REG_1 = 0x200 ,
  SYMS_DwCFAControlBits_IS_REG_2 = 0x400 , SYMS_DwCFAControlBits_NEW_ROW = 0x800
}
 

Functions

SYMS_API SYMS_UnwindResult syms_unwind_elf_x64 (SYMS_String8 bin_data, SYMS_ElfBinAccel *bin, SYMS_U64 bin_base, SYMS_MemoryView *memview, SYMS_U64 stack_pointer, SYMS_DwRegsX64 *regs_in_out)
 
SYMS_API SYMS_UnwindResult syms_unwind_elf_x64__apply_rules (SYMS_String8 bin_data, SYMS_DwCFIRow *row, SYMS_U64 text_base_vaddr, SYMS_MemoryView *memview, SYMS_U64 stack_pointer, SYMS_DwRegsX64 *regs_in_out)
 
SYMS_API void syms_unwind_elf_x64__init (void)
 
SYMS_API SYMS_U64 syms_unwind_elf_x64__parse_pointer (void *base, SYMS_U64Range range, SYMS_DwEhPtrCtx *ptr_ctx, SYMS_DwEhPtrEnc ptr_enc, SYMS_U64 off, SYMS_U64 *ptr_out)
 
SYMS_API void syms_unwind_elf_x64__eh_frame_parse_cie (void *base, SYMS_U64Range range, SYMS_DwEhPtrCtx *ptr_ctx, SYMS_U64 off, SYMS_DwCIEUnpacked *cie_out)
 
SYMS_API void syms_unwind_elf_x64__eh_frame_parse_fde (void *base, SYMS_U64Range range, SYMS_DwEhPtrCtx *ptr_ctx, SYMS_DwCIEUnpacked *parent_cie, SYMS_U64 off, SYMS_DwFDEUnpacked *fde_out)
 
SYMS_API SYMS_DwCFIRecords syms_unwind_elf_x64__eh_frame_cfi_from_ip__sloppy (void *base, SYMS_U64Range range, SYMS_DwEhPtrCtx *ptr_ctx, SYMS_U64 ip_voff)
 
SYMS_API SYMS_DwCFIRecords syms_unwind_elf_x64__eh_frame_hdr_from_ip (void *base, SYMS_U64Range eh_frame_hdr_range, SYMS_U64Range eh_frame_range, SYMS_DwEhPtrCtx *ptr_ctx, SYMS_U64 ip_voff)
 
SYMS_API SYMS_DwCFIMachine syms_unwind_elf_x64__machine_make (SYMS_U64 cells_per_row, SYMS_DwCIEUnpacked *cie, SYMS_DwEhPtrCtx *ptr_ctx)
 
SYMS_API void syms_unwind_elf_x64__machine_equip_initial_row (SYMS_DwCFIMachine *machine, SYMS_DwCFIRow *initial_row)
 
SYMS_API void syms_unwind_elf_x64__machine_equip_fde_ip (SYMS_DwCFIMachine *machine, SYMS_U64 fde_ip)
 
SYMS_API SYMS_DwCFIRowsyms_unwind_elf_x64__row_alloc (SYMS_Arena *arena, SYMS_U64 cells_per_row)
 
SYMS_API void syms_unwind_elf_x64__row_zero (SYMS_DwCFIRow *row, SYMS_U64 cells_per_row)
 
SYMS_API void syms_unwind_elf_x64__row_copy (SYMS_DwCFIRow *dst, SYMS_DwCFIRow *src, SYMS_U64 cells_per_row)
 
SYMS_API SYMS_B32 syms_unwind_elf_x64__machine_run_to_ip (void *base, SYMS_U64Range range, SYMS_DwCFIMachine *machine, SYMS_U64 target_ip, SYMS_DwCFIRow *row_out)
 

Variables

SYMS_GLOBAL SYMS_DwCFAControlBits syms_unwind_elf__cfa_control_bits_kind1 [SYMS_DwCFADetail_OPL_KIND1+1]
 
SYMS_GLOBAL SYMS_DwCFAControlBits syms_unwind_elf__cfa_control_bits_kind2 [SYMS_DwCFADetail_OPL_KIND2+1]
 

Macro Definition Documentation

◆ SYMS_UNWIND_ELF_X64__REG_SLOT_COUNT

#define SYMS_UNWIND_ELF_X64__REG_SLOT_COUNT   17

Typedef Documentation

◆ SYMS_DwCFAControlBits

◆ SYMS_DwCFADecode

◆ SYMS_DwCFICell

◆ SYMS_DwCFICFACell

◆ SYMS_DwCFICFARule

◆ SYMS_DwCFIMachine

◆ SYMS_DwCFIRecords

◆ SYMS_DwCFIRegisterRule

◆ SYMS_DwCFIRow

◆ SYMS_DwCIEUnpacked

◆ SYMS_DwCIEUnpackedNode

◆ SYMS_DwEhPtrCtx

◆ SYMS_DwEhPtrEnc

◆ SYMS_DwFDEUnpacked

Enumeration Type Documentation

◆ anonymous enum

Enumerator
SYMS_DwEhPtrEnc_TYPE_MASK 
SYMS_DwEhPtrEnc_PTR 
SYMS_DwEhPtrEnc_ULEB128 
SYMS_DwEhPtrEnc_UDATA2 
SYMS_DwEhPtrEnc_UDATA4 
SYMS_DwEhPtrEnc_UDATA8 
SYMS_DwEhPtrEnc_SIGNED 
SYMS_DwEhPtrEnc_SLEB128 
SYMS_DwEhPtrEnc_SDATA2 
SYMS_DwEhPtrEnc_SDATA4 
SYMS_DwEhPtrEnc_SDATA8 

◆ anonymous enum

Enumerator
SYMS_DwEhPtrEnc_MODIF_MASK 
SYMS_DwEhPtrEnc_PCREL 
SYMS_DwEhPtrEnc_TEXTREL 
SYMS_DwEhPtrEnc_DATAREL 
SYMS_DwEhPtrEnc_FUNCREL 
SYMS_DwEhPtrEnc_ALIGNED 

◆ anonymous enum

Enumerator
SYMS_DwEhPtrEnc_INDIRECT 
SYMS_DwEhPtrEnc_OMIT 

◆ anonymous enum

Enumerator
SYMS_DwCFADecode_NOP 
SYMS_DwCFADecode_ADDRESS 
SYMS_DwCFADecode_ULEB128 
SYMS_DwCFADecode_SLEB128 

◆ anonymous enum

Enumerator
SYMS_DwCFAControlBits_DEC1_MASK 
SYMS_DwCFAControlBits_DEC2_MASK 
SYMS_DwCFAControlBits_IS_REG_0 
SYMS_DwCFAControlBits_IS_REG_1 
SYMS_DwCFAControlBits_IS_REG_2 
SYMS_DwCFAControlBits_NEW_ROW 

◆ SYMS_DwCFICFARule

Enumerator
SYMS_DwCFICFARule_REGOFF 
SYMS_DwCFICFARule_EXPR 

◆ SYMS_DwCFIRegisterRule

Enumerator
SYMS_DwCFIRegisterRule_SAME_VALUE 
SYMS_DwCFIRegisterRule_UNDEFINED 
SYMS_DwCFIRegisterRule_OFFSET 
SYMS_DwCFIRegisterRule_VAL_OFFSET 
SYMS_DwCFIRegisterRule_REGISTER 
SYMS_DwCFIRegisterRule_EXPRESSION 
SYMS_DwCFIRegisterRule_VAL_EXPRESSION 

Function Documentation

◆ syms_unwind_elf_x64()

SYMS_API SYMS_UnwindResult syms_unwind_elf_x64 ( SYMS_String8  bin_data,
SYMS_ElfBinAccel bin,
SYMS_U64  bin_base,
SYMS_MemoryView memview,
SYMS_U64  stack_pointer,
SYMS_DwRegsX64 regs_in_out 
)

◆ syms_unwind_elf_x64__apply_rules()

SYMS_API SYMS_UnwindResult syms_unwind_elf_x64__apply_rules ( SYMS_String8  bin_data,
SYMS_DwCFIRow row,
SYMS_U64  text_base_vaddr,
SYMS_MemoryView memview,
SYMS_U64  stack_pointer,
SYMS_DwRegsX64 regs_in_out 
)

◆ syms_unwind_elf_x64__eh_frame_cfi_from_ip__sloppy()

SYMS_API SYMS_DwCFIRecords syms_unwind_elf_x64__eh_frame_cfi_from_ip__sloppy ( void base,
SYMS_U64Range  range,
SYMS_DwEhPtrCtx ptr_ctx,
SYMS_U64  ip_voff 
)

◆ syms_unwind_elf_x64__eh_frame_hdr_from_ip()

SYMS_API SYMS_DwCFIRecords syms_unwind_elf_x64__eh_frame_hdr_from_ip ( void base,
SYMS_U64Range  eh_frame_hdr_range,
SYMS_U64Range  eh_frame_range,
SYMS_DwEhPtrCtx ptr_ctx,
SYMS_U64  ip_voff 
)

◆ syms_unwind_elf_x64__eh_frame_parse_cie()

SYMS_API void syms_unwind_elf_x64__eh_frame_parse_cie ( void base,
SYMS_U64Range  range,
SYMS_DwEhPtrCtx ptr_ctx,
SYMS_U64  off,
SYMS_DwCIEUnpacked cie_out 
)

◆ syms_unwind_elf_x64__eh_frame_parse_fde()

SYMS_API void syms_unwind_elf_x64__eh_frame_parse_fde ( void base,
SYMS_U64Range  range,
SYMS_DwEhPtrCtx ptr_ctx,
SYMS_DwCIEUnpacked parent_cie,
SYMS_U64  off,
SYMS_DwFDEUnpacked fde_out 
)

◆ syms_unwind_elf_x64__init()

SYMS_API void syms_unwind_elf_x64__init ( void  )

◆ syms_unwind_elf_x64__machine_equip_fde_ip()

SYMS_API void syms_unwind_elf_x64__machine_equip_fde_ip ( SYMS_DwCFIMachine machine,
SYMS_U64  fde_ip 
)

◆ syms_unwind_elf_x64__machine_equip_initial_row()

SYMS_API void syms_unwind_elf_x64__machine_equip_initial_row ( SYMS_DwCFIMachine machine,
SYMS_DwCFIRow initial_row 
)

◆ syms_unwind_elf_x64__machine_make()

SYMS_API SYMS_DwCFIMachine syms_unwind_elf_x64__machine_make ( SYMS_U64  cells_per_row,
SYMS_DwCIEUnpacked cie,
SYMS_DwEhPtrCtx ptr_ctx 
)

◆ syms_unwind_elf_x64__machine_run_to_ip()

SYMS_API SYMS_B32 syms_unwind_elf_x64__machine_run_to_ip ( void base,
SYMS_U64Range  range,
SYMS_DwCFIMachine machine,
SYMS_U64  target_ip,
SYMS_DwCFIRow row_out 
)

◆ syms_unwind_elf_x64__parse_pointer()

SYMS_API SYMS_U64 syms_unwind_elf_x64__parse_pointer ( void base,
SYMS_U64Range  range,
SYMS_DwEhPtrCtx ptr_ctx,
SYMS_DwEhPtrEnc  ptr_enc,
SYMS_U64  off,
SYMS_U64 ptr_out 
)

◆ syms_unwind_elf_x64__row_alloc()

SYMS_API SYMS_DwCFIRow * syms_unwind_elf_x64__row_alloc ( SYMS_Arena arena,
SYMS_U64  cells_per_row 
)

◆ syms_unwind_elf_x64__row_copy()

SYMS_API void syms_unwind_elf_x64__row_copy ( SYMS_DwCFIRow dst,
SYMS_DwCFIRow src,
SYMS_U64  cells_per_row 
)

◆ syms_unwind_elf_x64__row_zero()

SYMS_API void syms_unwind_elf_x64__row_zero ( SYMS_DwCFIRow row,
SYMS_U64  cells_per_row 
)

Variable Documentation

◆ syms_unwind_elf__cfa_control_bits_kind1

SYMS_GLOBAL SYMS_DwCFAControlBits syms_unwind_elf__cfa_control_bits_kind1[SYMS_DwCFADetail_OPL_KIND1+1]

◆ syms_unwind_elf__cfa_control_bits_kind2

SYMS_GLOBAL SYMS_DwCFAControlBits syms_unwind_elf__cfa_control_bits_kind2[SYMS_DwCFADetail_OPL_KIND2+1]