Line data Source code
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 0 : 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
|