Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * syscall_wrapper.h - arm64 specific wrappers to syscall definitions
0004  *
0005  * Based on arch/x86/include/asm_syscall_wrapper.h
0006  */
0007 
0008 #ifndef __ASM_SYSCALL_WRAPPER_H
0009 #define __ASM_SYSCALL_WRAPPER_H
0010 
0011 struct pt_regs;
0012 
0013 #define SC_ARM64_REGS_TO_ARGS(x, ...)               \
0014     __MAP(x,__SC_ARGS                   \
0015           ,,regs->regs[0],,regs->regs[1],,regs->regs[2] \
0016           ,,regs->regs[3],,regs->regs[4],,regs->regs[5])
0017 
0018 #ifdef CONFIG_COMPAT
0019 
0020 #define COMPAT_SYSCALL_DEFINEx(x, name, ...)                        \
0021     asmlinkage long __arm64_compat_sys##name(const struct pt_regs *regs);       \
0022     ALLOW_ERROR_INJECTION(__arm64_compat_sys##name, ERRNO);             \
0023     static long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__));      \
0024     static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));   \
0025     asmlinkage long __arm64_compat_sys##name(const struct pt_regs *regs)        \
0026     {                                       \
0027         return __se_compat_sys##name(SC_ARM64_REGS_TO_ARGS(x,__VA_ARGS__)); \
0028     }                                       \
0029     static long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__))       \
0030     {                                       \
0031         return __do_compat_sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));    \
0032     }                                       \
0033     static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
0034 
0035 #define COMPAT_SYSCALL_DEFINE0(sname)                           \
0036     asmlinkage long __arm64_compat_sys_##sname(const struct pt_regs *__unused); \
0037     ALLOW_ERROR_INJECTION(__arm64_compat_sys_##sname, ERRNO);           \
0038     asmlinkage long __arm64_compat_sys_##sname(const struct pt_regs *__unused)
0039 
0040 #define COND_SYSCALL_COMPAT(name)                           \
0041     asmlinkage long __weak __arm64_compat_sys_##name(const struct pt_regs *regs)    \
0042     {                                       \
0043         return sys_ni_syscall();                        \
0044     }
0045 
0046 #define COMPAT_SYS_NI(name) \
0047     SYSCALL_ALIAS(__arm64_compat_sys_##name, sys_ni_posix_timers);
0048 
0049 #endif /* CONFIG_COMPAT */
0050 
0051 #define __SYSCALL_DEFINEx(x, name, ...)                     \
0052     asmlinkage long __arm64_sys##name(const struct pt_regs *regs);      \
0053     ALLOW_ERROR_INJECTION(__arm64_sys##name, ERRNO);            \
0054     static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__));     \
0055     static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));  \
0056     asmlinkage long __arm64_sys##name(const struct pt_regs *regs)       \
0057     {                                   \
0058         return __se_sys##name(SC_ARM64_REGS_TO_ARGS(x,__VA_ARGS__));    \
0059     }                                   \
0060     static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__))      \
0061     {                                   \
0062         long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__));  \
0063         __MAP(x,__SC_TEST,__VA_ARGS__);                 \
0064         __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__));       \
0065         return ret;                         \
0066     }                                   \
0067     static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
0068 
0069 #define SYSCALL_DEFINE0(sname)                          \
0070     SYSCALL_METADATA(_##sname, 0);                      \
0071     asmlinkage long __arm64_sys_##sname(const struct pt_regs *__unused);    \
0072     ALLOW_ERROR_INJECTION(__arm64_sys_##sname, ERRNO);          \
0073     asmlinkage long __arm64_sys_##sname(const struct pt_regs *__unused)
0074 
0075 #define COND_SYSCALL(name)                          \
0076     asmlinkage long __weak __arm64_sys_##name(const struct pt_regs *regs)   \
0077     {                                   \
0078         return sys_ni_syscall();                    \
0079     }
0080 
0081 #define SYS_NI(name) SYSCALL_ALIAS(__arm64_sys_##name, sys_ni_posix_timers);
0082 
0083 #endif /* __ASM_SYSCALL_WRAPPER_H */