Home | History | Annotate | Download | only in Universal-Mach-O
      1 //===-- ObjectContainerUniversalMachO.h -------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef liblldb_ObjectContainerUniversalMachO_h_
     11 #define liblldb_ObjectContainerUniversalMachO_h_
     12 
     13 #include "lldb/Symbol/ObjectContainer.h"
     14 #include "lldb/Host/FileSpec.h"
     15 
     16 #include "llvm/Support/MachO.h"
     17 
     18 class ObjectContainerUniversalMachO :
     19     public lldb_private::ObjectContainer
     20 {
     21 public:
     22     //------------------------------------------------------------------
     23     // Static Functions
     24     //------------------------------------------------------------------
     25     static void
     26     Initialize();
     27 
     28     static void
     29     Terminate();
     30 
     31     static lldb_private::ConstString
     32     GetPluginNameStatic();
     33 
     34     static const char *
     35     GetPluginDescriptionStatic();
     36 
     37     static lldb_private::ObjectContainer *
     38     CreateInstance (const lldb::ModuleSP &module_sp,
     39                     lldb::DataBufferSP& data_sp,
     40                     lldb::offset_t data_offset,
     41                     const lldb_private::FileSpec *file,
     42                     lldb::offset_t offset,
     43                     lldb::offset_t length);
     44 
     45     static size_t
     46     GetModuleSpecifications (const lldb_private::FileSpec& file,
     47                              lldb::DataBufferSP& data_sp,
     48                              lldb::offset_t data_offset,
     49                              lldb::offset_t file_offset,
     50                              lldb::offset_t length,
     51                              lldb_private::ModuleSpecList &specs);
     52 
     53     static bool
     54     MagicBytesMatch (const lldb_private::DataExtractor &data);
     55 
     56     //------------------------------------------------------------------
     57     // Member Functions
     58     //------------------------------------------------------------------
     59     ObjectContainerUniversalMachO (const lldb::ModuleSP &module_sp,
     60                                    lldb::DataBufferSP& data_sp,
     61                                    lldb::offset_t data_offset,
     62                                    const lldb_private::FileSpec *file,
     63                                    lldb::offset_t offset,
     64                                    lldb::offset_t length);
     65 
     66     virtual
     67     ~ObjectContainerUniversalMachO();
     68 
     69     virtual bool
     70     ParseHeader ();
     71 
     72     virtual void
     73     Dump (lldb_private::Stream *s) const;
     74 
     75     virtual size_t
     76     GetNumArchitectures () const;
     77 
     78     virtual bool
     79     GetArchitectureAtIndex (uint32_t cpu_idx, lldb_private::ArchSpec& arch) const;
     80 
     81     virtual lldb::ObjectFileSP
     82     GetObjectFile (const lldb_private::FileSpec *file);
     83 
     84     //------------------------------------------------------------------
     85     // PluginInterface protocol
     86     //------------------------------------------------------------------
     87     virtual lldb_private::ConstString
     88     GetPluginName();
     89 
     90     virtual uint32_t
     91     GetPluginVersion();
     92 
     93 protected:
     94     llvm::MachO::fat_header m_header;
     95     std::vector<llvm::MachO::fat_arch> m_fat_archs;
     96 
     97     static bool
     98     ParseHeader (lldb_private::DataExtractor &data,
     99                  llvm::MachO::fat_header &header,
    100                  std::vector<llvm::MachO::fat_arch> &fat_archs);
    101 
    102 };
    103 
    104 #endif  // liblldb_ObjectContainerUniversalMachO_h_
    105