diff options
author | Arjan van de Ven <arjan@linux.intel.com> | 2008-01-30 07:33:07 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 07:33:07 -0500 |
commit | bc850d6b374fffd08336996f4b4d3bbd6bf427f6 (patch) | |
tree | 1106f4a1718f5ed09625f75c95a8bc06635231de /arch/x86/kernel/traps_32.c | |
parent | 3d1f7cae883ce4aac99c661562111a25d52effe0 (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.c | 8 |
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 | */ |
223 | static void print_trace_address(void *data, unsigned long addr) | 223 | static 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 | } |