Module Name:    src
Committed By:   sevan
Date:           Sat Feb 17 00:41:09 UTC 2018

Modified Files:
        src/sys/ddb: db_panic.c db_variables.c ddbvar.h

Log Message:
Opt to print a backtrace on panic by default with the intention of improving 
bug reports.
Instead of relying on ddb.onpanic=2, introduce a new sysctl called dumpstack to 
handle this.
via <jmcneill> channeled through <mrg> on tech-kern[1]

[1] https://mail-index.netbsd.org/tech-kern/2018/02/15/msg023103.html


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/ddb/db_panic.c
cvs rdiff -u -r1.45 -r1.46 src/sys/ddb/db_variables.c
cvs rdiff -u -r1.12 -r1.13 src/sys/ddb/ddbvar.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/ddb/db_panic.c
diff -u src/sys/ddb/db_panic.c:1.6 src/sys/ddb/db_panic.c:1.7
--- src/sys/ddb/db_panic.c:1.6	Thu Dec 28 17:51:19 2017
+++ src/sys/ddb/db_panic.c	Sat Feb 17 00:41:09 2018
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_panic.c,v 1.6 2017/12/28 17:51:19 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_panic.c,v 1.7 2018/02/17 00:41:09 sevan Exp $");
 
 #include <sys/types.h>
 #include <sys/cpu.h>
@@ -41,9 +41,7 @@ __KERNEL_RCSID(0, "$NetBSD: db_panic.c,v
 void db_panic(void)
 {
 
-	if (db_onpanic == 1)
-		Debugger();
-	else if (db_onpanic >= 0) {
+	if (db_dumpstack > 0) {
 		static int intrace = 0;
 
 		if (intrace == 0) {
@@ -58,8 +56,10 @@ void db_panic(void)
 			intrace = 0;
 		} else
 			printf("Faulted in mid-traceback; aborting...\n");
-		if (db_onpanic == 2)
-			Debugger();
 	}
+
+	if (db_onpanic > 0)
+		Debugger();
+
 	return;
 }

Index: src/sys/ddb/db_variables.c
diff -u src/sys/ddb/db_variables.c:1.45 src/sys/ddb/db_variables.c:1.46
--- src/sys/ddb/db_variables.c:1.45	Thu Dec 28 17:51:19 2017
+++ src/sys/ddb/db_variables.c	Sat Feb 17 00:41:09 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: db_variables.c,v 1.45 2017/12/28 17:51:19 christos Exp $	*/
+/*	$NetBSD: db_variables.c,v 1.46 2018/02/17 00:41:09 sevan Exp $	*/
 
 /*
  * Mach Operating System
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_variables.c,v 1.45 2017/12/28 17:51:19 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_variables.c,v 1.46 2018/02/17 00:41:09 sevan Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddbparam.h"
@@ -71,6 +71,10 @@ int		db_tee_msgbuf = DDB_TEE_MSGBUF;
 #endif
 int		db_panicstackframes = DDB_PANICSTACKFRAMES;
 
+#ifndef DDB_DUMPSTACK
+#define DDB_DUMPSTACK 1
+#endif
+int 		db_dumpstack = DDB_DUMPSTACK;
 
 static int	db_rw_internal_variable(const struct db_variable *, db_expr_t *,
 		    int);
@@ -115,6 +119,12 @@ const struct db_variable db_vars[] = {
 		.modif = NULL,
 	},
 	{
+		.name = "dumpstack",
+		.valuep = &db_dumpstack,
+		.fcn = db_rw_internal_variable,
+		.modif = NULL,
+	},
+	{
 		.name = "radix",
 		.valuep = &db_radix,
 		.fcn = db_rw_internal_variable,
@@ -217,6 +227,12 @@ SYSCTL_SETUP(sysctl_ddb_setup, "sysctl d
 		       SYSCTL_DESCR("Number of stack frames to print on panic"),
 		       NULL, 0, &db_panicstackframes, 0,
 		       CTL_DDB, CTL_CREATE, CTL_EOL);
+	sysctl_createv(clog, 0, NULL, NULL,
+		       CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
+		       CTLTYPE_INT, "dumpstack",
+		       SYSCTL_DESCR("On panic print stack trace"),
+		       NULL, 0, &db_dumpstack, 0,
+		       CTL_DDB, CTL_CREATE, CTL_EOL);
 }
 #endif	/* _KERNEL */
 

Index: src/sys/ddb/ddbvar.h
diff -u src/sys/ddb/ddbvar.h:1.12 src/sys/ddb/ddbvar.h:1.13
--- src/sys/ddb/ddbvar.h:1.12	Thu Dec 28 17:51:19 2017
+++ src/sys/ddb/ddbvar.h	Sat Feb 17 00:41:09 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: ddbvar.h,v 1.12 2017/12/28 17:51:19 christos Exp $	*/
+/*	$NetBSD: ddbvar.h,v 1.13 2018/02/17 00:41:09 sevan Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@@ -40,6 +40,7 @@ extern	int db_onpanic;
 extern	int db_fromconsole;
 extern	int db_panicstackframes;
 extern	int db_tee_msgbuf;
+extern	int db_dumpstack;
 
 extern	void db_panic(void);
 

Reply via email to