diff options
Diffstat (limited to 'lldb/tools/debugserver/source')
| -rw-r--r-- | lldb/tools/debugserver/source/DNBArch.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/lldb/tools/debugserver/source/DNBArch.cpp b/lldb/tools/debugserver/source/DNBArch.cpp new file mode 100644 index 00000000000..0a6495018a4 --- /dev/null +++ b/lldb/tools/debugserver/source/DNBArch.cpp @@ -0,0 +1,89 @@ +//===-- 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; + +#if defined (__i386__) +uint32_t g_current_cpu_type = CPU_TYPE_I386; +#elif defined (__x86_64__) +uint32_t g_current_cpu_type = CPU_TYPE_X86_64; +#elif defined (__arm__) +uint32_t g_current_cpu_type = CPU_TYPE_ARM; +#else +uint32_t g_current_cpu_type = 0; +#endif + +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; +} + +void +DNBArchProtocol::SetDefaultArchitecture (uint32_t cpu_type) +{ + DNBLogThreadedIf (LOG_PROCESS, "DNBArchProtocol::SetDefaultArchitecture (cpu_type=0x%8.8x)", cpu_type); + g_current_cpu_type = cpu_type; + assert (g_arch_plugins.find(g_current_cpu_type) != g_arch_plugins.end()); +} + +void +DNBArchProtocol::RegisterArchPlugin (const DNBArchPluginInfo &arch_info) +{ + if (arch_info.cpu_type) + g_arch_plugins[arch_info.cpu_type] = arch_info; +} + +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 * const +DNBArchProtocol::GetBreakpointOpcode (nub_size_t byte_size) +{ + const DNBArchPluginInfo *arch_info = GetArchInfo (); + if (arch_info) + return arch_info->GetBreakpointOpcode (byte_size); + return NULL; +} + |

