summaryrefslogtreecommitdiffstats
path: root/lldb/tools/debugserver
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2010-12-01 22:45:40 +0000
committerGreg Clayton <gclayton@apple.com>2010-12-01 22:45:40 +0000
commit3c14438fe87660578c39533e388f7938fb2b8625 (patch)
treeca5f7688456d0590539f094e933af4e2e3ae8acb /lldb/tools/debugserver
parent7cfe7679aa9741900a56cd84ef4453067d3a0560 (diff)
downloadbcm5719-llvm-3c14438fe87660578c39533e388f7938fb2b8625.tar.gz
bcm5719-llvm-3c14438fe87660578c39533e388f7938fb2b8625.zip
Fixed 32 bit debugging after recent architecture changes to debugserver.
llvm-svn: 120618
Diffstat (limited to 'lldb/tools/debugserver')
-rw-r--r--lldb/tools/debugserver/source/DNB.cpp15
-rw-r--r--lldb/tools/debugserver/source/DNB.h2
-rw-r--r--lldb/tools/debugserver/source/DNBArch.cpp24
-rw-r--r--lldb/tools/debugserver/source/DNBArch.h7
-rw-r--r--lldb/tools/debugserver/source/MacOSX/MachProcess.cpp3
-rw-r--r--lldb/tools/debugserver/source/MacOSX/MachProcess.h1
-rw-r--r--lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp4
-rw-r--r--lldb/tools/debugserver/source/debugserver.cpp6
8 files changed, 47 insertions, 15 deletions
diff --git a/lldb/tools/debugserver/source/DNB.cpp b/lldb/tools/debugserver/source/DNB.cpp
index 17a17d32f0d..516e0cd8c8e 100644
--- a/lldb/tools/debugserver/source/DNB.cpp
+++ b/lldb/tools/debugserver/source/DNB.cpp
@@ -2019,3 +2019,18 @@ void
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 921bbbfc23d..38a8a07131a 100644
--- a/lldb/tools/debugserver/source/DNB.h
+++ b/lldb/tools/debugserver/source/DNB.h
@@ -28,6 +28,8 @@ typedef bool (*DNBShouldCancelCallback) (void *);
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 0a6495018a4..11743916b13 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 @@ GetArchInfo ()
return NULL;
}
-void
-DNBArchProtocol::SetDefaultArchitecture (uint32_t cpu_type)
+
+uint32_t
+DNBArchProtocol::GetArchitecture ()
+{
+ return g_current_cpu_type;
+}
+
+bool
+DNBArchProtocol::SetArchitecture (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());
+ 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 a0f18cd39c8..b27877120b8 100644
--- a/lldb/tools/debugserver/source/DNBArch.h
+++ b/lldb/tools/debugserver/source/DNBArch.h
@@ -52,9 +52,12 @@ public:
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 3ca7fe8abeb..de3ee45c24f 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp
@@ -115,7 +115,6 @@ MachProcess::MachProcess() :
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 @@ MachProcess::LaunchForDebug
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 cff08bb4d68..9b6d51fc542 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachProcess.h
+++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.h
@@ -254,7 +254,6 @@ private:
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 7a5e9bb8588..7aaf64258ba 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp
@@ -230,9 +230,9 @@ MachThreadList::UpdateThreadList(MachProcess *process, bool update)
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 e8c28cc5eae..f7696acfb99 100644
--- a/lldb/tools/debugserver/source/debugserver.cpp
+++ b/lldb/tools/debugserver/source/debugserver.cpp
@@ -886,6 +886,10 @@ main (int argc, char *argv[])
arch_name.assign ("arm");
#endif
}
+ else
+ {
+ DNBSetArchitecture (arch_name.c_str());
+ }
if (arch_name.empty())
{
@@ -897,6 +901,8 @@ main (int argc, char *argv[])
argv += optind;
g_remoteSP.reset (new RNBRemote (use_native_registers, arch_name.c_str()));
+
+
RNBRemote *remote = g_remoteSP.get();
if (remote == NULL)
OpenPOWER on IntegriCloud