Module Name:    src
Committed By:   dyoung
Date:           Mon Oct  5 19:04:14 UTC 2009

Modified Files:
        src/sys/arch/i386/i386: trap.c

Log Message:
Improve readability of trap() by extracting two subroutines,
trap_print() and check_dr0().


To generate a diff of this commit:
cvs rdiff -u -r1.247 -r1.248 src/sys/arch/i386/i386/trap.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/i386/i386/trap.c
diff -u src/sys/arch/i386/i386/trap.c:1.247 src/sys/arch/i386/i386/trap.c:1.248
--- src/sys/arch/i386/i386/trap.c:1.247	Wed Jul 29 18:47:15 2009
+++ src/sys/arch/i386/i386/trap.c	Mon Oct  5 19:04:14 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.247 2009/07/29 18:47:15 rmind Exp $	*/
+/*	$NetBSD: trap.c,v 1.248 2009/10/05 19:04:14 dyoung Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000, 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.247 2009/07/29 18:47:15 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.248 2009/10/05 19:04:14 dyoung Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -252,6 +252,37 @@
 	return NULL;
 }
 
+static void
+trap_print(int type, struct trapframe *frame)
+{
+	if (frame->tf_trapno < trap_types)
+		printf("fatal %s", trap_type[frame->tf_trapno]);
+	else
+		printf("unknown trap %d", frame->tf_trapno);
+	printf(" in %s mode\n", (type & T_USER) ? "user" : "supervisor");
+	printf("trap type %d code %x eip %x cs %x eflags %x cr2 %lx ilevel %x\n",
+	    type, frame->tf_err, frame->tf_eip, frame->tf_cs,
+	    frame->tf_eflags, (long)rcr2(), curcpu()->ci_ilevel);
+}
+
+static void
+check_dr0(void)
+{
+#ifdef KSTACK_CHECK_DR0
+	u_int mask, dr6 = rdr6();
+
+	mask = 1 << 0; /* dr0 */
+	if (dr6 & mask) {
+		panic("trap on DR0: maybe kernel stack overflow\n");
+#if 0
+		dr6 &= ~mask;
+		ldr6(dr6);
+		return;
+#endif
+	}
+#endif
+}
+
 /*
  * trap(frame): exception, fault, and trap interface to BSD kernel.
  *
@@ -314,29 +345,10 @@
 
 	default:
 	we_re_toast:
-#ifdef KSTACK_CHECK_DR0
-		if (type == T_TRCTRAP) {
-			u_int mask, dr6 = rdr6();
-
-			mask = 1 << 0; /* dr0 */
-			if (dr6 & mask) {
-				panic("trap on DR0: maybe kernel stack overflow\n");
-#if 0
-				dr6 &= ~mask;
-				ldr6(dr6);
-				return;
-#endif
-			}
-		}
-#endif
-		if (frame->tf_trapno < trap_types)
-			printf("fatal %s", trap_type[frame->tf_trapno]);
+		if (type == T_TRCTRAP)
+			check_dr0();
 		else
-			printf("unknown trap %d", frame->tf_trapno);
-		printf(" in %s mode\n", (type & T_USER) ? "user" : "supervisor");
-		printf("trap type %d code %x eip %x cs %x eflags %x cr2 %lx ilevel %x\n",
-		    type, frame->tf_err, frame->tf_eip, frame->tf_cs,
-		    frame->tf_eflags, (long)rcr2(), curcpu()->ci_ilevel);
+			trap_print(type, frame);
 #ifdef DDB
 		if (kdb_trap(type, 0, frame))
 			return;

Reply via email to