PDBContext.h revision 353358
1//===-- PDBContext.h --------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===/
8
9#ifndef LLVM_DEBUGINFO_PDB_PDBCONTEXT_H
10#define LLVM_DEBUGINFO_PDB_PDBCONTEXT_H
11
12#include "llvm/DebugInfo/DIContext.h"
13#include "llvm/DebugInfo/PDB/IPDBSession.h"
14#include <cstdint>
15#include <memory>
16#include <string>
17
18namespace llvm {
19
20namespace object {
21class COFFObjectFile;
22} // end namespace object
23
24namespace pdb {
25
26  /// PDBContext
27  /// This data structure is the top level entity that deals with PDB debug
28  /// information parsing.  This data structure exists only when there is a
29  /// need for a transparent interface to different debug information formats
30  /// (e.g. PDB and DWARF).  More control and power over the debug information
31  /// access can be had by using the PDB interfaces directly.
32  class PDBContext : public DIContext {
33  public:
34    PDBContext(const object::COFFObjectFile &Object,
35               std::unique_ptr<IPDBSession> PDBSession);
36    PDBContext(PDBContext &) = delete;
37    PDBContext &operator=(PDBContext &) = delete;
38
39    static bool classof(const DIContext *DICtx) {
40      return DICtx->getKind() == CK_PDB;
41    }
42
43    void dump(raw_ostream &OS, DIDumpOptions DIDumpOpts) override;
44
45    DILineInfo getLineInfoForAddress(
46        object::SectionedAddress Address,
47        DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
48    DILineInfoTable getLineInfoForAddressRange(
49        object::SectionedAddress Address, uint64_t Size,
50        DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
51    DIInliningInfo getInliningInfoForAddress(
52        object::SectionedAddress Address,
53        DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
54
55    std::vector<DILocal>
56    getLocalsForAddress(object::SectionedAddress Address) override;
57
58  private:
59    std::string getFunctionName(uint64_t Address, DINameKind NameKind) const;
60    std::unique_ptr<IPDBSession> Session;
61  };
62
63} // end namespace pdb
64
65} // end namespace llvm
66
67#endif // LLVM_DEBUGINFO_PDB_PDBCONTEXT_H
68