Browse Source

* fixed getting the FPC_BREAK_ERROR parameters on x86_64

git-svn-id: trunk@29801 -
nickysn 10 years ago
parent
commit
4a1a443ffa
1 changed files with 13 additions and 1 deletions
  1. 13 1
      ide/fpdebug.pas

+ 13 - 1
ide/fpdebug.pas

@@ -1312,7 +1312,19 @@ begin
   // Procedure HandleErrorAddrFrame (Errno : longint;addr : CodePointer; frame : Pointer);
   // Procedure HandleErrorAddrFrame (Errno : longint;addr : CodePointer; frame : Pointer);
   //  [public,alias:'FPC_BREAK_ERROR']; {$ifdef cpui386} register; {$endif}
   //  [public,alias:'FPC_BREAK_ERROR']; {$ifdef cpui386} register; {$endif}
   {TODO: handle archs with register calling conventions}
   {TODO: handle archs with register calling conventions}
-{$if defined(FrameNameKnown)}
+{$if defined(x86_64)}
+  {$ifdef Win64}
+    GetFPCBreakErrorParameters :=
+      GetIntRegister('rcx', ExitCode) and
+      GetIntRegister('rdx', ExitAddr) and
+      GetIntRegister('r8', ExitFrame);
+  {$else Win64}
+    GetFPCBreakErrorParameters :=
+      GetIntRegister('rdi', ExitCode) and
+      GetIntRegister('rsi', ExitAddr) and
+      GetIntRegister('rdx', ExitFrame);
+ {$endif Win64}
+{$elseif defined(FrameNameKnown)}
   ExitCode:=GetLongintAt(GetFramePointer+FirstArgOffset);
   ExitCode:=GetLongintAt(GetFramePointer+FirstArgOffset);
   ExitAddr:=GetPointerAt(GetFramePointer+SecondArgOffset);
   ExitAddr:=GetPointerAt(GetFramePointer+SecondArgOffset);
   ExitFrame:=GetPointerAt(GetFramePointer+ThirdArgOffset);
   ExitFrame:=GetPointerAt(GetFramePointer+ThirdArgOffset);