106 lines · c
1//===-- ObjectFilePDB.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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_PDB_OBJECTFILEPDB_H10#define LLDB_SOURCE_PLUGINS_OBJECTFILE_PDB_OBJECTFILEPDB_H11 12#include "lldb/Symbol/ObjectFile.h"13#include "lldb/Utility/ArchSpec.h"14#include "llvm/DebugInfo/PDB/Native/NativeSession.h"15#include "llvm/DebugInfo/PDB/PDBTypes.h"16 17namespace lldb_private {18 19class ObjectFilePDB : public ObjectFile {20public:21 // Static Functions22 static void Initialize();23 static void Terminate();24 25 static llvm::StringRef GetPluginNameStatic() { return "pdb"; }26 static const char *GetPluginDescriptionStatic() {27 return "PDB object file reader.";28 }29 30 static std::unique_ptr<llvm::pdb::PDBFile>31 loadPDBFile(std::string PdbPath, llvm::BumpPtrAllocator &Allocator);32 33 static ObjectFile *34 CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,35 lldb::offset_t data_offset, const FileSpec *file,36 lldb::offset_t file_offset, lldb::offset_t length);37 38 static ObjectFile *CreateMemoryInstance(const lldb::ModuleSP &module_sp,39 lldb::WritableDataBufferSP data_sp,40 const lldb::ProcessSP &process_sp,41 lldb::addr_t header_addr);42 43 static size_t GetModuleSpecifications(const FileSpec &file,44 lldb::DataBufferSP &data_sp,45 lldb::offset_t data_offset,46 lldb::offset_t file_offset,47 lldb::offset_t length,48 ModuleSpecList &specs);49 50 // PluginInterface protocol51 llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }52 53 // LLVM RTTI support54 static char ID;55 bool isA(const void *ClassID) const override {56 return ClassID == &ID || ObjectFile::isA(ClassID);57 }58 static bool classof(const ObjectFile *obj) { return obj->isA(&ID); }59 60 // ObjectFile Protocol.61 uint32_t GetAddressByteSize() const override { return 8; }62 63 lldb::ByteOrder GetByteOrder() const override {64 return lldb::eByteOrderLittle;65 }66 67 bool ParseHeader() override { return true; }68 69 bool IsExecutable() const override { return false; }70 71 void ParseSymtab(lldb_private::Symtab &symtab) override {}72 73 bool IsStripped() override { return false; }74 75 // No section in PDB file.76 void CreateSections(SectionList &unified_section_list) override {}77 78 void Dump(Stream *s) override {}79 80 ArchSpec GetArchitecture() override;81 82 UUID GetUUID() override { return m_uuid; }83 84 uint32_t GetDependentModules(FileSpecList &files) override { return 0; }85 86 Type CalculateType() override { return eTypeDebugInfo; }87 88 Strata CalculateStrata() override { return eStrataUser; }89 90 llvm::pdb::PDBFile &GetPDBFile() { return *m_file_up; }91 92 ObjectFilePDB(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,93 lldb::offset_t data_offset, const FileSpec *file,94 lldb::offset_t offset, lldb::offset_t length);95 96private:97 UUID m_uuid;98 llvm::BumpPtrAllocator m_allocator;99 std::unique_ptr<llvm::pdb::PDBFile> m_file_up;100 101 bool initPDBFile();102};103 104} // namespace lldb_private105#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_PDB_OBJECTFILEPDB_H106