• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
classof(const DIContext * DICtx)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
66