1 //===-- ObjectFileMachO.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_ObjectFileMachO_h_ 11 #define liblldb_ObjectFileMachO_h_ 12 13 #include "llvm/Support/MachO.h" 14 15 #include "lldb/Core/Address.h" 16 #include "lldb/Host/FileSpec.h" 17 #include "lldb/Host/Mutex.h" 18 #include "lldb/Symbol/ObjectFile.h" 19 20 //---------------------------------------------------------------------- 21 // This class needs to be hidden as eventually belongs in a plugin that 22 // will export the ObjectFile protocol 23 //---------------------------------------------------------------------- 24 class ObjectFileMachO : 25 public lldb_private::ObjectFile 26 { 27 public: 28 //------------------------------------------------------------------ 29 // Static Functions 30 //------------------------------------------------------------------ 31 static void 32 Initialize(); 33 34 static void 35 Terminate(); 36 37 static const char * 38 GetPluginNameStatic(); 39 40 static const char * 41 GetPluginDescriptionStatic(); 42 43 static ObjectFile * 44 CreateInstance (lldb_private::Module* module, 45 lldb::DataBufferSP& dataSP, 46 const lldb_private::FileSpec* file, 47 lldb::addr_t offset, 48 lldb::addr_t length); 49 50 static bool 51 MagicBytesMatch (lldb::DataBufferSP& dataSP, 52 lldb::addr_t offset, 53 lldb::addr_t length); 54 55 //------------------------------------------------------------------ 56 // Member Functions 57 //------------------------------------------------------------------ 58 ObjectFileMachO (lldb_private::Module* module, 59 lldb::DataBufferSP& dataSP, 60 const lldb_private::FileSpec* file, 61 lldb::addr_t offset, 62 lldb::addr_t length); 63 64 virtual 65 ~ObjectFileMachO(); 66 67 virtual bool 68 ParseHeader (); 69 70 virtual lldb::ByteOrder 71 GetByteOrder () const; 72 73 virtual bool 74 IsExecutable () const; 75 76 virtual size_t 77 GetAddressByteSize () const; 78 79 virtual lldb_private::AddressClass 80 GetAddressClass (lldb::addr_t file_addr); 81 82 virtual lldb_private::Symtab * 83 GetSymtab(); 84 85 virtual lldb_private::SectionList * 86 GetSectionList(); 87 88 virtual void 89 Dump (lldb_private::Stream *s); 90 91 virtual bool 92 GetArchitecture (lldb_private::ArchSpec &arch); 93 94 virtual bool 95 GetUUID (lldb_private::UUID* uuid); 96 97 virtual uint32_t 98 GetDependentModules (lldb_private::FileSpecList& files); 99 100 //------------------------------------------------------------------ 101 // PluginInterface protocol 102 //------------------------------------------------------------------ 103 virtual const char * 104 GetPluginName(); 105 106 virtual const char * 107 GetShortPluginName(); 108 109 virtual uint32_t 110 GetPluginVersion(); 111 112 virtual lldb_private::Address 113 GetEntryPointAddress (); 114 115 virtual ObjectFile::Type 116 CalculateType(); 117 118 virtual ObjectFile::Strata 119 CalculateStrata(); 120 121 protected: 122 mutable lldb_private::Mutex m_mutex; 123 llvm::MachO::mach_header m_header; 124 mutable std::auto_ptr<lldb_private::SectionList> m_sections_ap; 125 mutable std::auto_ptr<lldb_private::Symtab> m_symtab_ap; 126 127 llvm::MachO::dysymtab_command m_dysymtab; 128 std::vector<llvm::MachO::segment_command_64> m_mach_segments; 129 std::vector<llvm::MachO::section_64> m_mach_sections; 130 lldb_private::Address m_entry_point_address; 131 132 size_t 133 ParseSections (); 134 135 size_t 136 ParseSymtab (bool minimize); 137 138 }; 139 140 #endif // liblldb_ObjectFileMachO_h_ 141