Commit bf24eec3 authored by Yoshinori Sato's avatar Yoshinori Sato

h8300: show_stack cleanup

- fix stack limit. h8300's stack not aligned 4byte.
- pritty output form.
Signed-off-by: default avatarYoshinori Sato <ysato@users.sourceforge.jp>
parent db903b46
...@@ -36,6 +36,6 @@ extern unsigned long *_interrupt_redirect_table; ...@@ -36,6 +36,6 @@ extern unsigned long *_interrupt_redirect_table;
extern char _start, _etext; extern char _start, _etext;
#define check_kernel_text(addr) \ #define check_kernel_text(addr) \
((addr >= (unsigned long)(&_start)) && \ ((addr >= (unsigned long)(&_start)) && \
(addr < (unsigned long)(&_etext))) (addr < (unsigned long)(&_etext)) && !(addr & 1))
#endif /* _H8300_TRAPS_H */ #endif /* _H8300_TRAPS_H */
...@@ -125,17 +125,18 @@ void show_stack(struct task_struct *task, unsigned long *esp) ...@@ -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(" ");
pr_info(" %08lx", *stack++); 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) ...@@ -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(" ");
pr_info(" [<%08lx>]", addr); 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);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment