Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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
 
18
namespace llvm {
19
 
20
namespace object {
21
class COFFObjectFile;
22
} // end namespace object
23
 
24
namespace 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
    DILineInfo
49
    getLineInfoForDataAddress(object::SectionedAddress Address) override;
50
    DILineInfoTable getLineInfoForAddressRange(
51
        object::SectionedAddress Address, uint64_t Size,
52
        DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
53
    DIInliningInfo getInliningInfoForAddress(
54
        object::SectionedAddress Address,
55
        DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
56
 
57
    std::vector<DILocal>
58
    getLocalsForAddress(object::SectionedAddress Address) override;
59
 
60
  private:
61
    std::string getFunctionName(uint64_t Address, DINameKind NameKind) const;
62
    std::unique_ptr<IPDBSession> Session;
63
  };
64
 
65
} // end namespace pdb
66
 
67
} // end namespace llvm
68
 
69
#endif // LLVM_DEBUGINFO_PDB_PDBCONTEXT_H