Dumping a symbol often requires access to data that isn't inside
the symbol hierarchy, but which is only accessible through the
top-level session. This patch is a pure interface change to give
symbols a reference to the session.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228542
91177308-0d34-0410-b5e6-
96231b3b80d8
65 files changed:
/// https://msdn.microsoft.com/en-us/library/370hs6k4.aspx
class PDBSymbol {
protected:
/// https://msdn.microsoft.com/en-us/library/370hs6k4.aspx
class PDBSymbol {
protected:
- PDBSymbol(std::unique_ptr<IPDBRawSymbol> Symbol);
+ PDBSymbol(IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol);
public:
static std::unique_ptr<PDBSymbol>
public:
static std::unique_ptr<PDBSymbol>
- create(std::unique_ptr<IPDBRawSymbol> Symbol);
+ create(IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol);
std::unique_ptr<IPDBEnumSymbols> findInlineFramesByRVA(uint32_t RVA) const;
protected:
std::unique_ptr<IPDBEnumSymbols> findInlineFramesByRVA(uint32_t RVA) const;
protected:
const std::unique_ptr<IPDBRawSymbol> RawSymbol;
};
const std::unique_ptr<IPDBRawSymbol> RawSymbol;
};
class PDBSymbolAnnotation : public PDBSymbol {
public:
class PDBSymbolAnnotation : public PDBSymbol {
public:
- PDBSymbolAnnotation(std::unique_ptr<IPDBRawSymbol> AnnotationSymbol);
+ PDBSymbolAnnotation(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolBlock : public PDBSymbol {
public:
class PDBSymbolBlock : public PDBSymbol {
public:
- PDBSymbolBlock(std::unique_ptr<IPDBRawSymbol> BlockSymbol);
+ PDBSymbolBlock(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolCompiland : public PDBSymbol {
public:
class PDBSymbolCompiland : public PDBSymbol {
public:
- PDBSymbolCompiland(std::unique_ptr<IPDBRawSymbol> CompilandSymbol);
+ PDBSymbolCompiland(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> CompilandSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolCompilandDetails : public PDBSymbol {
public:
class PDBSymbolCompilandDetails : public PDBSymbol {
public:
- PDBSymbolCompilandDetails(std::unique_ptr<IPDBRawSymbol> DetailsSymbol);
+ PDBSymbolCompilandDetails(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolCompilandEnv : public PDBSymbol {
public:
class PDBSymbolCompilandEnv : public PDBSymbol {
public:
- PDBSymbolCompilandEnv(std::unique_ptr<IPDBRawSymbol> CompilandEnvSymbol);
+ PDBSymbolCompilandEnv(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
/// https://msdn.microsoft.com/en-us/library/d88sf09h.aspx
class PDBSymbolCustom : public PDBSymbol {
public:
/// https://msdn.microsoft.com/en-us/library/d88sf09h.aspx
class PDBSymbolCustom : public PDBSymbol {
public:
- PDBSymbolCustom(std::unique_ptr<IPDBRawSymbol> CustomSymbol);
+ PDBSymbolCustom(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> CustomSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolData : public PDBSymbol {
public:
class PDBSymbolData : public PDBSymbol {
public:
- PDBSymbolData(std::unique_ptr<IPDBRawSymbol> DataSymbol);
+ PDBSymbolData(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> DataSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolExe : public PDBSymbol {
public:
class PDBSymbolExe : public PDBSymbol {
public:
- PDBSymbolExe(std::unique_ptr<IPDBRawSymbol> ExeSymbol);
+ PDBSymbolExe(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> ExeSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolFunc : public PDBSymbol {
public:
class PDBSymbolFunc : public PDBSymbol {
public:
- PDBSymbolFunc(std::unique_ptr<IPDBRawSymbol> FuncSymbol);
+ PDBSymbolFunc(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> FuncSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolFuncDebugEnd : public PDBSymbol {
public:
class PDBSymbolFuncDebugEnd : public PDBSymbol {
public:
- PDBSymbolFuncDebugEnd(std::unique_ptr<IPDBRawSymbol> FuncDebugEndSymbol);
+ PDBSymbolFuncDebugEnd(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> FuncDebugEndSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolFuncDebugStart : public PDBSymbol {
public:
class PDBSymbolFuncDebugStart : public PDBSymbol {
public:
- PDBSymbolFuncDebugStart(std::unique_ptr<IPDBRawSymbol> FuncDebugStartSymbol);
+ PDBSymbolFuncDebugStart(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> FuncDebugStartSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolLabel : public PDBSymbol {
public:
class PDBSymbolLabel : public PDBSymbol {
public:
- PDBSymbolLabel(std::unique_ptr<IPDBRawSymbol> LabelSymbol);
+ PDBSymbolLabel(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> LabelSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolPublicSymbol : public PDBSymbol {
public:
class PDBSymbolPublicSymbol : public PDBSymbol {
public:
- PDBSymbolPublicSymbol(std::unique_ptr<IPDBRawSymbol> PublicSymbol);
+ PDBSymbolPublicSymbol(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> PublicSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolThunk : public PDBSymbol {
public:
class PDBSymbolThunk : public PDBSymbol {
public:
- PDBSymbolThunk(std::unique_ptr<IPDBRawSymbol> ThunkSymbol);
+ PDBSymbolThunk(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> ThunkSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeArray : public PDBSymbol {
public:
class PDBSymbolTypeArray : public PDBSymbol {
public:
- PDBSymbolTypeArray(std::unique_ptr<IPDBRawSymbol> ArrayTypeSymbol);
+ PDBSymbolTypeArray(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> ArrayTypeSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeBaseClass : public PDBSymbol {
public:
class PDBSymbolTypeBaseClass : public PDBSymbol {
public:
- PDBSymbolTypeBaseClass(std::unique_ptr<IPDBRawSymbol> BaseClassTypeSymbol);
+ PDBSymbolTypeBaseClass(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeBuiltin : public PDBSymbol {
public:
class PDBSymbolTypeBuiltin : public PDBSymbol {
public:
- PDBSymbolTypeBuiltin(std::unique_ptr<IPDBRawSymbol> BuiltinTypeSymbol);
+ PDBSymbolTypeBuiltin(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeCustom : public PDBSymbol {
public:
class PDBSymbolTypeCustom : public PDBSymbol {
public:
- PDBSymbolTypeCustom(std::unique_ptr<IPDBRawSymbol> CustomTypeSymbol);
+ PDBSymbolTypeCustom(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeDimension : public PDBSymbol {
public:
class PDBSymbolTypeDimension : public PDBSymbol {
public:
- PDBSymbolTypeDimension(std::unique_ptr<IPDBRawSymbol> DimensionTypeSymbol);
+ PDBSymbolTypeDimension(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeEnum : public PDBSymbol {
public:
class PDBSymbolTypeEnum : public PDBSymbol {
public:
- PDBSymbolTypeEnum(std::unique_ptr<IPDBRawSymbol> EnumTypeSymbol);
+ PDBSymbolTypeEnum(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> EnumTypeSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeFriend : public PDBSymbol {
public:
class PDBSymbolTypeFriend : public PDBSymbol {
public:
- PDBSymbolTypeFriend(std::unique_ptr<IPDBRawSymbol> FriendTypeSymbol);
+ PDBSymbolTypeFriend(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeFunctionArg : public PDBSymbol {
public:
class PDBSymbolTypeFunctionArg : public PDBSymbol {
public:
- PDBSymbolTypeFunctionArg(std::unique_ptr<IPDBRawSymbol> FuncArgTypeSymbol);
+ PDBSymbolTypeFunctionArg(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeFunctionSig : public PDBSymbol {
public:
class PDBSymbolTypeFunctionSig : public PDBSymbol {
public:
- PDBSymbolTypeFunctionSig(std::unique_ptr<IPDBRawSymbol> FuncSigTypeSymbol);
+ PDBSymbolTypeFunctionSig(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeManaged : public PDBSymbol {
public:
class PDBSymbolTypeManaged : public PDBSymbol {
public:
- PDBSymbolTypeManaged(std::unique_ptr<IPDBRawSymbol> ManagedTypeSymbol);
+ PDBSymbolTypeManaged(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypePointer : public PDBSymbol {
public:
class PDBSymbolTypePointer : public PDBSymbol {
public:
- PDBSymbolTypePointer(std::unique_ptr<IPDBRawSymbol> PointerTypeSymbol);
+ PDBSymbolTypePointer(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeTypedef : public PDBSymbol {
public:
class PDBSymbolTypeTypedef : public PDBSymbol {
public:
- PDBSymbolTypeTypedef(std::unique_ptr<IPDBRawSymbol> TypedefSymbol);
+ PDBSymbolTypeTypedef(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeUDT : public PDBSymbol {
public:
class PDBSymbolTypeUDT : public PDBSymbol {
public:
- PDBSymbolTypeUDT(std::unique_ptr<IPDBRawSymbol> UDTSymbol);
+ PDBSymbolTypeUDT(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> UDTSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeVTable : public PDBSymbol {
public:
class PDBSymbolTypeVTable : public PDBSymbol {
public:
- PDBSymbolTypeVTable(std::unique_ptr<IPDBRawSymbol> VtblSymbol);
+ PDBSymbolTypeVTable(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> VtblSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolTypeVTableShape : public PDBSymbol {
public:
class PDBSymbolTypeVTableShape : public PDBSymbol {
public:
- PDBSymbolTypeVTableShape(std::unique_ptr<IPDBRawSymbol> VtblShapeSymbol);
+ PDBSymbolTypeVTableShape(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> VtblShapeSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolUnknown : public PDBSymbol {
public:
class PDBSymbolUnknown : public PDBSymbol {
public:
- PDBSymbolUnknown(std::unique_ptr<IPDBRawSymbol> UnknownSymbol);
+ PDBSymbolUnknown(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> UnknownSymbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
class PDBSymbolUsingNamespace : public PDBSymbol {
public:
class PDBSymbolUsingNamespace : public PDBSymbol {
public:
- PDBSymbolUsingNamespace(std::unique_ptr<IPDBRawSymbol> UsingSymbol);
+ PDBSymbolUsingNamespace(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol);
void dump(llvm::raw_ostream &OS) const override;
void dump(llvm::raw_ostream &OS) const override;
-PDBSymbol::PDBSymbol(std::unique_ptr<IPDBRawSymbol> Symbol)
- : RawSymbol(std::move(Symbol)) {}
+PDBSymbol::PDBSymbol(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : Session(PDBSession), RawSymbol(std::move(Symbol)) {}
PDBSymbol::~PDBSymbol() {}
#define FACTORY_SYMTAG_CASE(Tag, Type) \
case PDB_SymType::Tag: \
PDBSymbol::~PDBSymbol() {}
#define FACTORY_SYMTAG_CASE(Tag, Type) \
case PDB_SymType::Tag: \
- return std::unique_ptr<PDBSymbol>(new Type(std::move(Symbol)));
+ return std::unique_ptr<PDBSymbol>(new Type(PDBSession, std::move(Symbol)));
std::unique_ptr<PDBSymbol>
std::unique_ptr<PDBSymbol>
-PDBSymbol::create(std::unique_ptr<IPDBRawSymbol> Symbol) {
+PDBSymbol::create(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol) {
switch (Symbol->getSymTag()) {
FACTORY_SYMTAG_CASE(Exe, PDBSymbolExe)
FACTORY_SYMTAG_CASE(Compiland, PDBSymbolCompiland)
switch (Symbol->getSymTag()) {
FACTORY_SYMTAG_CASE(Exe, PDBSymbolExe)
FACTORY_SYMTAG_CASE(Compiland, PDBSymbolCompiland)
FACTORY_SYMTAG_CASE(ManagedType, PDBSymbolTypeManaged)
FACTORY_SYMTAG_CASE(Dimension, PDBSymbolTypeDimension)
default:
FACTORY_SYMTAG_CASE(ManagedType, PDBSymbolTypeManaged)
FACTORY_SYMTAG_CASE(Dimension, PDBSymbolTypeDimension)
default:
- return std::unique_ptr<PDBSymbol>(new PDBSymbolUnknown(std::move(Symbol)));
+ return std::unique_ptr<PDBSymbol>(
+ new PDBSymbolUnknown(PDBSession, std::move(Symbol)));
-PDBSymbolAnnotation::PDBSymbolAnnotation(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolAnnotation::PDBSymbolAnnotation(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolAnnotation::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolAnnotation::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolBlock::PDBSymbolBlock(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolBlock::PDBSymbolBlock(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(Session, std::move(Symbol)) {}
void PDBSymbolBlock::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolBlock::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolCompiland::PDBSymbolCompiland(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolCompiland::PDBSymbolCompiland(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolCompiland::dump(llvm::raw_ostream &OS) const {
}
void PDBSymbolCompiland::dump(llvm::raw_ostream &OS) const {
}
using namespace llvm;
PDBSymbolCompilandDetails::PDBSymbolCompilandDetails(
using namespace llvm;
PDBSymbolCompilandDetails::PDBSymbolCompilandDetails(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(Session, std::move(Symbol)) {}
void PDBSymbolCompilandDetails::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolCompilandDetails::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolCompilandEnv::PDBSymbolCompilandEnv(
using namespace llvm;
PDBSymbolCompilandEnv::PDBSymbolCompilandEnv(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
std::string PDBSymbolCompilandEnv::getValue() const {
// call RawSymbol->getValue() and convert the result to an std::string.
std::string PDBSymbolCompilandEnv::getValue() const {
// call RawSymbol->getValue() and convert the result to an std::string.
-PDBSymbolCustom::PDBSymbolCustom(std::unique_ptr<IPDBRawSymbol> CustomSymbol)
- : PDBSymbol(std::move(CustomSymbol)) {}
+PDBSymbolCustom::PDBSymbolCustom(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> CustomSymbol)
+ : PDBSymbol(PDBSession, std::move(CustomSymbol)) {}
void PDBSymbolCustom::getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) {
RawSymbol->getDataBytes(bytes);
void PDBSymbolCustom::getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) {
RawSymbol->getDataBytes(bytes);
//
//===----------------------------------------------------------------------===//
//
//===----------------------------------------------------------------------===//
#include "llvm/DebugInfo/PDB/PDBSymbolData.h"
using namespace llvm;
#include "llvm/DebugInfo/PDB/PDBSymbolData.h"
using namespace llvm;
-PDBSymbolData::PDBSymbolData(std::unique_ptr<IPDBRawSymbol> DataSymbol)
- : PDBSymbol(std::move(DataSymbol)) {}
+PDBSymbolData::PDBSymbolData(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> DataSymbol)
+ : PDBSymbol(PDBSession, std::move(DataSymbol)) {}
void PDBSymbolData::dump(llvm::raw_ostream &OS) const {}
\ No newline at end of file
void PDBSymbolData::dump(llvm::raw_ostream &OS) const {}
\ No newline at end of file
-PDBSymbolExe::PDBSymbolExe(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolExe::PDBSymbolExe(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolExe::dump(llvm::raw_ostream &OS) const {
}
void PDBSymbolExe::dump(llvm::raw_ostream &OS) const {
}
-PDBSymbolFunc::PDBSymbolFunc(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolFunc::PDBSymbolFunc(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolFunc::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolFunc::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolFuncDebugEnd::PDBSymbolFuncDebugEnd(
using namespace llvm;
PDBSymbolFuncDebugEnd::PDBSymbolFuncDebugEnd(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(Session, std::move(Symbol)) {}
void PDBSymbolFuncDebugEnd::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolFuncDebugEnd::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolFuncDebugStart::PDBSymbolFuncDebugStart(
using namespace llvm;
PDBSymbolFuncDebugStart::PDBSymbolFuncDebugStart(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(Session, std::move(Symbol)) {}
void PDBSymbolFuncDebugStart::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolFuncDebugStart::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolLabel::PDBSymbolLabel(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolLabel::PDBSymbolLabel(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(Session, std::move(Symbol)) {}
void PDBSymbolLabel::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolLabel::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolPublicSymbol::PDBSymbolPublicSymbol(
using namespace llvm;
PDBSymbolPublicSymbol::PDBSymbolPublicSymbol(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(Session, std::move(Symbol)) {}
void PDBSymbolPublicSymbol::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolPublicSymbol::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolThunk::PDBSymbolThunk(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolThunk::PDBSymbolThunk(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(Session, std::move(Symbol)) {}
void PDBSymbolThunk::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolThunk::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolTypeArray::PDBSymbolTypeArray(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolTypeArray::PDBSymbolTypeArray(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeArray::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeArray::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolTypeBaseClass::PDBSymbolTypeBaseClass(
using namespace llvm;
PDBSymbolTypeBaseClass::PDBSymbolTypeBaseClass(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(Session, std::move(Symbol)) {}
void PDBSymbolTypeBaseClass::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeBaseClass::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolTypeBuiltin::PDBSymbolTypeBuiltin(
using namespace llvm;
PDBSymbolTypeBuiltin::PDBSymbolTypeBuiltin(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeBuiltin::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeBuiltin::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolTypeCustom::PDBSymbolTypeCustom(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolTypeCustom::PDBSymbolTypeCustom(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeCustom::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeCustom::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolTypeDimension::PDBSymbolTypeDimension(
using namespace llvm;
PDBSymbolTypeDimension::PDBSymbolTypeDimension(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeDimension::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeDimension::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolTypeEnum::PDBSymbolTypeEnum(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolTypeEnum::PDBSymbolTypeEnum(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeEnum::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeEnum::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolTypeFriend::PDBSymbolTypeFriend(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolTypeFriend::PDBSymbolTypeFriend(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeFriend::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeFriend::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolTypeFunctionArg::PDBSymbolTypeFunctionArg(
using namespace llvm;
PDBSymbolTypeFunctionArg::PDBSymbolTypeFunctionArg(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeFunctionArg::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeFunctionArg::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolTypeFunctionSig::PDBSymbolTypeFunctionSig(
using namespace llvm;
PDBSymbolTypeFunctionSig::PDBSymbolTypeFunctionSig(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeFunctionSig::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeFunctionSig::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolTypeManaged::PDBSymbolTypeManaged(
using namespace llvm;
PDBSymbolTypeManaged::PDBSymbolTypeManaged(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeManaged::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeManaged::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolTypePointer::PDBSymbolTypePointer(
using namespace llvm;
PDBSymbolTypePointer::PDBSymbolTypePointer(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypePointer::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypePointer::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolTypeTypedef::PDBSymbolTypeTypedef(
using namespace llvm;
PDBSymbolTypeTypedef::PDBSymbolTypeTypedef(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeTypedef::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeTypedef::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolTypeUDT::PDBSymbolTypeUDT(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolTypeUDT::PDBSymbolTypeUDT(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeUDT::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeUDT::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolTypeVTable::PDBSymbolTypeVTable(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolTypeVTable::PDBSymbolTypeVTable(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeVTable::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeVTable::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolTypeVTableShape::PDBSymbolTypeVTableShape(
using namespace llvm;
PDBSymbolTypeVTableShape::PDBSymbolTypeVTableShape(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolTypeVTableShape::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolTypeVTableShape::dump(llvm::raw_ostream &OS) const {}
-PDBSymbolUnknown::PDBSymbolUnknown(std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+PDBSymbolUnknown::PDBSymbolUnknown(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolUnknown::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolUnknown::dump(llvm::raw_ostream &OS) const {}
using namespace llvm;
PDBSymbolUsingNamespace::PDBSymbolUsingNamespace(
using namespace llvm;
PDBSymbolUsingNamespace::PDBSymbolUsingNamespace(
- std::unique_ptr<IPDBRawSymbol> Symbol)
- : PDBSymbol(std::move(Symbol)) {}
+ IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
+ : PDBSymbol(PDBSession, std::move(Symbol)) {}
void PDBSymbolUsingNamespace::dump(llvm::raw_ostream &OS) const {}
void PDBSymbolUsingNamespace::dump(llvm::raw_ostream &OS) const {}
#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
+#include "llvm/DebugInfo/PDB/IPDBSession.h"
+#include "llvm/DebugInfo/PDB/IPDBSourceFile.h"
+
#include "llvm/DebugInfo/PDB/PDBSymbol.h"
#include "llvm/DebugInfo/PDB/PDBSymbolAnnotation.h"
#include "llvm/DebugInfo/PDB/PDBSymbolBlock.h"
#include "llvm/DebugInfo/PDB/PDBSymbol.h"
#include "llvm/DebugInfo/PDB/PDBSymbolAnnotation.h"
#include "llvm/DebugInfo/PDB/PDBSymbolBlock.h"
+class MockSession : public IPDBSession {
+ uint64_t getLoadAddress() const override { return 0; }
+ void setLoadAddress(uint64_t Address) override {}
+ std::unique_ptr<PDBSymbolExe> getGlobalScope() const override {
+ return nullptr;
+ }
+ std::unique_ptr<PDBSymbol> getSymbolById() const override { return nullptr; }
+ std::unique_ptr<IPDBSourceFile> getSourceFileById() const override {
+ return nullptr;
+ }
+ std::unique_ptr<IPDBEnumDataStreams> getDebugStreams() const override {
+ return nullptr;
+ }
+};
+
class MockRawSymbol : public IPDBRawSymbol {
public:
MockRawSymbol(PDB_SymType SymType) : Type(SymType) {}
class MockRawSymbol : public IPDBRawSymbol {
public:
MockRawSymbol(PDB_SymType SymType) : Type(SymType) {}
std::unordered_map<PDB_SymType, std::unique_ptr<PDBSymbol>> SymbolMap;
void SetUp() override {
std::unordered_map<PDB_SymType, std::unique_ptr<PDBSymbol>> SymbolMap;
void SetUp() override {
+ Session.reset(new MockSession());
+
InsertItemWithTag(PDB_SymType::None);
InsertItemWithTag(PDB_SymType::Exe);
InsertItemWithTag(PDB_SymType::Compiland);
InsertItemWithTag(PDB_SymType::None);
InsertItemWithTag(PDB_SymType::Exe);
InsertItemWithTag(PDB_SymType::Compiland);
InsertItemWithTag(PDB_SymType::Max);
}
InsertItemWithTag(PDB_SymType::Max);
}
-private:
- void InsertItemWithTag(PDB_SymType Tag) {
- auto RawSymbol = std::unique_ptr<IPDBRawSymbol>(new MockRawSymbol(Tag));
- auto Symbol = PDBSymbol::create(std::move(RawSymbol));
- SymbolMap.insert(std::make_pair(Tag, std::move(Symbol)));
- }
-
-public:
template <class ExpectedType> void VerifyDyncast(PDB_SymType Tag) {
for (auto item = SymbolMap.begin(); item != SymbolMap.end(); ++item) {
EXPECT_EQ(item->first == Tag, llvm::isa<ExpectedType>(*item->second));
template <class ExpectedType> void VerifyDyncast(PDB_SymType Tag) {
for (auto item = SymbolMap.begin(); item != SymbolMap.end(); ++item) {
EXPECT_EQ(item->first == Tag, llvm::isa<ExpectedType>(*item->second));
EXPECT_EQ(should_match, llvm::isa<PDBSymbolUnknown>(*item->second));
}
}
EXPECT_EQ(should_match, llvm::isa<PDBSymbolUnknown>(*item->second));
}
}
+
+private:
+ std::unique_ptr<IPDBSession> Session;
+
+ void InsertItemWithTag(PDB_SymType Tag) {
+ auto RawSymbol = std::unique_ptr<IPDBRawSymbol>(new MockRawSymbol(Tag));
+ auto Symbol = PDBSymbol::create(*Session, std::move(RawSymbol));
+ SymbolMap.insert(std::make_pair(Tag, std::move(Symbol)));
+ }
};
TEST_F(PDBApiTest, Dyncast) {
};
TEST_F(PDBApiTest, Dyncast) {