diff options
Diffstat (limited to 'lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp')
| -rw-r--r-- | lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp | 60 | 
1 files changed, 38 insertions, 22 deletions
diff --git a/lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp b/lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp index e8b06065fc607..6dde5d08a500b 100644 --- a/lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp +++ b/lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp @@ -12,34 +12,53 @@  #include "llvm/ADT/STLExtras.h"  #include "llvm/DebugInfo/PDB/Native/DbiStream.h"  #include "llvm/DebugInfo/PDB/Native/InfoStream.h" +#include "llvm/DebugInfo/PDB/Native/NativeCompilandSymbol.h"  #include "llvm/DebugInfo/PDB/Native/NativeEnumModules.h"  #include "llvm/DebugInfo/PDB/Native/PDBFile.h" +#include "llvm/DebugInfo/PDB/Native/SymbolCache.h" +#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h" -namespace llvm { -namespace pdb { +using namespace llvm; +using namespace llvm::pdb; -NativeExeSymbol::NativeExeSymbol(NativeSession &Session, SymIndexId SymbolId) -    : NativeRawSymbol(Session, SymbolId), File(Session.getPDBFile()) {} +static DbiStream *getDbiStreamPtr(NativeSession &Session) { +  Expected<DbiStream &> DbiS = Session.getPDBFile().getPDBDbiStream(); +  if (DbiS) +    return &DbiS.get(); -std::unique_ptr<NativeRawSymbol> NativeExeSymbol::clone() const { -  return llvm::make_unique<NativeExeSymbol>(Session, SymbolId); +  consumeError(DbiS.takeError()); +  return nullptr;  } +NativeExeSymbol::NativeExeSymbol(NativeSession &Session, SymIndexId SymbolId) +    : NativeRawSymbol(Session, PDB_SymType::Exe, SymbolId), +      Dbi(getDbiStreamPtr(Session)) {} +  std::unique_ptr<IPDBEnumSymbols>  NativeExeSymbol::findChildren(PDB_SymType Type) const {    switch (Type) {    case PDB_SymType::Compiland: { -    auto Dbi = File.getPDBDbiStream(); -    if (Dbi) { -      const DbiModuleList &Modules = Dbi->modules(); -      return std::unique_ptr<IPDBEnumSymbols>( -          new NativeEnumModules(Session, Modules)); -    } -    consumeError(Dbi.takeError()); +    return std::unique_ptr<IPDBEnumSymbols>(new NativeEnumModules(Session));      break;    } +  case PDB_SymType::ArrayType: +    return Session.getSymbolCache().createTypeEnumerator(codeview::LF_ARRAY);    case PDB_SymType::Enum: -    return Session.createTypeEnumerator(codeview::LF_ENUM); +    return Session.getSymbolCache().createTypeEnumerator(codeview::LF_ENUM); +  case PDB_SymType::PointerType: +    return Session.getSymbolCache().createTypeEnumerator(codeview::LF_POINTER); +  case PDB_SymType::UDT: +    return Session.getSymbolCache().createTypeEnumerator( +        {codeview::LF_STRUCTURE, codeview::LF_CLASS, codeview::LF_UNION, +         codeview::LF_INTERFACE}); +  case PDB_SymType::VTableShape: +    return Session.getSymbolCache().createTypeEnumerator(codeview::LF_VTSHAPE); +  case PDB_SymType::FunctionSig: +    return Session.getSymbolCache().createTypeEnumerator( +        {codeview::LF_PROCEDURE, codeview::LF_MFUNCTION}); +  case PDB_SymType::Typedef: +    return Session.getSymbolCache().createGlobalsEnumerator(codeview::S_UDT); +    default:      break;    } @@ -47,7 +66,7 @@ NativeExeSymbol::findChildren(PDB_SymType Type) const {  }  uint32_t NativeExeSymbol::getAge() const { -  auto IS = File.getPDBInfoStream(); +  auto IS = Session.getPDBFile().getPDBInfoStream();    if (IS)      return IS->getAge();    consumeError(IS.takeError()); @@ -55,11 +74,11 @@ uint32_t NativeExeSymbol::getAge() const {  }  std::string NativeExeSymbol::getSymbolsFileName() const { -  return File.getFilePath(); +  return Session.getPDBFile().getFilePath();  }  codeview::GUID NativeExeSymbol::getGuid() const { -  auto IS = File.getPDBInfoStream(); +  auto IS = Session.getPDBFile().getPDBInfoStream();    if (IS)      return IS->getGuid();    consumeError(IS.takeError()); @@ -67,7 +86,7 @@ codeview::GUID NativeExeSymbol::getGuid() const {  }  bool NativeExeSymbol::hasCTypes() const { -  auto Dbi = File.getPDBDbiStream(); +  auto Dbi = Session.getPDBFile().getPDBDbiStream();    if (Dbi)      return Dbi->hasCTypes();    consumeError(Dbi.takeError()); @@ -75,12 +94,9 @@ bool NativeExeSymbol::hasCTypes() const {  }  bool NativeExeSymbol::hasPrivateSymbols() const { -  auto Dbi = File.getPDBDbiStream(); +  auto Dbi = Session.getPDBFile().getPDBDbiStream();    if (Dbi)      return !Dbi->isStripped();    consumeError(Dbi.takeError());    return false;  } - -} // namespace pdb -} // namespace llvm  | 
