PlatformRemoteiOS.cpp revision 4a379b1194f3e6b308cd6e80b45d6ca5dd0aafd7
1cb8977d726be451df9978a74088435667fa37da2Greg Clayton//===-- PlatformRemoteiOS.cpp -----------------------------------*- C++ -*-===// 2b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// 3b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// The LLVM Compiler Infrastructure 4b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// 5b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// This file is distributed under the University of Illinois Open Source 6b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// License. See LICENSE.TXT for details. 7b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// 8b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//===----------------------------------------------------------------------===// 9b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 10b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "PlatformRemoteiOS.h" 11b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 12b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// C Includes 13b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// C++ Includes 14b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// Other libraries and framework includes 15b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// Project includes 16b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Breakpoint/BreakpointLocation.h" 17b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/ArchSpec.h" 18b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/Error.h" 19b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/Module.h" 20b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/ModuleList.h" 21b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/PluginManager.h" 22b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/StreamString.h" 23b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Host/FileSpec.h" 24b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Host/Host.h" 25b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Target/Process.h" 26b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Target/Target.h" 27b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 28b1888f24fa181489840b9acf193e224d125d0776Greg Claytonusing namespace lldb; 29b1888f24fa181489840b9acf193e224d125d0776Greg Claytonusing namespace lldb_private; 30cb8977d726be451df9978a74088435667fa37da2Greg Clayton 31fea31993c6d78e0fd1629c899f47f16e44736011Greg ClaytonPlatformRemoteiOS::SDKDirectoryInfo::SDKDirectoryInfo (const lldb_private::FileSpec &sdk_dir) : 32fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton directory(sdk_dir), 33fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton build(), 34fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton version_major(0), 35fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton version_minor(0), 36fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton version_update(0), 37fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton user_cached(false) 38b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton{ 39fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton const char *dirname_cstr = sdk_dir.GetFilename().GetCString(); 40b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const char *pos = Args::StringToVersion (dirname_cstr, 41b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton version_major, 42b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton version_minor, 43b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton version_update); 44b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton 45b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (pos && pos[0] == ' ' && pos[1] == '(') 46b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 47b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const char *build_start = pos + 2; 48b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const char *end_paren = strchr (build_start, ')'); 49b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (end_paren && build_start < end_paren) 50b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton build.SetCStringWithLength(build_start, end_paren - build_start); 51b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 52b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton} 53b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton 5458e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 5558e26e0935138225477fd61283215ceff2068899Greg Clayton// Static Variables 5658e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 5758e26e0935138225477fd61283215ceff2068899Greg Claytonstatic uint32_t g_initialize_count = 0; 5858e26e0935138225477fd61283215ceff2068899Greg Clayton 5958e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 6058e26e0935138225477fd61283215ceff2068899Greg Clayton// Static Functions 6158e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 62b1888f24fa181489840b9acf193e224d125d0776Greg Claytonvoid 63b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::Initialize () 64b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 6558e26e0935138225477fd61283215ceff2068899Greg Clayton if (g_initialize_count++ == 0) 66b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 67cb8977d726be451df9978a74088435667fa37da2Greg Clayton PluginManager::RegisterPlugin (PlatformRemoteiOS::GetShortPluginNameStatic(), 68cb8977d726be451df9978a74088435667fa37da2Greg Clayton PlatformRemoteiOS::GetDescriptionStatic(), 69cb8977d726be451df9978a74088435667fa37da2Greg Clayton PlatformRemoteiOS::CreateInstance); 70cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 71cb8977d726be451df9978a74088435667fa37da2Greg Clayton} 72cb8977d726be451df9978a74088435667fa37da2Greg Clayton 73cb8977d726be451df9978a74088435667fa37da2Greg Claytonvoid 74cb8977d726be451df9978a74088435667fa37da2Greg ClaytonPlatformRemoteiOS::Terminate () 75cb8977d726be451df9978a74088435667fa37da2Greg Clayton{ 7658e26e0935138225477fd61283215ceff2068899Greg Clayton if (g_initialize_count > 0) 77cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 7858e26e0935138225477fd61283215ceff2068899Greg Clayton if (--g_initialize_count == 0) 7958e26e0935138225477fd61283215ceff2068899Greg Clayton { 8058e26e0935138225477fd61283215ceff2068899Greg Clayton PluginManager::UnregisterPlugin (PlatformRemoteiOS::CreateInstance); 8158e26e0935138225477fd61283215ceff2068899Greg Clayton } 82b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 83b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 84b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 85b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatform* 86b1db658333cdebca31a128be95e926d80c3c7796Greg ClaytonPlatformRemoteiOS::CreateInstance (bool force, const ArchSpec *arch) 87b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 88b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton bool create = force; 89b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton if (create == false && arch && arch->IsValid()) 90b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton { 91b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton switch (arch->GetMachine()) 92b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton { 93b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton case llvm::Triple::arm: 94b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton case llvm::Triple::thumb: 95b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton { 96b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton const llvm::Triple &triple = arch->GetTriple(); 97b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton llvm::Triple::VendorType vendor = triple.getVendor(); 98b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton switch (vendor) 99b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton { 100b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton case llvm::Triple::Apple: 101b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton create = true; 1024a379b1194f3e6b308cd6e80b45d6ca5dd0aafd7Greg Clayton break; 103b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton 104b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton case llvm::Triple::UnknownArch: 105b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton create = !arch->TripleVendorWasSpecified(); 106b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton break; 107b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton 108b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton default: 109b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton break; 110b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton } 111b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton 112b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton if (create) 113b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton { 114b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton switch (triple.getOS()) 115b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton { 116b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton case llvm::Triple::Darwin: // Deprecated, but still support Darwin for historical reasons 117b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton case llvm::Triple::IOS: // This is the right triple value for iOS debugging 118b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton break; 119b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton 120b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton case llvm::Triple::UnknownOS: 121b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton create = !arch->TripleOSWasSpecified(); 122b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton break; 123b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton 124b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton default: 125b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton create = false; 126b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton break; 127b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton } 128b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton } 129b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton } 130b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton break; 131b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton default: 132b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton break; 133b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton } 134b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton } 135b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton 136b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton if (create) 137b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton return new PlatformRemoteiOS (); 138b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton return NULL; 139b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 140b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 141b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 142b1888f24fa181489840b9acf193e224d125d0776Greg Claytonconst char * 143b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetPluginNameStatic () 144b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 145b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return "PlatformRemoteiOS"; 146b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 147b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 148b1888f24fa181489840b9acf193e224d125d0776Greg Claytonconst char * 149b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetShortPluginNameStatic() 150b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 151b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return "remote-ios"; 152b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 153b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 154b1888f24fa181489840b9acf193e224d125d0776Greg Claytonconst char * 155b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetDescriptionStatic() 156b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 157b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return "Remote iOS platform plug-in."; 158b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 159b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 160b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 16158e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 16258e26e0935138225477fd61283215ceff2068899Greg Clayton/// Default Constructor 16358e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 16458e26e0935138225477fd61283215ceff2068899Greg ClaytonPlatformRemoteiOS::PlatformRemoteiOS () : 16558e26e0935138225477fd61283215ceff2068899Greg Clayton PlatformDarwin (false), // This is a remote platform 16674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton m_sdk_directory_infos(), 16774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton m_device_support_directory(), 16874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton m_device_support_directory_for_os_version (), 16974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton m_build_update(), 17074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton m_last_module_sdk_idx(UINT32_MAX) 17158e26e0935138225477fd61283215ceff2068899Greg Clayton{ 17258e26e0935138225477fd61283215ceff2068899Greg Clayton} 17358e26e0935138225477fd61283215ceff2068899Greg Clayton 17458e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 17558e26e0935138225477fd61283215ceff2068899Greg Clayton/// Destructor. 17658e26e0935138225477fd61283215ceff2068899Greg Clayton/// 17758e26e0935138225477fd61283215ceff2068899Greg Clayton/// The destructor is virtual since this class is designed to be 17858e26e0935138225477fd61283215ceff2068899Greg Clayton/// inherited from by the plug-in instance. 17958e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 18058e26e0935138225477fd61283215ceff2068899Greg ClaytonPlatformRemoteiOS::~PlatformRemoteiOS() 18158e26e0935138225477fd61283215ceff2068899Greg Clayton{ 18258e26e0935138225477fd61283215ceff2068899Greg Clayton} 18358e26e0935138225477fd61283215ceff2068899Greg Clayton 18458e26e0935138225477fd61283215ceff2068899Greg Clayton 185b1888f24fa181489840b9acf193e224d125d0776Greg Claytonvoid 186b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetStatus (Stream &strm) 187b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 18858e26e0935138225477fd61283215ceff2068899Greg Clayton Platform::GetStatus (strm); 189b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *sdk_directory = GetDeviceSupportDirectoryForOSVersion(); 190b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (sdk_directory) 191abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton strm.Printf (" SDK Path: \"%s\"\n", sdk_directory); 192b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 193abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton strm.PutCString (" SDK Path: error: unable to locate SDK\n"); 194fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton 19574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton const uint32_t num_sdk_infos = m_sdk_directory_infos.size(); 19674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton for (uint32_t i=0; i<num_sdk_infos; ++i) 19774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 19874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton const SDKDirectoryInfo &sdk_dir_info = m_sdk_directory_infos[i]; 19974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton strm.Printf (" SDK Roots: [%2u] \"%s/%s\"\n", 20074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton i, 20174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sdk_dir_info.directory.GetDirectory().GetCString(), 20274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sdk_dir_info.directory.GetFilename().GetCString()); 20374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 204b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 205b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 206b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 207b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonError 208b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::ResolveExecutable (const FileSpec &exe_file, 209b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const ArchSpec &exe_arch, 2109ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton lldb::ModuleSP &exe_module_sp, 2119ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton const FileSpecList *module_search_paths_ptr) 212b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 213b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Error error; 214b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // Nothing special to do here, just use the actual file and architecture 215b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 216b1888f24fa181489840b9acf193e224d125d0776Greg Clayton FileSpec resolved_exe_file (exe_file); 217b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 218b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // If we have "ls" as the exe_file, resolve the executable loation based on 219b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // the current path variables 220b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // TODO: resolve bare executables in the Platform SDK 221b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// if (!resolved_exe_file.Exists()) 222b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// resolved_exe_file.ResolveExecutableLocation (); 223b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 224b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // Resolve any executable within a bundle on MacOSX 225b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // TODO: verify that this handles shallow bundles, if not then implement one ourselves 226b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Host::ResolveExecutableInBundle (resolved_exe_file); 227b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 228b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (resolved_exe_file.Exists()) 229b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 230b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (exe_arch.IsValid()) 231b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 232444fe998bf707bd076a70c3a779db8575533695eGreg Clayton ModuleSpec module_spec (resolved_exe_file, exe_arch); 233444fe998bf707bd076a70c3a779db8575533695eGreg Clayton error = ModuleList::GetSharedModule (module_spec, 234b1888f24fa181489840b9acf193e224d125d0776Greg Clayton exe_module_sp, 2359ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton NULL, 236b1888f24fa181489840b9acf193e224d125d0776Greg Clayton NULL, 237b1888f24fa181489840b9acf193e224d125d0776Greg Clayton NULL); 238b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 2391a8e65493b8049bc5877bcedfeb2e9731f7f2d8eHan Ming Ong if (exe_module_sp && exe_module_sp->GetObjectFile()) 24024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return error; 24124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_module_sp.reset(); 242b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 24324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // No valid architecture was specified or the exact ARM slice wasn't 24424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // found so ask the platform for the architectures that we should be 24524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // using (in the correct order) and see if we can find a match that way 24624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton StreamString arch_names; 24724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ArchSpec platform_arch; 24824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, platform_arch); ++idx) 249b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 250444fe998bf707bd076a70c3a779db8575533695eGreg Clayton ModuleSpec module_spec (resolved_exe_file, platform_arch); 251444fe998bf707bd076a70c3a779db8575533695eGreg Clayton error = ModuleList::GetSharedModule (module_spec, 25224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_module_sp, 2539ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton NULL, 25424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton NULL, 25524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton NULL); 25624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // Did we find an executable using one of the 25724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (error.Success()) 258b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 25924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (exe_module_sp && exe_module_sp->GetObjectFile()) 26024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 26124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton else 26224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorToGenericError(); 263b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 264b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 26524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (idx > 0) 26624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton arch_names.PutCString (", "); 26724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton arch_names.PutCString (platform_arch.GetArchitectureName()); 26824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 26924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 27024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (error.Fail() || !exe_module_sp) 27124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 27224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorStringWithFormat ("'%s%s%s' doesn't contain any '%s' platform architectures: %s", 27324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_file.GetDirectory().AsCString(""), 27424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_file.GetDirectory() ? "/" : "", 27524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_file.GetFilename().AsCString(""), 27624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetShortPluginName(), 27724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton arch_names.GetString().c_str()); 278b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 279b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 280b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 281b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 282b1888f24fa181489840b9acf193e224d125d0776Greg Clayton error.SetErrorStringWithFormat ("'%s%s%s' does not exist", 283b1888f24fa181489840b9acf193e224d125d0776Greg Clayton exe_file.GetDirectory().AsCString(""), 284b1888f24fa181489840b9acf193e224d125d0776Greg Clayton exe_file.GetDirectory() ? "/" : "", 285b1888f24fa181489840b9acf193e224d125d0776Greg Clayton exe_file.GetFilename().AsCString("")); 286b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 287b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 288b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 289b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 290b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 291b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg ClaytonFileSpec::EnumerateDirectoryResult 292b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg ClaytonPlatformRemoteiOS::GetContainedFilesIntoVectorOfStringsCallback (void *baton, 293b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton FileSpec::FileType file_type, 294b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const FileSpec &file_spec) 295b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 296fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton ((PlatformRemoteiOS::SDKDirectoryInfoCollection *)baton)->push_back(PlatformRemoteiOS::SDKDirectoryInfo(file_spec)); 297b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton return FileSpec::eEnumerateDirectoryResultNext; 298b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton} 299604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton 300b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Claytonbool 301b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg ClaytonPlatformRemoteiOS::UpdateSDKDirectoryInfosInNeeded() 302b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton{ 303b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (m_sdk_directory_infos.empty()) 304b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 305b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const char *device_support_dir = GetDeviceSupportDirectory(); 306b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (device_support_dir) 307b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 308b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const bool find_directories = true; 309b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const bool find_files = false; 310b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const bool find_other = false; 311b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton FileSpec::EnumerateDirectory (m_device_support_directory.c_str(), 312b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton find_directories, 313b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton find_files, 314b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton find_other, 315b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton GetContainedFilesIntoVectorOfStringsCallback, 316b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton &m_sdk_directory_infos); 317fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton 318fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton const uint32_t num_installed = m_sdk_directory_infos.size(); 319fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton FileSpec local_sdk_cache("~/Library/Developer/Xcode/iOS DeviceSupport", true); 320fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (local_sdk_cache.Exists()) 321fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 322fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton char path[PATH_MAX]; 323fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (local_sdk_cache.GetPath(path, sizeof(path))) 324fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 325fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton FileSpec::EnumerateDirectory (path, 326fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton find_directories, 327fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton find_files, 328fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton find_other, 329fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton GetContainedFilesIntoVectorOfStringsCallback, 330fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton &m_sdk_directory_infos); 331fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton const uint32_t num_sdk_infos = m_sdk_directory_infos.size(); 332fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton // First try for an exact match of major, minor and update 333fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton for (uint32_t i=num_installed; i<num_sdk_infos; ++i) 334fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 335fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton m_sdk_directory_infos[i].user_cached = true; 336fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 337fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 338fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 339b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 340b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 341b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton return !m_sdk_directory_infos.empty(); 342b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton} 343b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton 344b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Claytonconst PlatformRemoteiOS::SDKDirectoryInfo * 345b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg ClaytonPlatformRemoteiOS::GetSDKDirectoryForCurrentOSVersion () 346b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton{ 347fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton uint32_t i; 348fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (UpdateSDKDirectoryInfosInNeeded()) 349b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 350fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton const uint32_t num_sdk_infos = m_sdk_directory_infos.size(); 351fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton 352fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton // Check to see if the user specified a build string. If they did, then 353fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton // be sure to match it. 354fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton std::vector<bool> check_sdk_info(num_sdk_infos, true); 355fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton ConstString build(m_sdk_build); 356fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (build) 357b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 358b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton for (i=0; i<num_sdk_infos; ++i) 359fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton check_sdk_info[i] = m_sdk_directory_infos[i].build == build; 360fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 361fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton 362fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton // If we are connected we can find the version of the OS the platform 363fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton // us running on and select the right SDK 364fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton uint32_t major, minor, update; 365fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (GetOSVersion(major, minor, update)) 366fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 367fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (UpdateSDKDirectoryInfosInNeeded()) 368b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 369fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton // First try for an exact match of major, minor and update 370fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton for (i=0; i<num_sdk_infos; ++i) 371b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 372fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (check_sdk_info[i]) 373fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 374fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (m_sdk_directory_infos[i].version_major == major && 375fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton m_sdk_directory_infos[i].version_minor == minor && 376fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton m_sdk_directory_infos[i].version_update == update) 377fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 378fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton return &m_sdk_directory_infos[i]; 379fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 380fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 381b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 382fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton // First try for an exact match of major and minor 383fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton for (i=0; i<num_sdk_infos; ++i) 384b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 385fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (check_sdk_info[i]) 386fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 387fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (m_sdk_directory_infos[i].version_major == major && 388fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton m_sdk_directory_infos[i].version_minor == minor) 389fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 390fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton return &m_sdk_directory_infos[i]; 391fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 392fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 393b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 394fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton // Lastly try to match of major version only.. 395fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton for (i=0; i<num_sdk_infos; ++i) 396b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 397fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (check_sdk_info[i]) 398fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 399fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (m_sdk_directory_infos[i].version_major == major) 400fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 401fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton return &m_sdk_directory_infos[i]; 402fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 403fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 404b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 405b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 406b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 407fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton else if (build) 408fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 409fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton // No version, just a build number, search for the first one that matches 410fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton for (i=0; i<num_sdk_infos; ++i) 411fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (check_sdk_info[i]) 412fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton return &m_sdk_directory_infos[i]; 413fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 414b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 415b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton return NULL; 416b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton} 417b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 418b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Claytonconst PlatformRemoteiOS::SDKDirectoryInfo * 419b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg ClaytonPlatformRemoteiOS::GetSDKDirectoryForLatestOSVersion () 420b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton{ 421b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const PlatformRemoteiOS::SDKDirectoryInfo *result = NULL; 422b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (UpdateSDKDirectoryInfosInNeeded()) 423b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 424b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const uint32_t num_sdk_infos = m_sdk_directory_infos.size(); 425b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton // First try for an exact match of major, minor and update 426b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton for (uint32_t i=0; i<num_sdk_infos; ++i) 427b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 428b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const SDKDirectoryInfo &sdk_dir_info = m_sdk_directory_infos[i]; 429b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (sdk_dir_info.version_major != UINT32_MAX) 430b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 431b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (result == NULL || sdk_dir_info.version_major > result->version_major) 432b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 433b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton result = &sdk_dir_info; 434b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 435b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton else if (sdk_dir_info.version_major == result->version_major) 436b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 437b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (sdk_dir_info.version_minor > result->version_minor) 438b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 439b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton result = &sdk_dir_info; 440b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 441b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton else if (sdk_dir_info.version_minor == result->version_minor) 442b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 443b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (sdk_dir_info.version_update > result->version_update) 444b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 445b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton result = &sdk_dir_info; 446b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 447b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 448b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 449b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 450b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 451b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 452b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton return result; 453b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton} 454b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton 455b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton 456b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton 457b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Claytonconst char * 458b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg ClaytonPlatformRemoteiOS::GetDeviceSupportDirectory() 459b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton{ 460b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (m_device_support_directory.empty()) 461b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 462b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const char *device_support_dir = GetDeveloperDirectory(); 463b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (device_support_dir) 464b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 465b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton m_device_support_directory.assign (device_support_dir); 466b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton m_device_support_directory.append ("/Platforms/iPhoneOS.platform/DeviceSupport"); 467b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 468b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton else 469b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 470b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton // Assign a single NULL character so we know we tried to find the device 471b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton // support directory and we don't keep trying to find it over and over. 472b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton m_device_support_directory.assign (1, '\0'); 473b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 474b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 475b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton // We should have put a single NULL character into m_device_support_directory 476b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton // or it should have a valid path if the code gets here 477b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton assert (m_device_support_directory.empty() == false); 478b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (m_device_support_directory[0]) 479b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton return m_device_support_directory.c_str(); 480b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton return NULL; 481b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton} 482b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton 483b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton 484b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Claytonconst char * 485b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg ClaytonPlatformRemoteiOS::GetDeviceSupportDirectoryForOSVersion() 486b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton{ 487b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (m_sdk_sysroot) 488b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton return m_sdk_sysroot.GetCString(); 489b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton 490b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (m_device_support_directory_for_os_version.empty()) 491b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 492b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton const PlatformRemoteiOS::SDKDirectoryInfo *sdk_dir_info = GetSDKDirectoryForCurrentOSVersion (); 493b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (sdk_dir_info == NULL) 494b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton sdk_dir_info = GetSDKDirectoryForLatestOSVersion (); 495b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton if (sdk_dir_info) 496b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 497fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton char path[PATH_MAX]; 498fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton if (sdk_dir_info->directory.GetPath(path, sizeof(path))) 499fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton { 500fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton m_device_support_directory_for_os_version = path; 501fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton return m_device_support_directory_for_os_version.c_str(); 502fea31993c6d78e0fd1629c899f47f16e44736011Greg Clayton } 503b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 504b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton else 505b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton { 506b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton // Assign a single NULL character so we know we tried to find the device 507b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton // support directory and we don't keep trying to find it over and over. 508b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton m_device_support_directory_for_os_version.assign (1, '\0'); 509b58879acfd8deb5a263f69b9d8c950e04e8fbe9aGreg Clayton } 510b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 511b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // We should have put a single NULL character into m_device_support_directory_for_os_version 512b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // or it should have a valid path if the code gets here 513b1888f24fa181489840b9acf193e224d125d0776Greg Clayton assert (m_device_support_directory_for_os_version.empty() == false); 514b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (m_device_support_directory_for_os_version[0]) 515b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return m_device_support_directory_for_os_version.c_str(); 516b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return NULL; 517b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 518b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 51974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Claytonuint32_t 52074821595bdf8b75ceea1949b5a9370a71fd96e61Greg ClaytonPlatformRemoteiOS::FindFileInAllSDKs (const char *platform_file_path, 52174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton FileSpecList &file_list) 52274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton{ 52374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (platform_file_path && platform_file_path[0] && UpdateSDKDirectoryInfosInNeeded()) 52474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 52574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton const uint32_t num_sdk_infos = m_sdk_directory_infos.size(); 52674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton lldb_private::FileSpec local_file; 52774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton // First try for an exact match of major, minor and update 52874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton for (uint32_t sdk_idx=0; sdk_idx<num_sdk_infos; ++sdk_idx) 52974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 53074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (GetFileInSDK (platform_file_path, 53174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sdk_idx, 53274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton local_file)) 53374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 53474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton file_list.Append(local_file); 53574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 53674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 53774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 53874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return file_list.GetSize(); 53974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton} 54074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 54174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Claytonbool 54274821595bdf8b75ceea1949b5a9370a71fd96e61Greg ClaytonPlatformRemoteiOS::GetFileInSDK (const char *platform_file_path, 54374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton uint32_t sdk_idx, 54474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton lldb_private::FileSpec &local_file) 54574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton{ 54674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (sdk_idx < m_sdk_directory_infos.size()) 54774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 54874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton char sdkroot_path[PATH_MAX]; 54974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton const SDKDirectoryInfo &sdk_dir_info = m_sdk_directory_infos[sdk_idx]; 55074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (sdk_dir_info.directory.GetPath(sdkroot_path, sizeof(sdkroot_path))) 55174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 55274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton const bool symbols_dirs_only = true; 55374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 55474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return GetFileInSDKRoot (platform_file_path, 55574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sdkroot_path, 55674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton symbols_dirs_only, 55774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton local_file); 55874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 55974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 56074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return false; 56174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton} 56274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 56374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 56474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Claytonbool 56574821595bdf8b75ceea1949b5a9370a71fd96e61Greg ClaytonPlatformRemoteiOS::GetFileInSDKRoot (const char *platform_file_path, 56674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton const char *sdkroot_path, 56774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton bool symbols_dirs_only, 56874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton lldb_private::FileSpec &local_file) 56974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton{ 57074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (sdkroot_path && sdkroot_path[0] && platform_file_path && platform_file_path[0]) 57174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 57274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton char resolved_path[PATH_MAX]; 57374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 57474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (!symbols_dirs_only) 57574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 57674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton ::snprintf (resolved_path, 57774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sizeof(resolved_path), 57874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton "%s/%s", 57974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sdkroot_path, 58074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton platform_file_path); 58174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 58274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton local_file.SetFile(resolved_path, true); 58374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (local_file.Exists()) 58474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return true; 58574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 58674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 58774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton ::snprintf (resolved_path, 58874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sizeof(resolved_path), 58974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton "%s/Symbols.Internal/%s", 59074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sdkroot_path, 59174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton platform_file_path); 59274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 59374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton local_file.SetFile(resolved_path, true); 59474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (local_file.Exists()) 59574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return true; 59674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton ::snprintf (resolved_path, 59774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sizeof(resolved_path), 59874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton "%s/Symbols/%s", 59974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton sdkroot_path, 60074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton platform_file_path); 60174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 60274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton local_file.SetFile(resolved_path, true); 60374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (local_file.Exists()) 60474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return true; 60574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 60674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return false; 60774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton} 60874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 60974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 610b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonError 6110f485ead5447872a2a9f35c5670fc67cc58e1549Johnny ChenPlatformRemoteiOS::GetSymbolFile (const FileSpec &platform_file, 6120f485ead5447872a2a9f35c5670fc67cc58e1549Johnny Chen const UUID *uuid_ptr, 6130f485ead5447872a2a9f35c5670fc67cc58e1549Johnny Chen FileSpec &local_file) 614b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 615b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Error error; 616b1888f24fa181489840b9acf193e224d125d0776Greg Clayton char platform_file_path[PATH_MAX]; 617b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (platform_file.GetPath(platform_file_path, sizeof(platform_file_path))) 618b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 619b1888f24fa181489840b9acf193e224d125d0776Greg Clayton char resolved_path[PATH_MAX]; 620b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 621b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char * os_version_dir = GetDeviceSupportDirectoryForOSVersion(); 622b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (os_version_dir) 623b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 624b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ::snprintf (resolved_path, 625b1888f24fa181489840b9acf193e224d125d0776Greg Clayton sizeof(resolved_path), 626604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton "%s/%s", 627604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton os_version_dir, 628604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton platform_file_path); 629604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton 630604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton local_file.SetFile(resolved_path, true); 631604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton if (local_file.Exists()) 632604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton return error; 633604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton 634604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton ::snprintf (resolved_path, 635604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton sizeof(resolved_path), 636b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "%s/Symbols.Internal/%s", 637b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_dir, 638b1888f24fa181489840b9acf193e224d125d0776Greg Clayton platform_file_path); 639b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 640b1888f24fa181489840b9acf193e224d125d0776Greg Clayton local_file.SetFile(resolved_path, true); 641b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (local_file.Exists()) 642b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 643b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ::snprintf (resolved_path, 644b1888f24fa181489840b9acf193e224d125d0776Greg Clayton sizeof(resolved_path), 645b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "%s/Symbols/%s", 646b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_dir, 647b1888f24fa181489840b9acf193e224d125d0776Greg Clayton platform_file_path); 648b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 649b1888f24fa181489840b9acf193e224d125d0776Greg Clayton local_file.SetFile(resolved_path, true); 650b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (local_file.Exists()) 651b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 652b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 653b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 654b1888f24fa181489840b9acf193e224d125d0776Greg Clayton local_file = platform_file; 655b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (local_file.Exists()) 656b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 657b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 658b1888f24fa181489840b9acf193e224d125d0776Greg Clayton error.SetErrorStringWithFormat ("unable to locate a platform file for '%s' in platform '%s'", 659b1888f24fa181489840b9acf193e224d125d0776Greg Clayton platform_file_path, 660b1888f24fa181489840b9acf193e224d125d0776Greg Clayton GetPluginName()); 661b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 662b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 663b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 664b1888f24fa181489840b9acf193e224d125d0776Greg Clayton error.SetErrorString ("invalid platform file argument"); 665b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 666b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 667b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 668b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 66924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg ClaytonError 670444fe998bf707bd076a70c3a779db8575533695eGreg ClaytonPlatformRemoteiOS::GetSharedModule (const ModuleSpec &module_spec, 67124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ModuleSP &module_sp, 6729ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton const FileSpecList *module_search_paths_ptr, 67324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ModuleSP *old_module_sp_ptr, 67424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool *did_create_ptr) 67524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{ 67624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // For iOS, the SDK files are all cached locally on the host 67724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // system. So first we ask for the file in the cached SDK, 67824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // then we attempt to get a shared module for the right architecture 67924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // with the right UUID. 680444fe998bf707bd076a70c3a779db8575533695eGreg Clayton const FileSpec &platform_file = module_spec.GetFileSpec(); 681444fe998bf707bd076a70c3a779db8575533695eGreg Clayton 68224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton FileSpec local_file; 68374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton const UUID *module_uuid_ptr = module_spec.GetUUIDPtr(); 6840f485ead5447872a2a9f35c5670fc67cc58e1549Johnny Chen Error error (GetSymbolFile (platform_file, module_uuid_ptr, local_file)); 68524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (error.Success()) 68624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 68774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton error = ResolveExecutable (local_file, module_spec.GetArchitecture(), module_sp, NULL); 68874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (module_sp && ((module_uuid_ptr == NULL) || (module_sp->GetUUID() == *module_uuid_ptr))) 68974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 69074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton //printf ("found in user specified SDK\n"); 69174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton error.Clear(); 69274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return error; 69374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 6948c1d7203f726e3a62b832dbeeaf0ae76f9f65222Greg Clayton 69574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton char platform_file_path[PATH_MAX]; 69674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (platform_file.GetPath(platform_file_path, sizeof(platform_file_path))) 69774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 69874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton FileSpec local_file; 69974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton const uint32_t num_sdk_infos = m_sdk_directory_infos.size(); 70074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton // Try the last SDK index if it is set as most files from an SDK 70174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton // will tend to be valid in that same SDK. 70274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (m_last_module_sdk_idx < num_sdk_infos) 70374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 70474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (GetFileInSDK (platform_file_path, m_last_module_sdk_idx, local_file)) 70574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 70674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton //printf ("sdk[%u] last: '%s/%s'\n", m_last_module_sdk_idx, local_file.GetDirectory().GetCString(), local_file.GetFilename().GetCString()); 70774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton module_sp.reset(); 70874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton error = ResolveExecutable (local_file, 70974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton module_spec.GetArchitecture(), 71074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton module_sp, 71174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton NULL); 712233935b0d93a8a516864cd07c508b731ccef4fcdJim Ingham if (module_sp && ((module_uuid_ptr == NULL) || (module_sp->GetUUID() == *module_uuid_ptr))) 71374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 71474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton //printf ("sdk[%u] last found\n", m_last_module_sdk_idx); 71574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton error.Clear(); 71674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return error; 71774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 71874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 71974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 72074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 72174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton // First try for an exact match of major, minor and update 72274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton for (uint32_t sdk_idx=0; sdk_idx<num_sdk_infos; ++sdk_idx) 72374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 72474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (m_last_module_sdk_idx == sdk_idx) 72574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 72674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton // Skip the last module SDK index if we already searched 72774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton // it above 72874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton continue; 72974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 73074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton if (GetFileInSDK (platform_file_path, sdk_idx, local_file)) 73174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 73274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton //printf ("sdk[%u]: '%s/%s'\n", sdk_idx, local_file.GetDirectory().GetCString(), local_file.GetFilename().GetCString()); 73374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 73474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton error = ResolveExecutable (local_file, 73574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton module_spec.GetArchitecture(), 73674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton module_sp, 73774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton NULL); 738233935b0d93a8a516864cd07c508b731ccef4fcdJim Ingham if (module_sp && ((module_uuid_ptr == NULL) || (module_sp->GetUUID() == *module_uuid_ptr))) 73974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton { 74074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton // Remember the index of the last SDK that we found a file 74174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton // in in case the wrong SDK was selected. 74274821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton m_last_module_sdk_idx = sdk_idx; 74374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton //printf ("sdk[%u]: found (setting last to %u)\n", sdk_idx, m_last_module_sdk_idx); 74474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton error.Clear(); 74574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton return error; 74674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 74774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 74874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 74974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton } 75074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton // Not the module we are looking for... Nothing to see here... 75174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton module_sp.reset(); 75224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 75374821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 75474821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton const bool always_create = false; 75574821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton error = ModuleList::GetSharedModule (module_spec, 75674821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton module_sp, 75774821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton module_search_paths_ptr, 75874821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton old_module_sp_ptr, 75974821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton did_create_ptr, 76074821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton always_create); 76174821595bdf8b75ceea1949b5a9370a71fd96e61Greg Clayton 76224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (module_sp) 76324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton module_sp->SetPlatformFileSpec(platform_file); 76424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 76524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return error; 76624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton} 76724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 76824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 769b1888f24fa181489840b9acf193e224d125d0776Greg Claytonuint32_t 770b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg ClaytonPlatformRemoteiOS::FindProcesses (const ProcessInstanceInfoMatch &match_info, 771b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoList &process_infos) 772b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 773b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // TODO: if connected, send a packet to get the remote process infos by name 774b1888f24fa181489840b9acf193e224d125d0776Greg Clayton process_infos.Clear(); 775b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return 0; 776b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 777b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 778b1888f24fa181489840b9acf193e224d125d0776Greg Claytonbool 779b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg ClaytonPlatformRemoteiOS::GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo &process_info) 780b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 781b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // TODO: if connected, send a packet to get the remote process info 782b1888f24fa181489840b9acf193e224d125d0776Greg Clayton process_info.Clear(); 783b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return false; 784b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 785b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 786b1888f24fa181489840b9acf193e224d125d0776Greg Claytonbool 787b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetSupportedArchitectureAtIndex (uint32_t idx, ArchSpec &arch) 788b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 7899d3c618680dd8bc8f250d700aac7f78eecbbf69bJason Molenda return ARMGetSupportedArchitectureAtIndex (idx, arch); 790b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 791