1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef _TRACE_SYSCALL_H
3  #define _TRACE_SYSCALL_H
4  
5  #include <linux/tracepoint.h>
6  #include <linux/unistd.h>
7  #include <linux/trace_events.h>
8  #include <linux/thread_info.h>
9  
10  #include <asm/ptrace.h>
11  
12  
13  /*
14   * A syscall entry in the ftrace syscalls array.
15   *
16   * @name: name of the syscall
17   * @syscall_nr: number of the syscall
18   * @nb_args: number of parameters it takes
19   * @types: list of types as strings
20   * @args: list of args as strings (args[i] matches types[i])
21   * @enter_fields: list of fields for syscall_enter trace event
22   * @enter_event: associated syscall_enter trace event
23   * @exit_event: associated syscall_exit trace event
24   */
25  struct syscall_metadata {
26  	const char	*name;
27  	int		syscall_nr;
28  	int		nb_args;
29  	const char	**types;
30  	const char	**args;
31  	struct list_head enter_fields;
32  
33  	struct trace_event_call *enter_event;
34  	struct trace_event_call *exit_event;
35  };
36  
37  #if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS)
syscall_tracepoint_update(struct task_struct * p)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
syscall_tracepoint_update(struct task_struct * p)46  static inline void syscall_tracepoint_update(struct task_struct *p)
47  {
48  }
49  #endif
50  
51  #endif /* _TRACE_SYSCALL_H */
52