|  | /* 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 */ |