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