Browse Source

Third field of SignalToRunError must be PUContext type

git-svn-id: trunk@21842 -
pierre 13 years ago
parent
commit
b0fcb8cb2f
2 changed files with 38 additions and 6 deletions
  1. 4 4
      rtl/linux/mips/sighnd.inc
  2. 34 2
      rtl/linux/mips/sighndh.inc

+ 4 - 4
rtl/linux/mips/sighnd.inc

@@ -15,7 +15,7 @@
 
  **********************************************************************}
 
-procedure SignalToRunerror(sig : longint; SigInfo: PSigInfo; SigContext: PSigContext);cdecl;
+procedure SignalToRunerror(sig : longint; SigInfo: PSigInfo; UContext: PUContext);cdecl;
 var
   res : word;
   addr : pointer;
@@ -59,10 +59,10 @@ begin
   { give runtime error at the position where the signal was raised }
   if res<>0 then
     begin
-      if assigned(SigContext) then
+      if assigned(UContext) then
         begin
-          frame:=pointer(ptruint(SigContext^.sigc_regs[29]));   { stack pointer }
-          addr:=pointer(ptruint(SigContext^.sigc_pc));  { program counter }
+          frame:=pointer(ptruint(UContext^.uc_mcontext.sigc_regs[29]));   { stack pointer }
+          addr:=pointer(ptruint(UContext^.uc_mcontext.sigc_pc));  { program counter }
         end
       else
         begin

+ 34 - 2
rtl/linux/mips/sighndh.inc

@@ -45,14 +45,31 @@ struct sigcontext {
   unsigned long sc_lo2;
   unsigned long sc_hi3;
   unsigned long sc_lo3;
-}; *)
+};
+typedef struct ucontext
+  {
+    unsigned long int uc_flags;
+    struct ucontext *uc_link;
+    stack_t uc_stack;
+    mcontext_t uc_mcontext;
+    __sigset_t uc_sigmask;
+  } ucontext_t;
+
+ *)
+  FPReg = record
+   case byte of
+    0 : (fp_dreg : double;);
+    1 : (fp_reg : single;
+         fp_pad : cint; );
+  end;
+
   PSigContext = ^TSigContext;
   TSigContext = record
     sigc_regmask,                   
     sigc_status: cuint; 
     sigc_pc : culonglong;    
     sigc_regs : array[0..31] of culonglong;
-    sigc_fpregs : array[0..31] of culonglong; 
+    sigc_fpregs : array[0..31] of fpreg; 
     sigc_fpc_csr, sigc_fpc_eir : cuint;
     sigc_used_math : cuint;
     sigc_dsp : cuint;
@@ -62,3 +79,18 @@ struct sigcontext {
     sigc_hi3,sigc_lo3 : culong;
   end;
 
+  TStack = record
+    ss_sp : pointer;
+    ss_size : size_t;
+    ss_flags : cint;
+  end;
+
+  PUContext = ^TUContext;
+  TUContext = record
+    uc_flags : culong;
+    uc_link : PUContext;
+    uc_stack : TStack;
+    uc_mcontext : TSigContext;
+    uc_sigmask : TSigSet;
+  end;
+