From d4cee56e995af813e0374baaacb746eb270718b2 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Thu, 25 Feb 2010 17:52:34 +0100
Subject: [PATCH] Symbian/Linux: Fix debugger

- Switch correctly on GnuPoc-toolchains
- Do not lock up on Gdb start.
---
 src/plugins/debugger/debuggermanager.cpp   | 2 ++
 src/plugins/debugger/gdb/gdbengine.cpp     | 4 ++++
 src/plugins/debugger/gdb/trkgdbadapter.cpp | 7 +++++++
 src/plugins/debugger/gdb/trkgdbadapter.h   | 1 +
 4 files changed, 14 insertions(+)

diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index f2e2dacd6a6..e17d4a98858 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -945,6 +945,8 @@ static IDebuggerEngine *debuggerEngineForToolChain(ProjectExplorer::ToolChain::T
     case ProjectExplorer::ToolChain::GCCE:
     case ProjectExplorer::ToolChain::RVCT_ARMV5:
     case ProjectExplorer::ToolChain::RVCT_ARMV6:
+    case ProjectExplorer::ToolChain::RVCT_ARMV5_GNUPOC:
+    case ProjectExplorer::ToolChain::GCCE_GNUPOC:
         rc = gdbEngine;
         break;
     case ProjectExplorer::ToolChain::OTHER:
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 4f186740647..06f218fd334 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -1645,6 +1645,8 @@ bool GdbEngine::checkConfiguration(int toolChain, QString *errorMessage, QString
     case ProjectExplorer::ToolChain::GCCE:
     case ProjectExplorer::ToolChain::RVCT_ARMV5:
     case ProjectExplorer::ToolChain::RVCT_ARMV6:
+    case ProjectExplorer::ToolChain::RVCT_ARMV5_GNUPOC:
+    case ProjectExplorer::ToolChain::GCCE_GNUPOC:
         if (!m_trkOptions->check(errorMessage)) {
             if (settingsPage)
                 *settingsPage = TrkOptionsPage::settingsId();
@@ -1663,6 +1665,8 @@ AbstractGdbAdapter *GdbEngine::createAdapter(const DebuggerStartParametersPtr &s
     case ProjectExplorer::ToolChain::GCCE:
     case ProjectExplorer::ToolChain::RVCT_ARMV5:
     case ProjectExplorer::ToolChain::RVCT_ARMV6:
+    case ProjectExplorer::ToolChain::RVCT_ARMV5_GNUPOC:
+    case ProjectExplorer::ToolChain::GCCE_GNUPOC:
         return new TrkGdbAdapter(this, m_trkOptions);
     default:
         break;
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 063ad2afab3..8f81f9071d3 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -1671,6 +1671,13 @@ void TrkGdbAdapter::handleTrkVersionsStartGdb(const TrkResult &result)
              << '.' << int(result.data.at(4));
     }
     logMessage(logMsg);
+    // As we are called from the TrkDevice handler, do not lock up when shutting
+    // down the device in case of gdb launch errors.
+    QTimer::singleShot(0, this, SLOT(slotStartGdb()));
+}
+
+void TrkGdbAdapter::slotStartGdb()
+{
     QStringList gdbArgs;
     gdbArgs.append(QLatin1String("--nx")); // Do not read .gdbinit file
     if (!m_engine->startGdb(gdbArgs, m_options->gdb, TrkOptionsPage::settingsId())) {
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.h b/src/plugins/debugger/gdb/trkgdbadapter.h
index 1bfe0b91170..acf662fbc2d 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.h
+++ b/src/plugins/debugger/gdb/trkgdbadapter.h
@@ -213,6 +213,7 @@ private:
     void handleStop(const TrkResult &result);
     void handleSupportMask(const TrkResult &result);
     void handleTrkVersionsStartGdb(const TrkResult &result);
+    Q_SLOT void slotStartGdb();
     void handleDisconnect(const TrkResult &result);
     void handleDeleteProcess(const TrkResult &result);
     void handleDeleteProcess2(const TrkResult &result);
-- 
GitLab