xref: /openbmc/linux/include/trace/syscall.h (revision 524666cb)
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 Nesterov static 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 Nesterov static 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