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);