1 //===-- DwarfException.h - Dwarf Exception Framework -----------*- 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 dwarf exception info into asm files. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_LIB_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H 15 #define LLVM_LIB_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H 16 17 #include "EHStreamer.h" 18 #include "llvm/CodeGen/AsmPrinter.h" 19 #include "llvm/MC/MCDwarf.h" 20 21 namespace llvm { 22 class MachineFunction; 23 class ARMTargetStreamer; 24 25 class LLVM_LIBRARY_VISIBILITY DwarfCFIExceptionBase : public EHStreamer { 26 protected: 27 DwarfCFIExceptionBase(AsmPrinter *A); 28 29 /// Per-function flag to indicate if frame CFI info should be emitted. 30 bool shouldEmitCFI; 31 32 void markFunctionEnd() override; 33 void endFragment() override; 34 }; 35 36 class LLVM_LIBRARY_VISIBILITY DwarfCFIException : public DwarfCFIExceptionBase { 37 /// Per-function flag to indicate if .cfi_personality should be emitted. 38 bool shouldEmitPersonality; 39 40 /// Per-function flag to indicate if .cfi_personality must be emitted. 41 bool forceEmitPersonality; 42 43 /// Per-function flag to indicate if .cfi_lsda should be emitted. 44 bool shouldEmitLSDA; 45 46 /// Per-function flag to indicate if frame moves info should be emitted. 47 bool shouldEmitMoves; 48 49 AsmPrinter::CFIMoveType moveTypeModule; 50 51 public: 52 //===--------------------------------------------------------------------===// 53 // Main entry points. 54 // 55 DwarfCFIException(AsmPrinter *A); 56 ~DwarfCFIException() override; 57 58 /// Emit all exception information that should come after the content. 59 void endModule() override; 60 61 /// Gather pre-function exception information. Assumes being emitted 62 /// immediately after the function entry point. 63 void beginFunction(const MachineFunction *MF) override; 64 65 /// Gather and emit post-function exception information. 66 void endFunction(const MachineFunction *) override; 67 68 void beginFragment(const MachineBasicBlock *MBB, 69 ExceptionSymbolProvider ESP) override; 70 }; 71 72 class LLVM_LIBRARY_VISIBILITY ARMException : public DwarfCFIExceptionBase { 73 void emitTypeInfos(unsigned TTypeEncoding) override; 74 ARMTargetStreamer &getTargetStreamer(); 75 76 public: 77 //===--------------------------------------------------------------------===// 78 // Main entry points. 79 // 80 ARMException(AsmPrinter *A); 81 ~ARMException() override; 82 83 /// Emit all exception information that should come after the content. 84 void endModule() override; 85 86 /// Gather pre-function exception information. Assumes being emitted 87 /// immediately after the function entry point. 88 void beginFunction(const MachineFunction *MF) override; 89 90 /// Gather and emit post-function exception information. 91 void endFunction(const MachineFunction *) override; 92 }; 93 } // End of namespace llvm 94 95 #endif 96