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 LLVM_LIBRARY_VISIBILITY 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 /// Emits the label used with llvm.x86.seh.recoverfp, which is used by 54 /// outlined funclets. 55 void emitEHRegistrationOffsetLabel(const WinEHFuncInfo &FuncInfo, 56 StringRef FLinkageName); 57 58 const MCExpr *create32bitRef(const MCSymbol *Value); 59 const MCExpr *create32bitRef(const GlobalValue *GV); 60 61 public: 62 //===--------------------------------------------------------------------===// 63 // Main entry points. 64 // 65 WinException(AsmPrinter *A); 66 ~WinException() override; 67 68 /// Emit all exception information that should come after the content. 69 void endModule() override; 70 71 /// Gather pre-function exception information. Assumes being emitted 72 /// immediately after the function entry point. 73 void beginFunction(const MachineFunction *MF) override; 74 75 /// Gather and emit post-function exception information. 76 void endFunction(const MachineFunction *) override; 77 }; 78 } 79 80 #endif 81 82