mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-23 21:50:39 +02:00
FpDebug: asm-unwind, follow long jumps
This commit is contained in:
parent
4b04ea627b
commit
bef76faa45
@ -5695,7 +5695,7 @@ var
|
|||||||
|
|
||||||
var
|
var
|
||||||
MaxAddr, StartStack, Tmp: TDBGPtr;
|
MaxAddr, StartStack, Tmp: TDBGPtr;
|
||||||
BackwardJumpAddress: TAlternativeAddressPoint;
|
BackwardJumpAddress, ForwardJumpAddress: TAlternativeAddressPoint;
|
||||||
Cnt: Integer;
|
Cnt: Integer;
|
||||||
instr: TX86AsmInstruction;
|
instr: TX86AsmInstruction;
|
||||||
RSize: Cardinal;
|
RSize: Cardinal;
|
||||||
@ -5711,6 +5711,7 @@ begin
|
|||||||
StartStack := AStackPtr;
|
StartStack := AStackPtr;
|
||||||
CurConditionalForwardAddr := -1;
|
CurConditionalForwardAddr := -1;
|
||||||
BackwardJumpAddress.Address := 0;
|
BackwardJumpAddress.Address := 0;
|
||||||
|
ForwardJumpAddress.Address := 0;
|
||||||
WeakResultAddress := 0;
|
WeakResultAddress := 0;
|
||||||
try
|
try
|
||||||
|
|
||||||
@ -5746,6 +5747,13 @@ begin
|
|||||||
ContinueAt(BackwardJumpAddress);
|
ContinueAt(BackwardJumpAddress);
|
||||||
BackwardJumpAddress.Address := 0;
|
BackwardJumpAddress.Address := 0;
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
if (ForwardJumpAddress.Address > 0) and (not AddrWasDone(ForwardJumpAddress.Address)) then begin
|
||||||
|
ContinueAt(ForwardJumpAddress);
|
||||||
|
ForwardJumpAddress.Address := 0;
|
||||||
|
MaxAddr := NewAddr + MAX_SEARCH_ADDR;
|
||||||
|
MaxAddrCurrentBlock := MaxAddr;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
exit;
|
exit;
|
||||||
StartNextAddrBlock;
|
StartNextAddrBlock;
|
||||||
@ -6182,6 +6190,13 @@ begin
|
|||||||
continue;
|
continue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if Tmp > MaxAddr then begin
|
||||||
|
if (ForwardJumpAddress.Address = 0) or (Tmp < ForwardJumpAddress.Address) then
|
||||||
|
StoreAltAddr(ForwardJumpAddress, Tmp);
|
||||||
|
ForceDifferentBranch := True;
|
||||||
|
continue;
|
||||||
|
end;
|
||||||
|
|
||||||
FinishCurAddrBlock;
|
FinishCurAddrBlock;
|
||||||
NewAddr := Tmp;
|
NewAddr := Tmp;
|
||||||
StartNextAddrBlock;
|
StartNextAddrBlock;
|
||||||
|
Loading…
Reference in New Issue
Block a user