From 735b3489d402c6ed33d33233de6379d8ab000c94 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Fri, 5 Feb 2010 13:48:10 +0100
Subject: [PATCH] debugger: fake hardware breakpoints work better with
 read-only memory

---
 src/plugins/debugger/gdb/gdbengine.cpp     | 2 ++
 src/plugins/debugger/gdb/trkgdbadapter.cpp | 7 ++++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index b74130e61bc..697448b4533 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -2021,6 +2021,8 @@ void GdbEngine::sendInsertBreakpoint(int index)
     QByteArray cmd;
     if (m_isMacGdb)
         cmd = "-break-insert -l -1 -f ";
+    else if (m_gdbAdapter->isTrkAdapter())
+        cmd = "-break-insert -h -f ";
     else if (m_gdbVersion >= 60800) // Probably some earlier version would work as well ...
         cmd = "-break-insert -f ";
     else
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 5025d3a68bf..1fbc27a3eea 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -384,8 +384,9 @@ QByteArray TrkGdbAdapter::trkStepRangeMessage(trk::byte option)
     uint to = m_snapshot.lineToAddress;
     uint pc = m_snapshot.registers[RegisterPC];
     if (from <= pc && pc <= to) {
-        qDebug() << "STEP IN " << hexxNumber(from) << hexxNumber(to)
-             << "INSTEAD OF " << hexxNumber(pc);
+        to = qMax(to - 4, from);
+        debugMessage("STEP IN " + hexxNumber(from) + " " + hexxNumber(to)
+            + " INSTEAD OF " + hexxNumber(pc));
     } else {
         from = pc;
         to = pc;
@@ -1852,7 +1853,7 @@ void TrkGdbAdapter::handleCreateProcess(const TrkResult &result)
         m_engine->postCommand("symbol-file \"" + symbolFile + "\"");
     }
     m_engine->postCommand("set breakpoint always-inserted on");
-    m_engine->postCommand("set breakpoint auto-hw off");
+    m_engine->postCommand("set breakpoint auto-hw on");
     m_engine->postCommand("set trust-readonly-sections"); // No difference?
     m_engine->postCommand("set displaced-stepping on"); // No difference?
     m_engine->postCommand("set mem inaccessible-by-default");
-- 
GitLab