LLDB
mainline
|
#include <ObjectContainerUniversalMachO.h>
Public Member Functions | |
ObjectContainerUniversalMachO (const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp, lldb::offset_t data_offset, const lldb_private::FileSpec *file, lldb::offset_t offset, lldb::offset_t length) | |
~ObjectContainerUniversalMachO () override | |
bool | ParseHeader () override |
Attempts to parse the object header. More... | |
void | Dump (lldb_private::Stream *s) const override |
Dump a description of this object to a Stream. More... | |
size_t | GetNumArchitectures () const override |
Get the number of architectures in this object file. More... | |
bool | GetArchitectureAtIndex (uint32_t cpu_idx, lldb_private::ArchSpec &arch) const override |
Gets the architecture given an index. More... | |
lldb::ObjectFileSP | GetObjectFile (const lldb_private::FileSpec *file) override |
Selects an architecture in an object file. More... | |
llvm::StringRef | GetPluginName () override |
![]() | |
ObjectContainer (const lldb::ModuleSP &module_sp, const FileSpec *file, lldb::offset_t file_offset, lldb::offset_t length, lldb::DataBufferSP &data_sp, lldb::offset_t data_offset) | |
Construct with a parent module, offset, and header data. More... | |
~ObjectContainer () override=default | |
Destructor. More... | |
virtual lldb::addr_t | GetOffset () const |
Returns the offset into a file at which this object resides. More... | |
virtual lldb::addr_t | GetByteSize () const |
virtual size_t | GetNumObjects () const |
Get the number of objects within this object file (archives). More... | |
virtual bool | ObjectAtIndexIsContainer (uint32_t object_idx) |
virtual ObjectFile * | GetObjectFileAtIndex (uint32_t object_idx) |
virtual ObjectContainer * | GetObjectContainerAtIndex (uint32_t object_idx) |
virtual const char * | GetObjectNameAtIndex (uint32_t object_idx) const |
![]() | |
PluginInterface ()=default | |
virtual | ~PluginInterface ()=default |
PluginInterface (const PluginInterface &)=delete | |
PluginInterface & | operator= (const PluginInterface &)=delete |
![]() | |
ModuleChild (const lldb::ModuleSP &module_sp) | |
Construct with owning module. More... | |
~ModuleChild () | |
Destructor. More... | |
const ModuleChild & | operator= (const ModuleChild &rhs) |
Assignment operator. More... | |
lldb::ModuleSP | GetModule () const |
Get const accessor for the module pointer. More... | |
void | SetModule (const lldb::ModuleSP &module_sp) |
Set accessor for the module pointer. More... | |
Static Public Member Functions | |
static void | Initialize () |
static void | Terminate () |
static llvm::StringRef | GetPluginNameStatic () |
static llvm::StringRef | GetPluginDescriptionStatic () |
static lldb_private::ObjectContainer * | CreateInstance (const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp, lldb::offset_t data_offset, const lldb_private::FileSpec *file, lldb::offset_t offset, lldb::offset_t length) |
static size_t | GetModuleSpecifications (const lldb_private::FileSpec &file, lldb::DataBufferSP &data_sp, lldb::offset_t data_offset, lldb::offset_t file_offset, lldb::offset_t length, lldb_private::ModuleSpecList &specs) |
static bool | MagicBytesMatch (const lldb_private::DataExtractor &data) |
Static Protected Member Functions | |
static bool | ParseHeader (lldb_private::DataExtractor &data, llvm::MachO::fat_header &header, std::vector< llvm::MachO::fat_arch > &fat_archs) |
Protected Attributes | |
llvm::MachO::fat_header | m_header |
std::vector< llvm::MachO::fat_arch > | m_fat_archs |
![]() | |
FileSpec | m_file |
The file that represents this container objects (which can be different from the module's file). More... | |
lldb::addr_t | m_offset |
The offset in bytes into the file, or the address in memory. More... | |
lldb::addr_t | m_length |
The size in bytes if known (can be zero). More... | |
DataExtractor | m_data |
The data for this object file so things can be parsed lazily. More... | |
![]() | |
lldb::ModuleWP | m_module_wp |
The Module that owns the object that inherits from this class. More... | |
Definition at line 16 of file ObjectContainerUniversalMachO.h.
ObjectContainerUniversalMachO::ObjectContainerUniversalMachO | ( | const lldb::ModuleSP & | module_sp, |
lldb::DataBufferSP & | data_sp, | ||
lldb::offset_t | data_offset, | ||
const lldb_private::FileSpec * | file, | ||
lldb::offset_t | offset, | ||
lldb::offset_t | length | ||
) |
Definition at line 63 of file ObjectContainerUniversalMachO.cpp.
References m_header.
|
overridedefault |
|
static |
Definition at line 36 of file ObjectContainerUniversalMachO.cpp.
References MagicBytesMatch(), and lldb_private::DataExtractor::SetData().
|
overridevirtual |
Dump a description of this object to a Stream.
Dump a description of the current contents of this object to the supplied stream s. The dumping should include the section list if it has been parsed, and the symbol table if it has been parsed.
[in] | s | The stream to which to dump the object description. |
Implements lldb_private::ObjectContainer.
Definition at line 119 of file ObjectContainerUniversalMachO.cpp.
References lldb_private::Stream::EOL(), GetArchitectureAtIndex(), lldb_private::ArchSpec::GetArchitectureName(), GetNumArchitectures(), lldb_private::ObjectContainer::GetNumObjects(), lldb_private::ObjectContainer::GetObjectNameAtIndex(), lldb_private::Stream::Indent(), lldb_private::Stream::IndentLess(), lldb_private::Stream::IndentMore(), and lldb_private::Stream::Printf().
|
overridevirtual |
Gets the architecture given an index.
Copies the architecture specification for index idx.
[in] | idx | The architecture index to extract. |
[out] | arch | A architecture object that will be filled in if idx is a architecture valid index. |
Reimplemented from lldb_private::ObjectContainer.
Definition at line 146 of file ObjectContainerUniversalMachO.cpp.
References lldb_private::eArchTypeMachO, m_fat_archs, m_header, and lldb_private::ArchSpec::SetArchitecture().
Referenced by Dump(), and GetObjectFile().
|
static |
Definition at line 199 of file ObjectContainerUniversalMachO.cpp.
References lldb_private::ModuleSpecList::GetSize(), MagicBytesMatch(), ParseHeader(), and lldb_private::DataExtractor::SetData().
|
overridevirtual |
Get the number of architectures in this object file.
The default implementation returns 1 as for object files that contain a single architecture. ObjectContainer instances that contain more than one architecture should override this function and return an appropriate value.
Reimplemented from lldb_private::ObjectContainer.
Definition at line 142 of file ObjectContainerUniversalMachO.cpp.
References m_header.
Referenced by Dump().
|
overridevirtual |
Selects an architecture in an object file.
Object files that contain a single architecture should verify that the specified arch matches the architecture in in object file and return true or false accordingly.
Object files that contain more than one architecture should attempt to select that architecture, and if successful, clear out any previous state from any previously selected architecture and prepare to return information for the new architecture.
Implements lldb_private::ObjectContainer.
Definition at line 157 of file ObjectContainerUniversalMachO.cpp.
References GetArchitectureAtIndex(), lldb_private::ModuleChild::GetModule(), lldb_private::ArchSpec::IsCompatibleMatch(), lldb_private::ArchSpec::IsExactMatch(), lldb_private::ArchSpec::IsValid(), LLDB_ARCH_DEFAULT, m_fat_archs, m_header, lldb_private::ObjectContainer::m_offset, and lldb_private::ArchSpec::SetTriple().
|
inlinestatic |
Definition at line 33 of file ObjectContainerUniversalMachO.h.
|
inlineoverridevirtual |
Implements lldb_private::PluginInterface.
Definition at line 64 of file ObjectContainerUniversalMachO.h.
References GetPluginNameStatic().
|
inlinestatic |
Definition at line 31 of file ObjectContainerUniversalMachO.h.
Referenced by GetPluginName().
|
static |
|
static |
Definition at line 57 of file ObjectContainerUniversalMachO.cpp.
References lldb_private::DataExtractor::GetU32().
Referenced by CreateInstance(), and GetModuleSpecifications().
|
overridevirtual |
Attempts to parse the object header.
This function is used as a test to see if a given plug-in instance can parse the header data already contained in ObjectContainer::m_data. If an object file parser does not recognize that magic bytes in a header, false should be returned and the next plug-in can attempt to parse an object file.
Implements lldb_private::ObjectContainer.
Definition at line 75 of file ObjectContainerUniversalMachO.cpp.
References lldb_private::DataExtractor::Clear(), lldb_private::ObjectContainer::m_data, m_fat_archs, and m_header.
Referenced by GetModuleSpecifications().
|
staticprotected |
|
static |
Definition at line 32 of file ObjectContainerUniversalMachO.cpp.
|
protected |
Definition at line 68 of file ObjectContainerUniversalMachO.h.
Referenced by GetArchitectureAtIndex(), GetObjectFile(), and ParseHeader().
|
protected |
Definition at line 67 of file ObjectContainerUniversalMachO.h.
Referenced by GetArchitectureAtIndex(), GetNumArchitectures(), GetObjectFile(), ObjectContainerUniversalMachO(), and ParseHeader().