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> 10#include <asm/asm-offsets.h> 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) 36LABEL(sunosnop): 37 CC_AND_RETT 38 39#if (ASIZ_task_uid == 2 && ASIZ_task_euid == 2) 40 .globl LABEL(sunosgetuid) 41LABEL(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) 51LABEL(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) 60LABEL(sunosmctl): 61 mov 0, %i0 62 CC_AND_RETT 63 64 .globl LABEL(sunosgdtsize) 65LABEL(sunosgdtsize): 66 mov 256, %i0 67 CC_AND_RETT 68 69 .globl LABEL(getpagesize) 70LABEL(getpagesize): 71 set PAGE_SIZE, %i0 72 CC_AND_RETT 73