1 //===- NativeSession.h - Native implementation of IPDBSession ---*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_DEBUGINFO_PDB_NATIVE_NATIVESESSION_H
10 #define LLVM_DEBUGINFO_PDB_NATIVE_NATIVESESSION_H
12 #include "llvm/ADT/DenseMap.h"
13 #include "llvm/ADT/StringRef.h"
14 #include "llvm/DebugInfo/CodeView/TypeIndex.h"
15 #include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
16 #include "llvm/DebugInfo/PDB/IPDBSession.h"
17 #include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h"
18 #include "llvm/DebugInfo/PDB/Native/SymbolCache.h"
19 #include "llvm/Support/Allocator.h"
20 #include "llvm/Support/Error.h"
26 class NativeExeSymbol
;
28 class NativeSession
: public IPDBSession
{
30 NativeSession(std::unique_ptr
<PDBFile
> PdbFile
,
31 std::unique_ptr
<BumpPtrAllocator
> Allocator
);
32 ~NativeSession() override
;
34 static Error
createFromPdb(std::unique_ptr
<MemoryBuffer
> MB
,
35 std::unique_ptr
<IPDBSession
> &Session
);
36 static Error
createFromExe(StringRef Path
,
37 std::unique_ptr
<IPDBSession
> &Session
);
39 uint64_t getLoadAddress() const override
;
40 bool setLoadAddress(uint64_t Address
) override
;
41 std::unique_ptr
<PDBSymbolExe
> getGlobalScope() override
;
42 std::unique_ptr
<PDBSymbol
> getSymbolById(SymIndexId SymbolId
) const override
;
44 bool addressForVA(uint64_t VA
, uint32_t &Section
,
45 uint32_t &Offset
) const override
;
46 bool addressForRVA(uint32_t RVA
, uint32_t &Section
,
47 uint32_t &Offset
) const override
;
49 std::unique_ptr
<PDBSymbol
>
50 findSymbolByAddress(uint64_t Address
, PDB_SymType Type
) const override
;
51 std::unique_ptr
<PDBSymbol
> findSymbolByRVA(uint32_t RVA
,
52 PDB_SymType Type
) const override
;
53 std::unique_ptr
<PDBSymbol
>
54 findSymbolBySectOffset(uint32_t Sect
, uint32_t Offset
,
55 PDB_SymType Type
) const override
;
57 std::unique_ptr
<IPDBEnumLineNumbers
>
58 findLineNumbers(const PDBSymbolCompiland
&Compiland
,
59 const IPDBSourceFile
&File
) const override
;
60 std::unique_ptr
<IPDBEnumLineNumbers
>
61 findLineNumbersByAddress(uint64_t Address
, uint32_t Length
) const override
;
62 std::unique_ptr
<IPDBEnumLineNumbers
>
63 findLineNumbersByRVA(uint32_t RVA
, uint32_t Length
) const override
;
64 std::unique_ptr
<IPDBEnumLineNumbers
>
65 findLineNumbersBySectOffset(uint32_t Section
, uint32_t Offset
,
66 uint32_t Length
) const override
;
68 std::unique_ptr
<IPDBEnumSourceFiles
>
69 findSourceFiles(const PDBSymbolCompiland
*Compiland
, llvm::StringRef Pattern
,
70 PDB_NameSearchFlags Flags
) const override
;
71 std::unique_ptr
<IPDBSourceFile
>
72 findOneSourceFile(const PDBSymbolCompiland
*Compiland
,
73 llvm::StringRef Pattern
,
74 PDB_NameSearchFlags Flags
) const override
;
75 std::unique_ptr
<IPDBEnumChildren
<PDBSymbolCompiland
>>
76 findCompilandsForSourceFile(llvm::StringRef Pattern
,
77 PDB_NameSearchFlags Flags
) const override
;
78 std::unique_ptr
<PDBSymbolCompiland
>
79 findOneCompilandForSourceFile(llvm::StringRef Pattern
,
80 PDB_NameSearchFlags Flags
) const override
;
81 std::unique_ptr
<IPDBEnumSourceFiles
> getAllSourceFiles() const override
;
82 std::unique_ptr
<IPDBEnumSourceFiles
> getSourceFilesForCompiland(
83 const PDBSymbolCompiland
&Compiland
) const override
;
84 std::unique_ptr
<IPDBSourceFile
>
85 getSourceFileById(uint32_t FileId
) const override
;
87 std::unique_ptr
<IPDBEnumDataStreams
> getDebugStreams() const override
;
89 std::unique_ptr
<IPDBEnumTables
> getEnumTables() const override
;
91 std::unique_ptr
<IPDBEnumInjectedSources
> getInjectedSources() const override
;
93 std::unique_ptr
<IPDBEnumSectionContribs
> getSectionContribs() const override
;
95 std::unique_ptr
<IPDBEnumFrameData
> getFrameData() const override
;
97 PDBFile
&getPDBFile() { return *Pdb
; }
98 const PDBFile
&getPDBFile() const { return *Pdb
; }
100 NativeExeSymbol
&getNativeGlobalScope() const;
101 SymbolCache
&getSymbolCache() { return Cache
; }
102 const SymbolCache
&getSymbolCache() const { return Cache
; }
105 void initializeExeSymbol();
107 std::unique_ptr
<PDBFile
> Pdb
;
108 std::unique_ptr
<BumpPtrAllocator
> Allocator
;
111 SymIndexId ExeSymbol
= 0;