Home | History | Annotate | Download | only in PDB
      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 
     13 #include "llvm/DebugInfo/DIContext.h"
     14 #include "llvm/DebugInfo/PDB/IPDBSession.h"
     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
     66