mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-03 17:31:50 +00:00
Implement some methods for NativeRawSymbol
This allows the ability to call IPDBSession::getGlobalScope with a NativeSession and to then query it for some basic fields from the PDB's InfoStream. Note that the symbols now have non-const references back to the Session so that NativeRawSymbol can access the PDBFile through the Session. Differential Revision: https://reviews.llvm.org/D30314 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296049 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d6d9a85ff1
commit
93e76ec3ca
@ -31,7 +31,7 @@ public:
|
||||
|
||||
uint64_t getLoadAddress() const override;
|
||||
void setLoadAddress(uint64_t Address) override;
|
||||
std::unique_ptr<PDBSymbolExe> getGlobalScope() const override;
|
||||
std::unique_ptr<PDBSymbolExe> getGlobalScope() override;
|
||||
std::unique_ptr<PDBSymbol> getSymbolById(uint32_t SymbolId) const override;
|
||||
|
||||
std::unique_ptr<PDBSymbol>
|
||||
|
@ -28,7 +28,7 @@ public:
|
||||
|
||||
virtual uint64_t getLoadAddress() const = 0;
|
||||
virtual void setLoadAddress(uint64_t Address) = 0;
|
||||
virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() const = 0;
|
||||
virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() = 0;
|
||||
virtual std::unique_ptr<PDBSymbol> getSymbolById(uint32_t SymbolId) const = 0;
|
||||
|
||||
template <typename T>
|
||||
|
@ -19,7 +19,7 @@ class NativeSession;
|
||||
|
||||
class NativeRawSymbol : public IPDBRawSymbol {
|
||||
public:
|
||||
explicit NativeRawSymbol(const NativeSession &PDBSession);
|
||||
explicit NativeRawSymbol(NativeSession &PDBSession);
|
||||
|
||||
void dump(raw_ostream &OS, int Indent) const override;
|
||||
|
||||
@ -196,6 +196,9 @@ public:
|
||||
bool isVolatileType() const override;
|
||||
bool wasInlined() const override;
|
||||
std::string getUnused() const override;
|
||||
|
||||
private:
|
||||
NativeSession &Session;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ public:
|
||||
|
||||
uint64_t getLoadAddress() const override;
|
||||
void setLoadAddress(uint64_t Address) override;
|
||||
std::unique_ptr<PDBSymbolExe> getGlobalScope() const override;
|
||||
std::unique_ptr<PDBSymbolExe> getGlobalScope() override;
|
||||
std::unique_ptr<PDBSymbol> getSymbolById(uint32_t SymbolId) const override;
|
||||
|
||||
std::unique_ptr<PDBSymbol>
|
||||
|
@ -140,7 +140,7 @@ void DIASession::setLoadAddress(uint64_t Address) {
|
||||
Session->put_loadAddress(Address);
|
||||
}
|
||||
|
||||
std::unique_ptr<PDBSymbolExe> DIASession::getGlobalScope() const {
|
||||
std::unique_ptr<PDBSymbolExe> DIASession::getGlobalScope() {
|
||||
CComPtr<IDiaSymbol> GlobalScope;
|
||||
if (S_OK != Session->get_globalScope(&GlobalScope))
|
||||
return nullptr;
|
||||
|
@ -10,7 +10,9 @@
|
||||
#include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/DebugInfo/PDB/Native/InfoStream.h"
|
||||
#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
|
||||
#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
|
||||
#include "llvm/DebugInfo/PDB/PDBExtras.h"
|
||||
#include "llvm/DebugInfo/PDB/Native/NativeSession.h"
|
||||
#include "llvm/Support/ConvertUTF.h"
|
||||
@ -19,7 +21,8 @@
|
||||
using namespace llvm;
|
||||
using namespace llvm::pdb;
|
||||
|
||||
NativeRawSymbol::NativeRawSymbol(const NativeSession &PDBSession) {}
|
||||
NativeRawSymbol::NativeRawSymbol(NativeSession &PDBSession)
|
||||
: Session(PDBSession) {}
|
||||
|
||||
void NativeRawSymbol::dump(raw_ostream &OS, int Indent) const {}
|
||||
|
||||
@ -62,6 +65,11 @@ uint32_t NativeRawSymbol::getAddressSection() const {
|
||||
}
|
||||
|
||||
uint32_t NativeRawSymbol::getAge() const {
|
||||
auto &File = Session.getPDBFile();
|
||||
auto IS = File.getPDBInfoStream();
|
||||
if (IS)
|
||||
return IS->getAge();
|
||||
consumeError(IS.takeError());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -248,7 +256,7 @@ uint32_t NativeRawSymbol::getSubTypeId() const {
|
||||
}
|
||||
|
||||
std::string NativeRawSymbol::getSymbolsFileName() const {
|
||||
return 0;
|
||||
return Session.getPDBFile().getFilePath();
|
||||
}
|
||||
|
||||
uint32_t NativeRawSymbol::getSymIndexId() const {
|
||||
@ -328,7 +336,12 @@ PDB_SymType NativeRawSymbol::getSymTag() const {
|
||||
}
|
||||
|
||||
PDB_UniqueId NativeRawSymbol::getGuid() const {
|
||||
return {{0}};
|
||||
auto &File = Session.getPDBFile();
|
||||
auto IS = File.getPDBInfoStream();
|
||||
if (IS)
|
||||
return IS->getGuid();
|
||||
consumeError(IS.takeError());
|
||||
return PDB_UniqueId{{0}};
|
||||
}
|
||||
|
||||
int32_t NativeRawSymbol::getOffset() const {
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "llvm/DebugInfo/PDB/GenericError.h"
|
||||
#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
|
||||
#include "llvm/DebugInfo/PDB/IPDBSourceFile.h"
|
||||
#include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h"
|
||||
#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
|
||||
#include "llvm/DebugInfo/PDB/Native/RawError.h"
|
||||
#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
|
||||
@ -68,8 +69,12 @@ uint64_t NativeSession::getLoadAddress() const { return 0; }
|
||||
|
||||
void NativeSession::setLoadAddress(uint64_t Address) {}
|
||||
|
||||
std::unique_ptr<PDBSymbolExe> NativeSession::getGlobalScope() const {
|
||||
return nullptr;
|
||||
std::unique_ptr<PDBSymbolExe> NativeSession::getGlobalScope() {
|
||||
auto RawSymbol = llvm::make_unique<NativeRawSymbol>(*this);
|
||||
auto PdbSymbol(PDBSymbol::create(*this, std::move(RawSymbol)));
|
||||
std::unique_ptr<PDBSymbolExe> ExeSymbol(
|
||||
static_cast<PDBSymbolExe *>(PdbSymbol.release()));
|
||||
return ExeSymbol;
|
||||
}
|
||||
|
||||
std::unique_ptr<PDBSymbol>
|
||||
|
Loading…
Reference in New Issue
Block a user