Module Name:    src
Committed By:   matt
Date:           Sat Jan 11 17:32:20 UTC 2014

Modified Files:
        src/sys/arch/arm/arm32: arm32_machdep.c fault.c
        src/sys/arch/arm/include: locore.h

Log Message:
Add hw.printfataltraps sysctl.  Always print fatal traps for init.  For all
other processes, only do so if cpu_printfataltraps is true.


To generate a diff of this commit:
cvs rdiff -u -r1.98 -r1.99 src/sys/arch/arm/arm32/arm32_machdep.c
cvs rdiff -u -r1.91 -r1.92 src/sys/arch/arm/arm32/fault.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/include/locore.h

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/arm/arm32/arm32_machdep.c
diff -u src/sys/arch/arm/arm32/arm32_machdep.c:1.98 src/sys/arch/arm/arm32/arm32_machdep.c:1.99
--- src/sys/arch/arm/arm32/arm32_machdep.c:1.98	Tue Sep 10 21:30:21 2013
+++ src/sys/arch/arm/arm32/arm32_machdep.c	Sat Jan 11 17:32:20 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: arm32_machdep.c,v 1.98 2013/09/10 21:30:21 matt Exp $	*/
+/*	$NetBSD: arm32_machdep.c,v 1.99 2014/01/11 17:32:20 matt Exp $	*/
 
 /*
  * Copyright (c) 1994-1998 Mark Brinicombe.
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arm32_machdep.c,v 1.98 2013/09/10 21:30:21 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arm32_machdep.c,v 1.99 2014/01/11 17:32:20 matt Exp $");
 
 #include "opt_modular.h"
 #include "opt_md.h"
@@ -99,6 +99,7 @@ void *	msgbufaddr;
 extern paddr_t msgbufphys;
 
 int kernel_debug = 0;
+int cpu_printfataltraps = 0;
 int cpu_fpu_present;
 int cpu_hwdiv_present;
 int cpu_neon_present;
@@ -489,6 +490,12 @@ SYSCTL_SETUP(sysctl_machdep_setup, "sysc
 		       CTLTYPE_INT, "simdex_present", NULL,
 		       NULL, 0, &cpu_simdex_present, 0,
 		       CTL_MACHDEP, CTL_CREATE, CTL_EOL);
+	sysctl_createv(clog, 0, NULL, NULL,
+		       CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
+		       CTLTYPE_INT, "printfataltraps", NULL,
+		       NULL, 0, &cpu_printfataltraps, 0,
+		       CTL_MACHDEP, CTL_CREATE, CTL_EOL);
+
 
 	/*
 	 * We need override the usual CTL_HW HW_MACHINE_ARCH so we

Index: src/sys/arch/arm/arm32/fault.c
diff -u src/sys/arch/arm/arm32/fault.c:1.91 src/sys/arch/arm/arm32/fault.c:1.92
--- src/sys/arch/arm/arm32/fault.c:1.91	Wed Nov  6 02:37:58 2013
+++ src/sys/arch/arm/arm32/fault.c	Sat Jan 11 17:32:20 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: fault.c,v 1.91 2013/11/06 02:37:58 christos Exp $	*/
+/*	$NetBSD: fault.c,v 1.92 2014/01/11 17:32:20 matt Exp $	*/
 
 /*
  * Copyright 2003 Wasabi Systems, Inc.
@@ -81,7 +81,7 @@
 #include "opt_kgdb.h"
 
 #include <sys/types.h>
-__KERNEL_RCSID(0, "$NetBSD: fault.c,v 1.91 2013/11/06 02:37:58 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fault.c,v 1.92 2014/01/11 17:32:20 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -499,6 +499,20 @@ data_abort_handler(trapframe_t *tf)
 	UVMHIST_LOG(maphist, " <- error (%d)", error, 0, 0, 0);
 
 do_trapsignal:
+	if (l->l_proc->p_pid == 1 || cpu_printfataltraps) {
+		printf("%d.%d(%s): trap: signo=%d code=%d addr=%p trap=%#x\n",
+		     l->l_proc->p_pid, l->l_lid, l->l_proc->p_comm,
+		     ksi.ksi_signo, ksi.ksi_code, ksi.ksi_addr, ksi.ksi_trap);
+		printf("r0=%08x r1=%08x r2=%08x r3=%08x\n",
+		    tf->tf_r0, tf->tf_r1, tf->tf_r2, tf->tf_r3);
+		printf("r4=%08x r5=%08x r6=%08x r7=%08x\n",
+		    tf->tf_r4, tf->tf_r5, tf->tf_r6, tf->tf_r7);
+		printf("r8=%08x r9=%08x rA=%08x rB=%08x\n",
+		    tf->tf_r8, tf->tf_r9, tf->tf_r10, tf->tf_r11);
+		printf("ip=%08x sp=%08x lr=%08x pc=%08x spsr=%08x\n",
+		    tf->tf_r12, tf->tf_usr_sp, tf->tf_usr_lr, tf->tf_pc,
+		    tf->tf_spsr);
+	}
 	call_trapsignal(l, &ksi);
 out:
 	/* If returning to user mode, make sure to invoke userret() */

Index: src/sys/arch/arm/include/locore.h
diff -u src/sys/arch/arm/include/locore.h:1.6 src/sys/arch/arm/include/locore.h:1.7
--- src/sys/arch/arm/include/locore.h:1.6	Fri Dec 20 06:48:09 2013
+++ src/sys/arch/arm/include/locore.h	Sat Jan 11 17:32:20 2014
@@ -148,6 +148,7 @@ void	cpu_attach(device_t, cpuid_t);
 #endif
 
 /* 1 == use cpu_sleep(), 0 == don't */
+extern int cpu_printfataltraps;
 extern int cpu_do_powersave;
 extern int cpu_fpu_present;
 extern int cpu_hwdiv_present;

Reply via email to