LLDB mainline
ObjectFileBreakpad.h
Go to the documentation of this file.
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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_BREAKPAD_OBJECTFILEBREAKPAD_H
10#define LLDB_SOURCE_PLUGINS_OBJECTFILE_BREAKPAD_OBJECTFILEBREAKPAD_H
11
14
15namespace lldb_private {
16namespace breakpad {
17
19public:
20 // Static Functions
21 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 protocol
47 llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
48
49 // LLVM RTTI support
50 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 {
68 }
69
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:
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 breakpad
103} // namespace lldb_private
104#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_BREAKPAD_OBJECTFILEBREAKPAD_H
An architecture specification class.
Definition: ArchSpec.h:32
uint32_t GetAddressByteSize() const
Returns the size in bytes of an address of the current architecture.
Definition: ArchSpec.cpp:694
lldb::ByteOrder GetByteOrder() const
Returns the byte order for the architecture specification.
Definition: ArchSpec.cpp:741
A file utility class.
Definition: FileSpec.h:56
A plug-in interface definition class for object file parsers.
Definition: ObjectFile.h:62
@ eTypeDebugInfo
An object file that contains only debug information.
Definition: ObjectFile.h:73
virtual bool isA(const void *ClassID) const
Definition: ObjectFile.h:228
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
lldb::ByteOrder GetByteOrder() const override
Gets whether endian swapping should occur when extracting data from this object file.
static ObjectFile * CreateMemoryInstance(const lldb::ModuleSP &module_sp, lldb::WritableDataBufferSP data_sp, const lldb::ProcessSP &process_sp, lldb::addr_t header_addr)
void Dump(Stream *s) override
Dump a description of this object to a Stream.
static size_t GetModuleSpecifications(const FileSpec &file, lldb::DataBufferSP &data_sp, lldb::offset_t data_offset, lldb::offset_t file_offset, lldb::offset_t length, ModuleSpecList &specs)
uint32_t GetDependentModules(FileSpecList &files) override
Extract the dependent modules from an object file.
static ObjectFile * CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp, lldb::offset_t data_offset, const FileSpec *file, lldb::offset_t file_offset, lldb::offset_t length)
Type CalculateType() override
The object file should be able to calculate its type by looking at its file header and possibly the s...
uint32_t GetAddressByteSize() const override
Gets the address size in bytes for the current object file.
void ParseSymtab(lldb_private::Symtab &symtab) override
Parse the symbol table into the provides symbol table object.
bool ParseHeader() override
Attempts to parse the object header.
bool IsStripped() override
Detect if this object file has been stripped of local symbols.
void CreateSections(SectionList &unified_section_list) override
Strata CalculateStrata() override
The object file should be able to calculate the strata of the object file.
UUID GetUUID() override
Gets the UUID for this object file.
bool isA(const void *ClassID) const override
bool IsExecutable() const override
Tells whether this object file is capable of being the main executable for a process.
static bool classof(const ObjectFile *obj)
ArchSpec GetArchitecture() override
Get the ArchSpec for this object file.
AddressClass GetAddressClass(lldb::addr_t file_addr) override
Get the address type given a file address in an object file.
A class that represents a running process on the host machine.
uint64_t offset_t
Definition: lldb-types.h:87
ByteOrder
Byte ordering definitions.
uint64_t addr_t
Definition: lldb-types.h:83