debugger: several small fixes for new gdb in trkadapter

This commit is contained in:
hjk
2010-01-13 15:19:57 +01:00
parent 4d7341beca
commit d5c9192c6b
2 changed files with 23 additions and 12 deletions

View File

@@ -451,7 +451,8 @@ void TrkGdbAdapter::readGdbServerCommand()
if (code == '-') {
logMessage("NAK: Retransmission requested");
emit adapterCrashed("Communication problem encountered.");
// This seems too harsh.
//emit adapterCrashed("Communication problem encountered.");
continue;
}
@@ -629,7 +630,7 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
//Reply: See section D.3 Stop Reply Packets, for the reply specifications.
sendGdbServerAck();
bool ok = false;
uint signalNumber = cmd.mid(1).toInt(&ok, 16);
uint signalNumber = cmd.mid(1).toUInt(&ok, 16);
QByteArray ba;
appendInt(&ba, m_session.pid);
appendInt(&ba, m_session.tid);
@@ -669,7 +670,7 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
// for 'other operations. 0 - any thread
//$Hg0#df
sendGdbServerAck();
m_session.currentThread = cmd.mid(2).toInt(0, 16);
m_session.currentThread = cmd.mid(2).toUInt(0, 16);
sendGdbServerMessage("OK", "Set current thread "
+ QByteArray::number(m_session.currentThread));
}
@@ -711,7 +712,7 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
//sendGdbServerMessage("0000", "current IP");
sendGdbServerAck();
bool ok = false;
const uint registerNumber = cmd.mid(1).toInt(&ok, 16);
const uint registerNumber = cmd.mid(1).toUInt(&ok, 16);
if (m_snapshot.registerValid) {
QByteArray logMsg = "Read Register";
if (registerNumber == RegisterPSGdb) {
@@ -744,8 +745,8 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
QByteArray regName = cmd.mid(1, pos - 1);
QByteArray valueName = cmd.mid(pos + 1);
bool ok = false;
const uint registerNumber = regName.toInt(&ok, 16);
const uint value = swapEndian(valueName.toInt(&ok, 16));
const uint registerNumber = regName.toUInt(&ok, 16);
const uint value = swapEndian(valueName.toUInt(&ok, 16));
// FIXME: Assume all goes well.
m_snapshot.registers[registerNumber] = value;
QByteArray ba = trkWriteRegisterMessage(registerNumber, value);
@@ -867,7 +868,7 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
}
else if (cmd.startsWith("qXfer:libraries:read")) {
qDebug() << "COMMAND: " << cmd;
//qDebug() << "COMMAND: " << cmd;
sendGdbServerAck();
QByteArray response = "l<library-list>";
for (int i = 0; i != m_session.libraries.size(); ++i) {
@@ -1031,7 +1032,9 @@ void TrkGdbAdapter::handleTrkError(const QString &msg)
void TrkGdbAdapter::handleTrkResult(const TrkResult &result)
{
if (result.isDebugOutput) {
sendTrkAck(result.token);
// It looks like those messages _must not_ be acknowledged.
// If we do so, TRK will complain about wrong sequencing.
//sendTrkAck(result.token);
logMessage(QLatin1String("APPLICATION OUTPUT: ") +
QString::fromAscii(result.data));
sendGdbServerMessage("O" + result.data.toHex());
@@ -1096,6 +1099,8 @@ void TrkGdbAdapter::handleTrkResult(const TrkResult &result)
// target->host OS notification
case 0xa0: { // Notify Created
debugMessage(_("RESET SNAPSHOT (NOTIFY CREATED)"));
// Sending this ACK does not seem to make a difference. Why?
//sendTrkAck(result.token);
m_snapshot.reset();
const char *data = result.data.data();
const byte error = result.data.at(0);
@@ -1127,10 +1132,16 @@ void TrkGdbAdapter::handleTrkResult(const TrkResult &result)
// With CS gdb 6.4 we get a non-standard $qfDllInfo#7f+ request
// afterwards, so don't use it for now.
//sendGdbServerMessage("T05library:;");
/*
// Causes too much "stopped" (by SIGTRAP) messages that need
// to be answered by "continue". Auto-continuing each SIGTRAP
// is not possible as this is also the real message for a user
// initiated interrupt.
sendGdbServerMessage("T05load:Name=" + lib.name.toHex()
+ ",TextSeg=" + hexNumber(lib.codeseg)
+ ",DataSeg=" + hexNumber(lib.dataseg) + ';');
//sendTrkMessage(0x18, TrkCallback(), trkContinueMessage(), "CONTINUE");
*/
sendTrkMessage(0x18, TrkCallback(), trkContinueMessage(), "CONTINUE");
break;
}
case 0xa1: { // NotifyDeleted
@@ -1570,7 +1581,7 @@ void TrkGdbAdapter::handleClearBreakpoint(const TrkResult &result)
void TrkGdbAdapter::handleSignalContinue(const TrkResult &result)
{
int signalNumber = result.cookie.toInt();
uint signalNumber = result.cookie.toUInt();
logMessage(" HANDLE SIGNAL CONTINUE: " + stringFromArray(result.data));
logMessage("NUMBER" + QString::number(signalNumber));
sendGdbServerMessage("O" + QByteArray("Console output").toHex());
@@ -1788,7 +1799,7 @@ void TrkGdbAdapter::write(const QByteArray &data)
if (data1.endsWith(' '))
data1.chop(1);
bool ok;
uint addr = data1.toInt(&ok, 0);
uint addr = data1.toUInt(&ok, 0);
qDebug() << "Writing: " << quoteUnprintableLatin1(data1) << addr;
directStep(addr);
return;