mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 06:39:12 +02:00
FpDebug: Prevent range checks on target address computation
This commit is contained in:
parent
8da1763be3
commit
ad54dc2ceb
@ -4461,7 +4461,9 @@ begin
|
|||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
DW_LNS_advance_pc: begin
|
DW_LNS_advance_pc: begin
|
||||||
|
{$PUSH}{$R-}{$Q-}
|
||||||
Inc(FAddress, ULEB128toOrdinal(pbyte(FLineInfoPtr)));
|
Inc(FAddress, ULEB128toOrdinal(pbyte(FLineInfoPtr)));
|
||||||
|
{$POP}
|
||||||
end;
|
end;
|
||||||
DW_LNS_advance_line: begin
|
DW_LNS_advance_line: begin
|
||||||
Inc(FLine, SLEB128toOrdinal(pbyte(FLineInfoPtr)));
|
Inc(FLine, SLEB128toOrdinal(pbyte(FLineInfoPtr)));
|
||||||
@ -4480,12 +4482,16 @@ begin
|
|||||||
end;
|
end;
|
||||||
DW_LNS_const_add_pc: begin
|
DW_LNS_const_add_pc: begin
|
||||||
Opcode := 255 - Length(FOwner.FLineInfo.StandardOpcodeLengths);
|
Opcode := 255 - Length(FOwner.FLineInfo.StandardOpcodeLengths);
|
||||||
|
{$PUSH}{$R-}{$Q-}
|
||||||
if FOwner.FLineInfo.LineRange = 0
|
if FOwner.FLineInfo.LineRange = 0
|
||||||
then Inc(FAddress, Opcode * FOwner.FLineInfo.MinimumInstructionLength)
|
then Inc(FAddress, Opcode * FOwner.FLineInfo.MinimumInstructionLength)
|
||||||
else Inc(FAddress, (Opcode div FOwner.FLineInfo.LineRange) * FOwner.FLineInfo.MinimumInstructionLength);
|
else Inc(FAddress, (Opcode div FOwner.FLineInfo.LineRange) * FOwner.FLineInfo.MinimumInstructionLength);
|
||||||
|
{$POP}
|
||||||
end;
|
end;
|
||||||
DW_LNS_fixed_advance_pc: begin
|
DW_LNS_fixed_advance_pc: begin
|
||||||
|
{$PUSH}{$R-}{$Q-}
|
||||||
Inc(FAddress, PWord(FLineInfoPtr)^);
|
Inc(FAddress, PWord(FLineInfoPtr)^);
|
||||||
|
{$POP}
|
||||||
Inc(pbyte(FLineInfoPtr), 2);
|
Inc(pbyte(FLineInfoPtr), 2);
|
||||||
end;
|
end;
|
||||||
DW_LNS_set_prologue_end: begin
|
DW_LNS_set_prologue_end: begin
|
||||||
@ -4548,6 +4554,7 @@ begin
|
|||||||
|
|
||||||
// Special opcode
|
// Special opcode
|
||||||
Dec(Opcode, Length(FOwner.FLineInfo.StandardOpcodeLengths)+1);
|
Dec(Opcode, Length(FOwner.FLineInfo.StandardOpcodeLengths)+1);
|
||||||
|
{$PUSH}{$R-}{$Q-}
|
||||||
if FOwner.FLineInfo.LineRange = 0
|
if FOwner.FLineInfo.LineRange = 0
|
||||||
then begin
|
then begin
|
||||||
Inc(FAddress, Opcode * FOwner.FLineInfo.MinimumInstructionLength);
|
Inc(FAddress, Opcode * FOwner.FLineInfo.MinimumInstructionLength);
|
||||||
@ -4556,6 +4563,7 @@ begin
|
|||||||
Inc(FAddress, (Opcode div FOwner.FLineInfo.LineRange) * FOwner.FLineInfo.MinimumInstructionLength);
|
Inc(FAddress, (Opcode div FOwner.FLineInfo.LineRange) * FOwner.FLineInfo.MinimumInstructionLength);
|
||||||
Inc(FLine, FOwner.FLineInfo.LineBase + (Opcode mod FOwner.FLineInfo.LineRange));
|
Inc(FLine, FOwner.FLineInfo.LineBase + (Opcode mod FOwner.FLineInfo.LineRange));
|
||||||
end;
|
end;
|
||||||
|
{$POP}
|
||||||
Result := True;
|
Result := True;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user