mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 16:37:42 +00:00
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:
parent
e755d452e0
commit
926749af90
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {
|
||||
}
|
||||
|
@ -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 {}
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
|
@ -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 {}
|
@ -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 {
|
||||
}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user