DebugInfoPDB: Make the symbol base case hold an IPDBSession ref.

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
This commit is contained in:
Zachary Turner 2015-02-08 20:58:09 +00:00
parent e755d452e0
commit 926749af90
65 changed files with 181 additions and 108 deletions

View File

@ -36,11 +36,11 @@ class raw_ostream;
/// 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>
create(std::unique_ptr<IPDBRawSymbol> Symbol);
create(IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol);
virtual ~PDBSymbol();
@ -62,6 +62,7 @@ public:
std::unique_ptr<IPDBEnumSymbols> findInlineFramesByRVA(uint32_t RVA) const;
protected:
IPDBSession &Session;
const std::unique_ptr<IPDBRawSymbol> RawSymbol;
};

View File

@ -20,7 +20,8 @@ class raw_ostream;
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;

View File

@ -20,7 +20,8 @@ class raw_ostream;
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;

View File

@ -20,7 +20,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -24,7 +24,8 @@ class raw_ostream;
/// 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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -23,7 +23,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -21,7 +21,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -19,7 +19,8 @@ class raw_ostream;
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;

View File

@ -48,17 +48,19 @@
using namespace llvm;
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: \
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>
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)
@ -91,7 +93,8 @@ PDBSymbol::create(std::unique_ptr<IPDBRawSymbol> Symbol) {
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)));
}
}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -17,8 +17,9 @@
using namespace llvm;
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 {
}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -16,8 +16,8 @@
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.

View File

@ -15,8 +15,9 @@
using namespace llvm;
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);

View File

@ -7,11 +7,13 @@
//
//===----------------------------------------------------------------------===//
#include <utility>
#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 {}

View File

@ -17,8 +17,9 @@
using namespace llvm;
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 {
}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -16,7 +16,7 @@
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -16,7 +16,7 @@
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 {}

View File

@ -16,7 +16,7 @@
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -14,7 +14,8 @@
using namespace llvm;
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 {}

View File

@ -15,7 +15,7 @@
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 {}

View File

@ -12,6 +12,9 @@
#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"
@ -66,6 +69,21 @@ namespace {
return ReturnType(); \
}
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) {}
@ -257,6 +275,8 @@ public:
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);
@ -291,14 +311,6 @@ public:
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));
@ -314,6 +326,15 @@ public:
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) {