Files
clang-p2996/lldb/source/Plugins/ObjectFile/Breakpad/ObjectFileBreakpad.h
Pavel Labath bfb261baca ObjectFile[ELF]: Refactor gnu_debuglink interface
Summary:
The contents of the gnu_debuglink section were passed through the
GetDebugSymbolFilePaths interface, which was more generic than needed.
As the only class implementing this function is ObjectFileELF, we can
modify the function to return just a single FileSpec (instead of a
list). Also, since the SymbolVendorELF already assumes ELF object files,
we don't have to make this method available on the generic ObjectFile
interface -- instead we can put it on ObjectFileELF directly.

This change also makes is so that if the Module has an explicit symbol
file spec set, we disregard the value the value of the debug link
(instead of doing a secondary lookup using that). I think it makes sense
to honor the users wishes if he had explicitly set the symbol file spec,
and this seems to be consistent with what SymbolVendorMacOSX is doing
(SymbolVendorMacOSX.cpp:125).

The main reason for making these changes is to make the treatment of
build-ids and debug links simpler in the follow-up patch.

Reviewers: clayborg, jankratochvil, mgorny, espindola

Subscribers: emaste, arichardson, MaskRay, lldb-commits

Differential Revision: https://reviews.llvm.org/D65560

llvm-svn: 367824
2019-08-05 09:55:07 +00:00

107 lines
3.4 KiB
C++

//===-- ObjectFileBreakpad.h ---------------------------------- -*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLDB_PLUGINS_OBJECTFILE_BREAKPAD_OBJECTFILEBREAKPAD_H
#define LLDB_PLUGINS_OBJECTFILE_BREAKPAD_OBJECTFILEBREAKPAD_H
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Utility/ArchSpec.h"
namespace lldb_private {
namespace breakpad {
class ObjectFileBreakpad : public ObjectFile {
public:
// Static Functions
static void Initialize();
static void Terminate();
static ConstString GetPluginNameStatic();
static const char *GetPluginDescriptionStatic() {
return "Breakpad object file reader.";
}
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);
static ObjectFile *CreateMemoryInstance(const lldb::ModuleSP &module_sp,
lldb::DataBufferSP &data_sp,
const lldb::ProcessSP &process_sp,
lldb::addr_t header_addr);
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);
// PluginInterface protocol
ConstString GetPluginName() override { return GetPluginNameStatic(); }
uint32_t GetPluginVersion() override { return 1; }
// LLVM RTTI support
static char ID;
bool isA(const void *ClassID) const override {
return ClassID == &ID || ObjectFile::isA(ClassID);
}
static bool classof(const ObjectFile *obj) { return obj->isA(&ID); }
// ObjectFile Protocol.
bool ParseHeader() override;
lldb::ByteOrder GetByteOrder() const override {
return m_arch.GetByteOrder();
}
bool IsExecutable() const override { return false; }
uint32_t GetAddressByteSize() const override {
return m_arch.GetAddressByteSize();
}
AddressClass GetAddressClass(lldb::addr_t file_addr) override {
return AddressClass::eInvalid;
}
Symtab *GetSymtab() override;
bool IsStripped() override { return false; }
void CreateSections(SectionList &unified_section_list) override;
void Dump(Stream *s) override {}
ArchSpec GetArchitecture() override { return m_arch; }
UUID GetUUID() override { return m_uuid; }
uint32_t GetDependentModules(FileSpecList &files) override { return 0; }
Type CalculateType() override { return eTypeDebugInfo; }
Strata CalculateStrata() override { return eStrataUser; }
private:
ArchSpec m_arch;
UUID m_uuid;
ObjectFileBreakpad(const lldb::ModuleSP &module_sp,
lldb::DataBufferSP &data_sp, lldb::offset_t data_offset,
const FileSpec *file, lldb::offset_t offset,
lldb::offset_t length, ArchSpec arch, UUID uuid);
};
} // namespace breakpad
} // namespace lldb_private
#endif // LLDB_PLUGINS_OBJECTFILE_BREAKPAD_OBJECTFILEBREAKPAD_H