|
23 | 23 | #define COMPAT_USE_64BIT_TIME 0 |
24 | 24 | #endif |
25 | 25 |
|
| 26 | +#ifndef __SC_DELOUSE |
| 27 | +#define __SC_DELOUSE(t,v) ((t)(unsigned long)(v)) |
| 28 | +#endif |
| 29 | + |
| 30 | +#define __SC_CCAST1(t1, a1) __SC_DELOUSE(t1,a1) |
| 31 | +#define __SC_CCAST2(t2, a2, ...) __SC_DELOUSE(t2,a2), __SC_CCAST1(__VA_ARGS__) |
| 32 | +#define __SC_CCAST3(t3, a3, ...) __SC_DELOUSE(t3,a3), __SC_CCAST2(__VA_ARGS__) |
| 33 | +#define __SC_CCAST4(t4, a4, ...) __SC_DELOUSE(t4,a4), __SC_CCAST3(__VA_ARGS__) |
| 34 | +#define __SC_CCAST5(t5, a5, ...) __SC_DELOUSE(t5,a5), __SC_CCAST4(__VA_ARGS__) |
| 35 | +#define __SC_CCAST6(t6, a6, ...) __SC_DELOUSE(t6,a6), __SC_CCAST5(__VA_ARGS__) |
| 36 | +#define COMPAT_SYSCALL_DEFINE1(name, ...) \ |
| 37 | + COMPAT_SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) |
| 38 | +#define COMPAT_SYSCALL_DEFINE2(name, ...) \ |
| 39 | + COMPAT_SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) |
| 40 | +#define COMPAT_SYSCALL_DEFINE3(name, ...) \ |
| 41 | + COMPAT_SYSCALL_DEFINEx(3, _##name, __VA_ARGS__) |
| 42 | +#define COMPAT_SYSCALL_DEFINE4(name, ...) \ |
| 43 | + COMPAT_SYSCALL_DEFINEx(4, _##name, __VA_ARGS__) |
| 44 | +#define COMPAT_SYSCALL_DEFINE5(name, ...) \ |
| 45 | + COMPAT_SYSCALL_DEFINEx(5, _##name, __VA_ARGS__) |
| 46 | +#define COMPAT_SYSCALL_DEFINE6(name, ...) \ |
| 47 | + COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) |
| 48 | + |
| 49 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
| 50 | + |
| 51 | +#define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ |
| 52 | + asmlinkage long compat_sys##name(__SC_DECL##x(__VA_ARGS__)); \ |
| 53 | + static inline long C_SYSC##name(__SC_DECL##x(__VA_ARGS__)); \ |
| 54 | + asmlinkage long compat_SyS##name(__SC_LONG##x(__VA_ARGS__)) \ |
| 55 | + { \ |
| 56 | + return (long) C_SYSC##name(__SC_CCAST##x(__VA_ARGS__)); \ |
| 57 | + } \ |
| 58 | + SYSCALL_ALIAS(compat_sys##name, compat_SyS##name); \ |
| 59 | + static inline long C_SYSC##name(__SC_DECL##x(__VA_ARGS__)) |
| 60 | + |
| 61 | +#else /* CONFIG_HAVE_SYSCALL_WRAPPERS */ |
| 62 | + |
| 63 | +#define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ |
| 64 | + asmlinkage long compat_sys##name(__SC_DECL##x(__VA_ARGS__)) |
| 65 | + |
| 66 | +#endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */ |
| 67 | + |
26 | 68 | #define compat_jiffies_to_clock_t(x) \ |
27 | 69 | (((unsigned long)(x) * COMPAT_USER_HZ) / HZ) |
28 | 70 |
|
|
0 commit comments