diff options
| author | Paul Mackerras <paulus@samba.org> | 2003-09-06 17:04:40 +1000 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2003-09-06 17:04:40 +1000 |
| commit | 756f1ae8a44e7214800de4e37dae4ab9b483038f (patch) | |
| tree | f1259f3c4240ed1ecd66616ab6139f1671d3e668 /arch/ppc/kernel/misc.S | |
| parent | 016b189409b4ae5fbdc75f19de2a2c4bbb4b7377 (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.S | 2 |
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 |
