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());
setRemoteChannel(p->channel());
setUseContinueInsteadOfRun(true);
setUseExtendedRemote(p->useExtendedRemote());
DebuggerRunTool::start();
}

View File

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

View File

@@ -101,6 +101,7 @@ private:
void setFromProvider();
HostWidget *m_hostWidget = nullptr;
QCheckBox *m_useExtendedRemoteCheckBox = nullptr;
QPlainTextEdit *m_initCommandsTextEdit = 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 initCommandsKeyC[] = "BareMetal.GdbServerProvider.InitCommands";
const char resetCommandsKeyC[] = "BareMetal.GdbServerProvider.ResetCommands";
const char useExtendedRemoteKeyC[] = "BareMetal.GdbServerProvider.UseExtendedRemote";
static QString createId(const QString &id)
{
@@ -67,6 +68,7 @@ GdbServerProvider::GdbServerProvider(const GdbServerProvider &other)
, m_startupMode(other.m_startupMode)
, m_initCommands(other.m_initCommands)
, m_resetCommands(other.m_resetCommands)
, m_useExtendedRemote(other.useExtendedRemote())
{
m_displayName = QCoreApplication::translate(
"BareMetal::GdbServerProvider", "Clone of %1")
@@ -121,6 +123,16 @@ void GdbServerProvider::setInitCommands(const QString &cmds)
m_initCommands = cmds;
}
bool GdbServerProvider::useExtendedRemote() const
{
return m_useExtendedRemote;
}
void GdbServerProvider::setUseExtendedRemote(bool useExtendedRemote)
{
m_useExtendedRemote = useExtendedRemote;
}
QString GdbServerProvider::resetCommands() const
{
return m_resetCommands;
@@ -153,7 +165,8 @@ bool GdbServerProvider::operator==(const GdbServerProvider &other) const
return thisId == otherId
&& m_startupMode == other.m_startupMode
&& m_initCommands == other.m_initCommands
&& m_resetCommands == other.m_resetCommands;
&& m_resetCommands == other.m_resetCommands
&& m_useExtendedRemote == other.m_useExtendedRemote;
}
QVariantMap GdbServerProvider::toMap() const
@@ -163,7 +176,8 @@ QVariantMap GdbServerProvider::toMap() const
{QLatin1String(displayNameKeyC), m_displayName},
{QLatin1String(startupModeKeyC), m_startupMode},
{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_initCommands = data.value(QLatin1String(initCommandsKeyC)).toString();
m_resetCommands = data.value(QLatin1String(resetCommandsKeyC)).toString();
m_useExtendedRemote = data.value(QLatin1String(useExtendedRemoteKeyC)).toBool();
return true;
}

View File

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