1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 247788c58SFrederic Weisbecker #ifndef _TRACE_SYSCALL_H 347788c58SFrederic Weisbecker #define _TRACE_SYSCALL_H 447788c58SFrederic Weisbecker 5a871bd33SJason Baron #include <linux/tracepoint.h> 6fb34a08cSJason Baron #include <linux/unistd.h> 7af658dcaSSteven Rostedt (Red Hat) #include <linux/trace_events.h> 84af4206bSOleg Nesterov #include <linux/thread_info.h> 9a871bd33SJason Baron 1047788c58SFrederic Weisbecker #include <asm/ptrace.h> 1147788c58SFrederic Weisbecker 12a871bd33SJason Baron 1347788c58SFrederic Weisbecker /* 1447788c58SFrederic Weisbecker * A syscall entry in the ftrace syscalls array. 1547788c58SFrederic Weisbecker * 1647788c58SFrederic Weisbecker * @name: name of the syscall 17c252f657SLai Jiangshan * @syscall_nr: number of the syscall 1847788c58SFrederic Weisbecker * @nb_args: number of parameters it takes 1947788c58SFrederic Weisbecker * @types: list of types as strings 2047788c58SFrederic Weisbecker * @args: list of args as strings (args[i] matches types[i]) 2144a6a4eeSTom Zanussi * @enter_fields: list of fields for syscall_enter trace event 22540b7b8dSLi Zefan * @enter_event: associated syscall_enter trace event 23540b7b8dSLi Zefan * @exit_event: associated syscall_exit trace event 2447788c58SFrederic Weisbecker */ 2547788c58SFrederic Weisbecker struct syscall_metadata { 2647788c58SFrederic Weisbecker const char *name; 27c252f657SLai Jiangshan int syscall_nr; 2847788c58SFrederic Weisbecker int nb_args; 2947788c58SFrederic Weisbecker const char **types; 3047788c58SFrederic Weisbecker const char **args; 312e33af02SSteven Rostedt struct list_head enter_fields; 32540b7b8dSLi Zefan 332425bcb9SSteven Rostedt (Red Hat) struct trace_event_call *enter_event; 342425bcb9SSteven Rostedt (Red Hat) struct trace_event_call *exit_event; 3547788c58SFrederic Weisbecker }; 3647788c58SFrederic Weisbecker 374af4206bSOleg Nesterov #if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS) syscall_tracepoint_update(struct task_struct * p)384af4206bSOleg Nesterovstatic inline void syscall_tracepoint_update(struct task_struct *p) 394af4206bSOleg Nesterov { 40*524666cbSGabriel Krisman Bertazi if (test_syscall_work(SYSCALL_TRACEPOINT)) 41*524666cbSGabriel Krisman Bertazi set_task_syscall_work(p, SYSCALL_TRACEPOINT); 424af4206bSOleg Nesterov else 43*524666cbSGabriel Krisman Bertazi clear_task_syscall_work(p, SYSCALL_TRACEPOINT); 444af4206bSOleg Nesterov } 454af4206bSOleg Nesterov #else syscall_tracepoint_update(struct task_struct * p)464af4206bSOleg Nesterovstatic inline void syscall_tracepoint_update(struct task_struct *p) 474af4206bSOleg Nesterov { 484af4206bSOleg Nesterov } 494af4206bSOleg Nesterov #endif 504af4206bSOleg Nesterov 5147788c58SFrederic Weisbecker #endif /* _TRACE_SYSCALL_H */ 52