blob: 0ce49f5ef92237fac249f4a9d13ecaf93e6d712b [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===-- 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
19namespace llvm {
20
21namespace object {
22class COFFObjectFile;
23} // end namespace object
24
25namespace 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