mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-23 09:19:40 +02:00
FpDebug (pure): Detect if a HW breakpoint has been triggered on Linux
git-svn-id: trunk@46045 -
This commit is contained in:
parent
45dcb0b2e9
commit
8fd0269bae
@ -231,6 +231,7 @@ type
|
||||
function ResetInstructionPointerAfterBreakpoint: boolean; override;
|
||||
function AddWatchpoint(AnAddr: TDBGPtr): integer; override;
|
||||
function RemoveWatchpoint(AnId: integer): boolean; override;
|
||||
function DetectHardwareWatchpoint: integer; override;
|
||||
procedure BeforeContinue; override;
|
||||
procedure LoadRegisterValues; override;
|
||||
end;
|
||||
@ -433,10 +434,27 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TDbgLinuxThread.DetectHardwareWatchpoint: integer;
|
||||
var
|
||||
dr6: PtrUInt;
|
||||
begin
|
||||
result := -1;
|
||||
if ReadDebugReg(6, dr6) then
|
||||
begin
|
||||
if dr6 and 1 = 1 then result := 0
|
||||
else if dr6 and 2 = 2 then result := 1
|
||||
else if dr6 and 4 = 4 then result := 2
|
||||
else if dr6 and 8 = 8 then result := 3;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TDbgLinuxThread.BeforeContinue;
|
||||
var
|
||||
io: iovec;
|
||||
begin
|
||||
if Process.CurrentWatchpoint>-1 then
|
||||
WriteDebugReg(6, 0);
|
||||
|
||||
if FUserRegsChanged then
|
||||
begin
|
||||
io.iov_base:=@(FUserRegs.regs64[0]);
|
||||
|
Loading…
Reference in New Issue
Block a user