| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* sclow.S: Low level special syscall handling. | 
|  | 2 | *          Basically these are cases where we can completely | 
|  | 3 | *          handle the system call without saving any state | 
|  | 4 | *          because we know that the process will not sleep. | 
|  | 5 | * | 
|  | 6 | * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) | 
|  | 7 | */ | 
|  | 8 |  | 
|  | 9 | #include <asm/ptrace.h> | 
| Sam Ravnborg | 4700349 | 2005-09-09 20:35:55 +0200 | [diff] [blame] | 10 | #include <asm/asm-offsets.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 11 | #include <asm/errno.h> | 
|  | 12 | #include <asm/winmacro.h> | 
|  | 13 | #include <asm/thread_info.h> | 
|  | 14 | #include <asm/psr.h> | 
|  | 15 | #include <asm/page.h> | 
|  | 16 |  | 
|  | 17 | #define CC_AND_RETT  \ | 
|  | 18 | set	PSR_C, %l4; \ | 
|  | 19 | andn	%l0, %l4, %l4; \ | 
|  | 20 | wr	%l4, 0x0, %psr; \ | 
|  | 21 | nop; nop; nop; \ | 
|  | 22 | jmp	%l2; \ | 
|  | 23 | rett	%l2 + 4; | 
|  | 24 |  | 
|  | 25 | #define SC_AND_RETT  \ | 
|  | 26 | set	PSR_C, %l4; \ | 
|  | 27 | or	%l0, %l4, %l4; \ | 
|  | 28 | wr	%l4, 0x0, %psr; \ | 
|  | 29 | nop; nop; nop; \ | 
|  | 30 | jmp	%l2; \ | 
|  | 31 | rett	%l2 + 4; | 
|  | 32 |  | 
|  | 33 | #define LABEL(func)  func##_low | 
|  | 34 |  | 
|  | 35 | .globl	LABEL(sunosnop) | 
|  | 36 | LABEL(sunosnop): | 
|  | 37 | CC_AND_RETT | 
|  | 38 |  | 
|  | 39 | #if (ASIZ_task_uid == 2 && ASIZ_task_euid == 2) | 
|  | 40 | .globl	LABEL(sunosgetuid) | 
|  | 41 | LABEL(sunosgetuid): | 
|  | 42 | LOAD_CURRENT(l4, l5) | 
|  | 43 | ld	[%l4 + TI_TASK], %l4 | 
|  | 44 | lduh	[%l4 + AOFF_task_uid], %i0 | 
|  | 45 | lduh	[%l4 + AOFF_task_euid], %i1 | 
|  | 46 | CC_AND_RETT | 
|  | 47 | #endif | 
|  | 48 |  | 
|  | 49 | #if (ASIZ_task_gid == 2 && ASIZ_task_egid == 2) | 
|  | 50 | .globl	LABEL(sunosgetgid) | 
|  | 51 | LABEL(sunosgetgid): | 
|  | 52 | LOAD_CURRENT(l4, l5) | 
|  | 53 | ld	[%l4 + TI_TASK], %l4 | 
|  | 54 | lduh	[%l4 + AOFF_task_gid], %i0 | 
|  | 55 | lduh	[%l4 + AOFF_task_egid], %i1 | 
|  | 56 | CC_AND_RETT | 
|  | 57 | #endif | 
|  | 58 |  | 
|  | 59 | .globl	LABEL(sunosmctl) | 
|  | 60 | LABEL(sunosmctl): | 
|  | 61 | mov	0, %i0 | 
|  | 62 | CC_AND_RETT | 
|  | 63 |  | 
|  | 64 | .globl	LABEL(sunosgdtsize) | 
|  | 65 | LABEL(sunosgdtsize): | 
|  | 66 | mov	256, %i0 | 
|  | 67 | CC_AND_RETT | 
|  | 68 |  | 
|  | 69 | .globl	LABEL(getpagesize) | 
|  | 70 | LABEL(getpagesize): | 
|  | 71 | set	PAGE_SIZE, %i0 | 
|  | 72 | CC_AND_RETT | 
|  | 73 |  | 
|  | 74 | /* XXX sys_nice() XXX */ | 
|  | 75 | /* XXX sys_setpriority() XXX */ | 
|  | 76 | /* XXX sys_getpriority() XXX */ | 
|  | 77 | /* XXX sys_setregid() XXX */ | 
|  | 78 | /* XXX sys_setgid() XXX */ | 
|  | 79 | /* XXX sys_setreuid() XXX */ | 
|  | 80 | /* XXX sys_setuid() XXX */ | 
|  | 81 | /* XXX sys_setfsuid() XXX */ | 
|  | 82 | /* XXX sys_setfsgid() XXX */ | 
|  | 83 | /* XXX sys_setpgid() XXX */ | 
|  | 84 | /* XXX sys_getpgid() XXX */ | 
|  | 85 | /* XXX sys_setsid() XXX */ | 
|  | 86 | /* XXX sys_getsid() XXX */ |