mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-04 03:06:28 +00:00
7b26bbada1
The frame information stored in this structure is driven by the requirements for Windows NT unwinding rather than Windows 64 specifically. As a result, this type can be shared across multiple architectures (ARM, AXP, MIPS, PPC, SH). Rename this class in preparation for adding support for supporting unwinding information for Windows on ARM. Take the opportunity to constify the members as everything except the ChainedParent is read-only. This required some adjustment to the label handling. llvm-svn: 214663
65 lines
2.0 KiB
C++
65 lines
2.0 KiB
C++
//===- 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 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;
|
|
const MCSymbol *End;
|
|
const MCSymbol *ExceptionHandler;
|
|
const MCSymbol *Function;
|
|
const MCSymbol *PrologEnd;
|
|
const MCSymbol *Symbol;
|
|
|
|
bool HandlesUnwind;
|
|
bool HandlesExceptions;
|
|
|
|
int LastFrameInst;
|
|
const FrameInfo *ChainedParent;
|
|
std::vector<Instruction> Instructions;
|
|
|
|
FrameInfo()
|
|
: Begin(nullptr), End(nullptr), ExceptionHandler(nullptr),
|
|
Function(nullptr), PrologEnd(nullptr), Symbol(nullptr),
|
|
HandlesUnwind(false), HandlesExceptions(false), LastFrameInst(-1),
|
|
ChainedParent(nullptr), Instructions() {}
|
|
FrameInfo(const MCSymbol *Function, const MCSymbol *BeginFuncEHLabel)
|
|
: Begin(BeginFuncEHLabel), End(nullptr), ExceptionHandler(nullptr),
|
|
Function(Function), PrologEnd(nullptr), Symbol(nullptr),
|
|
HandlesUnwind(false), HandlesExceptions(false), LastFrameInst(-1),
|
|
ChainedParent(nullptr), Instructions() {}
|
|
FrameInfo(const MCSymbol *Function, const MCSymbol *BeginFuncEHLabel,
|
|
const FrameInfo *ChainedParent)
|
|
: Begin(BeginFuncEHLabel), End(nullptr), ExceptionHandler(nullptr),
|
|
Function(Function), PrologEnd(nullptr), Symbol(nullptr),
|
|
HandlesUnwind(false), HandlesExceptions(false), LastFrameInst(-1),
|
|
ChainedParent(ChainedParent), Instructions() {}
|
|
};
|
|
}
|
|
}
|
|
|
|
#endif
|