1
2#ifndef __LINUX_STACKTRACE_H
3#define __LINUX_STACKTRACE_H
4
5#include <linux/types.h>
6#include <linux/rh_kabi.h>
7
8struct task_struct;
9struct pt_regs;
10
11#ifdef CONFIG_STACKTRACE
12struct stack_trace {
13 unsigned int nr_entries, max_entries;
14 unsigned long *entries;
15 int skip;
16 RH_KABI_RESERVE(1);
17 RH_KABI_RESERVE(2);
18};
19
20extern void save_stack_trace(struct stack_trace *trace);
21extern void save_stack_trace_regs(struct pt_regs *regs,
22 struct stack_trace *trace);
23extern void save_stack_trace_tsk(struct task_struct *tsk,
24 struct stack_trace *trace);
25extern int save_stack_trace_tsk_reliable(struct task_struct *tsk,
26 struct stack_trace *trace);
27
28extern void print_stack_trace(struct stack_trace *trace, int spaces);
29extern int snprint_stack_trace(char *buf, size_t size,
30 struct stack_trace *trace, int spaces);
31
32#ifdef CONFIG_USER_STACKTRACE_SUPPORT
33extern void save_stack_trace_user(struct stack_trace *trace);
34#else
35# define save_stack_trace_user(trace) do { } while (0)
36#endif
37
38#else
39# define save_stack_trace(trace) do { } while (0)
40# define save_stack_trace_tsk(tsk, trace) do { } while (0)
41# define save_stack_trace_user(trace) do { } while (0)
42# define print_stack_trace(trace, spaces) do { } while (0)
43# define snprint_stack_trace(buf, size, trace, spaces) do { } while (0)
44# define save_stack_trace_tsk_reliable(tsk, trace) ({ -ENOSYS; })
45#endif
46
47#endif
48