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