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 53 //------------------------------------------------------------------ 54 // Member Functions 55 //------------------------------------------------------------------ 56 ObjectFileMachO (lldb_private::Module* module, 57 lldb::DataBufferSP& dataSP, 58 const lldb_private::FileSpec* file, 59 lldb::addr_t offset, 60 lldb::addr_t length); 61 62 virtual 63 ~ObjectFileMachO(); 64 65 virtual bool 66 ParseHeader (); 67 68 virtual lldb::ByteOrder 69 GetByteOrder () const; 70 71 virtual bool 72 IsExecutable () const; 73 74 virtual size_t 75 GetAddressByteSize () const; 76 77 virtual lldb_private::AddressClass 78 GetAddressClass (lldb::addr_t file_addr); 79 80 virtual lldb_private::Symtab * 81 GetSymtab(); 82 83 virtual lldb_private::SectionList * 84 GetSectionList(); 85 86 virtual void 87 Dump (lldb_private::Stream *s); 88 89 virtual bool 90 GetArchitecture (lldb_private::ArchSpec &arch); 91 92 virtual bool 93 GetUUID (lldb_private::UUID* uuid); 94 95 virtual uint32_t 96 GetDependentModules (lldb_private::FileSpecList& files); 97 98 //------------------------------------------------------------------ 99 // PluginInterface protocol 100 //------------------------------------------------------------------ 101 virtual const char * 102 GetPluginName(); 103 104 virtual const char * 105 GetShortPluginName(); 106 107 virtual uint32_t 108 GetPluginVersion(); 109 110 virtual lldb_private::Address 111 GetEntryPointAddress (); 112 113 virtual ObjectFile::Type 114 CalculateType(); 115 116 virtual ObjectFile::Strata 117 CalculateStrata(); 118 119 protected: 120 mutable lldb_private::Mutex m_mutex; 121 llvm::MachO::mach_header m_header; 122 mutable std::auto_ptr<lldb_private::SectionList> m_sections_ap; 123 mutable std::auto_ptr<lldb_private::Symtab> m_symtab_ap; 124 125 llvm::MachO::dysymtab_command m_dysymtab; 126 std::vector<llvm::MachO::segment_command_64> m_mach_segments; 127 std::vector<llvm::MachO::section_64> m_mach_sections; 128 lldb_private::Address m_entry_point_address; 129 130 size_t 131 ParseSections (); 132 133 size_t 134 ParseSymtab (bool minimize); 135 136 }; 137 138 #endif // liblldb_ObjectFileMachO_h_ 139