From 5f339d811d43fc885c268317b713c216d2499cd1 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 24 Nov 2020 10:36:59 -0800 Subject: [PATCH] Made rehupping of memory breakpoints more conservative --- IDEHelper/WinDebugger.cpp | 8 ++++++++ IDEHelper/WinDebugger.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/IDEHelper/WinDebugger.cpp b/IDEHelper/WinDebugger.cpp index 9372e78f..1d479f0b 100644 --- a/IDEHelper/WinDebugger.cpp +++ b/IDEHelper/WinDebugger.cpp @@ -531,6 +531,7 @@ WinDebugger::WinDebugger(DebugManager* debugManager) : mDbgSymSrv(this) { mFreeMemoryBreakIndices.push_back(i); } + mMemoryBreakpointVersion = 0; SYSTEM_INFO systemInfo; GetSystemInfo(&systemInfo); @@ -621,6 +622,9 @@ void WinDebugger::ThreadRestoreUnpause() void WinDebugger::UpdateThreadDebugRegisters(WdThreadInfo* threadInfo) { + if (threadInfo->mMemoryBreakpointVersion == mMemoryBreakpointVersion) + return; + auto threadId = threadInfo->mHThread; BF_CONTEXT lcContext; @@ -655,6 +659,7 @@ void WinDebugger::UpdateThreadDebugRegisters(WdThreadInfo* threadInfo) } bool worked = BF_SetThreadContext(threadId, &lcContext) != 0; BF_ASSERT(worked || (mRunState == RunState_Terminating) || (mRunState == RunState_Terminated)); + threadInfo->mMemoryBreakpointVersion = mMemoryBreakpointVersion; } void WinDebugger::UpdateThreadDebugRegisters() @@ -3338,6 +3343,7 @@ void WinDebugger::CheckBreakpoint(WdBreakpoint* wdBreakpoint) mMemoryBreakpoints[memoryBreakIdx].mByteCount = wantBytes[i]; mMemoryBreakpoints[memoryBreakIdx].mOfs = curOfs; curOfs += wantBytes[i]; + mMemoryBreakpointVersion++; wdBreakpoint->mMemoryBreakpointInfo->mMemoryWatchSlotBitmap |= 1< mPhysBreakpointAddrMap; // To make sure we don't create multiple physical breakpoints at the same addr Array mBreakpoints; Dictionary mBreakpointAddrMap;