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