brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · c06e726 Raw
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