LCOV - code coverage report
Current view: top level - include/llvm/MC - MCWinEH.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 1 5 20.0 %
Date: 2018-10-20 13:21:21 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- MCWinEH.h - Windows Unwinding Support --------------------*- 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             : #ifndef LLVM_MC_MCWINEH_H
      11             : #define LLVM_MC_MCWINEH_H
      12             : 
      13             : #include <vector>
      14             : 
      15             : namespace llvm {
      16             : class MCSection;
      17             : class MCStreamer;
      18             : class MCSymbol;
      19             : 
      20             : namespace WinEH {
      21             : struct Instruction {
      22             :   const MCSymbol *Label;
      23             :   const unsigned Offset;
      24             :   const unsigned Register;
      25             :   const unsigned Operation;
      26             : 
      27             :   Instruction(unsigned Op, MCSymbol *L, unsigned Reg, unsigned Off)
      28        1297 :     : Label(L), Offset(Off), Register(Reg), Operation(Op) {}
      29             : };
      30             : 
      31           0 : struct FrameInfo {
      32             :   const MCSymbol *Begin = nullptr;
      33             :   const MCSymbol *End = nullptr;
      34             :   const MCSymbol *ExceptionHandler = nullptr;
      35             :   const MCSymbol *Function = nullptr;
      36             :   const MCSymbol *PrologEnd = nullptr;
      37             :   const MCSymbol *Symbol = nullptr;
      38             :   const MCSection *TextSection = nullptr;
      39             : 
      40             :   bool HandlesUnwind = false;
      41             :   bool HandlesExceptions = false;
      42             : 
      43             :   int LastFrameInst = -1;
      44             :   const FrameInfo *ChainedParent = nullptr;
      45             :   std::vector<Instruction> Instructions;
      46             : 
      47             :   FrameInfo() = default;
      48             :   FrameInfo(const MCSymbol *Function, const MCSymbol *BeginFuncEHLabel)
      49           0 :       : Begin(BeginFuncEHLabel), Function(Function) {}
      50             :   FrameInfo(const MCSymbol *Function, const MCSymbol *BeginFuncEHLabel,
      51             :             const FrameInfo *ChainedParent)
      52           0 :       : Begin(BeginFuncEHLabel), Function(Function),
      53           0 :         ChainedParent(ChainedParent) {}
      54             : };
      55             : 
      56             : class UnwindEmitter {
      57             : public:
      58             :   virtual ~UnwindEmitter();
      59             : 
      60             :   /// This emits the unwind info sections (.pdata and .xdata in PE/COFF).
      61             :   virtual void Emit(MCStreamer &Streamer) const = 0;
      62             :   virtual void EmitUnwindInfo(MCStreamer &Streamer, FrameInfo *FI) const = 0;
      63             : };
      64             : }
      65             : }
      66             : 
      67             : #endif

Generated by: LCOV version 1.13