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 classof(const DIContext * DICtx)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 70