Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:43:45

0001 //===- IPDBSession.h - base interface for a PDB symbol context --*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 
0009 #ifndef LLVM_DEBUGINFO_PDB_IPDBSESSION_H
0010 #define LLVM_DEBUGINFO_PDB_IPDBSESSION_H
0011 
0012 #include "PDBSymbol.h"
0013 #include "PDBTypes.h"
0014 #include "llvm/ADT/StringRef.h"
0015 #include "llvm/Support/Casting.h"
0016 #include <memory>
0017 
0018 namespace llvm {
0019 namespace pdb {
0020 class PDBSymbolCompiland;
0021 class PDBSymbolExe;
0022 
0023 /// IPDBSession defines an interface used to provide a context for querying
0024 /// debug information from a debug data source (for example, a PDB).
0025 class IPDBSession {
0026 public:
0027   virtual ~IPDBSession();
0028 
0029   virtual uint64_t getLoadAddress() const = 0;
0030   virtual bool setLoadAddress(uint64_t Address) = 0;
0031   virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() = 0;
0032   virtual std::unique_ptr<PDBSymbol>
0033   getSymbolById(SymIndexId SymbolId) const = 0;
0034 
0035   virtual bool addressForVA(uint64_t VA, uint32_t &Section,
0036                             uint32_t &Offset) const = 0;
0037   virtual bool addressForRVA(uint32_t RVA, uint32_t &Section,
0038                              uint32_t &Offset) const = 0;
0039 
0040   template <typename T>
0041   std::unique_ptr<T> getConcreteSymbolById(SymIndexId SymbolId) const {
0042     return unique_dyn_cast_or_null<T>(getSymbolById(SymbolId));
0043   }
0044 
0045   virtual std::unique_ptr<PDBSymbol> findSymbolByAddress(uint64_t Address,
0046                                                          PDB_SymType Type) = 0;
0047   virtual std::unique_ptr<PDBSymbol> findSymbolByRVA(uint32_t RVA,
0048                                                      PDB_SymType Type) = 0;
0049   virtual std::unique_ptr<PDBSymbol>
0050   findSymbolBySectOffset(uint32_t Sect, uint32_t Offset, PDB_SymType Type) = 0;
0051 
0052   virtual std::unique_ptr<IPDBEnumLineNumbers>
0053   findLineNumbers(const PDBSymbolCompiland &Compiland,
0054                   const IPDBSourceFile &File) const = 0;
0055   virtual std::unique_ptr<IPDBEnumLineNumbers>
0056   findLineNumbersByAddress(uint64_t Address, uint32_t Length) const = 0;
0057   virtual std::unique_ptr<IPDBEnumLineNumbers>
0058   findLineNumbersByRVA(uint32_t RVA, uint32_t Length) const = 0;
0059   virtual std::unique_ptr<IPDBEnumLineNumbers>
0060   findLineNumbersBySectOffset(uint32_t Section, uint32_t Offset,
0061                               uint32_t Length) const = 0;
0062 
0063   virtual std::unique_ptr<IPDBEnumSourceFiles>
0064   findSourceFiles(const PDBSymbolCompiland *Compiland, llvm::StringRef Pattern,
0065                   PDB_NameSearchFlags Flags) const = 0;
0066   virtual std::unique_ptr<IPDBSourceFile>
0067   findOneSourceFile(const PDBSymbolCompiland *Compiland,
0068                     llvm::StringRef Pattern,
0069                     PDB_NameSearchFlags Flags) const = 0;
0070   virtual std::unique_ptr<IPDBEnumChildren<PDBSymbolCompiland>>
0071   findCompilandsForSourceFile(llvm::StringRef Pattern,
0072                               PDB_NameSearchFlags Flags) const = 0;
0073   virtual std::unique_ptr<PDBSymbolCompiland>
0074   findOneCompilandForSourceFile(llvm::StringRef Pattern,
0075                                 PDB_NameSearchFlags Flags) const = 0;
0076 
0077   virtual std::unique_ptr<IPDBEnumSourceFiles> getAllSourceFiles() const = 0;
0078   virtual std::unique_ptr<IPDBEnumSourceFiles>
0079   getSourceFilesForCompiland(const PDBSymbolCompiland &Compiland) const = 0;
0080   virtual std::unique_ptr<IPDBSourceFile>
0081   getSourceFileById(uint32_t FileId) const = 0;
0082 
0083   virtual std::unique_ptr<IPDBEnumDataStreams> getDebugStreams() const = 0;
0084 
0085   virtual std::unique_ptr<IPDBEnumTables> getEnumTables() const = 0;
0086 
0087   virtual std::unique_ptr<IPDBEnumInjectedSources>
0088   getInjectedSources() const = 0;
0089 
0090   virtual std::unique_ptr<IPDBEnumSectionContribs>
0091   getSectionContribs() const = 0;
0092 
0093   virtual std::unique_ptr<IPDBEnumFrameData>
0094   getFrameData() const = 0;
0095 };
0096 } // namespace pdb
0097 } // namespace llvm
0098 
0099 #endif