ソースを参照

+ darwin/ppc64 support for signal routines

git-svn-id: branches/fpc_2_3@6413 -
Jonas Maebe 18 年 前
コミット
f8c82e5504
3 ファイル変更22 行追加13 行削除
  1. 5 0
      rtl/bsd/system.pp
  2. 6 1
      rtl/darwin/powerpc/sig_cpu.inc
  3. 11 12
      rtl/darwin/signal.inc

+ 5 - 0
rtl/bsd/system.pp

@@ -147,6 +147,11 @@ begin
   { initialize handler                    }
   act.sa_handler :=@SignalToRunError;
   act.sa_flags:=SA_SIGINFO;
+{$if defined(darwin) and defined(cpu64)}
+  act.sa_flags:=SA_SIGINFO or SA_64REGSET;
+{$else}
+  act.sa_flags:=SA_SIGINFO;
+{$endif}
   FpSigAction(SIGFPE,act,oldact);
   FpSigAction(SIGSEGV,act,oldact);
   FpSigAction(SIGBUS,act,oldact);

+ 6 - 1
rtl/darwin/powerpc/sig_cpu.inc

@@ -79,7 +79,7 @@
   { Structure used in sigstack call. }
     tdarwin_stack_t = record
         ss_sp    : pchar;        { signal stack base }
-        ss_size  : cint;         { signal stack length }
+        ss_size  : clong;         { signal stack length }
         ss_flags : cint;         { SA_DISABLE and/or SA_ONSTACK }
     end;
 
@@ -249,8 +249,13 @@
 {$packrecords C}
 
      mcontext_t = record
+{$ifdef cpu64}
+        es: ppc_exception_state64_t;
+        ss: ppc_thread_state64_t;
+{$else cpu64}
         es: ppc_exception_state_t;
         ss: ppc_thread_state_t;
+{$endif cpu64}
         fs: ppc_float_state_t;
         vs: ppc_vector_state_t;
      end;

+ 11 - 12
rtl/darwin/signal.inc

@@ -66,11 +66,13 @@
     SA_NOCLDSTOP = 8;
     SA_ONSTACK   = $001; { take signal on signal stack }
     SA_RESTART   = $002; { restart system call on signal return }
+    SA_DISABLE   = $004; { disable taking signals on alternate stack }
     SA_RESETHAND = $004; { reset to SIG_DFL when taking signal }
     SA_NODEFER   = $010; { don't mask the signal we're delivering }
     SA_NOCLDWAIT = $020; { don't keep zombies around }
     SA_SIGINFO   = $040; { signal handler with SA_SIGINFO args }
     SA_USERTRAMP = $100; { SUNOS compat: Do not bounce off kernel's sigtramp }
+    SA_64REGSET  = $200; { SUNOS compat: Do not bounce off kernel's sigtramp }
 
   { hangup  }
      SIGHUP = 1;
@@ -173,15 +175,15 @@
     Sigset=sigset_t;
     PSigSet = ^TSigSet;
 
-{$ifdef cpupowerpc}
+{$if defined(cpupowerpc) or defined(cpupowerpc64)}
     {$include powerpc/sig_cpu.inc}    { SigContextRec }
-{$else cpupowerpc}
+{$else cpupowerpc or cpupowerpc64}
 {$ifdef cpui386}
     {$include i386/sig_cpu.inc}       { SigContextRec }
 {$else cpui386}
     {$error Unsupported cpu type!}
 {$endif cpui386}
-{$endif cpupowerpc}
+{$endif cpupowerpc or cpupowerpc64}
 
 
 
@@ -223,11 +225,11 @@ const
   type
      sigaltstack = record
   { signal stack base  }
-          ss_sp : ^char;
+          ss_sp : pchar;
   { signal stack length  }
-          ss_size : longint;
+          ss_size : clong;
   { SA_DISABLE and/or SA_ONSTACK  }
-          ss_flags : longint;
+          ss_flags : cint;
        end;
 
   { minimum allowable stack  }
@@ -245,11 +247,11 @@ const
   type
      sigvec = record
   { signal handler  }
-          sv_handler : procedure ;
+          sv_handler : procedure(para: cint);
   { signal mask to apply  }
-          sv_mask : longint;
+          sv_mask : cint;
   { see signal options below  }
-          sv_flags : longint;
+          sv_flags : cint;
        end;
 
 
@@ -268,6 +270,3 @@ const
      FPE_FLTSUB    =  6;  { subscript out of range -NOTIMP on Mac OS X 10.4.7 }
      FPE_INTDIV    =  7;  { integer divide by zero -NOTIMP on Mac OS X 10.4.7 }
      FPE_INTOVF    =  8;  { integer overflow -NOTIMP on Mac OS X 10.4.7 }
-
-
-