Fixed 32 bit debugging after recent architecture changes to debugserver.
llvm-svn: 120618
diff --git a/lldb/tools/debugserver/source/DNB.cpp b/lldb/tools/debugserver/source/DNB.cpp
index 17a17d3..516e0cd 100644
--- a/lldb/tools/debugserver/source/DNB.cpp
+++ b/lldb/tools/debugserver/source/DNB.cpp
@@ -2019,3 +2019,18 @@
DNBTerminate()
{
}
+
+nub_bool_t
+DNBSetArchitecture (const char *arch)
+{
+ if (arch && arch[0])
+ {
+ if (strcasecmp (arch, "i386") == 0)
+ return DNBArchProtocol::SetArchitecture (CPU_TYPE_I386);
+ else if (strcasecmp (arch, "x86_64") == 0)
+ return DNBArchProtocol::SetArchitecture (CPU_TYPE_X86_64);
+ else if (strstr (arch, "arm") == arch)
+ return DNBArchProtocol::SetArchitecture (CPU_TYPE_ARM);
+ }
+ return false;
+}
diff --git a/lldb/tools/debugserver/source/DNB.h b/lldb/tools/debugserver/source/DNB.h
index 921bbbf..38a8a07 100644
--- a/lldb/tools/debugserver/source/DNB.h
+++ b/lldb/tools/debugserver/source/DNB.h
@@ -28,6 +28,8 @@
void DNBInitialize ();
void DNBTerminate ();
+nub_bool_t DNBSetArchitecture (const char *arch);
+
//----------------------------------------------------------------------
// Process control
//----------------------------------------------------------------------
diff --git a/lldb/tools/debugserver/source/DNBArch.cpp b/lldb/tools/debugserver/source/DNBArch.cpp
index 0a64950..1174391 100644
--- a/lldb/tools/debugserver/source/DNBArch.cpp
+++ b/lldb/tools/debugserver/source/DNBArch.cpp
@@ -22,13 +22,13 @@
typedef std::map<uint32_t, DNBArchPluginInfo> CPUPluginInfoMap;
#if defined (__i386__)
-uint32_t g_current_cpu_type = CPU_TYPE_I386;
+static uint32_t g_current_cpu_type = CPU_TYPE_I386;
#elif defined (__x86_64__)
-uint32_t g_current_cpu_type = CPU_TYPE_X86_64;
+static uint32_t g_current_cpu_type = CPU_TYPE_X86_64;
#elif defined (__arm__)
-uint32_t g_current_cpu_type = CPU_TYPE_ARM;
+static uint32_t g_current_cpu_type = CPU_TYPE_ARM;
#else
-uint32_t g_current_cpu_type = 0;
+static uint32_t g_current_cpu_type = 0;
#endif
CPUPluginInfoMap g_arch_plugins;
@@ -43,12 +43,20 @@
return NULL;
}
-void
-DNBArchProtocol::SetDefaultArchitecture (uint32_t cpu_type)
+
+uint32_t
+DNBArchProtocol::GetArchitecture ()
{
- DNBLogThreadedIf (LOG_PROCESS, "DNBArchProtocol::SetDefaultArchitecture (cpu_type=0x%8.8x)", cpu_type);
+ return g_current_cpu_type;
+}
+
+bool
+DNBArchProtocol::SetArchitecture (uint32_t cpu_type)
+{
g_current_cpu_type = cpu_type;
- assert (g_arch_plugins.find(g_current_cpu_type) != g_arch_plugins.end());
+ 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
diff --git a/lldb/tools/debugserver/source/DNBArch.h b/lldb/tools/debugserver/source/DNBArch.h
index a0f18cd..b278771 100644
--- a/lldb/tools/debugserver/source/DNBArch.h
+++ b/lldb/tools/debugserver/source/DNBArch.h
@@ -52,9 +52,12 @@
static void
RegisterArchPlugin (const DNBArchPluginInfo &arch_info);
- static void
- SetDefaultArchitecture (uint32_t cpu_type);
+ static uint32_t
+ GetArchitecture ();
+ static bool
+ SetArchitecture (uint32_t cpu_type);
+
virtual bool GetRegisterValue (int set, int reg, DNBRegisterValue *value) = 0;
virtual bool SetRegisterValue (int set, int reg, const DNBRegisterValue *value) = 0;
virtual nub_size_t GetRegisterContext (void *buf, nub_size_t buf_len) = 0;
diff --git a/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp b/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp
index 3ca7fe8..de3ee45 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp
@@ -115,7 +115,6 @@
m_image_infos_baton(NULL)
{
DNBLogThreadedIf(LOG_PROCESS | LOG_VERBOSE, "%s", __PRETTY_FUNCTION__);
- bzero(&m_arch_plugin_info, sizeof(m_arch_plugin_info));
}
MachProcess::~MachProcess()
@@ -1517,7 +1516,7 @@
case eLaunchFlavorPosixSpawn:
m_pid = MachProcess::PosixSpawnChildForPTraceDebugging (path,
- m_arch_plugin_info.cpu_type,
+ DNBArchProtocol::GetArchitecture (),
argv,
envp,
stdio_path,
diff --git a/lldb/tools/debugserver/source/MacOSX/MachProcess.h b/lldb/tools/debugserver/source/MacOSX/MachProcess.h
index cff08bb..9b6d51f 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachProcess.h
+++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.h
@@ -254,7 +254,6 @@
DNBCallbackCopyExecutableImageInfos
m_image_infos_callback;
void * m_image_infos_baton;
- DNBArchPluginInfo m_arch_plugin_info;
};
diff --git a/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp b/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp
index 7a5e9bb..7aaf642 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp
@@ -230,9 +230,9 @@
is_64_bit = true;
}
if (is_64_bit)
- DNBArchProtocol::SetDefaultArchitecture(CPU_TYPE_X86_64);
+ DNBArchProtocol::SetArchitecture(CPU_TYPE_X86_64);
else
- DNBArchProtocol::SetDefaultArchitecture(CPU_TYPE_I386);
+ DNBArchProtocol::SetArchitecture(CPU_TYPE_I386);
}
#endif
diff --git a/lldb/tools/debugserver/source/debugserver.cpp b/lldb/tools/debugserver/source/debugserver.cpp
index e8c28cc..f7696ac 100644
--- a/lldb/tools/debugserver/source/debugserver.cpp
+++ b/lldb/tools/debugserver/source/debugserver.cpp
@@ -886,6 +886,10 @@
arch_name.assign ("arm");
#endif
}
+ else
+ {
+ DNBSetArchitecture (arch_name.c_str());
+ }
if (arch_name.empty())
{
@@ -897,6 +901,8 @@
argv += optind;
g_remoteSP.reset (new RNBRemote (use_native_registers, arch_name.c_str()));
+
+
RNBRemote *remote = g_remoteSP.get();
if (remote == NULL)