diff options
author | 2020-08-03 14:33:06 +0000 | |
---|---|---|
committer | 2020-08-03 14:33:06 +0000 | |
commit | 061da546b983eb767bad15e67af1174fb0bcf31c (patch) | |
tree | 83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip |
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom
tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp')
-rw-r--r-- | gnu/llvm/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp b/gnu/llvm/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp new file mode 100644 index 00000000000..81d9fcfe83c --- /dev/null +++ b/gnu/llvm/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp @@ -0,0 +1,154 @@ +//===-- PlatformRemoteiOS.cpp -----------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "PlatformRemoteiOS.h" + +#include "lldb/Breakpoint/BreakpointLocation.h" +#include "lldb/Core/Module.h" +#include "lldb/Core/ModuleList.h" +#include "lldb/Core/ModuleSpec.h" +#include "lldb/Core/PluginManager.h" +#include "lldb/Host/Host.h" +#include "lldb/Target/Process.h" +#include "lldb/Target/Target.h" +#include "lldb/Utility/ArchSpec.h" +#include "lldb/Utility/FileSpec.h" +#include "lldb/Utility/Log.h" +#include "lldb/Utility/Status.h" +#include "lldb/Utility/StreamString.h" + +using namespace lldb; +using namespace lldb_private; + +// Static Variables +static uint32_t g_initialize_count = 0; + +// Static Functions +void PlatformRemoteiOS::Initialize() { + PlatformDarwin::Initialize(); + + if (g_initialize_count++ == 0) { + PluginManager::RegisterPlugin(PlatformRemoteiOS::GetPluginNameStatic(), + PlatformRemoteiOS::GetDescriptionStatic(), + PlatformRemoteiOS::CreateInstance); + } +} + +void PlatformRemoteiOS::Terminate() { + if (g_initialize_count > 0) { + if (--g_initialize_count == 0) { + PluginManager::UnregisterPlugin(PlatformRemoteiOS::CreateInstance); + } + } + + PlatformDarwin::Terminate(); +} + +PlatformSP PlatformRemoteiOS::CreateInstance(bool force, const ArchSpec *arch) { + Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PLATFORM)); + if (log) { + const char *arch_name; + if (arch && arch->GetArchitectureName()) + arch_name = arch->GetArchitectureName(); + else + arch_name = "<null>"; + + const char *triple_cstr = + arch ? arch->GetTriple().getTriple().c_str() : "<null>"; + + LLDB_LOGF(log, "PlatformRemoteiOS::%s(force=%s, arch={%s,%s})", + __FUNCTION__, force ? "true" : "false", arch_name, triple_cstr); + } + + bool create = force; + if (!create && arch && arch->IsValid()) { + switch (arch->GetMachine()) { + case llvm::Triple::arm: + case llvm::Triple::aarch64: + case llvm::Triple::thumb: { + const llvm::Triple &triple = arch->GetTriple(); + llvm::Triple::VendorType vendor = triple.getVendor(); + switch (vendor) { + case llvm::Triple::Apple: + create = true; + break; + +#if defined(__APPLE__) + // Only accept "unknown" for the vendor if the host is Apple and + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) + case llvm::Triple::UnknownVendor: + create = !arch->TripleVendorWasSpecified(); + break; + +#endif + default: + break; + } + if (create) { + switch (triple.getOS()) { + case llvm::Triple::Darwin: // Deprecated, but still support Darwin for + // historical reasons + case llvm::Triple::IOS: // This is the right triple value for iOS + // debugging + break; + + default: + create = false; + break; + } + } + } break; + default: + break; + } + } + + if (create) { + if (log) + LLDB_LOGF(log, "PlatformRemoteiOS::%s() creating platform", __FUNCTION__); + + return lldb::PlatformSP(new PlatformRemoteiOS()); + } + + if (log) + LLDB_LOGF(log, "PlatformRemoteiOS::%s() aborting creation of platform", + __FUNCTION__); + + return lldb::PlatformSP(); +} + +lldb_private::ConstString PlatformRemoteiOS::GetPluginNameStatic() { + static ConstString g_name("remote-ios"); + return g_name; +} + +const char *PlatformRemoteiOS::GetDescriptionStatic() { + return "Remote iOS platform plug-in."; +} + +/// Default Constructor +PlatformRemoteiOS::PlatformRemoteiOS() + : PlatformRemoteDarwinDevice() {} + +bool PlatformRemoteiOS::GetSupportedArchitectureAtIndex(uint32_t idx, + ArchSpec &arch) { + return ARMGetSupportedArchitectureAtIndex(idx, arch); +} + + +void PlatformRemoteiOS::GetDeviceSupportDirectoryNames (std::vector<std::string> &dirnames) +{ + dirnames.clear(); + dirnames.push_back("iOS DeviceSupport"); +} + +std::string PlatformRemoteiOS::GetPlatformName () +{ + return "iPhoneOS.platform"; +} |