LLDB mainline
|
A plug-in interface definition class for object containers. More...
#include "lldb/Symbol/ObjectContainer.h"
Public Member Functions | |
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. | |
~ObjectContainer () override=default | |
Destructor. | |
virtual bool | GetArchitectureAtIndex (uint32_t idx, ArchSpec &arch) const |
Gets the architecture given an index. | |
virtual lldb::addr_t | GetOffset () const |
Returns the offset into a file at which this object resides. | |
virtual lldb::addr_t | GetByteSize () const |
virtual size_t | GetNumObjects () const |
Get the number of objects within this object file (archives). | |
virtual size_t | GetNumArchitectures () const |
Get the number of architectures in this object file. | |
virtual bool | ParseHeader ()=0 |
Attempts to parse the object header. | |
virtual lldb::ObjectFileSP | GetObjectFile (const FileSpec *file)=0 |
Selects an architecture in an object file. | |
Public Member Functions inherited from lldb_private::PluginInterface | |
PluginInterface ()=default | |
virtual | ~PluginInterface ()=default |
virtual llvm::StringRef | GetPluginName ()=0 |
PluginInterface (const PluginInterface &)=delete | |
PluginInterface & | operator= (const PluginInterface &)=delete |
Public Member Functions inherited from lldb_private::ModuleChild | |
ModuleChild (const lldb::ModuleSP &module_sp) | |
Construct with owning module. | |
~ModuleChild () | |
Destructor. | |
const ModuleChild & | operator= (const ModuleChild &rhs) |
Assignment operator. | |
lldb::ModuleSP | GetModule () const |
Get const accessor for the module pointer. | |
void | SetModule (const lldb::ModuleSP &module_sp) |
Set accessor for the module pointer. | |
Static Public Member Functions | |
static lldb::ObjectContainerSP | FindPlugin (const lldb::ModuleSP &module_sp, const lldb::ProcessSP &process_sp, lldb::addr_t header_addr, lldb::WritableDataBufferSP file_data_sp) |
Protected Attributes | |
FileSpec | m_file |
The file that represents this container objects (which can be different from the module's file). | |
lldb::addr_t | m_offset |
The offset in bytes into the file, or the address in memory. | |
lldb::addr_t | m_length |
The size in bytes if known (can be zero). | |
DataExtractor | m_data |
The data for this object file so things can be parsed lazily. | |
Protected Attributes inherited from lldb_private::ModuleChild | |
lldb::ModuleWP | m_module_wp |
The Module that owns the object that inherits from this class. | |
Private Member Functions | |
ObjectContainer (const ObjectContainer &)=delete | |
const ObjectContainer & | operator= (const ObjectContainer &)=delete |
A plug-in interface definition class for object containers.
Object containers contain object files from one or more architectures, and also can contain one or more named objects.
Typical object containers are static libraries (.a files) that contain multiple named object files, and universal files that contain multiple architectures.
Definition at line 30 of file ObjectContainer.h.
ObjectContainer::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.
Object files belong to modules and a valid module must be supplied upon construction. The at an offset within a file for objects that contain more than one architecture or object.
Definition at line 18 of file ObjectContainer.cpp.
References m_data, m_file, and lldb_private::DataExtractor::SetData().
|
overridedefault |
Destructor.
The destructor is virtual since this class is designed to be inherited from by the plug-in instance.
|
privatedelete |
|
static |
Definition at line 33 of file ObjectContainer.cpp.
References lldb_private::PluginManager::GetObjectContainerCreateMemoryCallbackAtIndex(), and LLDB_SCOPED_TIMERF.
|
inlinevirtual |
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 in ObjectContainerUniversalMachO.
Definition at line 63 of file ObjectContainer.h.
|
inlinevirtual |
Definition at line 77 of file ObjectContainer.h.
References m_length.
|
inlinevirtual |
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 in ObjectContainerUniversalMachO.
Definition at line 95 of file ObjectContainer.h.
|
inlinevirtual |
Get the number of objects within this object file (archives).
Reimplemented in ObjectContainerBSDArchive, and lldb_private::ObjectContainerMachOFileset.
Definition at line 84 of file ObjectContainer.h.
|
pure virtual |
Selects an architecture in an object file.
Object files that contain a single architecture should verify that the specified arch matches the architecture in the 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.
Implemented in ObjectContainerBSDArchive, lldb_private::ObjectContainerMachOFileset, and ObjectContainerUniversalMachO.
|
inlinevirtual |
Returns the offset into a file at which this object resides.
Some files contain many object files, and this function allows access to an object's offset within the file.
Definition at line 75 of file ObjectContainer.h.
References m_offset.
Referenced by ObjectContainerUniversalMachO::GetObjectFile().
|
privatedelete |
|
pure virtual |
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.
Implemented in ObjectContainerBSDArchive, lldb_private::ObjectContainerMachOFileset, and ObjectContainerUniversalMachO.
|
protected |
The data for this object file so things can be parsed lazily.
Definition at line 143 of file ObjectContainer.h.
Referenced by lldb_private::ObjectContainerMachOFileset::GetObjectFile(), ObjectContainer(), ObjectContainerBSDArchive::ParseHeader(), lldb_private::ObjectContainerMachOFileset::ParseHeader(), ObjectContainerUniversalMachO::ParseHeader(), and ObjectContainerBSDArchive::Archive::ParseObjects().
|
protected |
The file that represents this container objects (which can be different from the module's file).
Definition at line 134 of file ObjectContainer.h.
Referenced by ObjectContainerBSDArchive::GetObjectFile(), ObjectContainer(), ObjectContainerBSDArchive::ParseHeader(), and lldb_private::ObjectContainerMachOFileset::ParseHeader().
|
protected |
The size in bytes if known (can be zero).
Definition at line 140 of file ObjectContainer.h.
Referenced by GetByteSize().
|
protected |
The offset in bytes into the file, or the address in memory.
Definition at line 137 of file ObjectContainer.h.
Referenced by ObjectContainerBSDArchive::GetObjectFile(), lldb_private::ObjectContainerMachOFileset::GetObjectFile(), ObjectContainerUniversalMachO::GetObjectFile(), GetOffset(), ObjectContainerBSDArchive::ParseHeader(), and lldb_private::ObjectContainerMachOFileset::ParseHeader().