syscall.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _TRACE_SYSCALL_H
  3. #define _TRACE_SYSCALL_H
  4. #include <linux/tracepoint.h>
  5. #include <linux/unistd.h>
  6. #include <linux/trace_events.h>
  7. #include <linux/thread_info.h>
  8. #include <asm/ptrace.h>
  9. /*
  10. * A syscall entry in the ftrace syscalls array.
  11. *
  12. * @name: name of the syscall
  13. * @syscall_nr: number of the syscall
  14. * @nb_args: number of parameters it takes
  15. * @user_arg_is_str: set if the arg for @user_arg_size is a string
  16. * @user_arg_size: holds @arg that has size of the user space to read
  17. * @user_mask: mask of @args that will read user space
  18. * @types: list of types as strings
  19. * @args: list of args as strings (args[i] matches types[i])
  20. * @enter_fields: list of fields for syscall_enter trace event
  21. * @enter_event: associated syscall_enter trace event
  22. * @exit_event: associated syscall_exit trace event
  23. */
  24. struct syscall_metadata {
  25. const char *name;
  26. int syscall_nr;
  27. u8 nb_args:7;
  28. u8 user_arg_is_str:1;
  29. s8 user_arg_size;
  30. short user_mask;
  31. const char **types;
  32. const char **args;
  33. struct list_head enter_fields;
  34. struct trace_event_call *enter_event;
  35. struct trace_event_call *exit_event;
  36. };
  37. #if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS)
  38. static inline void syscall_tracepoint_update(struct task_struct *p)
  39. {
  40. if (test_syscall_work(SYSCALL_TRACEPOINT))
  41. set_task_syscall_work(p, SYSCALL_TRACEPOINT);
  42. else
  43. clear_task_syscall_work(p, SYSCALL_TRACEPOINT);
  44. }
  45. #else
  46. static inline void syscall_tracepoint_update(struct task_struct *p)
  47. {
  48. }
  49. #endif
  50. #endif /* _TRACE_SYSCALL_H */