|  | @@ -9,287 +9,98 @@
 | 
	
		
			
				|  |  |  #include <errno.h>
 | 
	
		
			
				|  |  |  #include <asm/traps.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define __syscall_return(type, res) \
 | 
	
		
			
				|  |  | -do { \
 | 
	
		
			
				|  |  | -	if ((unsigned long)(res) >= (unsigned long)(-125)) { \
 | 
	
		
			
				|  |  | -                                                                        \
 | 
	
		
			
				|  |  | -                /* avoid using res which is declared to be in           \
 | 
	
		
			
				|  |  | -                    register r2; errno might expand to a function       \
 | 
	
		
			
				|  |  | -                    call and clobber it.                          */    \
 | 
	
		
			
				|  |  | -                                                                        \
 | 
	
		
			
				|  |  | -		int __err = -(res); \
 | 
	
		
			
				|  |  | -		errno = __err; \
 | 
	
		
			
				|  |  | -		res = -1; \
 | 
	
		
			
				|  |  | -	} \
 | 
	
		
			
				|  |  | -	return (type) (res); \
 | 
	
		
			
				|  |  | -} while (0)
 | 
	
		
			
				|  |  | +#define __syscall_return(type, res)					\
 | 
	
		
			
				|  |  | +	do {								\
 | 
	
		
			
				|  |  | +		if (unlikely(INTERNAL_SYSCALL_ERROR_P(res, ))) {	\
 | 
	
		
			
				|  |  | +			__set_errno(INTERNAL_SYSCALL_ERRNO(res, ));	\
 | 
	
		
			
				|  |  | +			res = (unsigned long) -1;			\
 | 
	
		
			
				|  |  | +		}							\
 | 
	
		
			
				|  |  | +		return (type) (res);					\
 | 
	
		
			
				|  |  | +	} while (0)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define _syscall0(type,name) \
 | 
	
		
			
				|  |  | -type name(void) \
 | 
	
		
			
				|  |  | -{ \
 | 
	
		
			
				|  |  | -    long __res;                                             \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -    __asm__ __volatile__ (                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \
 | 
	
		
			
				|  |  | -        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    trap\n\t"                                      \
 | 
	
		
			
				|  |  | -        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "=r" (__res)              /* %0              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "i" (__NR_##name)         /* %1              */ \
 | 
	
		
			
				|  |  | -          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "r2"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r3"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -        );                                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -__syscall_return(type,__res); \
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +#define INTERNAL_SYSCALL_NCS(name, err, nr, args...)			\
 | 
	
		
			
				|  |  | +	({								\
 | 
	
		
			
				|  |  | +		long __res;						\
 | 
	
		
			
				|  |  | +		__asm__ __volatile__ (					\
 | 
	
		
			
				|  |  | +			"movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \
 | 
	
		
			
				|  |  | +			"movi    r3,    %1\n\t"   /* __NR_##name     */	\
 | 
	
		
			
				|  |  | +			ASM_ARGS_##nr					\
 | 
	
		
			
				|  |  | +			"trap\n\t"					\
 | 
	
		
			
				|  |  | +			"mov     %0,    r2\n\t"   /* syscall return  */	\
 | 
	
		
			
				|  |  | +			:   "=r" (__res)          /* %0              */	\
 | 
	
		
			
				|  |  | +			:   "i" (name)            /* %1              */	\
 | 
	
		
			
				|  |  | +			  , "i" (TRAP_ID_SYSCALL) /* %2              */	\
 | 
	
		
			
				|  |  | +			  MAP_ARGS_##nr (args)    /* %3-%8           */	\
 | 
	
		
			
				|  |  | +			:   "r2"					\
 | 
	
		
			
				|  |  | +			  , "r3"					\
 | 
	
		
			
				|  |  | +			  CLOB_ARGS_##nr          /* Clobbered       */ \
 | 
	
		
			
				|  |  | +		);							\
 | 
	
		
			
				|  |  | +		__res;							\
 | 
	
		
			
				|  |  | +	})
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define _syscall1(type,name,atype,a) \
 | 
	
		
			
				|  |  | -type name(atype a) \
 | 
	
		
			
				|  |  | -{ \
 | 
	
		
			
				|  |  | -    long __res;                                             \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -    __asm__ __volatile__ (                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \
 | 
	
		
			
				|  |  | -        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \
 | 
	
		
			
				|  |  | -        "    mov     r4,    %3\n\t"   /* (long) a        */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    trap\n\t"                                      \
 | 
	
		
			
				|  |  | -        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "=r" (__res)              /* %0              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "i" (__NR_##name)         /* %1              */ \
 | 
	
		
			
				|  |  | -          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) a)            /* %3              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "r2"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r3"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r4"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -        );                                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -__syscall_return(type,__res); \
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +#define INTERNAL_SYSCALL_ERROR_P(val, err)	\
 | 
	
		
			
				|  |  | +	((unsigned long)(val) >= (unsigned long)(-125))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define _syscall2(type,name,atype,a,btype,b) \
 | 
	
		
			
				|  |  | -type name(atype a,btype b) \
 | 
	
		
			
				|  |  | -{ \
 | 
	
		
			
				|  |  | -    long __res;                                             \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -    __asm__ __volatile__ (                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \
 | 
	
		
			
				|  |  | -        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \
 | 
	
		
			
				|  |  | -        "    mov     r4,    %3\n\t"   /* (long) a        */ \
 | 
	
		
			
				|  |  | -        "    mov     r5,    %4\n\t"   /* (long) b        */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    trap\n\t"                                      \
 | 
	
		
			
				|  |  | -        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "=r" (__res)              /* %0              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "i" (__NR_##name)         /* %1              */ \
 | 
	
		
			
				|  |  | -          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) a)            /* %3              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) b)            /* %4              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "r2"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r3"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r4"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r5"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -        );                                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -__syscall_return(type,__res); \
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +#define ASM_ARGS_0
 | 
	
		
			
				|  |  | +#define MAP_ARGS_0()
 | 
	
		
			
				|  |  | +#define CLOB_ARGS_0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
 | 
	
		
			
				|  |  | -type name(atype a,btype b,ctype c) \
 | 
	
		
			
				|  |  | -{ \
 | 
	
		
			
				|  |  | -    long __res;                                             \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -    __asm__ __volatile__ (                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \
 | 
	
		
			
				|  |  | -        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \
 | 
	
		
			
				|  |  | -        "    mov     r4,    %3\n\t"   /* (long) a        */ \
 | 
	
		
			
				|  |  | -        "    mov     r5,    %4\n\t"   /* (long) b        */ \
 | 
	
		
			
				|  |  | -        "    mov     r6,    %5\n\t"   /* (long) c        */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    trap\n\t"                                      \
 | 
	
		
			
				|  |  | -        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "=r" (__res)              /* %0              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "i" (__NR_##name)         /* %1              */ \
 | 
	
		
			
				|  |  | -          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) a)            /* %3              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) b)            /* %4              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) c)            /* %5              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "r2"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r3"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r4"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r5"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r6"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -        );                                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -__syscall_return(type,__res); \
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +#define ASM_ARGS_1		\
 | 
	
		
			
				|  |  | +	"mov     r4,    %3\n\t"
 | 
	
		
			
				|  |  | +#define MAP_ARGS_1(a)		\
 | 
	
		
			
				|  |  | +	, "r" ((long) a)
 | 
	
		
			
				|  |  | +#define CLOB_ARGS_1		\
 | 
	
		
			
				|  |  | +	, "r4"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
 | 
	
		
			
				|  |  | -type name (atype a, btype b, ctype c, dtype d) \
 | 
	
		
			
				|  |  | -{ \
 | 
	
		
			
				|  |  | -    long __res;                                             \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -    __asm__ __volatile__ (                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \
 | 
	
		
			
				|  |  | -        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \
 | 
	
		
			
				|  |  | -        "    mov     r4,    %3\n\t"   /* (long) a        */ \
 | 
	
		
			
				|  |  | -        "    mov     r5,    %4\n\t"   /* (long) b        */ \
 | 
	
		
			
				|  |  | -        "    mov     r6,    %5\n\t"   /* (long) c        */ \
 | 
	
		
			
				|  |  | -        "    mov     r7,    %6\n\t"   /* (long) d        */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    trap\n\t"                                      \
 | 
	
		
			
				|  |  | -        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "=r" (__res)              /* %0              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "i" (__NR_##name)         /* %1              */ \
 | 
	
		
			
				|  |  | -          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) a)            /* %3              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) b)            /* %4              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) c)            /* %5              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) d)            /* %6              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "r2"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r3"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r4"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r5"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r6"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r7"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -        );                                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -__syscall_return(type,__res); \
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +#define ASM_ARGS_2		\
 | 
	
		
			
				|  |  | +	ASM_ARGS_1		\
 | 
	
		
			
				|  |  | +	"mov     r5,    %4\n\t"
 | 
	
		
			
				|  |  | +#define MAP_ARGS_2(a, b)	\
 | 
	
		
			
				|  |  | +	MAP_ARGS_1(a)		\
 | 
	
		
			
				|  |  | +	, "r" ((long) b)
 | 
	
		
			
				|  |  | +#define CLOB_ARGS_2		\
 | 
	
		
			
				|  |  | +	CLOB_ARGS_1		\
 | 
	
		
			
				|  |  | +	, "r5"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
 | 
	
		
			
				|  |  | -type name (atype a,btype b,ctype c,dtype d,etype e) \
 | 
	
		
			
				|  |  | -{ \
 | 
	
		
			
				|  |  | -    long __res;                                             \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -    __asm__ __volatile__ (                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \
 | 
	
		
			
				|  |  | -        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \
 | 
	
		
			
				|  |  | -        "    mov     r4,    %3\n\t"   /* (long) a        */ \
 | 
	
		
			
				|  |  | -        "    mov     r5,    %4\n\t"   /* (long) b        */ \
 | 
	
		
			
				|  |  | -        "    mov     r6,    %5\n\t"   /* (long) c        */ \
 | 
	
		
			
				|  |  | -        "    mov     r7,    %6\n\t"   /* (long) c        */ \
 | 
	
		
			
				|  |  | -        "    mov     r8,    %7\n\t"   /* (long) e        */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    trap\n\t"                                      \
 | 
	
		
			
				|  |  | -        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "=r" (__res)              /* %0              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "i" (__NR_##name)         /* %1              */ \
 | 
	
		
			
				|  |  | -          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) a)            /* %3              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) b)            /* %4              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) c)            /* %5              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) d)            /* %6              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) e)            /* %7              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "r2"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r3"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r4"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r5"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r6"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r7"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r8"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -        );                                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -__syscall_return(type,__res); \
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +#define ASM_ARGS_3		\
 | 
	
		
			
				|  |  | +	ASM_ARGS_2		\
 | 
	
		
			
				|  |  | +	"mov     r6,    %5\n\t"
 | 
	
		
			
				|  |  | +#define MAP_ARGS_3(a, b, c)	\
 | 
	
		
			
				|  |  | +	MAP_ARGS_2(a, b)	\
 | 
	
		
			
				|  |  | +	, "r" ((long) c)
 | 
	
		
			
				|  |  | +#define CLOB_ARGS_3		\
 | 
	
		
			
				|  |  | +	CLOB_ARGS_2		\
 | 
	
		
			
				|  |  | +	, "r6"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
 | 
	
		
			
				|  |  | -type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \
 | 
	
		
			
				|  |  | -{ \
 | 
	
		
			
				|  |  | -    long __res;                                             \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -    __asm__ __volatile__ (                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \
 | 
	
		
			
				|  |  | -        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \
 | 
	
		
			
				|  |  | -        "    mov     r4,    %3\n\t"   /* (long) a        */ \
 | 
	
		
			
				|  |  | -        "    mov     r5,    %4\n\t"   /* (long) b        */ \
 | 
	
		
			
				|  |  | -        "    mov     r6,    %5\n\t"   /* (long) c        */ \
 | 
	
		
			
				|  |  | -        "    mov     r7,    %6\n\t"   /* (long) c        */ \
 | 
	
		
			
				|  |  | -        "    mov     r8,    %7\n\t"   /* (long) e        */ \
 | 
	
		
			
				|  |  | -        "    mov     r9,    %8\n\t"   /* (long) f        */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    trap\n\t"                                      \
 | 
	
		
			
				|  |  | -        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        "    \n\t"                                          \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "=r" (__res)              /* %0              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "i" (__NR_##name)         /* %1              */ \
 | 
	
		
			
				|  |  | -          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) a)            /* %3              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) b)            /* %4              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) c)            /* %5              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) d)            /* %6              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) e)            /* %7              */ \
 | 
	
		
			
				|  |  | -          , "r" ((long) f)            /* %8              */ \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -        :   "r2"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r3"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r4"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r5"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r6"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r7"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r8"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -          , "r9"                      /* Clobbered       */ \
 | 
	
		
			
				|  |  | -        );                                                  \
 | 
	
		
			
				|  |  | -                                                            \
 | 
	
		
			
				|  |  | -__syscall_return(type,__res); \
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +#define ASM_ARGS_4		\
 | 
	
		
			
				|  |  | +	ASM_ARGS_3		\
 | 
	
		
			
				|  |  | +	"mov     r7,    %6\n\t"
 | 
	
		
			
				|  |  | +#define MAP_ARGS_4(a, b, c, d)	\
 | 
	
		
			
				|  |  | +	MAP_ARGS_3(a, b, c)	\
 | 
	
		
			
				|  |  | +	, "r" ((long) d)
 | 
	
		
			
				|  |  | +#define CLOB_ARGS_4		\
 | 
	
		
			
				|  |  | +	CLOB_ARGS_3		\
 | 
	
		
			
				|  |  | +	, "r7"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define ASM_ARGS_5		\
 | 
	
		
			
				|  |  | +	ASM_ARGS_4		\
 | 
	
		
			
				|  |  | +	"mov     r8,    %7\n\t"
 | 
	
		
			
				|  |  | +#define MAP_ARGS_5(a, b, c, d, e)	\
 | 
	
		
			
				|  |  | +	MAP_ARGS_4(a, b, c, d)		\
 | 
	
		
			
				|  |  | +	, "r" ((long) e)
 | 
	
		
			
				|  |  | +#define CLOB_ARGS_5		\
 | 
	
		
			
				|  |  | +	CLOB_ARGS_4		\
 | 
	
		
			
				|  |  | +	, "r8"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define ASM_ARGS_6		\
 | 
	
		
			
				|  |  | +	ASM_ARGS_5		\
 | 
	
		
			
				|  |  | +	"mov     r9,    %8\n\t"
 | 
	
		
			
				|  |  | +#define MAP_ARGS_6(a, b, c, d, e, f)	\
 | 
	
		
			
				|  |  | +	MAP_ARGS_5(a, b, c, d, e)	\
 | 
	
		
			
				|  |  | +	, "r" ((long) f)
 | 
	
		
			
				|  |  | +#define CLOB_ARGS_6		\
 | 
	
		
			
				|  |  | +	CLOB_ARGS_5		\
 | 
	
		
			
				|  |  | +	, "r9"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #endif /* __ASSEMBLER__ */
 | 
	
		
			
				|  |  |  #endif /* _BITS_SYSCALLS_H */
 | 
	
		
			
				|  |  | -
 |