1 //===- IPDBSession.h - base interface for a PDB symbol context --*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_DEBUGINFO_PDB_IPDBSESSION_H 11 #define LLVM_DEBUGINFO_PDB_IPDBSESSION_H 12 13 #include "PDBTypes.h" 14 #include "llvm/Support/Casting.h" 15 #include <memory> 16 17 namespace llvm { 18 19 class PDBSymbolCompiland; 20 class PDBSymbolExe; 21 22 /// IPDBSession defines an interface used to provide a context for querying 23 /// debug information from a debug data source (for example, a PDB). 24 class IPDBSession { 25 public: 26 virtual ~IPDBSession(); 27 28 virtual uint64_t getLoadAddress() const = 0; 29 virtual void setLoadAddress(uint64_t Address) = 0; 30 virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() const = 0; 31 virtual std::unique_ptr<PDBSymbol> getSymbolById(uint32_t SymbolId) const = 0; 32 33 template <typename T> getConcreteSymbolById(uint32_t SymbolId)34 std::unique_ptr<T> getConcreteSymbolById(uint32_t SymbolId) const { 35 auto Symbol(getSymbolById(SymbolId)); 36 if (!Symbol) 37 return nullptr; 38 39 T *ConcreteSymbol = dyn_cast<T>(Symbol.get()); 40 if (!ConcreteSymbol) 41 return nullptr; 42 Symbol.release(); 43 return std::unique_ptr<T>(ConcreteSymbol); 44 } 45 46 virtual std::unique_ptr<IPDBEnumSourceFiles> getAllSourceFiles() const = 0; 47 virtual std::unique_ptr<IPDBEnumSourceFiles> 48 getSourceFilesForCompiland(const PDBSymbolCompiland &Compiland) const = 0; 49 virtual std::unique_ptr<IPDBSourceFile> 50 getSourceFileById(uint32_t FileId) const = 0; 51 52 virtual std::unique_ptr<IPDBEnumDataStreams> getDebugStreams() const = 0; 53 }; 54 } 55 56 #endif 57