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);