diff options
Diffstat (limited to 'arch/i386/kernel/traps.c')
-rw-r--r-- | arch/i386/kernel/traps.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index 0e498369f35e..dcc14477af1f 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c | |||
@@ -149,6 +149,12 @@ static inline unsigned long print_context_stack(struct thread_info *tinfo, | |||
149 | while (valid_stack_ptr(tinfo, (void *)ebp)) { | 149 | while (valid_stack_ptr(tinfo, (void *)ebp)) { |
150 | addr = *(unsigned long *)(ebp + 4); | 150 | addr = *(unsigned long *)(ebp + 4); |
151 | printed = print_addr_and_symbol(addr, log_lvl, printed); | 151 | printed = print_addr_and_symbol(addr, log_lvl, printed); |
152 | /* | ||
153 | * break out of recursive entries (such as | ||
154 | * end_of_stack_stop_unwind_function): | ||
155 | */ | ||
156 | if (ebp == *(unsigned long *)ebp) | ||
157 | break; | ||
152 | ebp = *(unsigned long *)ebp; | 158 | ebp = *(unsigned long *)ebp; |
153 | } | 159 | } |
154 | #else | 160 | #else |
@@ -268,8 +274,9 @@ void show_registers(struct pt_regs *regs) | |||
268 | regs->esi, regs->edi, regs->ebp, esp); | 274 | regs->esi, regs->edi, regs->ebp, esp); |
269 | printk(KERN_EMERG "ds: %04x es: %04x ss: %04x\n", | 275 | printk(KERN_EMERG "ds: %04x es: %04x ss: %04x\n", |
270 | regs->xds & 0xffff, regs->xes & 0xffff, ss); | 276 | regs->xds & 0xffff, regs->xes & 0xffff, ss); |
271 | printk(KERN_EMERG "Process %s (pid: %d, threadinfo=%p task=%p)", | 277 | printk(KERN_EMERG "Process %.*s (pid: %d, ti=%p task=%p task.ti=%p)", |
272 | current->comm, current->pid, current_thread_info(), current); | 278 | TASK_COMM_LEN, current->comm, current->pid, |
279 | current_thread_info(), current, current->thread_info); | ||
273 | /* | 280 | /* |
274 | * When in-kernel, we also print out the stack and code at the | 281 | * When in-kernel, we also print out the stack and code at the |
275 | * time of the fault.. | 282 | * time of the fault.. |