summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
commit061da546b983eb767bad15e67af1174fb0bcf31c (patch)
tree83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-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.cpp154
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";
+}