//===-- PlatformMacOSX.cpp --------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "PlatformMacOSX.h" // C Includes #include // C++ Includes // Other libraries and framework includes // Project includes #include "lldb/Core/Error.h" #include "lldb/Breakpoint/BreakpointLocation.h" #include "lldb/Core/Module.h" #include "lldb/Core/ModuleList.h" #include "lldb/Core/PluginManager.h" #include "lldb/Core/StreamString.h" #include "lldb/Host/FileSpec.h" #include "lldb/Host/Host.h" #include "lldb/Target/Process.h" #include "lldb/Target/Target.h" using namespace lldb; using namespace lldb_private; static uint32_t g_initialize_count = 0; void PlatformMacOSX::Initialize () { if (g_initialize_count++ == 0) { #if defined (__APPLE__) PlatformSP default_platform_sp (new PlatformMacOSX(true)); default_platform_sp->SetSystemArchitecture (Host::GetArchitecture()); Platform::SetDefaultPlatform (default_platform_sp); #endif PluginManager::RegisterPlugin (PlatformMacOSX::GetShortPluginNameStatic(false), PlatformMacOSX::GetDescriptionStatic(false), PlatformMacOSX::CreateInstance); } } void PlatformMacOSX::Terminate () { if (g_initialize_count > 0) { if (--g_initialize_count == 0) { PluginManager::UnregisterPlugin (PlatformMacOSX::CreateInstance); } } } Platform* PlatformMacOSX::CreateInstance () { // The only time we create an instance is when we are creating a remote // macosx platform const bool is_host = false; return new PlatformMacOSX (is_host); } const char * PlatformMacOSX::GetPluginNameStatic () { return "PlatformMacOSX"; } const char * PlatformMacOSX::GetShortPluginNameStatic (bool is_host) { if (is_host) return Platform::GetHostPlatformName (); else return "remote-macosx"; } const char * PlatformMacOSX::GetDescriptionStatic (bool is_host) { if (is_host) return "Local Mac OS X user platform plug-in."; else return "Remote Mac OS X user platform plug-in."; } //------------------------------------------------------------------ /// Default Constructor //------------------------------------------------------------------ PlatformMacOSX::PlatformMacOSX (bool is_host) : PlatformDarwin (is_host) { } //------------------------------------------------------------------ /// Destructor. /// /// The destructor is virtual since this class is designed to be /// inherited from by the plug-in instance. //------------------------------------------------------------------ PlatformMacOSX::~PlatformMacOSX() { } Error PlatformMacOSX::GetFile (const FileSpec &platform_file, const UUID *uuid_ptr, FileSpec &local_file) { if (IsRemote()) { if (m_remote_platform_sp) return m_remote_platform_sp->GetFile (platform_file, uuid_ptr, local_file); } // Default to the local case local_file = platform_file; return Error(); } bool PlatformMacOSX::GetSupportedArchitectureAtIndex (uint32_t idx, ArchSpec &arch) { #if defined (__arm__) return ARMGetSupportedArchitectureAtIndex (idx, arch); #else return x86GetSupportedArchitectureAtIndex (idx, arch); #endif }