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