brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 074d667 Raw
105 lines · c
1//===-- ObjectFileBreakpad.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_BREAKPAD_OBJECTFILEBREAKPAD_H10#define LLDB_SOURCE_PLUGINS_OBJECTFILE_BREAKPAD_OBJECTFILEBREAKPAD_H11 12#include "lldb/Symbol/ObjectFile.h"13#include "lldb/Utility/ArchSpec.h"14 15namespace lldb_private {16namespace breakpad {17 18class ObjectFileBreakpad : public ObjectFile {19public:20  // Static Functions21  static void Initialize();22  static void Terminate();23 24  static llvm::StringRef GetPluginNameStatic() { return "breakpad"; }25  static const char *GetPluginDescriptionStatic() {26    return "Breakpad object file reader.";27  }28 29  static ObjectFile *30  CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,31                 lldb::offset_t data_offset, const FileSpec *file,32                 lldb::offset_t file_offset, lldb::offset_t length);33 34  static ObjectFile *CreateMemoryInstance(const lldb::ModuleSP &module_sp,35                                          lldb::WritableDataBufferSP data_sp,36                                          const lldb::ProcessSP &process_sp,37                                          lldb::addr_t header_addr);38 39  static size_t GetModuleSpecifications(const FileSpec &file,40                                        lldb::DataBufferSP &data_sp,41                                        lldb::offset_t data_offset,42                                        lldb::offset_t file_offset,43                                        lldb::offset_t length,44                                        ModuleSpecList &specs);45 46  // PluginInterface protocol47  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }48 49  // LLVM RTTI support50  static char ID;51  bool isA(const void *ClassID) const override {52    return ClassID == &ID || ObjectFile::isA(ClassID);53  }54  static bool classof(const ObjectFile *obj) { return obj->isA(&ID); }55 56  // ObjectFile Protocol.57 58  bool ParseHeader() override;59 60  lldb::ByteOrder GetByteOrder() const override {61    return m_arch.GetByteOrder();62  }63 64  bool IsExecutable() const override { return false; }65 66  uint32_t GetAddressByteSize() const override {67    return m_arch.GetAddressByteSize();68  }69 70  AddressClass GetAddressClass(lldb::addr_t file_addr) override {71    return AddressClass::eInvalid;72  }73 74  void ParseSymtab(lldb_private::Symtab &symtab) override;75 76  bool IsStripped() override { return false; }77 78  void CreateSections(SectionList &unified_section_list) override;79 80  void Dump(Stream *s) override {}81 82  ArchSpec GetArchitecture() override { return m_arch; }83 84  UUID GetUUID() override { return m_uuid; }85 86  uint32_t GetDependentModules(FileSpecList &files) override { return 0; }87 88  Type CalculateType() override { return eTypeDebugInfo; }89 90  Strata CalculateStrata() override { return eStrataUser; }91 92private:93  ArchSpec m_arch;94  UUID m_uuid;95 96  ObjectFileBreakpad(const lldb::ModuleSP &module_sp,97                     lldb::DataBufferSP &data_sp, lldb::offset_t data_offset,98                     const FileSpec *file, lldb::offset_t offset,99                     lldb::offset_t length, ArchSpec arch, UUID uuid);100};101 102} // namespace breakpad103} // namespace lldb_private104#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_BREAKPAD_OBJECTFILEBREAKPAD_H105