diff options
Diffstat (limited to 'lldb/tools/debugserver/source/DNBArch.cpp')
| -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; +} + | 

