dumpstack.c (dfdc5437bd62dd6a26961e27f26b671374749875) | dumpstack.c (7ee991fbc6f947e9b04f29c9c6c1d057d0671a16) |
---|---|
1/* 2 * Copyright (C) 1991, 1992 Linus Torvalds 3 * Copyright (C) 2000, 2001, 2002 Andi Kleen, SuSE Labs 4 */ 5#include <linux/kallsyms.h> 6#include <linux/kprobes.h> 7#include <linux/uaccess.h> 8#include <linux/utsname.h> --- 16 unchanged lines hidden (view full) --- 25static int die_counter; 26 27void printk_address(unsigned long address, int reliable) 28{ 29 printk(" [<%p>] %s%pS\n", (void *) address, 30 reliable ? "" : "? ", (void *) address); 31} 32 | 1/* 2 * Copyright (C) 1991, 1992 Linus Torvalds 3 * Copyright (C) 2000, 2001, 2002 Andi Kleen, SuSE Labs 4 */ 5#include <linux/kallsyms.h> 6#include <linux/kprobes.h> 7#include <linux/uaccess.h> 8#include <linux/utsname.h> --- 16 unchanged lines hidden (view full) --- 25static int die_counter; 26 27void printk_address(unsigned long address, int reliable) 28{ 29 printk(" [<%p>] %s%pS\n", (void *) address, 30 reliable ? "" : "? ", (void *) address); 31} 32 |
33#ifdef CONFIG_FUNCTION_GRAPH_TRACER 34static void 35print_ftrace_graph_addr(unsigned long addr, void *data, 36 const struct stacktrace_ops *ops, 37 struct thread_info *tinfo, int *graph) 38{ 39 struct task_struct *task = tinfo->task; 40 unsigned long ret_addr; 41 int index = task->curr_ret_stack; 42 43 if (addr != (unsigned long)return_to_handler) 44 return; 45 46 if (!task->ret_stack || index < *graph) 47 return; 48 49 index -= *graph; 50 ret_addr = task->ret_stack[index].ret; 51 52 ops->address(data, ret_addr, 1); 53 54 (*graph)++; 55} 56#else 57static inline void 58print_ftrace_graph_addr(unsigned long addr, void *data, 59 const struct stacktrace_ops *ops, 60 struct thread_info *tinfo, int *graph) 61{ } 62#endif 63 |
|
33/* 34 * x86-64 can have up to three kernel stacks: 35 * process stack 36 * interrupt stack 37 * severe exception (double fault, nmi, stack fault, debug, mce) hardware stack 38 */ 39 40static inline int valid_stack_ptr(struct thread_info *tinfo, --- 8 unchanged lines hidden (view full) --- 49 } 50 return p > t && p < t + THREAD_SIZE - size; 51} 52 53unsigned long 54print_context_stack(struct thread_info *tinfo, 55 unsigned long *stack, unsigned long bp, 56 const struct stacktrace_ops *ops, void *data, | 64/* 65 * x86-64 can have up to three kernel stacks: 66 * process stack 67 * interrupt stack 68 * severe exception (double fault, nmi, stack fault, debug, mce) hardware stack 69 */ 70 71static inline int valid_stack_ptr(struct thread_info *tinfo, --- 8 unchanged lines hidden (view full) --- 80 } 81 return p > t && p < t + THREAD_SIZE - size; 82} 83 84unsigned long 85print_context_stack(struct thread_info *tinfo, 86 unsigned long *stack, unsigned long bp, 87 const struct stacktrace_ops *ops, void *data, |
57 unsigned long *end) | 88 unsigned long *end, int *graph) |
58{ 59 struct stack_frame *frame = (struct stack_frame *)bp; 60 61 while (valid_stack_ptr(tinfo, stack, sizeof(*stack), end)) { 62 unsigned long addr; 63 64 addr = *stack; 65 if (__kernel_text_address(addr)) { 66 if ((unsigned long) stack == bp + sizeof(long)) { 67 ops->address(data, addr, 1); 68 frame = frame->next_frame; 69 bp = (unsigned long) frame; 70 } else { 71 ops->address(data, addr, bp == 0); 72 } | 89{ 90 struct stack_frame *frame = (struct stack_frame *)bp; 91 92 while (valid_stack_ptr(tinfo, stack, sizeof(*stack), end)) { 93 unsigned long addr; 94 95 addr = *stack; 96 if (__kernel_text_address(addr)) { 97 if ((unsigned long) stack == bp + sizeof(long)) { 98 ops->address(data, addr, 1); 99 frame = frame->next_frame; 100 bp = (unsigned long) frame; 101 } else { 102 ops->address(data, addr, bp == 0); 103 } |
104 print_ftrace_graph_addr(addr, data, ops, tinfo, graph); |
|
73 } 74 stack++; 75 } 76 return bp; 77} 78 79 80static void --- 239 unchanged lines hidden --- | 105 } 106 stack++; 107 } 108 return bp; 109} 110 111 112static void --- 239 unchanged lines hidden --- |