mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-24 21:15:04 +00:00
2448e9f766
We wish to re-use this from llvm-pdbdump, and it provides a nice way to print structured data in scoped format that could prove useful for many other dumping tools as well. Moving to support and changing name to ScopedPrinter to better reflect its purpose. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@268342 91177308-0d34-0410-b5e6-96231b3b80d8
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
//===- Win64EHDumper.h - Win64 EH Printing ----------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TOOLS_LLVM_READOBJ_WIN64EHDUMPER_H
|
|
#define LLVM_TOOLS_LLVM_READOBJ_WIN64EHDUMPER_H
|
|
|
|
#include "llvm/Support/ScopedPrinter.h"
|
|
#include "llvm/Support/Win64EH.h"
|
|
|
|
namespace llvm {
|
|
namespace object {
|
|
class COFFObjectFile;
|
|
class SymbolRef;
|
|
struct coff_section;
|
|
}
|
|
|
|
namespace Win64EH {
|
|
class Dumper {
|
|
ScopedPrinter &SW;
|
|
raw_ostream &OS;
|
|
|
|
public:
|
|
typedef std::error_code (*SymbolResolver)(const object::coff_section *,
|
|
uint64_t, object::SymbolRef &,
|
|
void *);
|
|
|
|
struct Context {
|
|
const object::COFFObjectFile &COFF;
|
|
SymbolResolver ResolveSymbol;
|
|
void *UserData;
|
|
|
|
Context(const object::COFFObjectFile &COFF, SymbolResolver Resolver,
|
|
void *UserData)
|
|
: COFF(COFF), ResolveSymbol(Resolver), UserData(UserData) {}
|
|
};
|
|
|
|
private:
|
|
void printRuntimeFunctionEntry(const Context &Ctx,
|
|
const object::coff_section *Section,
|
|
uint64_t SectionOffset,
|
|
const RuntimeFunction &RF);
|
|
void printUnwindCode(const UnwindInfo& UI, ArrayRef<UnwindCode> UC);
|
|
void printUnwindInfo(const Context &Ctx, const object::coff_section *Section,
|
|
off_t Offset, const UnwindInfo &UI);
|
|
void printRuntimeFunction(const Context &Ctx,
|
|
const object::coff_section *Section,
|
|
uint64_t SectionOffset, const RuntimeFunction &RF);
|
|
|
|
public:
|
|
Dumper(ScopedPrinter &SW) : SW(SW), OS(SW.getOStream()) {}
|
|
|
|
void printData(const Context &Ctx);
|
|
};
|
|
}
|
|
}
|
|
|
|
#endif
|