123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #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 (unlikely(INTERNAL_SYSCALL_ERROR_P(res, ))) { \
- __set_errno(INTERNAL_SYSCALL_ERRNO(res, )); \
- res = (unsigned long) -1; \
- } \
- return (type) (res); \
- } while (0)
- #define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
- (__extension__ \
- ({ \
- 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 INTERNAL_SYSCALL_ERROR_P(val, err) \
- ((unsigned long)(val) >= (unsigned long)(-125))
- #define ASM_ARGS_0
- #define MAP_ARGS_0()
- #define CLOB_ARGS_0
- #define ASM_ARGS_1 \
- "mov r4, %3\n\t"
- #define MAP_ARGS_1(a) \
- , "r" ((long) a)
- #define CLOB_ARGS_1 \
- , "r4"
- #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 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 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 */
|