ObjectContainerUniversalMachO.h revision 3508c387c3f0c9ecc439d98048fd7694d41bab1b
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
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const char *
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,
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    lldb::DataBufferSP& dataSP,
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    const lldb_private::FileSpec *file,
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    lldb::addr_t offset,
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    lldb::addr_t length);
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
45db2dc2b824b61ef7578dc8cdad7b338aa82b1f17Greg Clayton    MagicBytesMatch (const lldb_private::DataExtractor &data);
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Member Functions
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
503508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    ObjectContainerUniversalMachO (const lldb::ModuleSP &module_sp,
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   lldb::DataBufferSP& dataSP,
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   const lldb_private::FileSpec *file,
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   lldb::addr_t offset,
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   lldb::addr_t length);
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~ObjectContainerUniversalMachO();
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ParseHeader ();
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Dump (lldb_private::Stream *s) const;
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumArchitectures () const;
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetArchitectureAtIndex (uint32_t cpu_idx, lldb_private::ArchSpec& arch) const;
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
71e40b6424d9e49306392bec4b44060da36414c382Greg Clayton    virtual lldb::ObjectFileSP
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetObjectFile (const lldb_private::FileSpec *file);
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // PluginInterface protocol
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual const char *
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginName();
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual const char *
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetShortPluginName();
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginVersion();
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
871674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    llvm::MachO::fat_header m_header;
881674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    std::vector<llvm::MachO::fat_arch> m_fat_archs;
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_ObjectContainerUniversalMachO_h_
92