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;