1317017Sdim//===- NativeSession.h - Native implementation of IPDBSession ---*- C++ -*-===// 2317017Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6317017Sdim// 7317017Sdim//===----------------------------------------------------------------------===// 8317017Sdim 9320572Sdim#ifndef LLVM_DEBUGINFO_PDB_NATIVE_NATIVESESSION_H 10320572Sdim#define LLVM_DEBUGINFO_PDB_NATIVE_NATIVESESSION_H 11317017Sdim 12320970Sdim#include "llvm/ADT/DenseMap.h" 13317017Sdim#include "llvm/ADT/StringRef.h" 14320970Sdim#include "llvm/DebugInfo/CodeView/TypeIndex.h" 15320970Sdim#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h" 16317017Sdim#include "llvm/DebugInfo/PDB/IPDBSession.h" 17320572Sdim#include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h" 18344779Sdim#include "llvm/DebugInfo/PDB/Native/SymbolCache.h" 19317017Sdim#include "llvm/Support/Allocator.h" 20317017Sdim#include "llvm/Support/Error.h" 21317017Sdim 22317017Sdimnamespace llvm { 23327952Sdimclass MemoryBuffer; 24317017Sdimnamespace pdb { 25317017Sdimclass PDBFile; 26344779Sdimclass NativeExeSymbol; 27317017Sdim 28317017Sdimclass NativeSession : public IPDBSession { 29317017Sdimpublic: 30317017Sdim NativeSession(std::unique_ptr<PDBFile> PdbFile, 31317017Sdim std::unique_ptr<BumpPtrAllocator> Allocator); 32317017Sdim ~NativeSession() override; 33317017Sdim 34327952Sdim static Error createFromPdb(std::unique_ptr<MemoryBuffer> MB, 35317017Sdim std::unique_ptr<IPDBSession> &Session); 36317017Sdim static Error createFromExe(StringRef Path, 37317017Sdim std::unique_ptr<IPDBSession> &Session); 38317017Sdim 39317017Sdim uint64_t getLoadAddress() const override; 40341825Sdim bool setLoadAddress(uint64_t Address) override; 41320397Sdim std::unique_ptr<PDBSymbolExe> getGlobalScope() override; 42344779Sdim std::unique_ptr<PDBSymbol> getSymbolById(SymIndexId SymbolId) const override; 43317017Sdim 44341825Sdim bool addressForVA(uint64_t VA, uint32_t &Section, 45341825Sdim uint32_t &Offset) const override; 46341825Sdim bool addressForRVA(uint32_t RVA, uint32_t &Section, 47341825Sdim uint32_t &Offset) const override; 48341825Sdim 49317017Sdim std::unique_ptr<PDBSymbol> 50317017Sdim findSymbolByAddress(uint64_t Address, PDB_SymType Type) const override; 51341825Sdim std::unique_ptr<PDBSymbol> findSymbolByRVA(uint32_t RVA, 52341825Sdim PDB_SymType Type) const override; 53341825Sdim std::unique_ptr<PDBSymbol> 54341825Sdim findSymbolBySectOffset(uint32_t Sect, uint32_t Offset, 55341825Sdim PDB_SymType Type) const override; 56317017Sdim 57317017Sdim std::unique_ptr<IPDBEnumLineNumbers> 58317017Sdim findLineNumbers(const PDBSymbolCompiland &Compiland, 59317017Sdim const IPDBSourceFile &File) const override; 60317017Sdim std::unique_ptr<IPDBEnumLineNumbers> 61317017Sdim findLineNumbersByAddress(uint64_t Address, uint32_t Length) const override; 62341825Sdim std::unique_ptr<IPDBEnumLineNumbers> 63341825Sdim findLineNumbersByRVA(uint32_t RVA, uint32_t Length) const override; 64341825Sdim std::unique_ptr<IPDBEnumLineNumbers> 65341825Sdim findLineNumbersBySectOffset(uint32_t Section, uint32_t Offset, 66341825Sdim uint32_t Length) const override; 67317017Sdim 68317017Sdim std::unique_ptr<IPDBEnumSourceFiles> 69317017Sdim findSourceFiles(const PDBSymbolCompiland *Compiland, llvm::StringRef Pattern, 70317017Sdim PDB_NameSearchFlags Flags) const override; 71317017Sdim std::unique_ptr<IPDBSourceFile> 72317017Sdim findOneSourceFile(const PDBSymbolCompiland *Compiland, 73317017Sdim llvm::StringRef Pattern, 74317017Sdim PDB_NameSearchFlags Flags) const override; 75317017Sdim std::unique_ptr<IPDBEnumChildren<PDBSymbolCompiland>> 76317017Sdim findCompilandsForSourceFile(llvm::StringRef Pattern, 77317017Sdim PDB_NameSearchFlags Flags) const override; 78317017Sdim std::unique_ptr<PDBSymbolCompiland> 79317017Sdim findOneCompilandForSourceFile(llvm::StringRef Pattern, 80317017Sdim PDB_NameSearchFlags Flags) const override; 81317017Sdim std::unique_ptr<IPDBEnumSourceFiles> getAllSourceFiles() const override; 82317017Sdim std::unique_ptr<IPDBEnumSourceFiles> getSourceFilesForCompiland( 83317017Sdim const PDBSymbolCompiland &Compiland) const override; 84317017Sdim std::unique_ptr<IPDBSourceFile> 85317017Sdim getSourceFileById(uint32_t FileId) const override; 86317017Sdim 87317017Sdim std::unique_ptr<IPDBEnumDataStreams> getDebugStreams() const override; 88317017Sdim 89327952Sdim std::unique_ptr<IPDBEnumTables> getEnumTables() const override; 90327952Sdim 91341825Sdim std::unique_ptr<IPDBEnumInjectedSources> getInjectedSources() const override; 92341825Sdim 93341825Sdim std::unique_ptr<IPDBEnumSectionContribs> getSectionContribs() const override; 94341825Sdim 95344779Sdim std::unique_ptr<IPDBEnumFrameData> getFrameData() const override; 96344779Sdim 97317017Sdim PDBFile &getPDBFile() { return *Pdb; } 98317017Sdim const PDBFile &getPDBFile() const { return *Pdb; } 99317017Sdim 100344779Sdim NativeExeSymbol &getNativeGlobalScope() const; 101344779Sdim SymbolCache &getSymbolCache() { return Cache; } 102344779Sdim const SymbolCache &getSymbolCache() const { return Cache; } 103344779Sdim 104317017Sdimprivate: 105344779Sdim void initializeExeSymbol(); 106344779Sdim 107317017Sdim std::unique_ptr<PDBFile> Pdb; 108317017Sdim std::unique_ptr<BumpPtrAllocator> Allocator; 109344779Sdim 110344779Sdim SymbolCache Cache; 111344779Sdim SymIndexId ExeSymbol = 0; 112317017Sdim}; 113341825Sdim} // namespace pdb 114341825Sdim} // namespace llvm 115317017Sdim 116317017Sdim#endif 117