1 /* 2 * kernel/stacktrace.c 3 * 4 * Stack trace management functions 5 * 6 * Copyright (C) 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com> 7 */ 8 #include <linux/sched.h> 9 #include <linux/kernel.h> 10 #include <linux/export.h> 11 #include <linux/kallsyms.h> 12 #include <linux/stacktrace.h> 13 14 void print_stack_trace(struct stack_trace *trace, int spaces) 15 { 16 int i; 17 18 if (WARN_ON(!trace->entries)) 19 return; 20 21 for (i = 0; i < trace->nr_entries; i++) { 22 printk("%*c", 1 + spaces, ' '); 23 print_ip_sym(trace->entries[i]); 24 } 25 } 26 EXPORT_SYMBOL_GPL(print_stack_trace); 27 28 /* 29 * Architectures that do not implement save_stack_trace_tsk or 30 * save_stack_trace_regs get this weak alias and a once-per-bootup warning 31 * (whenever this facility is utilized - for example by procfs): 32 */ 33 __weak void 34 save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) 35 { 36 WARN_ONCE(1, KERN_INFO "save_stack_trace_tsk() not implemented yet.\n"); 37 } 38 39 __weak void 40 save_stack_trace_regs(struct pt_regs *regs, struct stack_trace *trace) 41 { 42 WARN_ONCE(1, KERN_INFO "save_stack_trace_regs() not implemented yet.\n"); 43 } 44