From b43a9965b5ff7f08e7ff1aba09f5275684013ffe Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Mon, 22 Mar 2010 17:49:56 +0100
Subject: [PATCH] debugger: filter out some noice in the mmx registers

---
 src/plugins/debugger/gdb/gdbengine.cpp | 30 +++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 22adb7b23a6..0f7f707f351 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -2954,11 +2954,35 @@ void GdbEngine::handleRegisterListValues(const GdbResponse &response)
     Registers registers = manager()->registerHandler()->registers();
 
     // 24^done,register-values=[{number="0",value="0xf423f"},...]
-    foreach (const GdbMi &item, response.data.findChild("register-values").children()) {
-        int index = item.findChild("number").data().toInt();
+    const GdbMi values = response.data.findChild("register-values");
+    foreach (const GdbMi &item, values.children()) {
+        const int index = item.findChild("number").data().toInt();
         if (index < registers.size()) {
             Register &reg = registers[index];
-            QString value = _(item.findChild("value").data());
+            GdbMi val = item.findChild("value");
+            QByteArray ba;
+            bool handled = false;
+            if (val.data().startsWith("{")) {
+                int pos1 = val.data().indexOf("v2_int32");
+                if (pos1 == -1)
+                    pos1 = val.data().indexOf("v4_int32");
+                if (pos1 != -1) {
+                    // FIXME: This block wastes cycles.
+                    pos1 = val.data().indexOf("{", pos1 + 1) + 1;
+                    int pos2 = val.data().indexOf("}", pos1);
+                    QByteArray ba2 = val.data().mid(pos1, pos2 - pos1);
+                    foreach (QByteArray ba3, ba2.split(',')) {
+                        ba3 = ba3.trimmed();
+                        QTC_ASSERT(ba3.size() >= 3, continue);
+                        QTC_ASSERT(ba3.size() <= 10, continue);
+                        ba.prepend(QByteArray(10 - ba3.size(), '0'));
+                        ba.prepend(ba3.mid(2));
+                    }
+                    ba.prepend("0x");
+                    handled = true;
+                }
+            }
+            const QString value = _(handled ? ba : val.data());
             reg.changed = (value != reg.value);
             if (reg.changed)
                 reg.value = value;
-- 
GitLab