• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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