Baremetal: Add option to use gdb target "extended-remote"

This target is used by Black Magic Probe hardware gdb server.

Task-number: QTCREATORBUG-14102
Change-Id: Id2fc9646e8fe5b750f69ddf419d133718b3fb9a2
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Denis Vygovskiy
2019-05-08 12:23:07 +10:00
parent 790bcf5ef0
commit e644a5b39a
5 changed files with 31 additions and 2 deletions

View File

@@ -133,6 +133,7 @@ void BareMetalDebugSupport::start()
setCommandsForReset(p->resetCommands()); setCommandsForReset(p->resetCommands());
setRemoteChannel(p->channel()); setRemoteChannel(p->channel());
setUseContinueInsteadOfRun(true); setUseContinueInsteadOfRun(true);
setUseExtendedRemote(p->useExtendedRemote());
DebuggerRunTool::start(); DebuggerRunTool::start();
} }

View File

@@ -31,6 +31,7 @@
#include <coreplugin/variablechooser.h> #include <coreplugin/variablechooser.h>
#include <QCheckBox>
#include <QFormLayout> #include <QFormLayout>
#include <QPlainTextEdit> #include <QPlainTextEdit>
@@ -173,6 +174,9 @@ DefaultGdbServerProviderConfigWidget::DefaultGdbServerProviderConfigWidget(
m_hostWidget = new HostWidget(this); m_hostWidget = new HostWidget(this);
m_mainLayout->addRow(tr("Host:"), m_hostWidget); m_mainLayout->addRow(tr("Host:"), m_hostWidget);
m_useExtendedRemoteCheckBox = new QCheckBox(this);
m_useExtendedRemoteCheckBox->setToolTip("Use GDB target extended-remote");
m_mainLayout->addRow(tr("Extended mode:"), m_useExtendedRemoteCheckBox);
m_initCommandsTextEdit = new QPlainTextEdit(this); m_initCommandsTextEdit = new QPlainTextEdit(this);
m_initCommandsTextEdit->setToolTip(defaultInitCommandsTooltip()); m_initCommandsTextEdit->setToolTip(defaultInitCommandsTooltip());
m_mainLayout->addRow(tr("Init commands:"), m_initCommandsTextEdit); m_mainLayout->addRow(tr("Init commands:"), m_initCommandsTextEdit);
@@ -189,6 +193,8 @@ DefaultGdbServerProviderConfigWidget::DefaultGdbServerProviderConfigWidget(
connect(m_hostWidget, &HostWidget::dataChanged, connect(m_hostWidget, &HostWidget::dataChanged,
this, &GdbServerProviderConfigWidget::dirty); this, &GdbServerProviderConfigWidget::dirty);
connect(m_useExtendedRemoteCheckBox, &QCheckBox::stateChanged,
this, &GdbServerProviderConfigWidget::dirty);
connect(m_initCommandsTextEdit, &QPlainTextEdit::textChanged, connect(m_initCommandsTextEdit, &QPlainTextEdit::textChanged,
this, &GdbServerProviderConfigWidget::dirty); this, &GdbServerProviderConfigWidget::dirty);
connect(m_resetCommandsTextEdit, &QPlainTextEdit::textChanged, connect(m_resetCommandsTextEdit, &QPlainTextEdit::textChanged,
@@ -202,6 +208,7 @@ void DefaultGdbServerProviderConfigWidget::applyImpl()
p->setHost(m_hostWidget->host()); p->setHost(m_hostWidget->host());
p->setPort(m_hostWidget->port()); p->setPort(m_hostWidget->port());
p->setUseExtendedRemote(m_useExtendedRemoteCheckBox->isChecked());
p->setInitCommands(m_initCommandsTextEdit->toPlainText()); p->setInitCommands(m_initCommandsTextEdit->toPlainText());
p->setResetCommands(m_resetCommandsTextEdit->toPlainText()); p->setResetCommands(m_resetCommandsTextEdit->toPlainText());
} }
@@ -219,6 +226,7 @@ void DefaultGdbServerProviderConfigWidget::setFromProvider()
const QSignalBlocker blocker(this); const QSignalBlocker blocker(this);
m_hostWidget->setHost(p->m_host); m_hostWidget->setHost(p->m_host);
m_hostWidget->setPort(p->m_port); m_hostWidget->setPort(p->m_port);
m_useExtendedRemoteCheckBox->setChecked(p->useExtendedRemote());
m_initCommandsTextEdit->setPlainText(p->initCommands()); m_initCommandsTextEdit->setPlainText(p->initCommands());
m_resetCommandsTextEdit->setPlainText(p->resetCommands()); m_resetCommandsTextEdit->setPlainText(p->resetCommands());
} }

View File

@@ -101,6 +101,7 @@ private:
void setFromProvider(); void setFromProvider();
HostWidget *m_hostWidget = nullptr; HostWidget *m_hostWidget = nullptr;
QCheckBox *m_useExtendedRemoteCheckBox = nullptr;
QPlainTextEdit *m_initCommandsTextEdit = nullptr; QPlainTextEdit *m_initCommandsTextEdit = nullptr;
QPlainTextEdit *m_resetCommandsTextEdit = nullptr; QPlainTextEdit *m_resetCommandsTextEdit = nullptr;
}; };

View File

@@ -47,6 +47,7 @@ const char displayNameKeyC[] = "BareMetal.GdbServerProvider.DisplayName";
const char startupModeKeyC[] = "BareMetal.GdbServerProvider.Mode"; const char startupModeKeyC[] = "BareMetal.GdbServerProvider.Mode";
const char initCommandsKeyC[] = "BareMetal.GdbServerProvider.InitCommands"; const char initCommandsKeyC[] = "BareMetal.GdbServerProvider.InitCommands";
const char resetCommandsKeyC[] = "BareMetal.GdbServerProvider.ResetCommands"; const char resetCommandsKeyC[] = "BareMetal.GdbServerProvider.ResetCommands";
const char useExtendedRemoteKeyC[] = "BareMetal.GdbServerProvider.UseExtendedRemote";
static QString createId(const QString &id) static QString createId(const QString &id)
{ {
@@ -67,6 +68,7 @@ GdbServerProvider::GdbServerProvider(const GdbServerProvider &other)
, m_startupMode(other.m_startupMode) , m_startupMode(other.m_startupMode)
, m_initCommands(other.m_initCommands) , m_initCommands(other.m_initCommands)
, m_resetCommands(other.m_resetCommands) , m_resetCommands(other.m_resetCommands)
, m_useExtendedRemote(other.useExtendedRemote())
{ {
m_displayName = QCoreApplication::translate( m_displayName = QCoreApplication::translate(
"BareMetal::GdbServerProvider", "Clone of %1") "BareMetal::GdbServerProvider", "Clone of %1")
@@ -121,6 +123,16 @@ void GdbServerProvider::setInitCommands(const QString &cmds)
m_initCommands = cmds; m_initCommands = cmds;
} }
bool GdbServerProvider::useExtendedRemote() const
{
return m_useExtendedRemote;
}
void GdbServerProvider::setUseExtendedRemote(bool useExtendedRemote)
{
m_useExtendedRemote = useExtendedRemote;
}
QString GdbServerProvider::resetCommands() const QString GdbServerProvider::resetCommands() const
{ {
return m_resetCommands; return m_resetCommands;
@@ -153,7 +165,8 @@ bool GdbServerProvider::operator==(const GdbServerProvider &other) const
return thisId == otherId return thisId == otherId
&& m_startupMode == other.m_startupMode && m_startupMode == other.m_startupMode
&& m_initCommands == other.m_initCommands && m_initCommands == other.m_initCommands
&& m_resetCommands == other.m_resetCommands; && m_resetCommands == other.m_resetCommands
&& m_useExtendedRemote == other.m_useExtendedRemote;
} }
QVariantMap GdbServerProvider::toMap() const QVariantMap GdbServerProvider::toMap() const
@@ -163,7 +176,8 @@ QVariantMap GdbServerProvider::toMap() const
{QLatin1String(displayNameKeyC), m_displayName}, {QLatin1String(displayNameKeyC), m_displayName},
{QLatin1String(startupModeKeyC), m_startupMode}, {QLatin1String(startupModeKeyC), m_startupMode},
{QLatin1String(initCommandsKeyC), m_initCommands}, {QLatin1String(initCommandsKeyC), m_initCommands},
{QLatin1String(resetCommandsKeyC), m_resetCommands} {QLatin1String(resetCommandsKeyC), m_resetCommands},
{QLatin1String(useExtendedRemoteKeyC), m_useExtendedRemote},
}; };
} }
@@ -201,6 +215,7 @@ bool GdbServerProvider::fromMap(const QVariantMap &data)
m_startupMode = static_cast<StartupMode>(data.value(QLatin1String(startupModeKeyC)).toInt()); m_startupMode = static_cast<StartupMode>(data.value(QLatin1String(startupModeKeyC)).toInt());
m_initCommands = data.value(QLatin1String(initCommandsKeyC)).toString(); m_initCommands = data.value(QLatin1String(initCommandsKeyC)).toString();
m_resetCommands = data.value(QLatin1String(resetCommandsKeyC)).toString(); m_resetCommands = data.value(QLatin1String(resetCommandsKeyC)).toString();
m_useExtendedRemote = data.value(QLatin1String(useExtendedRemoteKeyC)).toBool();
return true; return true;
} }

View File

@@ -33,6 +33,7 @@
#include <utils/fileutils.h> #include <utils/fileutils.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QCheckBox;
class QComboBox; class QComboBox;
class QFormLayout; class QFormLayout;
class QLabel; class QLabel;
@@ -70,6 +71,7 @@ public:
StartupMode startupMode() const; StartupMode startupMode() const;
QString initCommands() const; QString initCommands() const;
QString resetCommands() const; QString resetCommands() const;
bool useExtendedRemote() const;
virtual bool operator==(const GdbServerProvider &) const; virtual bool operator==(const GdbServerProvider &) const;
@@ -98,6 +100,7 @@ protected:
void setStartupMode(StartupMode); void setStartupMode(StartupMode);
void setInitCommands(const QString &); void setInitCommands(const QString &);
void setResetCommands(const QString &); void setResetCommands(const QString &);
void setUseExtendedRemote(bool);
void providerUpdated(); void providerUpdated();
@@ -110,6 +113,7 @@ private:
QString m_initCommands; QString m_initCommands;
QString m_resetCommands; QString m_resetCommands;
QSet<BareMetalDevice *> m_devices; QSet<BareMetalDevice *> m_devices;
bool m_useExtendedRemote = false;
friend class GdbServerProviderConfigWidget; friend class GdbServerProviderConfigWidget;
}; };