|
@@ -142,11 +142,13 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
|
|
|
struct reg_window32 *rw;
|
|
|
int count = 0;
|
|
|
|
|
|
- if (tsk != NULL)
|
|
|
- task_base = (unsigned long) task_stack_page(tsk);
|
|
|
- else
|
|
|
- task_base = (unsigned long) current_thread_info();
|
|
|
+ if (!tsk)
|
|
|
+ tsk = current;
|
|
|
|
|
|
+ if (tsk == current && !_ksp)
|
|
|
+ __asm__ __volatile__("mov %%fp, %0" : "=r" (_ksp));
|
|
|
+
|
|
|
+ task_base = (unsigned long) task_stack_page(tsk);
|
|
|
fp = (unsigned long) _ksp;
|
|
|
do {
|
|
|
/* Bogus frame pointer? */
|
|
@@ -164,11 +166,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
|
|
|
|
|
|
void dump_stack(void)
|
|
|
{
|
|
|
- unsigned long *ksp;
|
|
|
-
|
|
|
- __asm__ __volatile__("mov %%fp, %0"
|
|
|
- : "=r" (ksp));
|
|
|
- show_stack(current, ksp);
|
|
|
+ show_stack(current, NULL);
|
|
|
}
|
|
|
|
|
|
EXPORT_SYMBOL(dump_stack);
|