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