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