summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/gdb/trkgdbadapter.cpp
diff options
context:
space:
mode:
authorPawel Polanski <pawel.3.polanski@nokia.com>2010-10-01 18:37:30 +0200
committerPawel Polanski <pawel.3.polanski@nokia.com>2010-10-01 18:41:18 +0200
commitcbdf363709e8355785c60e10903da299c3cb1235 (patch)
treeb682d58393c40bee986979e8b79289e80b70a225 /src/plugins/debugger/gdb/trkgdbadapter.cpp
parentd40007938c721b4985cd4ee88baedbd935971a6c (diff)
downloadqt-creator-cbdf363709e8355785c60e10903da299c3cb1235.tar.gz
Unable to change the value of a variable while debugging Symbian - issue fixed
Reviewed-by: hjk
Diffstat (limited to 'src/plugins/debugger/gdb/trkgdbadapter.cpp')
-rw-r--r--src/plugins/debugger/gdb/trkgdbadapter.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 1e32fcb26f..05d1ba6bc4 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -829,6 +829,17 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
sendGdbServerMessage("E20", msg.toLatin1());
}
} // qPart/qXfer
+
+ else if (cmd.startsWith("X")) {
+ logMessage(msgGdbPacket(QLatin1String("Write memory")));
+ // X addr,length
+ sendGdbServerAck();
+ const QPair<quint64, unsigned> addrLength = parseGdbReadMemoryRequest(cmd);
+ int pos = cmd.indexOf(':');
+ m_snapshot.resetMemory();
+ writeMemory(addrLength.first, cmd.mid(pos + 1, addrLength.second));
+ }
+
else {
logMessage(msgGdbPacket(QLatin1String("FIXME unknown: ")
+ QString::fromAscii(cmd)), LogWarning);
@@ -1444,6 +1455,29 @@ void TrkGdbAdapter::readMemory(uint addr, uint len, bool buffered)
tryAnswerGdbMemoryRequest(buffered);
}
+void TrkGdbAdapter::writeMemory(uint addr, const QByteArray &data)
+{
+ Q_ASSERT(data.size() < (2 << 16));
+ if (m_verbose > 2) {
+ logMessage(_("writeMemory %1 bytes from 0x%2 blocksize=%3 data=%4")
+ .arg(data.size()).arg(addr, 0, 16).arg(MemoryChunkSize).arg(QString::fromLatin1(data.toHex())));
+ }
+
+ sendTrkMessage(0x11, TrkCB(handleWriteMemory),
+ trkWriteMemoryMessage(addr, data));
+}
+
+void TrkGdbAdapter::handleWriteMemory(const TrkResult &result)
+{
+ logMessage(" RESULT: " + result.toString() + result.cookie.toString());
+ if (result.errorCode()) {
+ logMessage("ERROR: " + result.errorString(), LogError);
+ sendGdbServerMessage("E01");
+ return;
+ }
+ sendGdbServerMessage("OK");
+}
+
void TrkGdbAdapter::interruptInferior()
{
sendTrkMessage(0x1a, TrkCallback(), trkInterruptMessage(), "Interrupting...");