Browse Source

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>
Yoshinori Sato 9 years ago
parent
commit
bf24eec39a
2 changed files with 9 additions and 13 deletions
  1. 1 1
      arch/h8300/include/asm/traps.h
  2. 8 12
      arch/h8300/kernel/traps.c

+ 1 - 1
arch/h8300/include/asm/traps.h

@@ -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 */

+ 8 - 12
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);
 	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);
-}