Go to the documentation of this file. 1 #ifndef _ASM_PARISC_UNISTD_H_
2 #define _ASM_PARISC_UNISTD_H_
4 #include <uapi/asm/unistd.h>
8 #define SYS_ify(syscall_name) __NR_##syscall_name
11 # define ASM_LINE_SEP ;
20 # define K_STW_ASM_PIC " copy %%r19, %%r4\n"
21 # define K_LDW_ASM_PIC " copy %%r4, %%r19\n"
22 # define K_USING_GR4 "%r4",
24 # define K_STW_ASM_PIC " \n"
25 # define K_LDW_ASM_PIC " \n"
40 #define K_CALL_CLOB_REGS "%r1", "%r2", K_USING_GR4 \
41 "%r20", "%r29", "%r31"
43 #undef K_INLINE_SYSCALL
44 #define K_INLINE_SYSCALL(name, nr, args...) ({ \
47 register unsigned long __res __asm__("r28"); \
48 K_LOAD_ARGS_##nr(args) \
52 " ble 0x100(%%sr2, %%r0)\n" \
56 : "i" (SYS_ify(name)) K_ASM_ARGS_##nr \
57 : "memory", K_CALL_CLOB_REGS K_CLOB_ARGS_##nr \
59 __sys_res = (long)__res; \
61 if ( (unsigned long)__sys_res >= (unsigned long)-4095 ){ \
68 #define K_LOAD_ARGS_0()
69 #define K_LOAD_ARGS_1(r26) \
70 register unsigned long __r26 __asm__("r26") = (unsigned long)(r26); \
72 #define K_LOAD_ARGS_2(r26,r25) \
73 register unsigned long __r25 __asm__("r25") = (unsigned long)(r25); \
75 #define K_LOAD_ARGS_3(r26,r25,r24) \
76 register unsigned long __r24 __asm__("r24") = (unsigned long)(r24); \
77 K_LOAD_ARGS_2(r26,r25)
78 #define K_LOAD_ARGS_4(r26,r25,r24,r23) \
79 register unsigned long __r23 __asm__("r23") = (unsigned long)(r23); \
80 K_LOAD_ARGS_3(r26,r25,r24)
81 #define K_LOAD_ARGS_5(r26,r25,r24,r23,r22) \
82 register unsigned long __r22 __asm__("r22") = (unsigned long)(r22); \
83 K_LOAD_ARGS_4(r26,r25,r24,r23)
84 #define K_LOAD_ARGS_6(r26,r25,r24,r23,r22,r21) \
85 register unsigned long __r21 __asm__("r21") = (unsigned long)(r21); \
86 K_LOAD_ARGS_5(r26,r25,r24,r23,r22)
90 #define K_ASM_ARGS_1 K_ASM_ARGS_0, "r" (__r26)
91 #define K_ASM_ARGS_2 K_ASM_ARGS_1, "r" (__r25)
92 #define K_ASM_ARGS_3 K_ASM_ARGS_2, "r" (__r24)
93 #define K_ASM_ARGS_4 K_ASM_ARGS_3, "r" (__r23)
94 #define K_ASM_ARGS_5 K_ASM_ARGS_4, "r" (__r22)
95 #define K_ASM_ARGS_6 K_ASM_ARGS_5, "r" (__r21)
99 #define K_CLOB_ARGS_5 K_CLOB_ARGS_6, "%r21"
100 #define K_CLOB_ARGS_4 K_CLOB_ARGS_5, "%r22"
101 #define K_CLOB_ARGS_3 K_CLOB_ARGS_4, "%r23"
102 #define K_CLOB_ARGS_2 K_CLOB_ARGS_3, "%r24"
103 #define K_CLOB_ARGS_1 K_CLOB_ARGS_2, "%r25"
104 #define K_CLOB_ARGS_0 K_CLOB_ARGS_1, "%r26"
106 #define _syscall0(type,name) \
109 return K_INLINE_SYSCALL(name, 0); \
112 #define _syscall1(type,name,type1,arg1) \
113 type name(type1 arg1) \
115 return K_INLINE_SYSCALL(name, 1, arg1); \
118 #define _syscall2(type,name,type1,arg1,type2,arg2) \
119 type name(type1 arg1, type2 arg2) \
121 return K_INLINE_SYSCALL(name, 2, arg1, arg2); \
124 #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
125 type name(type1 arg1, type2 arg2, type3 arg3) \
127 return K_INLINE_SYSCALL(name, 3, arg1, arg2, arg3); \
130 #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
131 type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
133 return K_INLINE_SYSCALL(name, 4, arg1, arg2, arg3, arg4); \
137 #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
138 type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
140 return K_INLINE_SYSCALL(name, 5, arg1, arg2, arg3, arg4, arg5); \
143 #define __ARCH_WANT_OLD_READDIR
144 #define __ARCH_WANT_STAT64
145 #define __ARCH_WANT_SYS_ALARM
146 #define __ARCH_WANT_SYS_GETHOSTNAME
147 #define __ARCH_WANT_SYS_PAUSE
148 #define __ARCH_WANT_SYS_SGETMASK
149 #define __ARCH_WANT_SYS_SIGNAL
150 #define __ARCH_WANT_SYS_TIME
151 #define __ARCH_WANT_COMPAT_SYS_TIME
152 #define __ARCH_WANT_SYS_UTIME
153 #define __ARCH_WANT_SYS_WAITPID
154 #define __ARCH_WANT_SYS_SOCKETCALL
155 #define __ARCH_WANT_SYS_FADVISE64
156 #define __ARCH_WANT_SYS_GETPGRP
157 #define __ARCH_WANT_SYS_LLSEEK
158 #define __ARCH_WANT_SYS_NICE
159 #define __ARCH_WANT_SYS_OLD_GETRLIMIT
160 #define __ARCH_WANT_SYS_OLDUMOUNT
161 #define __ARCH_WANT_SYS_SIGPENDING
162 #define __ARCH_WANT_SYS_SIGPROCMASK
163 #define __ARCH_WANT_SYS_RT_SIGACTION
164 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
165 #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
177 #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")