diff options
author | Yoshinori Sato <ysato@users.sourceforge.jp> | 2016-01-15 17:07:32 +0900 |
---|---|---|
committer | Yoshinori Sato <ysato@users.sourceforge.jp> | 2016-01-20 23:28:00 +0900 |
commit | bf24eec39a6b0df1fcc1ff92db39fe2f2a60f737 (patch) | |
tree | 58d236445d7af899cb01adcd17625c407fa6154f /arch/h8300 | |
parent | db903b462b3e7a0cbd4bace485d0d4ba27344ec7 (diff) | |
download | lwn-bf24eec39a6b0df1fcc1ff92db39fe2f2a60f737.tar.gz lwn-bf24eec39a6b0df1fcc1ff92db39fe2f2a60f737.zip |
h8300: show_stack cleanup
- fix stack limit. h8300's stack not aligned 4byte.
- pritty output form.
Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
Diffstat (limited to 'arch/h8300')
-rw-r--r-- | arch/h8300/include/asm/traps.h | 2 | ||||
-rw-r--r-- | arch/h8300/kernel/traps.c | 20 |
2 files changed, 9 insertions, 13 deletions
diff --git a/arch/h8300/include/asm/traps.h b/arch/h8300/include/asm/traps.h index aa34e75fd767..15e701130b27 100644 --- a/arch/h8300/include/asm/traps.h +++ b/arch/h8300/include/asm/traps.h @@ -36,6 +36,6 @@ extern unsigned long *_interrupt_redirect_table; extern char _start, _etext; #define check_kernel_text(addr) \ ((addr >= (unsigned long)(&_start)) && \ - (addr < (unsigned long)(&_etext))) + (addr < (unsigned long)(&_etext)) && !(addr & 1)) #endif /* _H8300_TRAPS_H */ diff --git a/arch/h8300/kernel/traps.c b/arch/h8300/kernel/traps.c index 1b2d7cdd6591..044a36125846 100644 --- a/arch/h8300/kernel/traps.c +++ b/arch/h8300/kernel/traps.c @@ -125,17 +125,18 @@ void show_stack(struct task_struct *task, unsigned long *esp) pr_info("Stack from %08lx:", (unsigned long)stack); 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; 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; stack = esp; - while (((unsigned long)stack & (THREAD_SIZE - 1)) != 0) { + while (((unsigned long)stack & (THREAD_SIZE - 1)) < THREAD_SIZE-4) { addr = *stack++; /* * 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 (i % 4 == 0) - pr_info("\n "); - pr_info(" [<%08lx>]", addr); + pr_info(" "); + pr_cont(" [<%08lx>]", addr); i++; } } pr_info("\n"); } - -void show_trace_task(struct task_struct *tsk) -{ - show_stack(tsk, (unsigned long *)tsk->thread.esp0); -} |