From 0479ee769d53f956b65985ad3139f6b02b7b3ee3 Mon Sep 17 00:00:00 2001 From: martin Date: Sat, 11 Jun 2011 23:56:25 +0000 Subject: [PATCH] DBG: Fix occasional missing hex dump in disassembler git-svn-id: trunk@31176 - --- debugger/gdbmidebugger.pp | 67 +++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/debugger/gdbmidebugger.pp b/debugger/gdbmidebugger.pp index ac19e5b50e..1d9d18ecf0 100644 --- a/debugger/gdbmidebugger.pp +++ b/debugger/gdbmidebugger.pp @@ -2846,6 +2846,41 @@ function TGDBMIDebuggerCommandDisassembe.DoExecute: Boolean; StopAfterAddress: TDBGPtr; StopAfterNumLines: Integer ): Boolean; + procedure AddRangetoMemDumpsNeeded(NewRange: TDBGDisassemblerEntryRange); + var + i: Integer; + begin + i := length(FMemDumpsNeeded); + if (i > 0) + then begin + if (NewRange.RangeStartAddr <= FMemDumpsNeeded[0].FirstAddr) + and (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[0].FirstAddr) + then FMemDumpsNeeded[0].FirstAddr := NewRange.RangeStartAddr + else + if (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[0].LastAddr) + and (NewRange.RangeStartAddr <= FMemDumpsNeeded[0].LastAddr) + then FMemDumpsNeeded[0].LastAddr := NewRange.LastEntryEndAddr + 1 + else + if (NewRange.RangeStartAddr <= FMemDumpsNeeded[i-1].FirstAddr) + and (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[i-1].FirstAddr) + then FMemDumpsNeeded[i-1].FirstAddr := NewRange.RangeStartAddr + else + if (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[i-1].LastAddr) + and (NewRange.RangeStartAddr <= FMemDumpsNeeded[i-1].LastAddr) + then FMemDumpsNeeded[i-1].LastAddr := NewRange.LastEntryEndAddr + 1 + else begin + SetLength(FMemDumpsNeeded, i + 1); + FMemDumpsNeeded[i].FirstAddr := NewRange.RangeStartAddr; + FMemDumpsNeeded[i].LastAddr := NewRange.LastEntryEndAddr + 1; + end; + end + else begin + SetLength(FMemDumpsNeeded, i + 1); + FMemDumpsNeeded[i].FirstAddr := NewRange.RangeStartAddr; + FMemDumpsNeeded[i].LastAddr := NewRange.LastEntryEndAddr + 1; + end; + end; + procedure DoDisassembleSourceless(ASubFirstAddr, ASubLastAddr: TDBGPtr; ARange: TDBGDisassemblerEntryRange; SkipFirstAddresses: Boolean = False); var @@ -3000,6 +3035,7 @@ function TGDBMIDebuggerCommandDisassembe.DoExecute: Boolean; if not ContinueAfterSource then begin AdjustLastEntryEndAddr(NewRange, DisAssList); + AddRangetoMemDumpsNeeded(NewRange); FKnownRanges.AddRange(NewRange); // NewRange is now owned by FKnownRanges NewRange := nil; FreeAndNil(DisAssList); @@ -3178,36 +3214,7 @@ function TGDBMIDebuggerCommandDisassembe.DoExecute: Boolean; if NewRange.LastEntryEndAddr > NewRange.RangeEndAddr then NewRange.RangeEndAddr := NewRange.LastEntryEndAddr; - i := length(FMemDumpsNeeded); - if (i > 0) - then begin - if (NewRange.RangeStartAddr <= FMemDumpsNeeded[0].FirstAddr) - and (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[0].FirstAddr) - then FMemDumpsNeeded[0].FirstAddr := NewRange.RangeStartAddr - else - if (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[0].LastAddr) - and (NewRange.RangeStartAddr <= FMemDumpsNeeded[0].LastAddr) - then FMemDumpsNeeded[0].LastAddr := NewRange.LastEntryEndAddr + 1 - else - if (NewRange.RangeStartAddr <= FMemDumpsNeeded[i-1].FirstAddr) - and (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[i-1].FirstAddr) - then FMemDumpsNeeded[i-1].FirstAddr := NewRange.RangeStartAddr - else - if (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[i-1].LastAddr) - and (NewRange.RangeStartAddr <= FMemDumpsNeeded[i-1].LastAddr) - then FMemDumpsNeeded[i-1].LastAddr := NewRange.LastEntryEndAddr + 1 - else begin - SetLength(FMemDumpsNeeded, i + 1); - FMemDumpsNeeded[i].FirstAddr := NewRange.RangeStartAddr; - FMemDumpsNeeded[i].LastAddr := NewRange.LastEntryEndAddr + 1; - end; - end - else begin - SetLength(FMemDumpsNeeded, i + 1); - FMemDumpsNeeded[i].FirstAddr := NewRange.RangeStartAddr; - FMemDumpsNeeded[i].LastAddr := NewRange.LastEntryEndAddr + 1; - end; - + AddRangetoMemDumpsNeeded(NewRange); FKnownRanges.AddRange(NewRange); // NewRange is now owned by FKnownRanges NewRange := nil;