PlatformRemoteiOS.cpp revision 9ce953807eb814a93b449dc243de4f7bf32c3115
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 3158e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 3258e26e0935138225477fd61283215ceff2068899Greg Clayton// Static Variables 3358e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 3458e26e0935138225477fd61283215ceff2068899Greg Claytonstatic uint32_t g_initialize_count = 0; 3558e26e0935138225477fd61283215ceff2068899Greg Clayton 3658e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 3758e26e0935138225477fd61283215ceff2068899Greg Clayton// Static Functions 3858e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 39b1888f24fa181489840b9acf193e224d125d0776Greg Claytonvoid 40b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::Initialize () 41b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 4258e26e0935138225477fd61283215ceff2068899Greg Clayton if (g_initialize_count++ == 0) 43b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 44cb8977d726be451df9978a74088435667fa37da2Greg Clayton PluginManager::RegisterPlugin (PlatformRemoteiOS::GetShortPluginNameStatic(), 45cb8977d726be451df9978a74088435667fa37da2Greg Clayton PlatformRemoteiOS::GetDescriptionStatic(), 46cb8977d726be451df9978a74088435667fa37da2Greg Clayton PlatformRemoteiOS::CreateInstance); 47cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 48cb8977d726be451df9978a74088435667fa37da2Greg Clayton} 49cb8977d726be451df9978a74088435667fa37da2Greg Clayton 50cb8977d726be451df9978a74088435667fa37da2Greg Claytonvoid 51cb8977d726be451df9978a74088435667fa37da2Greg ClaytonPlatformRemoteiOS::Terminate () 52cb8977d726be451df9978a74088435667fa37da2Greg Clayton{ 5358e26e0935138225477fd61283215ceff2068899Greg Clayton if (g_initialize_count > 0) 54cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 5558e26e0935138225477fd61283215ceff2068899Greg Clayton if (--g_initialize_count == 0) 5658e26e0935138225477fd61283215ceff2068899Greg Clayton { 5758e26e0935138225477fd61283215ceff2068899Greg Clayton PluginManager::UnregisterPlugin (PlatformRemoteiOS::CreateInstance); 5858e26e0935138225477fd61283215ceff2068899Greg Clayton } 59b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 60b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 61b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 62b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatform* 63b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::CreateInstance () 64b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 65b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return new PlatformRemoteiOS (); 66b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 67b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 68b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 69b1888f24fa181489840b9acf193e224d125d0776Greg Claytonconst char * 70b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetPluginNameStatic () 71b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 72b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return "PlatformRemoteiOS"; 73b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 74b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 75b1888f24fa181489840b9acf193e224d125d0776Greg Claytonconst char * 76b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetShortPluginNameStatic() 77b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 78b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return "remote-ios"; 79b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 80b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 81b1888f24fa181489840b9acf193e224d125d0776Greg Claytonconst char * 82b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetDescriptionStatic() 83b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 84b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return "Remote iOS platform plug-in."; 85b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 86b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 87b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 8858e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 8958e26e0935138225477fd61283215ceff2068899Greg Clayton/// Default Constructor 9058e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 9158e26e0935138225477fd61283215ceff2068899Greg ClaytonPlatformRemoteiOS::PlatformRemoteiOS () : 9258e26e0935138225477fd61283215ceff2068899Greg Clayton PlatformDarwin (false), // This is a remote platform 9358e26e0935138225477fd61283215ceff2068899Greg Clayton m_device_support_directory (), 9458e26e0935138225477fd61283215ceff2068899Greg Clayton m_device_support_directory_for_os_version () 9558e26e0935138225477fd61283215ceff2068899Greg Clayton{ 9658e26e0935138225477fd61283215ceff2068899Greg Clayton} 9758e26e0935138225477fd61283215ceff2068899Greg Clayton 9858e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 9958e26e0935138225477fd61283215ceff2068899Greg Clayton/// Destructor. 10058e26e0935138225477fd61283215ceff2068899Greg Clayton/// 10158e26e0935138225477fd61283215ceff2068899Greg Clayton/// The destructor is virtual since this class is designed to be 10258e26e0935138225477fd61283215ceff2068899Greg Clayton/// inherited from by the plug-in instance. 10358e26e0935138225477fd61283215ceff2068899Greg Clayton//------------------------------------------------------------------ 10458e26e0935138225477fd61283215ceff2068899Greg ClaytonPlatformRemoteiOS::~PlatformRemoteiOS() 10558e26e0935138225477fd61283215ceff2068899Greg Clayton{ 10658e26e0935138225477fd61283215ceff2068899Greg Clayton} 10758e26e0935138225477fd61283215ceff2068899Greg Clayton 10858e26e0935138225477fd61283215ceff2068899Greg Clayton 109b1888f24fa181489840b9acf193e224d125d0776Greg Claytonvoid 110b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetStatus (Stream &strm) 111b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 11258e26e0935138225477fd61283215ceff2068899Greg Clayton Platform::GetStatus (strm); 113b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *sdk_directory = GetDeviceSupportDirectoryForOSVersion(); 114b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (sdk_directory) 115abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton strm.Printf (" SDK Path: \"%s\"\n", sdk_directory); 116b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 117abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton strm.PutCString (" SDK Path: error: unable to locate SDK\n"); 118b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 119b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 120b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 121b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonError 122b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::ResolveExecutable (const FileSpec &exe_file, 123b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const ArchSpec &exe_arch, 1249ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton lldb::ModuleSP &exe_module_sp, 1259ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton const FileSpecList *module_search_paths_ptr) 126b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 127b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Error error; 128b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // Nothing special to do here, just use the actual file and architecture 129b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 130b1888f24fa181489840b9acf193e224d125d0776Greg Clayton FileSpec resolved_exe_file (exe_file); 131b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 132b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // If we have "ls" as the exe_file, resolve the executable loation based on 133b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // the current path variables 134b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // TODO: resolve bare executables in the Platform SDK 135b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// if (!resolved_exe_file.Exists()) 136b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// resolved_exe_file.ResolveExecutableLocation (); 137b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 138b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // Resolve any executable within a bundle on MacOSX 139b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // TODO: verify that this handles shallow bundles, if not then implement one ourselves 140b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Host::ResolveExecutableInBundle (resolved_exe_file); 141b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 142b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (resolved_exe_file.Exists()) 143b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 144b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (exe_arch.IsValid()) 145b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 146b1888f24fa181489840b9acf193e224d125d0776Greg Clayton error = ModuleList::GetSharedModule (resolved_exe_file, 147b1888f24fa181489840b9acf193e224d125d0776Greg Clayton exe_arch, 148b1888f24fa181489840b9acf193e224d125d0776Greg Clayton NULL, 149b1888f24fa181489840b9acf193e224d125d0776Greg Clayton NULL, 150b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 0, 151b1888f24fa181489840b9acf193e224d125d0776Greg Clayton exe_module_sp, 1529ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton NULL, 153b1888f24fa181489840b9acf193e224d125d0776Greg Clayton NULL, 154b1888f24fa181489840b9acf193e224d125d0776Greg Clayton NULL); 155b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 15624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (exe_module_sp->GetObjectFile()) 15724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return error; 15824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_module_sp.reset(); 159b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 16024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // No valid architecture was specified or the exact ARM slice wasn't 16124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // found so ask the platform for the architectures that we should be 16224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // using (in the correct order) and see if we can find a match that way 16324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton StreamString arch_names; 16424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ArchSpec platform_arch; 16524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, platform_arch); ++idx) 166b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 16724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error = ModuleList::GetSharedModule (resolved_exe_file, 16824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton platform_arch, 16924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton NULL, 17024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton NULL, 17124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 0, 17224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_module_sp, 1739ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton NULL, 17424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton NULL, 17524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton NULL); 17624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // Did we find an executable using one of the 17724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (error.Success()) 178b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 17924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (exe_module_sp && exe_module_sp->GetObjectFile()) 18024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 18124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton else 18224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorToGenericError(); 183b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 184b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 18524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (idx > 0) 18624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton arch_names.PutCString (", "); 18724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton arch_names.PutCString (platform_arch.GetArchitectureName()); 18824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 18924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 19024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (error.Fail() || !exe_module_sp) 19124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 19224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorStringWithFormat ("'%s%s%s' doesn't contain any '%s' platform architectures: %s", 19324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_file.GetDirectory().AsCString(""), 19424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_file.GetDirectory() ? "/" : "", 19524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton exe_file.GetFilename().AsCString(""), 19624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetShortPluginName(), 19724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton arch_names.GetString().c_str()); 198b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 199b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 200b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 201b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 202b1888f24fa181489840b9acf193e224d125d0776Greg Clayton error.SetErrorStringWithFormat ("'%s%s%s' does not exist", 203b1888f24fa181489840b9acf193e224d125d0776Greg Clayton exe_file.GetDirectory().AsCString(""), 204b1888f24fa181489840b9acf193e224d125d0776Greg Clayton exe_file.GetDirectory() ? "/" : "", 205b1888f24fa181489840b9acf193e224d125d0776Greg Clayton exe_file.GetFilename().AsCString("")); 206b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 207b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 208b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 209b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 210b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 211b1888f24fa181489840b9acf193e224d125d0776Greg Claytonconst char * 212b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetDeviceSupportDirectory() 213b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 214b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (m_device_support_directory.empty()) 215b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 216b1888f24fa181489840b9acf193e224d125d0776Greg Clayton bool developer_dir_path_valid = false; 217b1888f24fa181489840b9acf193e224d125d0776Greg Clayton char developer_dir_path[PATH_MAX]; 218b1888f24fa181489840b9acf193e224d125d0776Greg Clayton FileSpec temp_file_spec; 219b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (Host::GetLLDBPath (ePathTypeLLDBShlibDir, temp_file_spec)) 220b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 221b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (temp_file_spec.GetPath (developer_dir_path, sizeof(developer_dir_path))) 222b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 223b1888f24fa181489840b9acf193e224d125d0776Greg Clayton char *lib_priv_frameworks = strstr (developer_dir_path, "/Library/PrivateFrameworks/LLDB.framework"); 224b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (lib_priv_frameworks) 225b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 226b1888f24fa181489840b9acf193e224d125d0776Greg Clayton *lib_priv_frameworks = '\0'; 227b1888f24fa181489840b9acf193e224d125d0776Greg Clayton developer_dir_path_valid = true; 228b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 229b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 230b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 231b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 232b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (!developer_dir_path_valid) 233b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 234b1888f24fa181489840b9acf193e224d125d0776Greg Clayton std::string xcode_dir_path; 235b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *xcode_select_prefix_dir = getenv ("XCODE_SELECT_PREFIX_DIR"); 236b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (xcode_select_prefix_dir) 237b1888f24fa181489840b9acf193e224d125d0776Greg Clayton xcode_dir_path.append (xcode_select_prefix_dir); 238b1888f24fa181489840b9acf193e224d125d0776Greg Clayton xcode_dir_path.append ("/usr/share/xcode-select/xcode_dir_path"); 239b1888f24fa181489840b9acf193e224d125d0776Greg Clayton temp_file_spec.SetFile(xcode_dir_path.c_str(), false); 2404b23ab33d221eaadf40f65a5b5fe3ca4475ff761Greg Clayton size_t bytes_read = temp_file_spec.ReadFileContents(0, developer_dir_path, sizeof(developer_dir_path), NULL); 241b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (bytes_read > 0) 242b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 243b1888f24fa181489840b9acf193e224d125d0776Greg Clayton developer_dir_path[bytes_read] = '\0'; 244b1888f24fa181489840b9acf193e224d125d0776Greg Clayton while (developer_dir_path[bytes_read-1] == '\r' || 245b1888f24fa181489840b9acf193e224d125d0776Greg Clayton developer_dir_path[bytes_read-1] == '\n') 246b1888f24fa181489840b9acf193e224d125d0776Greg Clayton developer_dir_path[--bytes_read] = '\0'; 247b1888f24fa181489840b9acf193e224d125d0776Greg Clayton developer_dir_path_valid = true; 248b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 249b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 250b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 251b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (developer_dir_path_valid) 252b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 253b1888f24fa181489840b9acf193e224d125d0776Greg Clayton temp_file_spec.SetFile (developer_dir_path, false); 254b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (temp_file_spec.Exists()) 255b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 256b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory.assign (developer_dir_path); 257b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return m_device_support_directory.c_str(); 258b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 259b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 260b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // Assign a single NULL character so we know we tried to find the device 261b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // support directory and we don't keep trying to find it over and over. 262b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory.assign (1, '\0'); 263b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 264b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 265b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // We should have put a single NULL character into m_device_support_directory 266b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // or it should have a valid path if the code gets here 267b1888f24fa181489840b9acf193e224d125d0776Greg Clayton assert (m_device_support_directory.empty() == false); 268b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (m_device_support_directory[0]) 269b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return m_device_support_directory.c_str(); 270b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return NULL; 271b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 272b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 273b1888f24fa181489840b9acf193e224d125d0776Greg Claytonconst char * 274b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetDeviceSupportDirectoryForOSVersion() 275b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 276604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton if (m_sdk_sysroot) 277604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton return m_sdk_sysroot.GetCString(); 278604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton 279b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (m_device_support_directory_for_os_version.empty()) 280b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 281b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *device_support_dir = GetDeviceSupportDirectory(); 282b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const bool resolve_path = true; 283b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (device_support_dir) 284b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 285b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory_for_os_version.assign (device_support_dir); 286b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory_for_os_version.append ("/Platforms/iPhoneOS.platform/DeviceSupport"); 287b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 288b1888f24fa181489840b9acf193e224d125d0776Greg Clayton uint32_t major = 0; 289b1888f24fa181489840b9acf193e224d125d0776Greg Clayton uint32_t minor = 0; 290b1888f24fa181489840b9acf193e224d125d0776Greg Clayton uint32_t update = 0; 291b1888f24fa181489840b9acf193e224d125d0776Greg Clayton FileSpec file_spec; 292b1888f24fa181489840b9acf193e224d125d0776Greg Clayton char resolved_path[PATH_MAX]; 293b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (GetOSVersion(major, minor, update)) 294b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 295b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (major != UINT32_MAX && minor != UINT32_MAX && update != UINT32_MAX) 296b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 297b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ::snprintf (resolved_path, 298b1888f24fa181489840b9acf193e224d125d0776Greg Clayton sizeof(resolved_path), 299b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "%s/%i.%i.%i", 300b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory_for_os_version.c_str(), 301b1888f24fa181489840b9acf193e224d125d0776Greg Clayton major, 302b1888f24fa181489840b9acf193e224d125d0776Greg Clayton minor, 303b1888f24fa181489840b9acf193e224d125d0776Greg Clayton update); 304b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 305b1888f24fa181489840b9acf193e224d125d0776Greg Clayton file_spec.SetFile(resolved_path, resolve_path); 306b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (file_spec.Exists() && file_spec.GetPath(resolved_path, sizeof(resolved_path))) 307b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 308b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory_for_os_version.assign (resolved_path); 309b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return m_device_support_directory_for_os_version.c_str(); 310b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 311b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 312b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 313b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (major != UINT32_MAX && minor != UINT32_MAX) 314b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 315b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ::snprintf (resolved_path, 316b1888f24fa181489840b9acf193e224d125d0776Greg Clayton sizeof(resolved_path), 317b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "%s/%i.%i", 318b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory_for_os_version.c_str(), 319b1888f24fa181489840b9acf193e224d125d0776Greg Clayton major, 3204fdf7602bedd8be648f3c549074cf13d90a05f03Greg Clayton minor); 321b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 322b1888f24fa181489840b9acf193e224d125d0776Greg Clayton file_spec.SetFile(resolved_path, resolve_path); 323b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (file_spec.Exists() && file_spec.GetPath(resolved_path, sizeof(resolved_path))) 324b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 325b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory_for_os_version.assign (resolved_path); 326b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return m_device_support_directory_for_os_version.c_str(); 327b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 328b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 329b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 330b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 331b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 332b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // Use the default as we have no OS version selected 333b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory_for_os_version.append ("/Latest"); 334b1888f24fa181489840b9acf193e224d125d0776Greg Clayton file_spec.SetFile(m_device_support_directory_for_os_version.c_str(), resolve_path); 335b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 336b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (file_spec.Exists() && file_spec.GetPath(resolved_path, sizeof(resolved_path))) 337b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 338b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (m_major_os_version == UINT32_MAX) 339b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 340b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *resolved_latest_dirname = file_spec.GetFilename().GetCString(); 341b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *pos = Args::StringToVersion (resolved_latest_dirname, 342b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_major_os_version, 343b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_minor_os_version, 344b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_update_os_version); 345b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 346b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (m_build_update.empty() && pos[0] == ' ' && pos[1] == '(') 347b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 348b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *end_paren = strchr (pos + 2, ')'); 349b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_build_update.assign (pos + 2, end_paren); 350b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 351b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 352b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory_for_os_version.assign (resolved_path); 353b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return m_device_support_directory_for_os_version.c_str(); 354b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 355b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 356b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 357b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // Assign a single NULL character so we know we tried to find the device 358b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // support directory and we don't keep trying to find it over and over. 359b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_device_support_directory_for_os_version.assign (1, '\0'); 360b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 361b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // We should have put a single NULL character into m_device_support_directory_for_os_version 362b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // or it should have a valid path if the code gets here 363b1888f24fa181489840b9acf193e224d125d0776Greg Clayton assert (m_device_support_directory_for_os_version.empty() == false); 364b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (m_device_support_directory_for_os_version[0]) 365b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return m_device_support_directory_for_os_version.c_str(); 366b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return NULL; 367b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 368b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 369b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonError 370b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetFile (const FileSpec &platform_file, 371cb8977d726be451df9978a74088435667fa37da2Greg Clayton const UUID *uuid_ptr, 372b1888f24fa181489840b9acf193e224d125d0776Greg Clayton FileSpec &local_file) 373b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 374b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Error error; 375b1888f24fa181489840b9acf193e224d125d0776Greg Clayton char platform_file_path[PATH_MAX]; 376b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (platform_file.GetPath(platform_file_path, sizeof(platform_file_path))) 377b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 378b1888f24fa181489840b9acf193e224d125d0776Greg Clayton char resolved_path[PATH_MAX]; 379b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 380b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char * os_version_dir = GetDeviceSupportDirectoryForOSVersion(); 381b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (os_version_dir) 382b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 383b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ::snprintf (resolved_path, 384b1888f24fa181489840b9acf193e224d125d0776Greg Clayton sizeof(resolved_path), 385604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton "%s/%s", 386604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton os_version_dir, 387604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton platform_file_path); 388604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton 389604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton local_file.SetFile(resolved_path, true); 390604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton if (local_file.Exists()) 391604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton return error; 392604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton 393604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton ::snprintf (resolved_path, 394604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton sizeof(resolved_path), 395b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "%s/Symbols.Internal/%s", 396b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_dir, 397b1888f24fa181489840b9acf193e224d125d0776Greg Clayton platform_file_path); 398b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 399b1888f24fa181489840b9acf193e224d125d0776Greg Clayton local_file.SetFile(resolved_path, true); 400b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (local_file.Exists()) 401b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 402b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ::snprintf (resolved_path, 403b1888f24fa181489840b9acf193e224d125d0776Greg Clayton sizeof(resolved_path), 404b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "%s/Symbols/%s", 405b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_dir, 406b1888f24fa181489840b9acf193e224d125d0776Greg Clayton platform_file_path); 407b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 408b1888f24fa181489840b9acf193e224d125d0776Greg Clayton local_file.SetFile(resolved_path, true); 409b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (local_file.Exists()) 410b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 411b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 412b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 413b1888f24fa181489840b9acf193e224d125d0776Greg Clayton local_file = platform_file; 414b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (local_file.Exists()) 415b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 416b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 417b1888f24fa181489840b9acf193e224d125d0776Greg Clayton error.SetErrorStringWithFormat ("unable to locate a platform file for '%s' in platform '%s'", 418b1888f24fa181489840b9acf193e224d125d0776Greg Clayton platform_file_path, 419b1888f24fa181489840b9acf193e224d125d0776Greg Clayton GetPluginName()); 420b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 421b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 422b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 423b1888f24fa181489840b9acf193e224d125d0776Greg Clayton error.SetErrorString ("invalid platform file argument"); 424b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 425b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 426b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 427b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 42824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg ClaytonError 42924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg ClaytonPlatformRemoteiOS::GetSharedModule (const FileSpec &platform_file, 43024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton const ArchSpec &arch, 43124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton const UUID *uuid_ptr, 43224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton const ConstString *object_name_ptr, 43324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton off_t object_offset, 43424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ModuleSP &module_sp, 4359ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton const FileSpecList *module_search_paths_ptr, 43624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ModuleSP *old_module_sp_ptr, 43724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool *did_create_ptr) 43824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{ 43924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // For iOS, the SDK files are all cached locally on the host 44024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // system. So first we ask for the file in the cached SDK, 44124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // then we attempt to get a shared module for the right architecture 44224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // with the right UUID. 44324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Error error; 44424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton FileSpec local_file; 44524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error = GetFile (platform_file, uuid_ptr, local_file); 44624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (error.Success()) 44724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 4489ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton error = ResolveExecutable (local_file, arch, module_sp, module_search_paths_ptr); 4498c1d7203f726e3a62b832dbeeaf0ae76f9f65222Greg Clayton } 4508c1d7203f726e3a62b832dbeeaf0ae76f9f65222Greg Clayton else 4518c1d7203f726e3a62b832dbeeaf0ae76f9f65222Greg Clayton { 45224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton const bool always_create = false; 4538c1d7203f726e3a62b832dbeeaf0ae76f9f65222Greg Clayton error = ModuleList::GetSharedModule (platform_file, 45424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton arch, 45524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton uuid_ptr, 45624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton object_name_ptr, 45724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton object_offset, 45824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton module_sp, 4599ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton module_search_paths_ptr, 46024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton old_module_sp_ptr, 46124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton did_create_ptr, 46224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton always_create); 4638c1d7203f726e3a62b832dbeeaf0ae76f9f65222Greg Clayton 46424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 46524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (module_sp) 46624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton module_sp->SetPlatformFileSpec(platform_file); 46724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 46824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return error; 46924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton} 47024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 47124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 472b1888f24fa181489840b9acf193e224d125d0776Greg Claytonuint32_t 473b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg ClaytonPlatformRemoteiOS::FindProcesses (const ProcessInstanceInfoMatch &match_info, 474b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoList &process_infos) 475b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 476b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // TODO: if connected, send a packet to get the remote process infos by name 477b1888f24fa181489840b9acf193e224d125d0776Greg Clayton process_infos.Clear(); 478b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return 0; 479b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 480b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 481b1888f24fa181489840b9acf193e224d125d0776Greg Claytonbool 482b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg ClaytonPlatformRemoteiOS::GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo &process_info) 483b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 484b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // TODO: if connected, send a packet to get the remote process info 485b1888f24fa181489840b9acf193e224d125d0776Greg Clayton process_info.Clear(); 486b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return false; 487b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 488b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 489b1888f24fa181489840b9acf193e224d125d0776Greg Claytonbool 490b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonPlatformRemoteiOS::GetSupportedArchitectureAtIndex (uint32_t idx, ArchSpec &arch) 491b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 4929d3c618680dd8bc8f250d700aac7f78eecbbf69bJason Molenda return ARMGetSupportedArchitectureAtIndex (idx, arch); 493b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 494