| /* sclow.S: Low level special syscall handling. | 
 |  *          Basically these are cases where we can completely | 
 |  *          handle the system call without saving any state | 
 |  *          because we know that the process will not sleep. | 
 |  * | 
 |  * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) | 
 |  */ | 
 |  | 
 | #include <asm/ptrace.h> | 
 | #include <asm/asm-offsets.h> | 
 | #include <asm/errno.h> | 
 | #include <asm/winmacro.h> | 
 | #include <asm/thread_info.h> | 
 | #include <asm/psr.h> | 
 | #include <asm/page.h> | 
 |  | 
 | #define CC_AND_RETT  \ | 
 | 	set	PSR_C, %l4; \ | 
 | 	andn	%l0, %l4, %l4; \ | 
 | 	wr	%l4, 0x0, %psr; \ | 
 | 	nop; nop; nop; \ | 
 | 	jmp	%l2; \ | 
 | 	rett	%l2 + 4; | 
 |  | 
 | #define SC_AND_RETT  \ | 
 | 	set	PSR_C, %l4; \ | 
 | 	or	%l0, %l4, %l4; \ | 
 | 	wr	%l4, 0x0, %psr; \ | 
 | 	nop; nop; nop; \ | 
 | 	jmp	%l2; \ | 
 | 	rett	%l2 + 4; | 
 |  | 
 | #define LABEL(func)  func##_low | 
 |  | 
 | 	.globl	LABEL(sunosnop) | 
 | LABEL(sunosnop): | 
 | 	CC_AND_RETT | 
 |  | 
 | #if (ASIZ_task_uid == 2 && ASIZ_task_euid == 2) | 
 | 	.globl	LABEL(sunosgetuid) | 
 | LABEL(sunosgetuid): | 
 | 	LOAD_CURRENT(l4, l5) | 
 | 	ld	[%l4 + TI_TASK], %l4 | 
 | 	lduh	[%l4 + AOFF_task_uid], %i0 | 
 | 	lduh	[%l4 + AOFF_task_euid], %i1 | 
 | 	CC_AND_RETT | 
 | #endif | 
 |  | 
 | #if (ASIZ_task_gid == 2 && ASIZ_task_egid == 2) | 
 | 	.globl	LABEL(sunosgetgid) | 
 | LABEL(sunosgetgid): | 
 | 	LOAD_CURRENT(l4, l5) | 
 | 	ld	[%l4 + TI_TASK], %l4 | 
 | 	lduh	[%l4 + AOFF_task_gid], %i0 | 
 | 	lduh	[%l4 + AOFF_task_egid], %i1 | 
 | 	CC_AND_RETT | 
 | #endif | 
 |  | 
 | 	.globl	LABEL(sunosmctl) | 
 | LABEL(sunosmctl): | 
 | 	mov	0, %i0 | 
 | 	CC_AND_RETT | 
 |  | 
 | 	.globl	LABEL(sunosgdtsize) | 
 | LABEL(sunosgdtsize):	 | 
 | 	mov	256, %i0 | 
 | 	CC_AND_RETT | 
 |  | 
 | 	.globl	LABEL(getpagesize) | 
 | LABEL(getpagesize): | 
 | 	set	PAGE_SIZE, %i0 | 
 | 	CC_AND_RETT | 
 |  | 
 | 	/* XXX sys_nice() XXX */ | 
 | 	/* XXX sys_setpriority() XXX */ | 
 | 	/* XXX sys_getpriority() XXX */ | 
 | 	/* XXX sys_setregid() XXX */ | 
 | 	/* XXX sys_setgid() XXX */ | 
 | 	/* XXX sys_setreuid() XXX */ | 
 | 	/* XXX sys_setuid() XXX */ | 
 | 	/* XXX sys_setfsuid() XXX */ | 
 | 	/* XXX sys_setfsgid() XXX */ | 
 | 	/* XXX sys_setpgid() XXX */ | 
 | 	/* XXX sys_getpgid() XXX */ | 
 | 	/* XXX sys_setsid() XXX */ | 
 | 	/* XXX sys_getsid() XXX */ |