patch-2.4.0-test12 linux/arch/parisc/hpux/gate.S
Next file: linux/arch/parisc/hpux/ioctl.c
Previous file: linux/arch/parisc/hpux/fs.c
Back to the patch index
Back to the overall index
- Lines: 73
- Date:
Wed Dec 6 11:46:39 2000
- Orig file:
v2.4.0-test11/linux/arch/parisc/hpux/gate.S
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.4.0-test11/linux/arch/parisc/hpux/gate.S linux/arch/parisc/hpux/gate.S
@@ -0,0 +1,72 @@
+/* ------------------------------------------------------------------------------
+ *
+ * Linux/PARISC Project (http://www.thepuffingroup.com/parisc)
+ *
+ * System call entry code Copyright (c) Matthew Wilcox 1999 <willy@bofh.ai>
+ * Licensed under the GNU GPL.
+ * thanks to Philipp Rumpf, Mike Shaver and various others
+ * sorry about the wall, puffin..
+ */
+
+#define __ASSEMBLY__
+#include <asm/assembly.h>
+#include <asm/offset.h>
+#include <asm/unistd.h>
+#include <asm/errno.h>
+
+ .text
+
+ .import hpux_call_table
+ .import hpux_syscall_exit,code
+ .export hpux_gateway_page
+
+ .align 4096
+hpux_gateway_page:
+ nop
+ mfsp %sr7,%r1 ;! we must set sr3 to the space
+ mtsp %r1,%sr3 ;! of the user before the gate
+#ifdef __LP64__
+#warning NEEDS WORK for 64-bit
+#endif
+ ldw -64(%r30), %r28 ;! 8th argument
+ ldw -60(%r30), %r19 ;! 7th argument
+ ldw -56(%r30), %r20 ;! 6th argument
+ ldw -52(%r30), %r21 ;! 5th argument
+ gate .+8, %r0 ;! become privileged
+ mtsp %r0,%sr4 ;! get kernel space into sr4
+ mtsp %r0,%sr5 ;! get kernel space into sr5
+ mtsp %r0,%sr6 ;! get kernel space into sr6
+ mtsp %r0,%sr7 ;! get kernel space into sr7
+ mfctl %cr30,%r1 ;! get the kernel task ptr
+ mtctl %r0,%cr30 ;! zero it (flag)
+ STREG %r30,TASK_PT_GR30(%r1) ;! preserve userspace sp
+ STREG %r2,TASK_PT_GR2(%r1) ;! preserve rp
+ STREG %r27,TASK_PT_GR27(%r1) ;! user dp
+ STREG %r31,TASK_PT_GR31(%r1) ;! preserve syscall return ptr
+
+ loadgp ;! setup kernel dp
+
+ ldo TASK_SZ_ALGN+64(%r1),%r30 ;! set up kernel stack
+
+ stw %r21, -52(%r30) ;! 5th argument
+ stw %r20, -56(%r30) ;! 6th argument
+ stw %r19, -60(%r30) ;! 7th argument
+ stw %r28, -64(%r30) ;! 8th argument
+
+ ldil L%hpux_call_table, %r21
+ ldo R%hpux_call_table(%r21), %r21
+ comiclr,>>= __NR_HPUX_syscalls, %r22, %r0
+ b,n syscall_nosys
+ ldwx,s %r22(%r21), %r21
+ ldil L%hpux_syscall_exit,%r2
+ be 0(%sr7,%r21)
+ ldo R%hpux_syscall_exit(%r2),%r2
+
+syscall_nosys:
+ ldil L%hpux_syscall_exit,%r1
+ be R%hpux_syscall_exit(%sr7,%r1)
+ ldo -ENOSYS(%r0),%r28
+
+ .align 4096
+ .export end_hpux_gateway_page
+end_hpux_gateway_page:
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)