mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 18:29:12 +02:00
DBG: Disassembler: prevent disassembler from doing large address ranges, if gdb returns data with far away addresses. Issue #0022230
git-svn-id: trunk@37643 -
This commit is contained in:
parent
95989934cf
commit
dbd226b8aa
@ -3373,9 +3373,19 @@ function TGDBMIDebuggerCommandDisassembe.DoExecute: Boolean;
|
|||||||
// we can only do that, if we know the offset of firstaddr (limit to DAssRangeOverFuncTreshold avg lines, should be enough)
|
// we can only do that, if we know the offset of firstaddr (limit to DAssRangeOverFuncTreshold avg lines, should be enough)
|
||||||
// TODO: limit offset ONLY, if previous range known (already have disass)
|
// TODO: limit offset ONLY, if previous range known (already have disass)
|
||||||
if (AFirstAddr.Offset >= 0)
|
if (AFirstAddr.Offset >= 0)
|
||||||
then DisAssListWithSrc := ExecDisassmble
|
then begin
|
||||||
(AFirstAddr.Value - Min(AFirstAddr.Offset, DAssRangeOverFuncTreshold * DAssBytesPerCommandAvg),
|
TmpAddr := AFirstAddr.Value - Min(AFirstAddr.Offset, DAssRangeOverFuncTreshold * DAssBytesPerCommandAvg);
|
||||||
ALastAddr.Value, True);
|
DisAssListWithSrc := ExecDisassmble(TmpAddr, ALastAddr.Value, True);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (DisAssListWithSrc <> nil) and (DisAssListWithSrc.Count > 0) and DisAssListWithSrc.HasSourceInfo
|
||||||
|
then begin
|
||||||
|
DisAssListWithSrc.SortByAddress;
|
||||||
|
// gdb may return data far out of range.
|
||||||
|
if (DisAssListWithSrc.LastItem^.Addr < TmpAddr) and
|
||||||
|
(TmpAddr - DisAssListWithSrc.LastItem^.Addr > DAssMaxRangeSize)
|
||||||
|
then FreeAndNil(DisAssListWithSrc);
|
||||||
|
end;
|
||||||
|
|
||||||
if (DisAssListWithSrc <> nil) and (DisAssListWithSrc.Count > 0) and DisAssListWithSrc.HasSourceInfo
|
if (DisAssListWithSrc <> nil) and (DisAssListWithSrc.Count > 0) and DisAssListWithSrc.HasSourceInfo
|
||||||
then begin
|
then begin
|
||||||
@ -3384,7 +3394,7 @@ function TGDBMIDebuggerCommandDisassembe.DoExecute: Boolean;
|
|||||||
***
|
***
|
||||||
*)
|
*)
|
||||||
Result := True;
|
Result := True;
|
||||||
DisAssListWithSrc.SortByAddress;
|
//DisAssListWithSrc.SortByAddress;
|
||||||
if DisAssListWithSrc.Item[0]^.Addr > AFirstAddr.Value
|
if DisAssListWithSrc.Item[0]^.Addr > AFirstAddr.Value
|
||||||
then begin
|
then begin
|
||||||
// fill in gap at start
|
// fill in gap at start
|
||||||
|
Loading…
Reference in New Issue
Block a user