summaryrefslogtreecommitdiff
path: root/tools/debugserver/source/DNBArch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/debugserver/source/DNBArch.cpp')
-rw-r--r--tools/debugserver/source/DNBArch.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/tools/debugserver/source/DNBArch.cpp b/tools/debugserver/source/DNBArch.cpp
new file mode 100644
index 0000000000000..f17a719e92ecd
--- /dev/null
+++ b/tools/debugserver/source/DNBArch.cpp
@@ -0,0 +1,97 @@
+//===-- DNBArch.cpp ---------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Created by Greg Clayton on 6/24/07.
+//
+//===----------------------------------------------------------------------===//
+
+#include "DNBArch.h"
+#include <assert.h>
+#include <mach/mach.h>
+
+#include <map>
+
+#include "DNBLog.h"
+
+typedef std::map<uint32_t, DNBArchPluginInfo> CPUPluginInfoMap;
+
+static uint32_t g_current_cpu_type = 0;
+CPUPluginInfoMap g_arch_plugins;
+
+
+static const DNBArchPluginInfo *
+GetArchInfo ()
+{
+ CPUPluginInfoMap::const_iterator pos = g_arch_plugins.find(g_current_cpu_type);
+ if (pos != g_arch_plugins.end())
+ return &pos->second;
+ return NULL;
+}
+
+
+uint32_t
+DNBArchProtocol::GetArchitecture ()
+{
+ return g_current_cpu_type;
+}
+
+bool
+DNBArchProtocol::SetArchitecture (uint32_t cpu_type)
+{
+ g_current_cpu_type = cpu_type;
+ bool result = g_arch_plugins.find(g_current_cpu_type) != g_arch_plugins.end();
+ DNBLogThreadedIf (LOG_PROCESS, "DNBArchProtocol::SetDefaultArchitecture (cpu_type=0x%8.8x) => %i", cpu_type, result);
+ return result;
+}
+
+void
+DNBArchProtocol::RegisterArchPlugin (const DNBArchPluginInfo &arch_info)
+{
+ if (arch_info.cpu_type)
+ g_arch_plugins[arch_info.cpu_type] = arch_info;
+}
+
+uint32_t
+DNBArchProtocol::GetRegisterCPUType ()
+{
+ const DNBArchPluginInfo *arch_info = GetArchInfo ();
+ if (arch_info)
+ return arch_info->cpu_type;
+ return 0;
+}
+
+const DNBRegisterSetInfo *
+DNBArchProtocol::GetRegisterSetInfo (nub_size_t *num_reg_sets)
+{
+ const DNBArchPluginInfo *arch_info = GetArchInfo ();
+ if (arch_info)
+ return arch_info->GetRegisterSetInfo (num_reg_sets);
+ *num_reg_sets = 0;
+ return NULL;
+}
+
+DNBArchProtocol *
+DNBArchProtocol::Create (MachThread *thread)
+{
+ const DNBArchPluginInfo *arch_info = GetArchInfo ();
+ if (arch_info)
+ return arch_info->Create (thread);
+ return NULL;
+
+}
+
+const uint8_t *
+DNBArchProtocol::GetBreakpointOpcode (nub_size_t byte_size)
+{
+ const DNBArchPluginInfo *arch_info = GetArchInfo ();
+ if (arch_info)
+ return arch_info->GetBreakpointOpcode (byte_size);
+ return NULL;
+}
+