1 //===-- WinException.h - Windows Exception Handling ----------*- C++ -*--===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file contains support for writing windows exception info into asm files. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_LIB_CODEGEN_ASMPRINTER_WIN64EXCEPTION_H 15 #define LLVM_LIB_CODEGEN_ASMPRINTER_WIN64EXCEPTION_H 16 17 #include "EHStreamer.h" 18 19 namespace llvm { 20 class Function; 21 class GlobalValue; 22 class MachineFunction; 23 class MCExpr; 24 struct WinEHFuncInfo; 25 26 class WinException : public EHStreamer { 27 /// Per-function flag to indicate if personality info should be emitted. 28 bool shouldEmitPersonality = false; 29 30 /// Per-function flag to indicate if the LSDA should be emitted. 31 bool shouldEmitLSDA = false; 32 33 /// Per-function flag to indicate if frame moves info should be emitted. 34 bool shouldEmitMoves = false; 35 36 /// True if this is a 64-bit target and we should use image relative offsets. 37 bool useImageRel32 = false; 38 39 void emitCSpecificHandlerTable(); 40 41 /// Emit the EH table data for 32-bit and 64-bit functions using 42 /// the __CxxFrameHandler3 personality. 43 void emitCXXFrameHandler3Table(const MachineFunction *MF); 44 45 /// Emit the EH table data for _except_handler3 and _except_handler4 46 /// personality functions. These are only used on 32-bit and do not use CFI 47 /// tables. 48 void emitExceptHandlerTable(const MachineFunction *MF); 49 50 void extendIP2StateTable(const MachineFunction *MF, const Function *ParentF, 51 WinEHFuncInfo &FuncInfo); 52 53 const MCExpr *create32bitRef(const MCSymbol *Value); 54 const MCExpr *create32bitRef(const GlobalValue *GV); 55 56 public: 57 //===--------------------------------------------------------------------===// 58 // Main entry points. 59 // 60 WinException(AsmPrinter *A); 61 ~WinException() override; 62 63 /// Emit all exception information that should come after the content. 64 void endModule() override; 65 66 /// Gather pre-function exception information. Assumes being emitted 67 /// immediately after the function entry point. 68 void beginFunction(const MachineFunction *MF) override; 69 70 /// Gather and emit post-function exception information. 71 void endFunction(const MachineFunction *) override; 72 }; 73 } 74 75 #endif 76 77