stacktrace.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef __LINUX_STACKTRACE_H
  3. #define __LINUX_STACKTRACE_H
  4. #include <linux/types.h>
  5. struct task_struct;
  6. struct pt_regs;
  7. #ifdef CONFIG_STACKTRACE
  8. struct stack_trace {
  9. unsigned int nr_entries, max_entries;
  10. unsigned long *entries;
  11. int skip; /* input argument: How many entries to skip */
  12. };
  13. extern void save_stack_trace(struct stack_trace *trace);
  14. extern void save_stack_trace_regs(struct pt_regs *regs,
  15. struct stack_trace *trace);
  16. extern void save_stack_trace_tsk(struct task_struct *tsk,
  17. struct stack_trace *trace);
  18. extern int save_stack_trace_tsk_reliable(struct task_struct *tsk,
  19. struct stack_trace *trace);
  20. extern void print_stack_trace(struct stack_trace *trace, int spaces);
  21. extern int snprint_stack_trace(char *buf, size_t size,
  22. struct stack_trace *trace, int spaces);
  23. #ifdef CONFIG_USER_STACKTRACE_SUPPORT
  24. extern void save_stack_trace_user(struct stack_trace *trace);
  25. #else
  26. # define save_stack_trace_user(trace) do { } while (0)
  27. #endif
  28. #else /* !CONFIG_STACKTRACE */
  29. # define save_stack_trace(trace) do { } while (0)
  30. # define save_stack_trace_tsk(tsk, trace) do { } while (0)
  31. # define save_stack_trace_user(trace) do { } while (0)
  32. # define print_stack_trace(trace, spaces) do { } while (0)
  33. # define snprint_stack_trace(buf, size, trace, spaces) do { } while (0)
  34. # define save_stack_trace_tsk_reliable(tsk, trace) ({ -ENOSYS; })
  35. #endif /* CONFIG_STACKTRACE */
  36. #endif /* __LINUX_STACKTRACE_H */