xref: /linux-6.15/include/linux/stacktrace.h (revision b2441318)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
28637c099SIngo Molnar #ifndef __LINUX_STACKTRACE_H
38637c099SIngo Molnar #define __LINUX_STACKTRACE_H
48637c099SIngo Molnar 
59a92a6ceSJoonsoo Kim #include <linux/types.h>
69a92a6ceSJoonsoo Kim 
7897312bdSAndrew Morton struct task_struct;
89c0729dcSSoeren Sandmann Pedersen struct pt_regs;
9897312bdSAndrew Morton 
108637c099SIngo Molnar #ifdef CONFIG_STACKTRACE
118637c099SIngo Molnar struct stack_trace {
128637c099SIngo Molnar 	unsigned int nr_entries, max_entries;
138637c099SIngo Molnar 	unsigned long *entries;
145a1b3999SAndi Kleen 	int skip;	/* input argument: How many entries to skip */
158637c099SIngo Molnar };
168637c099SIngo Molnar 
17ab1b6f03SChristoph Hellwig extern void save_stack_trace(struct stack_trace *trace);
1839581062SMasami Hiramatsu extern void save_stack_trace_regs(struct pt_regs *regs,
1939581062SMasami Hiramatsu 				  struct stack_trace *trace);
209745512cSArjan van de Ven extern void save_stack_trace_tsk(struct task_struct *tsk,
219745512cSArjan van de Ven 				struct stack_trace *trace);
22af085d90SJosh Poimboeuf extern int save_stack_trace_tsk_reliable(struct task_struct *tsk,
23af085d90SJosh Poimboeuf 					 struct stack_trace *trace);
248637c099SIngo Molnar 
258637c099SIngo Molnar extern void print_stack_trace(struct stack_trace *trace, int spaces);
269a92a6ceSJoonsoo Kim extern int snprint_stack_trace(char *buf, size_t size,
279a92a6ceSJoonsoo Kim 			struct stack_trace *trace, int spaces);
2802b67518STörök Edwin 
298d26487fSTörök Edwin #ifdef CONFIG_USER_STACKTRACE_SUPPORT
3002b67518STörök Edwin extern void save_stack_trace_user(struct stack_trace *trace);
3102b67518STörök Edwin #else
3202b67518STörök Edwin # define save_stack_trace_user(trace)              do { } while (0)
3302b67518STörök Edwin #endif
3402b67518STörök Edwin 
35af085d90SJosh Poimboeuf #else /* !CONFIG_STACKTRACE */
36ab1b6f03SChristoph Hellwig # define save_stack_trace(trace)			do { } while (0)
379745512cSArjan van de Ven # define save_stack_trace_tsk(tsk, trace)		do { } while (0)
3802b67518STörök Edwin # define save_stack_trace_user(trace)			do { } while (0)
393b5ad079SJohannes Berg # define print_stack_trace(trace, spaces)		do { } while (0)
409a92a6ceSJoonsoo Kim # define snprint_stack_trace(buf, size, trace, spaces)	do { } while (0)
41af085d90SJosh Poimboeuf # define save_stack_trace_tsk_reliable(tsk, trace)	({ -ENOSYS; })
42af085d90SJosh Poimboeuf #endif /* CONFIG_STACKTRACE */
438637c099SIngo Molnar 
44af085d90SJosh Poimboeuf #endif /* __LINUX_STACKTRACE_H */
45