LLVM 23.0.0git
llvm::Win64EH Namespace Reference

Classes

class  ARM64UnwindEmitter
class  ARMUnwindEmitter
struct  DecodedEpilogV3
 Decoded V3 epilog descriptor. More...
struct  DecodedUnwindInfoV3
 Decoded V3 UNWIND_INFO. More...
struct  DecodedWOD
 Decoded V3 Winding Operation Descriptor. More...
struct  Instruction
struct  RuntimeFunction
 RuntimeFunction - An entry in the table of functions with unwind info. More...
union  UnwindCode
 UnwindCode - This union describes a single operation in a function prolog, or part thereof. More...
class  UnwindEmitter
struct  UnwindInfo
 UnwindInfo - An entry in the exception table. More...

Enumerations

enum  UnwindOpcodes {
  UOP_PushNonVol = 0 , UOP_AllocLarge , UOP_AllocSmall , UOP_SetFPReg ,
  UOP_SaveNonVol , UOP_SaveNonVolBig , UOP_Epilog , UOP_SpareCode ,
  UOP_SaveXMM128 , UOP_SaveXMM128Big , UOP_PushMachFrame , UOP_AllocMedium ,
  UOP_SaveR19R20X , UOP_SaveFPLRX , UOP_SaveFPLR , UOP_SaveReg ,
  UOP_SaveRegX , UOP_SaveRegP , UOP_SaveRegPX , UOP_SaveLRPair ,
  UOP_SaveFReg , UOP_SaveFRegX , UOP_SaveFRegP , UOP_SaveFRegPX ,
  UOP_SetFP , UOP_AddFP , UOP_Nop , UOP_End ,
  UOP_SaveNext , UOP_TrapFrame , UOP_Context , UOP_ECContext ,
  UOP_ClearUnwoundToCall , UOP_PACSignLR , UOP_SaveAnyRegI , UOP_SaveAnyRegIP ,
  UOP_SaveAnyRegD , UOP_SaveAnyRegDP , UOP_SaveAnyRegQ , UOP_SaveAnyRegQP ,
  UOP_SaveAnyRegIX , UOP_SaveAnyRegIPX , UOP_SaveAnyRegDX , UOP_SaveAnyRegDPX ,
  UOP_SaveAnyRegQX , UOP_SaveAnyRegQPX , UOP_AllocZ , UOP_SaveZReg ,
  UOP_SavePReg , UOP_AllocHuge , UOP_WideAllocMedium , UOP_WideAllocLarge ,
  UOP_WideAllocHuge , UOP_WideSaveRegMask , UOP_SaveSP , UOP_SaveRegsR4R7LR ,
  UOP_WideSaveRegsR4R11LR , UOP_SaveFRegD8D15 , UOP_SaveRegMask , UOP_SaveLR ,
  UOP_SaveFRegD0D15 , UOP_SaveFRegD16D31 , UOP_WideNop , UOP_EndNop ,
  UOP_WideEndNop , UOP_Custom , UOP_Push2
}
 UnwindOpcodes - Enumeration whose values specify a single operation in the prolog of a function. More...
enum  { UNW_ExceptionHandler = 0x01 , UNW_TerminateHandler = 0x02 , UNW_ChainInfo = 0x04 , UNW_FlagLarge = 0x08 }
enum  WODOpcode : uint8_t {
  WOD_SET_FPREG = 0 , WOD_ALLOC_HUGE = 1 , WOD_ALLOC_LARGE = 2 , WOD_PUSH_CANONICAL_FRAME = 3 ,
  WOD_PUSH = 4 , WOD_SAVE_NONVOL_FAR = 5 , WOD_SAVE_NONVOL = 6 , WOD_PUSH_CONSECUTIVE_2 = 7 ,
  WOD_ALLOC_SMALL = 8 , WOD_SAVE_XMM128_FAR = 9 , WOD_SAVE_XMM128 = 10 , WOD_PUSH2 = 32
}
 V3 Winding Operation Descriptor opcodes. More...
enum  EpilogInfoFlagsV3 : uint8_t { EPILOG_PARENT_FRAGMENT_TRANSFER = 0x01 , EPILOG_INFO_LARGE = 0x02 }
 V3 EPILOG_INFO flags. More...

Functions

StringRef getRegisterNameV3 (unsigned Reg)
 Return the register name for a 5-bit AMD64 integer register number.
Expected< DecodedWODdecodeWOD (ArrayRef< uint8_t > Pool, unsigned Offset)
 Decode one WOD from the pool at the given byte offset.
Expected< DecodedUnwindInfoV3decodeUnwindInfoV3 (ArrayRef< uint8_t > Data)
 Parse a V3 UNWIND_INFO from raw bytes.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
UNW_ExceptionHandler 

UNW_ExceptionHandler - Specifies that this function has an exception handler.

UNW_TerminateHandler 

UNW_TerminateHandler - Specifies that this function has a termination handler.

UNW_ChainInfo 

UNW_ChainInfo - Specifies that this UnwindInfo structure is chained to another one.

UNW_FlagLarge 

UNW_FlagLarge - V3 only.

When set, the header is 5 bytes (an extra UNWIND_INFO_LARGE_V3 byte follows), SizeOfProlog extends to 16 bits, and prolog IP offset entries are 16-bit.

Definition at line 145 of file Win64EH.h.

◆ EpilogInfoFlagsV3

V3 EPILOG_INFO flags.

Enumerator
EPILOG_PARENT_FRAGMENT_TRANSFER 
EPILOG_INFO_LARGE 

When set, the extended descriptor uses EPILOG_INFO_LARGE_EX_V3 (16-bit IpOffsetOfLastInstruction) and the IP offset array uses 16-bit entries.

Definition at line 257 of file Win64EH.h.

◆ UnwindOpcodes

UnwindOpcodes - Enumeration whose values specify a single operation in the prolog of a function.

Enumerator
UOP_PushNonVol 
UOP_AllocLarge 
UOP_AllocSmall 
UOP_SetFPReg 
UOP_SaveNonVol 
UOP_SaveNonVolBig 
UOP_Epilog 
UOP_SpareCode 
UOP_SaveXMM128 
UOP_SaveXMM128Big 
UOP_PushMachFrame 
UOP_AllocMedium 
UOP_SaveR19R20X 
UOP_SaveFPLRX 
UOP_SaveFPLR 
UOP_SaveReg 
UOP_SaveRegX 
UOP_SaveRegP 
UOP_SaveRegPX 
UOP_SaveLRPair 
UOP_SaveFReg 
UOP_SaveFRegX 
UOP_SaveFRegP 
UOP_SaveFRegPX 
UOP_SetFP 
UOP_AddFP 
UOP_Nop 
UOP_End 
UOP_SaveNext 
UOP_TrapFrame 
UOP_Context 
UOP_ECContext 
UOP_ClearUnwoundToCall 
UOP_PACSignLR 
UOP_SaveAnyRegI 
UOP_SaveAnyRegIP 
UOP_SaveAnyRegD 
UOP_SaveAnyRegDP 
UOP_SaveAnyRegQ 
UOP_SaveAnyRegQP 
UOP_SaveAnyRegIX 
UOP_SaveAnyRegIPX 
UOP_SaveAnyRegDX 
UOP_SaveAnyRegDPX 
UOP_SaveAnyRegQX 
UOP_SaveAnyRegQPX 
UOP_AllocZ 
UOP_SaveZReg 
UOP_SavePReg 
UOP_AllocHuge 
UOP_WideAllocMedium 
UOP_WideAllocLarge 
UOP_WideAllocHuge 
UOP_WideSaveRegMask 
UOP_SaveSP 
UOP_SaveRegsR4R7LR 
UOP_WideSaveRegsR4R11LR 
UOP_SaveFRegD8D15 
UOP_SaveRegMask 
UOP_SaveLR 
UOP_SaveFRegD0D15 
UOP_SaveFRegD16D31 
UOP_WideNop 
UOP_EndNop 
UOP_WideEndNop 
UOP_Custom 
UOP_Push2 

Definition at line 30 of file Win64EH.h.

◆ WODOpcode

V3 Winding Operation Descriptor opcodes.

Enumerator
WOD_SET_FPREG 
WOD_ALLOC_HUGE 
WOD_ALLOC_LARGE 
WOD_PUSH_CANONICAL_FRAME 
WOD_PUSH 
WOD_SAVE_NONVOL_FAR 
WOD_SAVE_NONVOL 
WOD_PUSH_CONSECUTIVE_2 
WOD_ALLOC_SMALL 
WOD_SAVE_XMM128_FAR 
WOD_SAVE_XMM128 
WOD_PUSH2 

Definition at line 241 of file Win64EH.h.

Function Documentation

◆ decodeUnwindInfoV3()

◆ decodeWOD()

◆ getRegisterNameV3()

StringRef llvm::Win64EH::getRegisterNameV3 ( unsigned Reg)

Return the register name for a 5-bit AMD64 integer register number.

Covers 0-15 (RAX-R15) and 16-31 (R16-R31 for APX).

Definition at line 21 of file Win64EH.cpp.