124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ObjectContainer.h ---------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_ObjectContainer_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ObjectContainer_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataExtractor.h" 205f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ModuleChild.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/PluginInterface.h" 23cd548034fa23113e995b8463d14f910ba2f7298cGreg Clayton#include "lldb/Host/Endian.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class ObjectContainer ObjectContainer.h "lldb/Symbol/ObjectContainer.h" 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A plug-in interface definition class for object containers. 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Object containers contain object files from one or more 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// architectures, and also can contain one or more named objects. 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Typical object containers are static libraries (.a files) that 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// contain multiple named object files, and universal files that contain 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// multiple architectures. 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ObjectContainer : 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public PluginInterface, 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public ModuleChild 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with a parent module, offset, and header data. 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Object files belong to modules and a valid module must be 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// supplied upon construction. The at an offset within a file for 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// objects that contain more than one architecture or object. 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 503508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton ObjectContainer (const lldb::ModuleSP &module_sp, 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const FileSpec *file, 52cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::offset_t file_offset, 53cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::offset_t length, 54cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::DataBufferSP& data_sp, 55cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton lldb::offset_t data_offset) : 563508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton ModuleChild (module_sp), 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_file (), // This file can be different than the module's file spec 58db2dc2b824b61ef7578dc8cdad7b338aa82b1f17Greg Clayton m_offset (file_offset), 59cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton m_length (length), 60db2dc2b824b61ef7578dc8cdad7b338aa82b1f17Greg Clayton m_data () 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (file) 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_file = *file; 64cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton if (data_sp) 65cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton m_data.SetData (data_sp, data_offset, length); 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The destructor is virtual since this class is designed to be 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// inherited from by the plug-in instance. 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~ObjectContainer() 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of this object to a Stream. 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of the current contents of this object 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to the supplied stream \a s. The dumping should include the 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// section list if it has been parsed, and the symbol table 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if it has been parsed. 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump the object descripton. 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s) const = 0; 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Gets the architecture given an index. 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Copies the architecture specification for index \a idx. 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] idx 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The architecture index to extract. 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] arch 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A architecture object that will be filled in if \a idx is a 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// architecture valid index. 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if \a idx is valid and \a arch has been 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// filled in, \b false otherwise. 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see ObjectContainer::GetNumArchitectures() const 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArchitectureAtIndex (uint32_t idx, ArchSpec& arch) const 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns the offset into a file at which this object resides. 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Some files contain many object files, and this function allows 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// access to an object's offset within the file. 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The offset in bytes into the file. Defaults to zero for 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// simple object files that a represented by an entire file. 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::addr_t 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetOffset () const 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { return m_offset; } 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::addr_t 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetByteSize () const 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { return m_length; } 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the number of objects within this object file (archives). 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Zero for object files that are not archives, or the number 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// of objects contained in the archive. 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumObjects () const 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { return 0; } 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the number of architectures in this object file. 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The default implementation returns 1 as for object files that 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// contain a single architecture. ObjectContainer instances that 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// contain more than one architecture should override this function 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and return an appropriate value. 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of architectures contained in this object file. 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumArchitectures () const 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { return 0; } 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attempts to parse the object header. 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is used as a test to see if a given plug-in 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// instance can parse the header data already contained in 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// ObjectContainer::m_data. If an object file parser does not 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// recognize that magic bytes in a header, false should be returned 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and the next plug-in can attempt to parse an object file. 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the header was parsed succesfully, \b 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// false otherwise. 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ParseHeader () = 0; 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Selects an architecture in an object file. 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Object files that contain a single architecture should verify 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that the specified \a arch matches the architecture in in 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// object file and return \b true or \b false accordingly. 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Object files that contain more than one architecture should 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// attempt to select that architecture, and if successful, clear 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// out any previous state from any previously selected architecture 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and prepare to return information for the new architecture. 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a pointer to the object file of the requested \a 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// arch and optional \a name. Returns NULL of no such object 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// file exists in the container. 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 194e40b6424d9e49306392bec4b44060da36414c382Greg Clayton virtual lldb::ObjectFileSP 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetObjectFile (const FileSpec *file) = 0; 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ObjectAtIndexIsContainer (uint32_t object_idx) 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ObjectFile * 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetObjectFileAtIndex (uint32_t object_idx) 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return NULL; 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ObjectContainer * 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetObjectContainerAtIndex (uint32_t object_idx) 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return NULL; 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual const char * 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetObjectNameAtIndex (uint32_t object_idx) const 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return NULL; 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables. 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FileSpec m_file; ///< The file that represents this container objects (which can be different from the module's file). 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t m_offset; ///< The offset in bytes into the file, or the address in memory 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t m_length; ///< The size in bytes if known (can be zero). 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataExtractor m_data; ///< The data for this object file so things can be parsed lazily. 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (ObjectContainer); 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_ObjectContainer_h_ 237