#include "Win64EHDumper.h"
#include "llvm-readobj.h"
#include "llvm/Object/COFF.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Format.h"
usingnamespacellvm;
usingnamespacellvm::object;
usingnamespacellvm::Win64EH;
const EnumEntry<unsigned> UnwindFlags[] = …;
const EnumEntry<unsigned> UnwindOpInfo[] = …;
static uint64_t getOffsetOfLSDA(const UnwindInfo& UI) { … }
static uint32_t getLargeSlotValue(ArrayRef<UnwindCode> UC) { … }
static StringRef getUnwindCodeTypeName(uint8_t Code) { … }
static StringRef getUnwindRegisterName(uint8_t Reg) { … }
static unsigned getNumUsedSlots(const UnwindCode &UnwindCode) { … }
static std::error_code getSymbol(const COFFObjectFile &COFF, uint64_t VA,
object::SymbolRef &Sym) { … }
static object::SymbolRef getPreferredSymbol(const COFFObjectFile &COFF,
object::SymbolRef Sym,
uint32_t &SymbolOffset,
bool IsRangeEnd) { … }
static std::string formatSymbol(const Dumper::Context &Ctx,
const coff_section *Section, uint64_t Offset,
uint32_t Displacement,
bool IsRangeEnd = false) { … }
static std::error_code resolveRelocation(const Dumper::Context &Ctx,
const coff_section *Section,
uint64_t Offset,
const coff_section *&ResolvedSection,
uint64_t &ResolvedAddress) { … }
static const object::coff_section *
getSectionContaining(const COFFObjectFile &COFF, uint64_t VA) { … }
namespace llvm {
namespace Win64EH {
void Dumper::printRuntimeFunctionEntry(const Context &Ctx,
const coff_section *Section,
uint64_t Offset,
const RuntimeFunction &RF) { … }
void Dumper::printUnwindCode(const UnwindInfo& UI, ArrayRef<UnwindCode> UC) { … }
void Dumper::printUnwindInfo(const Context &Ctx, const coff_section *Section,
off_t Offset, const UnwindInfo &UI) { … }
void Dumper::printRuntimeFunction(const Context &Ctx,
const coff_section *Section,
uint64_t SectionOffset,
const RuntimeFunction &RF) { … }
void Dumper::printData(const Context &Ctx) { … }
}
}