summaryrefslogtreecommitdiff
path: root/arch/ppc/kernel/misc.S
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2003-09-06 17:04:40 +1000
committerPaul Mackerras <paulus@samba.org>2003-09-06 17:04:40 +1000
commit756f1ae8a44e7214800de4e37dae4ab9b483038f (patch)
treef1259f3c4240ed1ecd66616ab6139f1671d3e668 /arch/ppc/kernel/misc.S
parent016b189409b4ae5fbdc75f19de2a2c4bbb4b7377 (diff)
PPC32: Rework signal code and add a swapcontext system call.
The main thing here is that the signal delivery/return code for real-time signals has been changed so that the layout of the registers corresponds with the new ucontext_t definition being used by glibc. The old ucontext_t didn't have space to actually store the registers, just a pointer to them, which made it impossible to implement set/getcontext et al. The new ucontext_t includes a mcontext_t which actually contains space to store all of the general, floating pointer and vector registers. We now also save the altivec registers on signal delivery and restore them on return from the signal if the process has ever used altivec (since the last exec). Finally this adds a swapcontext system call. Swapcontext really needs to be done in the kernel since on PPC, only privileged code can set all three of CTR, LR and NIA (next instruction address) to arbitrary values. Also the kernel know if the process currently owns the FP and altivec units and can optimize in the case where it doesn't.
Diffstat (limited to 'arch/ppc/kernel/misc.S')
-rw-r--r--arch/ppc/kernel/misc.S2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/ppc/kernel/misc.S b/arch/ppc/kernel/misc.S
index a41d10ee1614..b5f86a6d3267 100644
--- a/arch/ppc/kernel/misc.S
+++ b/arch/ppc/kernel/misc.S
@@ -1379,7 +1379,7 @@ _GLOBAL(sys_call_table)
.long sys_clock_gettime
.long sys_clock_getres
.long sys_clock_nanosleep
- .long sys_ni_syscall /* reserved for swapcontext */
+ .long sys_swapcontext
.long sys_tgkill /* 250 */
.long sys_utimes
.long sys_statfs64