From ab68fd26577fd1d95a8a6472cef4165e704cba83 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Fri, 14 Aug 2009 17:34:16 +0200
Subject: [PATCH] Trk: Make little endian the default, some logging.

---
 tests/manual/trk/adapter.cpp | 83 +++++++++++++++++++++++++-----------
 tests/manual/trk/run.pl      | 12 ++----
 2 files changed, 63 insertions(+), 32 deletions(-)

diff --git a/tests/manual/trk/adapter.cpp b/tests/manual/trk/adapter.cpp
index e99c74379c1..2e0e3788bd7 100644
--- a/tests/manual/trk/adapter.cpp
+++ b/tests/manual/trk/adapter.cpp
@@ -127,7 +127,7 @@ static inline void dumpRegister(int n, uint value, QByteArray &a)
 }
 
 struct AdapterOptions {
-    AdapterOptions() : verbose(1),registerEndianness(BigEndian),useSocket(false) {}
+    AdapterOptions() : verbose(1),registerEndianness(LittleEndian),useSocket(false) {}
 
     int verbose;
     Endianness registerEndianness;
@@ -275,7 +275,7 @@ Adapter::Adapter() :
     m_gdbServerPort(0),
     m_gdbAckMode(true),
     m_verbose(1),
-    m_registerEndianness(BigEndian),
+    m_registerEndianness(LittleEndian),
     m_useSocket(false),
     m_startInferiorTriggered(false)
 {
@@ -367,12 +367,17 @@ void Adapter::handleGdbConnection()
     m_startInferiorTriggered = false;
 }
 
+static inline QString msgGdbPacket(const QString &p)
+{
+    return QLatin1String("gdb: -> ") + p;
+}
+
 void Adapter::readFromGdb()
 {
     QByteArray packet = m_gdbConnection->readAll();
     m_gdbReadBuffer.append(packet);
 
-    logMessage("gdb: -> " + packet);
+    logMessage(msgGdbPacket(QString::fromAscii(packet)));
     if (packet != m_gdbReadBuffer)
         logMessage("buffer: " + m_gdbReadBuffer);
 
@@ -504,7 +509,6 @@ void Adapter::reportToGdb(const TrkResult &result)
 void Adapter::handleGdbResponse(const QByteArray &response)
 {
     // http://sourceware.org/gdb/current/onlinedocs/gdb_34.html
-
     if (0) {}
 
     else if (response == "!") {
@@ -514,6 +518,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response.startsWith("?")) {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("Query halted")));
         // Indicate the reason the target halted.
         // The reply is the same as for step and continue.
         sendGdbAckMessage();
@@ -526,6 +532,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response == "c") {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("continue")));
         sendGdbAckMessage();
         QByteArray ba;
         appendByte(&ba, 0); // options
@@ -539,6 +547,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response.startsWith("C")) {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("continue with signal")));
         // C sig[;addr] Continue with signal sig (hex signal number)
         //Reply: See section D.3 Stop Reply Packets, for the reply specifications.
         sendGdbAckMessage();
@@ -557,6 +567,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response == "g") {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("read registers")));
         // Read general registers.
         //sendGdbMessage("00000000", "read registers");
         sendGdbAckMessage();
@@ -570,6 +582,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response.startsWith("Hc")) {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("Set thread & continue")));
         // Set thread for subsequent operations (`m', `M', `g', `G', et.al.).
         // for step and continue operations
         //$Hc-1#09
@@ -578,6 +592,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response.startsWith("Hg")) {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("Set thread")));
         // Set thread for subsequent operations (`m', `M', `g', `G', et.al.).
         // for 'other operations.  0 - any thread
         //$Hg0#df
@@ -588,6 +604,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response == "k") {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("kill")));
         // kill
         sendGdbAckMessage();
         QByteArray ba;
@@ -598,8 +616,10 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response.startsWith("m")) {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("read memory")));
         // m addr,length
-        sendGdbAckMessage();        
+        sendGdbAckMessage();
         uint addr = 0, len = 0;
         do {
             const int pos = response.indexOf(',');
@@ -620,6 +640,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
         }
     }
     else if (response.startsWith("p")) {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("read register")));
         // 0xf == current instruction pointer?
         //sendGdbMessage("0000", "current IP");
         sendGdbAckMessage();
@@ -685,6 +707,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response.startsWith("qC")) {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("query thread id")));
         // Return the current thread ID
         //$qC#b4
         sendGdbAckMessage();
@@ -722,6 +746,8 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else if (response == "qSymbol::") {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("notify can handle symbol lookup")));
         // Notify the target that GDB is prepared to serve symbol lookup requests.
         sendGdbAckMessage();
         if (1)
@@ -753,8 +779,9 @@ void Adapter::handleGdbResponse(const QByteArray &response)
         sendGdbMessage("OK", "passing signals accepted");
     }
 
-
     else if (response == "s") {
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("Step range")));
         sendGdbAckMessage();
         QByteArray ba;
         appendByte(&ba, 0); // options
@@ -788,12 +815,16 @@ void Adapter::handleGdbResponse(const QByteArray &response)
         sendGdbMessageAfterSync("", "process killed");
     }
 
-    else if (response.startsWith("Z0,")) {
+    else if (response.startsWith("Z0,")) { // Insert breakpoint
+        if (m_verbose)
+            logMessage(msgGdbPacket(QLatin1String("Insert breakpoint")));
         // $z0,786a4ccc,4#99
-        int pos = response.lastIndexOf(',');
+        const int pos = response.lastIndexOf(',');
         bool ok = false;
-        uint addr = response.mid(3, pos - 1).toInt(&ok, 16);
-        uint len = response.mid(pos + 1).toInt(&ok, 16);
+        const uint addr = response.mid(3, pos - 1).toInt(&ok, 16);
+        const uint len = response.mid(pos + 1).toInt(&ok, 16);
+        if (m_verbose)
+            logMessage(QString::fromLatin1("Inserting breakpoint at 0x%1, %2").arg(addr,0 ,16).arg(len));
 
         //---IDE------------------------------------------------------
         //  Command: 0x1B Set Break
@@ -825,7 +856,7 @@ void Adapter::handleGdbResponse(const QByteArray &response)
     }
 
     else {
-        logMessage("FIXME unknown: " + response);
+        logMessage(msgGdbPacket(QLatin1String("FIXME unknown: ") + QString::fromAscii(response)));
     }
 }
 
@@ -1016,7 +1047,7 @@ void Adapter::tryTrkRead()
         QByteArray res = m_socketDevice->readAll();
         m_trkReadQueue.append(res);
     } else {
-#ifdef Q_OS_WIN  
+#ifdef Q_OS_WIN
         const DWORD BUFFERSIZE = 1024;
         char buffer[BUFFERSIZE];
         DWORD charsRead;
@@ -1086,16 +1117,20 @@ void Adapter::handleResult(const TrkResult &result)
             break;
         }
         case 0x90: { // Notified Stopped
-            logMessage(prefix + "NOTE: STOPPED  " + str);
             // 90 01   78 6a 40 40   00 00 07 23   00 00 07 24  00 00
-            //const char *data = result.data.data();
-//            uint addr = extractInt(data); //code address: 4 bytes; code base address for the library
-//            uint pid = extractInt(data + 4); // ProcessID: 4 bytes;
-//            uint tid = extractInt(data + 8); // ThreadID: 4 bytes
-            //logMessage(prefix << "      ADDR: " << addr << " PID: " << pid << " TID: " << tid);
+            const char *data = result.data.data();
+            const uint addr = extractInt(data); //code address: 4 bytes; code base address for the library
+            const uint pid = extractInt(data + 4); // ProcessID: 4 bytes;
+            const uint tid = extractInt(data + 8); // ThreadID: 4 bytes
+            logMessage(prefix + QString::fromLatin1("NOTE: PID %1/TID %2 STOPPED at 0x%3").arg(pid).arg(tid).arg(addr, 0, 16));
             sendTrkAck(result.token);
-            //sendGdbMessage("S11", "Target stopped");
-            sendGdbMessage("S05", "Target stopped");
+            if (addr) {
+                // Todo: Do not send off GdbMessages if a synced gdb query is pending, queue instead
+                sendGdbMessage("S05", "Target stopped");
+            } else {
+                if (m_verbose)
+                    logMessage(QLatin1String("Ignoring stop at 0"));
+            }
             break;
         }
         case 0x91: { // Notify Exception (obsolete)
@@ -1130,7 +1165,7 @@ void Adapter::handleResult(const TrkResult &result)
             str << " CODE: 0x" << codeseg << " DATA: 0x" << dataseg;
             str.setIntegerBase(10);
             str << " NAME: '" << name << '\'';
-            logMessage(logMsg);            
+            logMessage(logMsg);
             sendTrkContinue();
             break;
         }
@@ -1573,8 +1608,8 @@ static bool readAdapterArgs(const QStringList &args, AdapterOptions *o)
                 o->verbose++;
             } else if (*it == QLatin1String("-q")) {
                 o->verbose = 0;
-            } else if (*it == QLatin1String("-l")) {
-                o->registerEndianness = LittleEndian;
+            } else if (*it == QLatin1String("-b")) {
+                o->registerEndianness = BigEndian;
             } else if (*it == QLatin1String("-s")) {
                 o->useSocket = true;
             }
@@ -1606,7 +1641,7 @@ int main(int argc, char *argv[])
                "Options: -v verbose\n"
                "         -q quiet\n"
                "         -s Use socket (simulation)\n"
-               "         -l Set register endianness to little\n", argv[0]);
+               "         -b Set register endianness to big\n", argv[0]);
         return 1;
     }
 
diff --git a/tests/manual/trk/run.pl b/tests/manual/trk/run.pl
index cad329e9def..2644c304970 100755
--- a/tests/manual/trk/run.pl
+++ b/tests/manual/trk/run.pl
@@ -8,8 +8,8 @@ use Cwd;
 
 my @ADAPTER_OPTIONS = ();
 my @TRKSERVEROPTIONS = ();
-my $DUMP_POSTFIX ='-BigEndian.bin';
-my $ENDIANESS ='big';
+my $DUMP_POSTFIX ='.bin';
+my $ENDIANESS ='little';
 
 my $isUnix = $OSNAME eq 'linux' ? 1 : 0;
 my $MAKE= $isUnix ? 'make' : 'nmake';
@@ -23,7 +23,6 @@ Options:
      -aq     Adapter quiet
      -tv     TrkServer verbose
      -tq     TrkServer quiet
-     -l      Little endian
 
      trkserver simulator will be run unless COM is specified
 EOF
@@ -41,10 +40,6 @@ for (my $i = 0; $i < $argCount; $i++) {
 	    push(@TRKSERVEROPTIONS, '-v');
 	} elsif ($a eq '-tq') {
 	    push(@TRKSERVEROPTIONS, '-q');
-	}  elsif ($a eq '-l') {
-	    $DUMP_POSTFIX='.bin';
-	    $ENDIANESS='little';
-	    push(@ADAPTER_OPTIONS, '-l');
 	}  elsif ($a eq '-h') {
 	    print $usage;
 	    exit(1);
@@ -130,7 +125,8 @@ target extended-remote $gdbserverip:$gdbserverport
 #file filebrowseapp.sym
 add-symbol-file filebrowseapp.sym 0x786A4000
 symbol-file filebrowseapp.sym
-p E32Main
+print E32Main 
+break E32Main
 #continue
 #info files
 #file filebrowseapp.sym -readnow
-- 
GitLab