diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index f2e2dacd6a68bf6f39f698639564d1d4d2f73d74..e17d4a988580a4c5a29a2f5a8224e1a68cbc894d 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 4f18674064742243afa7ef7a919fc3432673ec50..06f218fd334b34a8990d534524d40c85077869b0 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 063ad2afab3b7cbe8b089b88da0a0a697c1f5f98..8f81f9071d3d4e36c7db397b3c3e604492e60160 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 1bfe0b91170f971765678273312f9e0438f06dc1..acf662fbc2d663768ccf78b1e1db91f1610f13b3 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);