NativeExeSymbol.cpp revision 320397
155682Smarkm//===- NativeExeSymbol.cpp - native impl for PDBSymbolExe -------*- C++ -*-===// 2233294Sstas// 3233294Sstas// The LLVM Compiler Infrastructure 4233294Sstas// 555682Smarkm// This file is distributed under the University of Illinois Open Source 6233294Sstas// License. See LICENSE.TXT for details. 7233294Sstas// 8233294Sstas//===----------------------------------------------------------------------===// 955682Smarkm 10233294Sstas#include "llvm/DebugInfo/PDB/Native/NativeExeSymbol.h" 11233294Sstas 1255682Smarkm#include "llvm/ADT/STLExtras.h" 13233294Sstas#include "llvm/DebugInfo/PDB/Native/DbiStream.h" 14233294Sstas#include "llvm/DebugInfo/PDB/Native/InfoStream.h" 15233294Sstas#include "llvm/DebugInfo/PDB/Native/NativeEnumModules.h" 1655682Smarkm#include "llvm/DebugInfo/PDB/Native/PDBFile.h" 17233294Sstas 18233294Sstasnamespace llvm { 19233294Sstasnamespace pdb { 2055682Smarkm 21233294SstasNativeExeSymbol::NativeExeSymbol(NativeSession &Session, uint32_t SymbolId) 22233294Sstas : NativeRawSymbol(Session, SymbolId), File(Session.getPDBFile()) {} 23233294Sstas 24233294Sstasstd::unique_ptr<NativeRawSymbol> NativeExeSymbol::clone() const { 25233294Sstas return llvm::make_unique<NativeExeSymbol>(Session, SymbolId); 26233294Sstas} 27233294Sstas 28233294Sstasstd::unique_ptr<IPDBEnumSymbols> 29233294SstasNativeExeSymbol::findChildren(PDB_SymType Type) const { 30233294Sstas switch (Type) { 31233294Sstas case PDB_SymType::Compiland: { 3255682Smarkm auto Dbi = File.getPDBDbiStream(); 3355682Smarkm if (Dbi) { 3455682Smarkm const DbiModuleList &Modules = Dbi->modules(); 3555682Smarkm return std::unique_ptr<IPDBEnumSymbols>( 36233294Sstas new NativeEnumModules(Session, Modules)); 3755682Smarkm } 3855682Smarkm consumeError(Dbi.takeError()); 3955682Smarkm break; 4055682Smarkm } 4155682Smarkm default: 4255682Smarkm break; 43178825Sdfr } 4455682Smarkm return nullptr; 4555682Smarkm} 46233294Sstas 47178825Sdfruint32_t NativeExeSymbol::getAge() const { 48178825Sdfr auto IS = File.getPDBInfoStream(); 4955682Smarkm if (IS) 50178825Sdfr return IS->getAge(); 51233294Sstas consumeError(IS.takeError()); 52178825Sdfr return 0; 53178825Sdfr} 54178825Sdfr 55178825Sdfrstd::string NativeExeSymbol::getSymbolsFileName() const { 56178825Sdfr return File.getFilePath(); 57178825Sdfr} 58178825Sdfr 59178825SdfrPDB_UniqueId NativeExeSymbol::getGuid() const { 60178825Sdfr auto IS = File.getPDBInfoStream(); 61178825Sdfr if (IS) 62178825Sdfr return IS->getGuid(); 63233294Sstas consumeError(IS.takeError()); 64178825Sdfr return PDB_UniqueId{{0}}; 65178825Sdfr} 6672445Sassar 6772445Sassarbool NativeExeSymbol::hasCTypes() const { 6855682Smarkm auto Dbi = File.getPDBDbiStream(); 6972445Sassar if (Dbi) 7055682Smarkm return Dbi->hasCTypes(); 7172445Sassar consumeError(Dbi.takeError()); 7272445Sassar return false; 7372445Sassar} 7472445Sassar 75178825Sdfrbool NativeExeSymbol::hasPrivateSymbols() const { 76178825Sdfr auto Dbi = File.getPDBDbiStream(); 77178825Sdfr if (Dbi) 78178825Sdfr return !Dbi->isStripped(); 79178825Sdfr consumeError(Dbi.takeError()); 80178825Sdfr return false; 81178825Sdfr} 82178825Sdfr 83178825Sdfr} // namespace pdb 84178825Sdfr} // namespace llvm 85178825Sdfr