LLVM  6.0.0svn
PDBContext.h
Go to the documentation of this file.
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 
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  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
static StringRef getFunctionName(TargetLowering::CallLoweringInfo &CLI)
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
DINameKind
A DINameKind is passed to name search methods to specify a preference regarding the type of name reso...
Definition: DIContext.h:113
A format-neutral container for source line information.
Definition: DIContext.h:31
static bool classof(const DIContext *DICtx)
Definition: PDBContext.h:40
PDBContext This data structure is the top level entity that deals with PDB debug information parsing...
Definition: PDBContext.h:33
DIContextKind getKind() const
Definition: DIContext.h:188
Container for dump options that control which debug information will be dumped.
Definition: DIContext.h:153
void dump(const SparseBitVector< ElementSize > &LHS, raw_ostream &out)
Controls which fields of DILineInfo container should be filled with data.
Definition: DIContext.h:117
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:864
constexpr char Size[]
Key for Kernel::Arg::Metadata::mSize.
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:44