1*38dcdc34Smatt /* $NetBSD: SYS.h,v 1.13 2014/08/23 02:24:22 matt Exp $ */ 25ef4bdf6Sthorpej 35ef4bdf6Sthorpej #include <machine/asm.h> 45ef4bdf6Sthorpej #include <sys/syscall.h> 55ef4bdf6Sthorpej 6*38dcdc34Smatt #define BRANCH_TO_CERROR() b _C_LABEL(__cerror) 7*38dcdc34Smatt 81cddd41eSmatt #define _DOSYSCALL(x) li %r0,(SYS_ ## x) ;\ 92913a7a8Skleink sc 105ef4bdf6Sthorpej 1191969428Sthorpej #define _SYSCALL_NOERROR(x,y) .text ;\ 12*38dcdc34Smatt .p2align 2 ;\ 1391969428Sthorpej ENTRY(x) ;\ 1491969428Sthorpej _DOSYSCALL(y) 155ef4bdf6Sthorpej 162913a7a8Skleink #define _SYSCALL(x,y) .text ;\ 17*38dcdc34Smatt .p2align 2 ;\ 18*38dcdc34Smatt 2: BRANCH_TO_CERROR() ;\ 192913a7a8Skleink _SYSCALL_NOERROR(x,y) ;\ 205ef4bdf6Sthorpej bso 2b 215ef4bdf6Sthorpej 222913a7a8Skleink #define SYSCALL_NOERROR(x) _SYSCALL_NOERROR(x,x) 232913a7a8Skleink 242913a7a8Skleink #define SYSCALL(x) _SYSCALL(x,x) 252913a7a8Skleink 262913a7a8Skleink #define PSEUDO_NOERROR(x,y) _SYSCALL_NOERROR(x,y) ;\ 27cf88c389Smatt blr ;\ 28cf88c389Smatt END(x) 292913a7a8Skleink 302913a7a8Skleink #define PSEUDO(x,y) _SYSCALL_NOERROR(x,y) ;\ 31c5f0b614Skleink bnslr ;\ 32*38dcdc34Smatt BRANCH_TO_CERROR() ;\ 33cf88c389Smatt END(x) 342913a7a8Skleink 352913a7a8Skleink #define RSYSCALL_NOERROR(x) PSEUDO_NOERROR(x,x) 362913a7a8Skleink 372913a7a8Skleink #define RSYSCALL(x) PSEUDO(x,x) 38ac8c1c29Sthorpej 39ac8c1c29Sthorpej #define WSYSCALL(weak,strong) WEAK_ALIAS(weak,strong) ;\ 40ac8c1c29Sthorpej PSEUDO(strong,weak) 41