Mercurial > hg > Members > tobaru > cbc > CbC_llvm
view include/llvm/MC/MCWinEH.h @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | afa8332a0e37 |
children |
line wrap: on
line source
//===- MCWinEH.h - Windows Unwinding Support --------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLVM_MC_MCWINEH_H #define LLVM_MC_MCWINEH_H #include <vector> namespace llvm { class MCSection; class MCStreamer; class MCSymbol; namespace WinEH { struct Instruction { const MCSymbol *Label; const unsigned Offset; const unsigned Register; const unsigned Operation; Instruction(unsigned Op, MCSymbol *L, unsigned Reg, unsigned Off) : Label(L), Offset(Off), Register(Reg), Operation(Op) {} }; struct FrameInfo { const MCSymbol *Begin = nullptr; const MCSymbol *End = nullptr; const MCSymbol *ExceptionHandler = nullptr; const MCSymbol *Function = nullptr; const MCSymbol *PrologEnd = nullptr; const MCSymbol *Symbol = nullptr; const MCSection *TextSection = nullptr; bool HandlesUnwind = false; bool HandlesExceptions = false; int LastFrameInst = -1; const FrameInfo *ChainedParent = nullptr; std::vector<Instruction> Instructions; FrameInfo() = default; FrameInfo(const MCSymbol *Function, const MCSymbol *BeginFuncEHLabel) : Begin(BeginFuncEHLabel), Function(Function) {} FrameInfo(const MCSymbol *Function, const MCSymbol *BeginFuncEHLabel, const FrameInfo *ChainedParent) : Begin(BeginFuncEHLabel), Function(Function), ChainedParent(ChainedParent) {} }; class UnwindEmitter { public: virtual ~UnwindEmitter(); /// This emits the unwind info sections (.pdata and .xdata in PE/COFF). virtual void Emit(MCStreamer &Streamer) const = 0; virtual void EmitUnwindInfo(MCStreamer &Streamer, FrameInfo *FI) const = 0; }; } } #endif