h8300: show_stack cleanup
authorYoshinori Sato <ysato@users.sourceforge.jp>
Fri, 15 Jan 2016 08:07:32 +0000 (17:07 +0900)
committerYoshinori Sato <ysato@users.sourceforge.jp>
Wed, 20 Jan 2016 14:28:00 +0000 (23:28 +0900)
- fix stack limit. h8300's stack not aligned 4byte.
- pritty output form.

Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
arch/h8300/include/asm/traps.h
arch/h8300/kernel/traps.c

index aa34e75fd7670745057653093c3b045dba6ed3e7..15e701130b27618a5e46b45a45cff14fa30c518d 100644 (file)
@@ -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 */
index 1b2d7cdd6591faf45d6481f281765e32307327ed..044a3612584615f51d58c400e93574f770153709 100644 (file)
@@ -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);
-}