Home | History | Annotate | Download | only in AsmPrinter
      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