| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 | #ifndef _BITS_SYSCALLS_H#define _BITS_SYSCALLS_H#ifndef _SYSCALL_H# error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."#endif#ifndef __ASSEMBLER__#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 _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 _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 _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 _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 _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 _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 _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); \}#endif /* __ASSEMBLER__ */#endif /* _BITS_SYSCALLS_H */
 |