syscall_wrapper.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * syscall_wrapper.h - powerpc specific wrappers to syscall definitions
  4. *
  5. * Based on arch/{x86,arm64}/include/asm/syscall_wrapper.h
  6. */
  7. #ifndef __ASM_POWERPC_SYSCALL_WRAPPER_H
  8. #define __ASM_POWERPC_SYSCALL_WRAPPER_H
  9. struct pt_regs;
  10. #define SC_POWERPC_REGS_TO_ARGS(x, ...) \
  11. __MAP(x,__SC_ARGS \
  12. ,,regs->gpr[3],,regs->gpr[4],,regs->gpr[5] \
  13. ,,regs->gpr[6],,regs->gpr[7],,regs->gpr[8])
  14. #define __SYSCALL_DEFINEx(x, name, ...) \
  15. long sys##name(const struct pt_regs *regs); \
  16. ALLOW_ERROR_INJECTION(sys##name, ERRNO); \
  17. static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
  18. static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \
  19. long sys##name(const struct pt_regs *regs) \
  20. { \
  21. return __se_sys##name(SC_POWERPC_REGS_TO_ARGS(x,__VA_ARGS__)); \
  22. } \
  23. static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
  24. { \
  25. long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \
  26. __MAP(x,__SC_TEST,__VA_ARGS__); \
  27. __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \
  28. return ret; \
  29. } \
  30. static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
  31. #define SYSCALL_DEFINE0(sname) \
  32. SYSCALL_METADATA(_##sname, 0); \
  33. long sys_##sname(const struct pt_regs *__unused); \
  34. ALLOW_ERROR_INJECTION(sys_##sname, ERRNO); \
  35. long sys_##sname(const struct pt_regs *__unused)
  36. #define COND_SYSCALL(name) \
  37. long sys_##name(const struct pt_regs *regs); \
  38. long __weak sys_##name(const struct pt_regs *regs) \
  39. { \
  40. return sys_ni_syscall(); \
  41. }
  42. #endif // __ASM_POWERPC_SYSCALL_WRAPPER_H