aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/traps_32.c
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@linux.intel.com>2008-01-30 07:33:07 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:33:07 -0500
commitbc850d6b374fffd08336996f4b4d3bbd6bf427f6 (patch)
tree1106f4a1718f5ed09625f75c95a8bc06635231de /arch/x86/kernel/traps_32.c
parent3d1f7cae883ce4aac99c661562111a25d52effe0 (diff)
x86: add the capability to print fuzzy backtraces
For enhancing the 32 bit EBP based backtracer, I need the capability for the backtracer to tell it's customer that an entry is either reliable or unreliable, and the backtrace printing code then needs to print the unreliable ones slightly different. This patch adds the basic capability, the next patch will add a user of this capability. Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel/traps_32.c')
-rw-r--r--arch/x86/kernel/traps_32.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
index acc9af260fac..8ef8a9ddfec6 100644
--- a/arch/x86/kernel/traps_32.c
+++ b/arch/x86/kernel/traps_32.c
@@ -126,7 +126,7 @@ static inline unsigned long print_context_stack(struct thread_info *tinfo,
126 126
127 addr = frame->return_address; 127 addr = frame->return_address;
128 if (__kernel_text_address(addr)) 128 if (__kernel_text_address(addr))
129 ops->address(data, addr); 129 ops->address(data, addr, 1);
130 /* 130 /*
131 * break out of recursive entries (such as 131 * break out of recursive entries (such as
132 * end_of_stack_stop_unwind_function). Also, 132 * end_of_stack_stop_unwind_function). Also,
@@ -145,7 +145,7 @@ static inline unsigned long print_context_stack(struct thread_info *tinfo,
145 145
146 addr = *stack++; 146 addr = *stack++;
147 if (__kernel_text_address(addr)) 147 if (__kernel_text_address(addr))
148 ops->address(data, addr); 148 ops->address(data, addr, 1);
149 } 149 }
150#endif 150#endif
151 return bp; 151 return bp;
@@ -220,9 +220,11 @@ static int print_trace_stack(void *data, char *name)
220/* 220/*
221 * Print one address/symbol entries per line. 221 * Print one address/symbol entries per line.
222 */ 222 */
223static void print_trace_address(void *data, unsigned long addr) 223static void print_trace_address(void *data, unsigned long addr, int reliable)
224{ 224{
225 printk("%s [<%08lx>] ", (char *)data, addr); 225 printk("%s [<%08lx>] ", (char *)data, addr);
226 if (!reliable)
227 printk("? ");
226 print_symbol("%s\n", addr); 228 print_symbol("%s\n", addr);
227 touch_nmi_watchdog(); 229 touch_nmi_watchdog();
228} 230}