124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ObjectContainerUniversalMachO.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_ObjectContainerUniversalMachO_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ObjectContainerUniversalMachO_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/ObjectContainer.h"
145f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h"
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
161674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#include "llvm/Support/MachO.h"
171674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ObjectContainerUniversalMachO :
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    public lldb_private::ObjectContainer
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Static Functions
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static void
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Initialize();
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static void
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Terminate();
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
310e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    static lldb_private::ConstString
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginNameStatic();
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const char *
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginDescriptionStatic();
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static lldb_private::ObjectContainer *
383508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    CreateInstance (const lldb::ModuleSP &module_sp,
39cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton                    lldb::DataBufferSP& data_sp,
40cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton                    lldb::offset_t data_offset,
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    const lldb_private::FileSpec *file,
42cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton                    lldb::offset_t offset,
43cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton                    lldb::offset_t length);
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton    static size_t
4636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton    GetModuleSpecifications (const lldb_private::FileSpec& file,
4736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton                             lldb::DataBufferSP& data_sp,
4836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton                             lldb::offset_t data_offset,
4936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton                             lldb::offset_t file_offset,
5036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton                             lldb::offset_t length,
5136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton                             lldb_private::ModuleSpecList &specs);
5236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
54db2dc2b824b61ef7578dc8cdad7b338aa82b1f17Greg Clayton    MagicBytesMatch (const lldb_private::DataExtractor &data);
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Member Functions
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
593508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    ObjectContainerUniversalMachO (const lldb::ModuleSP &module_sp,
60cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton                                   lldb::DataBufferSP& data_sp,
61cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton                                   lldb::offset_t data_offset,
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   const lldb_private::FileSpec *file,
63cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton                                   lldb::offset_t offset,
64cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton                                   lldb::offset_t length);
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~ObjectContainerUniversalMachO();
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ParseHeader ();
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Dump (lldb_private::Stream *s) const;
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumArchitectures () const;
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetArchitectureAtIndex (uint32_t cpu_idx, lldb_private::ArchSpec& arch) const;
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
81e40b6424d9e49306392bec4b44060da36414c382Greg Clayton    virtual lldb::ObjectFileSP
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetObjectFile (const lldb_private::FileSpec *file);
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // PluginInterface protocol
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
870e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    virtual lldb_private::ConstString
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginName();
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginVersion();
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
941674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    llvm::MachO::fat_header m_header;
951674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    std::vector<llvm::MachO::fat_arch> m_fat_archs;
9636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton
9736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton    static bool
9836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton    ParseHeader (lldb_private::DataExtractor &data,
9936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton                 llvm::MachO::fat_header &header,
10036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton                 std::vector<llvm::MachO::fat_arch> &fat_archs);
10136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_ObjectContainerUniversalMachO_h_
105