]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/DebugInfo/PDB/PDBContext.h
MFV r337204: 9439 ZFS double-free due to failure to dirty indirect block
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / DebugInfo / PDB / PDBContext.h
1 //===-- PDBContext.h --------------------------------------------*- 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_PDBCONTEXT_H
11 #define LLVM_DEBUGINFO_PDB_PDBCONTEXT_H
12
13 #include "llvm/DebugInfo/DIContext.h"
14 #include "llvm/DebugInfo/PDB/IPDBSession.h"
15 #include <cstdint>
16 #include <memory>
17 #include <string>
18
19 namespace llvm {
20
21 namespace object {
22 class COFFObjectFile;
23 } // end namespace object
24
25 namespace pdb {
26
27   /// PDBContext
28   /// This data structure is the top level entity that deals with PDB debug
29   /// information parsing.  This data structure exists only when there is a
30   /// need for a transparent interface to different debug information formats
31   /// (e.g. PDB and DWARF).  More control and power over the debug information
32   /// access can be had by using the PDB interfaces directly.
33   class PDBContext : public DIContext {
34   public:
35     PDBContext(const object::COFFObjectFile &Object,
36                std::unique_ptr<IPDBSession> PDBSession);
37     PDBContext(PDBContext &) = delete;
38     PDBContext &operator=(PDBContext &) = delete;
39
40     static bool classof(const DIContext *DICtx) {
41       return DICtx->getKind() == CK_PDB;
42     }
43
44     void dump(raw_ostream &OS, DIDumpOptions DIDumpOpts) override;
45
46     DILineInfo getLineInfoForAddress(
47         uint64_t Address,
48         DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
49     DILineInfoTable getLineInfoForAddressRange(
50         uint64_t Address, uint64_t Size,
51         DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
52     DIInliningInfo getInliningInfoForAddress(
53         uint64_t Address,
54         DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
55
56   private:
57     std::string getFunctionName(uint64_t Address, DINameKind NameKind) const;
58     std::unique_ptr<IPDBSession> Session;
59   };
60
61 } // end namespace pdb
62
63 } // end namespace llvm
64
65 #endif // LLVM_DEBUGINFO_PDB_PDBCONTEXT_H