LLVM  9.0.0svn
PDBContext.h
Go to the documentation of this file.
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 
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(
47  DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
48  DILineInfoTable getLineInfoForAddressRange(
49  object::SectionedAddress Address, uint64_t Size,
50  DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
51  DIInliningInfo getInliningInfoForAddress(
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
static StringRef getFunctionName(TargetLowering::CallLoweringInfo &CLI)
This class represents lattice values for constants.
Definition: AllocatorList.h:23
DINameKind
A DINameKind is passed to name search methods to specify a preference regarding the type of name reso...
Definition: DIContext.h:127
A format-neutral container for source line information.
Definition: DIContext.h:30
static bool classof(const DIContext *DICtx)
Definition: PDBContext.h:39
PDBContext This data structure is the top level entity that deals with PDB debug information parsing...
Definition: PDBContext.h:32
DIContextKind getKind() const
Definition: DIContext.h:210
Container for dump options that control which debug information will be dumped.
Definition: DIContext.h:167
void dump(const SparseBitVector< ElementSize > &LHS, raw_ostream &out)
Controls which fields of DILineInfo container should be filled with data.
Definition: DIContext.h:131
A format-neutral container for inlined code description.
Definition: DIContext.h:77
This is a &#39;vector&#39; (really, a variable-sized array), optimized for the case when the array is small...
Definition: SmallVector.h:837
uint32_t Size
Definition: Profile.cpp:46
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:45