|
@@ -125,17 +125,18 @@ void show_stack(struct task_struct *task, unsigned long *esp)
|
|
|
|
|
|
pr_info("Stack from %08lx:", (unsigned long)stack);
|
|
pr_info("Stack from %08lx:", (unsigned long)stack);
|
|
for (i = 0; i < kstack_depth_to_print; i++) {
|
|
for (i = 0; i < kstack_depth_to_print; i++) {
|
|
- if (((unsigned long)stack & (THREAD_SIZE - 1)) == 0)
|
|
|
|
|
|
+ if (((unsigned long)stack & (THREAD_SIZE - 1)) >=
|
|
|
|
+ THREAD_SIZE-4)
|
|
break;
|
|
break;
|
|
if (i % 8 == 0)
|
|
if (i % 8 == 0)
|
|
- pr_info("\n ");
|
|
|
|
- pr_info(" %08lx", *stack++);
|
|
|
|
|
|
+ pr_info(" ");
|
|
|
|
+ pr_cont(" %08lx", *stack++);
|
|
}
|
|
}
|
|
|
|
|
|
- pr_info("\nCall Trace:");
|
|
|
|
|
|
+ pr_info("\nCall Trace:\n");
|
|
i = 0;
|
|
i = 0;
|
|
stack = esp;
|
|
stack = esp;
|
|
- while (((unsigned long)stack & (THREAD_SIZE - 1)) != 0) {
|
|
|
|
|
|
+ while (((unsigned long)stack & (THREAD_SIZE - 1)) < THREAD_SIZE-4) {
|
|
addr = *stack++;
|
|
addr = *stack++;
|
|
/*
|
|
/*
|
|
* If the address is either in the text segment of the
|
|
* If the address is either in the text segment of the
|
|
@@ -147,15 +148,10 @@ void show_stack(struct task_struct *task, unsigned long *esp)
|
|
*/
|
|
*/
|
|
if (check_kernel_text(addr)) {
|
|
if (check_kernel_text(addr)) {
|
|
if (i % 4 == 0)
|
|
if (i % 4 == 0)
|
|
- pr_info("\n ");
|
|
|
|
- pr_info(" [<%08lx>]", addr);
|
|
|
|
|
|
+ pr_info(" ");
|
|
|
|
+ pr_cont(" [<%08lx>]", addr);
|
|
i++;
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
pr_info("\n");
|
|
pr_info("\n");
|
|
}
|
|
}
|
|
-
|
|
|
|
-void show_trace_task(struct task_struct *tsk)
|
|
|
|
-{
|
|
|
|
- show_stack(tsk, (unsigned long *)tsk->thread.esp0);
|
|
|
|
-}
|
|
|