mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 19:12:56 +02:00
[PDB] Add exclusive methods to derived symbol class
Summary: This commit adds two methods to the PDBSymboFunc class used in parsing symbols. getLineNumbers() is used to determine a Function symbol's declaration and getCompilandId() is used to initialize the SymbolContext field sc.comp_unit. Reviewers: zturner, rnk, llvm-commits Reviewed By: zturner Differential Revision: https://reviews.llvm.org/D44457 llvm-svn: 327909
This commit is contained in:
parent
862ceda9fb
commit
0e87a89fed
@ -10,6 +10,7 @@
|
||||
#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNC_H
|
||||
#define LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNC_H
|
||||
|
||||
#include "IPDBLineNumber.h"
|
||||
#include "PDBSymbol.h"
|
||||
#include "PDBSymbolTypeFunctionSig.h"
|
||||
#include "PDBTypes.h"
|
||||
@ -76,6 +77,9 @@ public:
|
||||
FORWARD_SYMBOL_METHOD(getVirtualAddress)
|
||||
FORWARD_SYMBOL_METHOD(getVirtualBaseOffset)
|
||||
FORWARD_SYMBOL_METHOD(isVolatileType)
|
||||
|
||||
std::unique_ptr<IPDBEnumLineNumbers> getLineNumbers() const;
|
||||
uint32_t getCompilandId() const;
|
||||
};
|
||||
|
||||
} // namespace llvm
|
||||
|
@ -10,6 +10,7 @@
|
||||
#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEENUM_H
|
||||
#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEENUM_H
|
||||
|
||||
#include "IPDBLineNumber.h"
|
||||
#include "PDBSymbol.h"
|
||||
#include "PDBSymbolTypeBuiltin.h"
|
||||
#include "PDBTypes.h"
|
||||
@ -38,6 +39,7 @@ public:
|
||||
FORWARD_SYMBOL_METHOD(getLength)
|
||||
FORWARD_SYMBOL_ID_METHOD(getLexicalParent)
|
||||
FORWARD_SYMBOL_METHOD(getName)
|
||||
FORWARD_SYMBOL_METHOD(getSrcLineOnTypeDefn)
|
||||
FORWARD_SYMBOL_METHOD(isNested)
|
||||
FORWARD_SYMBOL_METHOD(hasOverloadedOperator)
|
||||
FORWARD_SYMBOL_METHOD(isPacked)
|
||||
|
@ -32,7 +32,11 @@ public:
|
||||
FORWARD_SYMBOL_METHOD(getLength)
|
||||
FORWARD_SYMBOL_ID_METHOD(getLexicalParent)
|
||||
FORWARD_SYMBOL_METHOD(isReference)
|
||||
FORWARD_SYMBOL_METHOD(isRValueReference)
|
||||
FORWARD_SYMBOL_METHOD(isPointerToDataMember)
|
||||
FORWARD_SYMBOL_METHOD(isPointerToMemberFunction)
|
||||
FORWARD_SYMBOL_ID_METHOD_WITH_NAME(getType, getPointeeType)
|
||||
FORWARD_SYMBOL_METHOD(isRestrictedType)
|
||||
FORWARD_SYMBOL_METHOD(isUnalignedType)
|
||||
FORWARD_SYMBOL_METHOD(isVolatileType)
|
||||
};
|
||||
|
@ -10,6 +10,7 @@
|
||||
#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEUDT_H
|
||||
#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEUDT_H
|
||||
|
||||
#include "IPDBLineNumber.h"
|
||||
#include "IPDBSession.h"
|
||||
#include "PDBSymbol.h"
|
||||
#include "PDBSymbolTypeBaseClass.h"
|
||||
@ -45,6 +46,7 @@ public:
|
||||
FORWARD_SYMBOL_METHOD(getLength)
|
||||
FORWARD_SYMBOL_ID_METHOD(getLexicalParent)
|
||||
FORWARD_SYMBOL_METHOD(getName)
|
||||
FORWARD_SYMBOL_METHOD(getSrcLineOnTypeDefn)
|
||||
FORWARD_SYMBOL_METHOD(isNested)
|
||||
FORWARD_SYMBOL_METHOD(hasOverloadedOperator)
|
||||
FORWARD_SYMBOL_METHOD(isPacked)
|
||||
@ -53,6 +55,7 @@ public:
|
||||
FORWARD_SYMBOL_METHOD(isUnalignedType)
|
||||
FORWARD_SYMBOL_ID_METHOD(getVirtualTableShape)
|
||||
FORWARD_SYMBOL_METHOD(isVolatileType)
|
||||
FORWARD_SYMBOL_METHOD(getAccess)
|
||||
};
|
||||
}
|
||||
} // namespace llvm
|
||||
|
@ -105,3 +105,18 @@ bool PDBSymbolFunc::isDestructor() const {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::unique_ptr<IPDBEnumLineNumbers> PDBSymbolFunc::getLineNumbers() const {
|
||||
auto Len = RawSymbol->getLength();
|
||||
return Session.findLineNumbersByAddress(RawSymbol->getVirtualAddress(),
|
||||
Len ? Len : 1);
|
||||
}
|
||||
|
||||
uint32_t PDBSymbolFunc::getCompilandId() const {
|
||||
if (auto Lines = getLineNumbers()) {
|
||||
if (auto FirstLine = Lines->getNext()) {
|
||||
return FirstLine->getCompilandId();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user