SYS.h revision 1.1
1/*	$NetBSD: SYS.h,v 1.1 2006/07/01 16:37:20 ross 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				_SYSCALL_NOERROR(x,y)		;\
23				bso	2b
24
25#define SYSCALL_NOERROR(x)	_SYSCALL_NOERROR(x,x)
26
27#define SYSCALL(x)		_SYSCALL(x,x)
28
29#define PSEUDO_NOERROR(x,y)	_SYSCALL_NOERROR(x,y)		;\
30				blr
31
32#define PSEUDO(x,y)		_SYSCALL_NOERROR(x,y)		;\
33				bnslr				;\
34				b	PIC_PLT(_C_LABEL(__cerror))
35
36#define RSYSCALL_NOERROR(x)	PSEUDO_NOERROR(x,x)
37
38#define RSYSCALL(x)		PSEUDO(x,x)
39
40#define	WSYSCALL(weak,strong)	WEAK_ALIAS(weak,strong)		;\
41				PSEUDO(strong,weak)
42