patch-2.4.7 linux/arch/cris/kernel/signal.c
Next file: linux/arch/cris/kernel/sys_cris.c
Previous file: linux/arch/cris/kernel/setup.c
Back to the patch index
Back to the overall index
- Lines: 65
- Date:
Wed Jul 4 11:50:39 2001
- Orig file:
v2.4.6/linux/arch/cris/kernel/signal.c
- Orig date:
Tue May 1 16:04:56 2001
diff -u --recursive --new-file v2.4.6/linux/arch/cris/kernel/signal.c linux/arch/cris/kernel/signal.c
@@ -7,7 +7,7 @@
*
* Ideas also taken from arch/arm.
*
- * Copyright (C) 2000 Axis Communications AB
+ * Copyright (C) 2000, 2001 Axis Communications AB
*
* Authors: Bjorn Wesen (bjornw@axis.com)
*
@@ -101,7 +101,14 @@
current->state = TASK_INTERRUPTIBLE;
schedule();
if (do_signal(0, &saveset, regs))
- return -EINTR;
+ /* We will get here twice: once to call the signal
+ handler, then again to return from the
+ sigsuspend system call. When calling the
+ signal handler, R10 holds the signal number as
+ set through do_signal. The sigsuspend call
+ will return with the restored value set above;
+ always -EINTR. */
+ return regs->r10;
}
}
@@ -133,7 +140,14 @@
current->state = TASK_INTERRUPTIBLE;
schedule();
if (do_signal(0, &saveset, regs))
- return -EINTR;
+ /* We will get here twice: once to call the signal
+ handler, then again to return from the
+ sigsuspend system call. When calling the
+ signal handler, R10 holds the signal number as
+ set through do_signal. The sigsuspend call
+ will return with the restored value set above;
+ always -EINTR. */
+ return regs->r10;
}
}
@@ -413,6 +427,7 @@
regs->irp = (unsigned long) ka->sa.sa_handler; /* what we enter NOW */
regs->srp = return_ip; /* what we enter LATER */
+ regs->r10 = sig; /* first argument is signo */
/* actually move the usp to reflect the stacked frame */
@@ -462,7 +477,6 @@
/* trampoline - the desired return ip is the retcode itself */
return_ip = (unsigned long)&frame->retcode;
/* This is movu.w __NR_sigreturn, r9; break 13; */
- /* TODO: check byteorder */
err |= __put_user(0x9c5f, (short *)(frame->retcode+0));
err |= __put_user(__NR_sigreturn, (short *)(frame->retcode+2));
err |= __put_user(0xe93d, (short *)(frame->retcode+4));
@@ -477,6 +491,7 @@
regs->irp = (unsigned long) ka->sa.sa_handler; /* what we enter NOW */
regs->srp = return_ip; /* what we enter LATER */
+ regs->r10 = sig; /* first argument is signo */
/* actually move the usp to reflect the stacked frame */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)