]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/DebugInfo/PDB/PDBContext.h
Update our device tree files to a Linux 4.10
[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, DIDumpType DumpType = DIDT_All,
45               bool DumpEH = false, bool SummarizeTypes = false) override;
46
47     DILineInfo getLineInfoForAddress(
48         uint64_t Address,
49         DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
50     DILineInfoTable getLineInfoForAddressRange(
51         uint64_t Address, uint64_t Size,
52         DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
53     DIInliningInfo getInliningInfoForAddress(
54         uint64_t Address,
55         DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
56
57   private:
58     std::string getFunctionName(uint64_t Address, DINameKind NameKind) const;
59     std::unique_ptr<IPDBSession> Session;
60   };
61
62 } // end namespace pdb
63
64 } // end namespace llvm
65
66 #endif // LLVM_DEBUGINFO_PDB_PDBCONTEXT_H