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_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H 15 #define LLVM_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H 16 17 #include "EHStreamer.h" 18 #include "llvm/CodeGen/AsmPrinter.h" 19 20 namespace llvm { 21 class MachineFunction; 22 class ARMTargetStreamer; 23 24 class DwarfCFIException : public EHStreamer { 25 /// shouldEmitPersonality - Per-function flag to indicate if .cfi_personality 26 /// should be emitted. 27 bool shouldEmitPersonality; 28 29 /// shouldEmitLSDA - Per-function flag to indicate if .cfi_lsda 30 /// should be emitted. 31 bool shouldEmitLSDA; 32 33 /// shouldEmitMoves - Per-function flag to indicate if frame moves info 34 /// should be emitted. 35 bool shouldEmitMoves; 36 37 AsmPrinter::CFIMoveType moveTypeModule; 38 39 public: 40 //===--------------------------------------------------------------------===// 41 // Main entry points. 42 // 43 DwarfCFIException(AsmPrinter *A); 44 virtual ~DwarfCFIException(); 45 46 /// endModule - Emit all exception information that should come after the 47 /// content. 48 void endModule() override; 49 50 /// beginFunction - Gather pre-function exception information. Assumes being 51 /// emitted immediately after the function entry point. 52 void beginFunction(const MachineFunction *MF) override; 53 54 /// endFunction - Gather and emit post-function exception information. 55 void endFunction(const MachineFunction *) override; 56 }; 57 58 class ARMException : public EHStreamer { 59 void emitTypeInfos(unsigned TTypeEncoding) override; 60 ARMTargetStreamer &getTargetStreamer(); 61 62 /// shouldEmitCFI - Per-function flag to indicate if frame CFI info 63 /// should be emitted. 64 bool shouldEmitCFI; 65 66 public: 67 //===--------------------------------------------------------------------===// 68 // Main entry points. 69 // 70 ARMException(AsmPrinter *A); 71 virtual ~ARMException(); 72 73 /// endModule - Emit all exception information that should come after the 74 /// content. 75 void endModule() override; 76 77 /// beginFunction - Gather pre-function exception information. Assumes being 78 /// emitted immediately after the function entry point. 79 void beginFunction(const MachineFunction *MF) override; 80 81 /// endFunction - Gather and emit post-function exception information. 82 void endFunction(const MachineFunction *) override; 83 }; 84 85 class Win64Exception : public EHStreamer { 86 /// shouldEmitPersonality - Per-function flag to indicate if personality 87 /// info should be emitted. 88 bool shouldEmitPersonality; 89 90 /// shouldEmitLSDA - Per-function flag to indicate if the LSDA 91 /// should be emitted. 92 bool shouldEmitLSDA; 93 94 /// shouldEmitMoves - Per-function flag to indicate if frame moves info 95 /// should be emitted. 96 bool shouldEmitMoves; 97 98 public: 99 //===--------------------------------------------------------------------===// 100 // Main entry points. 101 // 102 Win64Exception(AsmPrinter *A); 103 virtual ~Win64Exception(); 104 105 /// endModule - Emit all exception information that should come after the 106 /// content. 107 void endModule() override; 108 109 /// beginFunction - Gather pre-function exception information. Assumes being 110 /// emitted immediately after the function entry point. 111 void beginFunction(const MachineFunction *MF) override; 112 113 /// endFunction - Gather and emit post-function exception information. 114 void endFunction(const MachineFunction *) override; 115 }; 116 117 } // End of namespace llvm 118 119 #endif 120