Tue May 7 10:51:52 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
authorroland <roland>
Wed, 8 May 1996 02:02:09 +0000 (02:02 +0000)
committerroland <roland>
Wed, 8 May 1996 02:02:09 +0000 (02:02 +0000)
* hurd/hurdfault.c (_hurdsig_fault_catch_exception_raise): Use struct
hurd_signal_detail.
* hurd/catch-exc.c (_S_catch_exception_raise): Likewise.
* hurd/hurd-raise.c (_hurd_raise_signal): Likewise.
* sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler):
Likewise.
* sysdeps/mach/hurd/setitimer.c (restart_itimer): Likewise.

hurd/catch-exc.c
hurd/hurd-raise.c
hurd/hurdfault.c
sysdeps/mach/hurd/i386/trampoline.c
sysdeps/mach/hurd/setitimer.c

index 8ab38a2..e3186eb 100644 (file)
@@ -29,18 +29,21 @@ _S_catch_exception_raise (mach_port_t port,
                          int code,
                          int subcode)
 {
-  int signo, error;
-  long int sigcode;
   struct hurd_sigstate *ss;
+  int signo;
+  struct hurd_signal_detail d;
 
   if (task != __mach_task_self ())
     /* The sender wasn't the kernel.  */
     return EPERM;
 
+  d.exc = exception;
+  d.exc_code = code;
+  d.exc_subcode = subcode;
+
   /* Call the machine-dependent function to translate the Mach exception
      codes into a signal number and subcode.  */
-  _hurd_exception2signal (exception, code, subcode,
-                         &signo, &sigcode, &error);
+  _hurd_exception2signal (&d, &signo);
 
   /* Find the sigstate structure for the faulting thread.  */
   __mutex_lock (&_hurd_siglock);
@@ -70,7 +73,7 @@ _S_catch_exception_raise (mach_port_t port,
     }
 
   /* Post the signal.  */
-  _hurd_internal_post_signal (ss, signo, sigcode, error,
+  _hurd_internal_post_signal (ss, signo, &d,
                              MACH_PORT_NULL, MACH_MSG_TYPE_PORT_SEND,
                              0);
 
index 59179da..8ebe2c8 100644 (file)
@@ -27,7 +27,7 @@ Cambridge, MA 02139, USA.  */
 
 void
 _hurd_raise_signal (struct hurd_sigstate *ss,
-                   int signo, long int sigcode, int sigerror)
+                   int signo, const struct hurd_signal_detail *detail)
 {
   if (ss == NULL)
     {
@@ -37,12 +37,11 @@ _hurd_raise_signal (struct hurd_sigstate *ss,
 
   /* Mark SIGNO as pending to be delivered.  */
   __sigaddset (&ss->pending, signo);
-  ss->pending_data[signo].code = sigcode;
-  ss->pending_data[signo].error = sigerror;
+  ss->pending_data[signo] = *detail;
 
   __spin_unlock (&ss->lock);
 
   /* Send a message to the signal thread so it
      will wake up and check for pending signals.  */
-  __msg_sig_post (_hurd_msgport, signo, sigcode, __mach_task_self ());
+  __msg_sig_post (_hurd_msgport, signo, detail->code, __mach_task_self ());
 }
index bb6fa95..a8fe8fb 100644 (file)
@@ -42,19 +42,21 @@ _hurdsig_fault_catch_exception_raise (mach_port_t port,
                                      int subcode)
 {
   int signo;
-  long int sigcode;
-  int sigerror;
+  struct hurd_signal_detail d;
 
   if (port != forward_sigexc ||
       thread != _hurd_msgport_thread || task != __mach_task_self ())
     return EPERM;              /* Strange bogosity.  */
 
+  d.exc = exception;
+  d.exc_code = code;
+  d.exc_subcode = subcode;
+
   /* Call the machine-dependent function to translate the Mach exception
      codes into a signal number and subcode.  */
-  _hurd_exception2signal (exception, code, subcode,
-                         &signo, &sigcode, &sigerror);
+  _hurd_exception2signal (&d, &signo);
 
-  return HURD_PREEMPT_SIGNAL_P (&_hurdsig_fault_preempter, signo, sigcode)
+  return HURD_PREEMPT_SIGNAL_P (&_hurdsig_fault_preempter, signo, d.code)
     ? 0 : EGREGIOUS;
 }
 
index bd91c24..a2b2897 100644 (file)
@@ -28,7 +28,7 @@ Cambridge, MA 02139, USA.  */
 
 struct sigcontext *
 _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler,
-                       int signo, long int sigcode,
+                       int signo, struct hurd_signal_detail *detail,
                        volatile int rpc_wait,
                        struct machine_thread_all_state *state)
 {
@@ -137,7 +137,7 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler,
 
       /* Set up the arguments for the signal handler.  */
       stackframe->signo = signo;
-      stackframe->sigcode = sigcode;
+      stackframe->sigcode = detail->code;
       stackframe->scp = stackframe->return_scp = scp = &stackframe->ctx;
       stackframe->sigreturn_addr = &__sigreturn;
       stackframe->sigreturn_returns_here = &&firewall; /* Crash on return.  */
index cba1d0e..9ee33e0 100644 (file)
@@ -114,8 +114,7 @@ timer_thread (void)
 static sighandler_t
 restart_itimer (struct hurd_signal_preempter *preempter,
                struct hurd_sigstate *ss,
-               int *signo, long int *sigcode,
-               int *sigerror)
+               int *signo, struct hurd_signal_detail *detail)
 {
   static int setitimer_locked (const struct itimerval *new,
                               struct itimerval *old, void *crit);