1 /* $NetBSD: SYS.h,v 1.2 2010/03/22 02:17:23 mrg Exp $ */ 2 3 #include <machine/asm.h> 4 #include <sys/syscall.h> 5 6 #ifdef __STDC__ 7 #define _DOSYSCALL(x) li %r0,(SYS_ ## x) ;\ 8 sc 9 #else 10 #define _DOSYSCALL(x) li %r0,(SYS_/**/x) ;\ 11 sc 12 #endif /* __STDC__ */ 13 14 #define _SYSCALL_NOERROR(x,y) .text ;\ 15 .align 2 ;\ 16 ENTRY(x) ;\ 17 _DOSYSCALL(y) 18 19 #define _SYSCALL(x,y) .text ;\ 20 .align 2 ;\ 21 2: b PIC_PLT(_C_LABEL(__cerror));\ 22 nop ;\ 23 _SYSCALL_NOERROR(x,y) ;\ 24 bso 2b 25 26 #define SYSCALL_NOERROR(x) _SYSCALL_NOERROR(x,x) 27 28 #define SYSCALL(x) _SYSCALL(x,x) 29 30 #define PSEUDO_NOERROR(x,y) _SYSCALL_NOERROR(x,y) ;\ 31 blr 32 33 #define PSEUDO(x,y) _SYSCALL_NOERROR(x,y) ;\ 34 bnslr ;\ 35 b PIC_PLT(_C_LABEL(__cerror));\ 36 nop 37 38 #define RSYSCALL_NOERROR(x) PSEUDO_NOERROR(x,x) 39 40 #define RSYSCALL(x) PSEUDO(x,x) 41 42 #define WSYSCALL(weak,strong) WEAK_ALIAS(weak,strong) ;\ 43 PSEUDO(strong,weak) 44