Home | History | Annotate | Line # | Download | only in PDB
      1 //===- IPDBSession.h - base interface for a PDB symbol context --*- C++ -*-===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 
      9 #ifndef LLVM_DEBUGINFO_PDB_IPDBSESSION_H
     10 #define LLVM_DEBUGINFO_PDB_IPDBSESSION_H
     11 
     12 #include "PDBSymbol.h"
     13 #include "PDBTypes.h"
     14 #include "llvm/ADT/StringRef.h"
     15 #include "llvm/Support/Casting.h"
     16 #include <memory>
     17 
     18 namespace llvm {
     19 namespace pdb {
     20 class PDBSymbolCompiland;
     21 class PDBSymbolExe;
     22 
     23 /// IPDBSession defines an interface used to provide a context for querying
     24 /// debug information from a debug data source (for example, a PDB).
     25 class IPDBSession {
     26 public:
     27   virtual ~IPDBSession();
     28 
     29   virtual uint64_t getLoadAddress() const = 0;
     30   virtual bool setLoadAddress(uint64_t Address) = 0;
     31   virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() = 0;
     32   virtual std::unique_ptr<PDBSymbol>
     33   getSymbolById(SymIndexId SymbolId) const = 0;
     34 
     35   virtual bool addressForVA(uint64_t VA, uint32_t &Section,
     36                             uint32_t &Offset) const = 0;
     37   virtual bool addressForRVA(uint32_t RVA, uint32_t &Section,
     38                              uint32_t &Offset) const = 0;
     39 
     40   template <typename T>
     41   std::unique_ptr<T> getConcreteSymbolById(SymIndexId SymbolId) const {
     42     return unique_dyn_cast_or_null<T>(getSymbolById(SymbolId));
     43   }
     44 
     45   virtual std::unique_ptr<PDBSymbol> findSymbolByAddress(uint64_t Address,
     46                                                          PDB_SymType Type) = 0;
     47   virtual std::unique_ptr<PDBSymbol> findSymbolByRVA(uint32_t RVA,
     48                                                      PDB_SymType Type) = 0;
     49   virtual std::unique_ptr<PDBSymbol>
     50   findSymbolBySectOffset(uint32_t Sect, uint32_t Offset, PDB_SymType Type) = 0;
     51 
     52   virtual std::unique_ptr<IPDBEnumLineNumbers>
     53   findLineNumbers(const PDBSymbolCompiland &Compiland,
     54                   const IPDBSourceFile &File) const = 0;
     55   virtual std::unique_ptr<IPDBEnumLineNumbers>
     56   findLineNumbersByAddress(uint64_t Address, uint32_t Length) const = 0;
     57   virtual std::unique_ptr<IPDBEnumLineNumbers>
     58   findLineNumbersByRVA(uint32_t RVA, uint32_t Length) const = 0;
     59   virtual std::unique_ptr<IPDBEnumLineNumbers>
     60   findLineNumbersBySectOffset(uint32_t Section, uint32_t Offset,
     61                               uint32_t Length) const = 0;
     62 
     63   virtual std::unique_ptr<IPDBEnumSourceFiles>
     64   findSourceFiles(const PDBSymbolCompiland *Compiland, llvm::StringRef Pattern,
     65                   PDB_NameSearchFlags Flags) const = 0;
     66   virtual std::unique_ptr<IPDBSourceFile>
     67   findOneSourceFile(const PDBSymbolCompiland *Compiland,
     68                     llvm::StringRef Pattern,
     69                     PDB_NameSearchFlags Flags) const = 0;
     70   virtual std::unique_ptr<IPDBEnumChildren<PDBSymbolCompiland>>
     71   findCompilandsForSourceFile(llvm::StringRef Pattern,
     72                               PDB_NameSearchFlags Flags) const = 0;
     73   virtual std::unique_ptr<PDBSymbolCompiland>
     74   findOneCompilandForSourceFile(llvm::StringRef Pattern,
     75                                 PDB_NameSearchFlags Flags) const = 0;
     76 
     77   virtual std::unique_ptr<IPDBEnumSourceFiles> getAllSourceFiles() const = 0;
     78   virtual std::unique_ptr<IPDBEnumSourceFiles>
     79   getSourceFilesForCompiland(const PDBSymbolCompiland &Compiland) const = 0;
     80   virtual std::unique_ptr<IPDBSourceFile>
     81   getSourceFileById(uint32_t FileId) const = 0;
     82 
     83   virtual std::unique_ptr<IPDBEnumDataStreams> getDebugStreams() const = 0;
     84 
     85   virtual std::unique_ptr<IPDBEnumTables> getEnumTables() const = 0;
     86 
     87   virtual std::unique_ptr<IPDBEnumInjectedSources>
     88   getInjectedSources() const = 0;
     89 
     90   virtual std::unique_ptr<IPDBEnumSectionContribs>
     91   getSectionContribs() const = 0;
     92 
     93   virtual std::unique_ptr<IPDBEnumFrameData>
     94   getFrameData() const = 0;
     95 };
     96 } // namespace pdb
     97 } // namespace llvm
     98 
     99 #endif
    100