blob: ea3b8685aad5f6fcaf8a7fef78977f37afb4a2e0 [file] [log] [blame]
Pavel Labath1f6b2472018-12-10 17:16:38 +00001//===-- 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
17namespace lldb_private {
18namespace breakpad {
19
20class ObjectFileBreakpad : public ObjectFile {
21public:
22 //------------------------------------------------------------------
23 // Static Functions
24 //------------------------------------------------------------------
25 static void Initialize();
26 static void Terminate();
27
28 static ConstString GetPluginNameStatic();
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 //------------------------------------------------------------------
53 ConstString GetPluginName() override { return GetPluginNameStatic(); }
54
55 uint32_t GetPluginVersion() override { return 1; }
56
57 //------------------------------------------------------------------
58 // ObjectFile Protocol.
59 //------------------------------------------------------------------
60
61 bool ParseHeader() override;
62
63 lldb::ByteOrder GetByteOrder() const override {
64 return m_arch.GetByteOrder();
65 }
66
67 bool IsExecutable() const override { return false; }
68
69 uint32_t GetAddressByteSize() const override {
70 return m_arch.GetAddressByteSize();
71 }
72
73 AddressClass GetAddressClass(lldb::addr_t file_addr) override {
74 return AddressClass::eInvalid;
75 }
76
77 Symtab *GetSymtab() override;
78
79 bool IsStripped() override { return false; }
80
81 void CreateSections(SectionList &unified_section_list) override;
82
83 void Dump(Stream *s) override {}
84
85 bool GetArchitecture(ArchSpec &arch) override;
86
87 bool GetUUID(UUID *uuid) override;
88
89 FileSpecList GetDebugSymbolFilePaths() override { return FileSpecList(); }
90
91 uint32_t GetDependentModules(FileSpecList &files) override { return 0; }
92
93 Type CalculateType() override { return eTypeDebugInfo; }
94
95 Strata CalculateStrata() override { return eStrataUser; }
96
97private:
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