Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 May 2012 07:04:42 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r235121 - in stable/8/sys: arm/at91 conf ddb dev/cfe dev/dcons dev/ofw dev/sio dev/syscons dev/uart i386/conf kern modules/dcons modules/sio pc98/cbus sys
Message-ID:  <201205070704.q4774ghF051352@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Mon May  7 07:04:41 2012
New Revision: 235121
URL: http://svn.freebsd.org/changeset/base/235121

Log:
  MFC: r225203 (partial)
  
  Attempt to make break-to-debugger and alternative break-to-debugger more
  accessible:
  
  (1) Always compile in support for breaking into the debugger if options
      KDB is present in the kernel.
  
  (2) Disable both by default, but allow them to be enabled via tunables
      and sysctls debug.kdb.break_to_debugger and
      debug.kdb.alt_break_to_debugger.
  
  (3) options BREAK_TO_DEBUGGER and options ALT_BREAK_TO_DEBUGGER continue
      to behave as before -- only now instead of compiling in
      break-to-debugger support, they change the default values of the
      above sysctls to enable those features by default.  Current kernel
      configurations should, therefore, continue to behave as expected.
  
  (4) Migrate alternative break-to-debugger state machine logic out of
      individual device drivers into centralised KDB code.  This has a
      number of upsides, but also one downside: it's now tricky to release
      sio spin locks when entering the debugger, so we don't.  However,
      similar logic does not exist in other device drivers, including uart.
  
  (5) dcons requires some special handling; unlike other console types, it
      allows overriding KDB's own debugger selection, so we need a new
      interface to KDB to allow that to work.
  
  GENERIC kernels will now support break-to-debugger as long as appropriate
  boot/run-time options are set, which should improve the debuggability of
  kernels significantly.
  
  MFC: r225214 (partial)
  
  Follow up to r225203 refining break-to-debugger run-time configuration
  improvements:
  
  (1) Implement new model in previously missed at91 UART driver
  (2) Move BREAK_TO_DEBUGGER and ALT_BREAK_TO_DEBUGGER from opt_comconsole.h
      to opt_kdb.h (spotted by np)
  (3) Garbage collect now-unused opt_comconsole.h

Modified:
  stable/8/sys/arm/at91/uart_dev_at91usart.c
  stable/8/sys/conf/options
  stable/8/sys/ddb/db_break.c
  stable/8/sys/dev/cfe/cfe_console.c
  stable/8/sys/dev/dcons/dcons_os.c
  stable/8/sys/dev/ofw/ofw_console.c
  stable/8/sys/dev/sio/sio.c
  stable/8/sys/dev/syscons/syscons.c
  stable/8/sys/dev/uart/uart_core.c
  stable/8/sys/kern/subr_kdb.c
  stable/8/sys/modules/dcons/Makefile
  stable/8/sys/modules/sio/Makefile
  stable/8/sys/pc98/cbus/sio.c
  stable/8/sys/sys/kdb.h
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/boot/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/e1000/   (props changed)
  stable/8/sys/i386/conf/XENHVM   (props changed)

Modified: stable/8/sys/arm/at91/uart_dev_at91usart.c
==============================================================================
--- stable/8/sys/arm/at91/uart_dev_at91usart.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/arm/at91/uart_dev_at91usart.c	Mon May  7 07:04:41 2012	(r235121)
@@ -29,8 +29,6 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "opt_comconsole.h"
-
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/bus.h>
@@ -508,25 +506,10 @@ at91_usart_bus_param(struct uart_softc *
 static __inline void
 at91_rx_put(struct uart_softc *sc, int key)
 {
-#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
-	int kdb_brk;
 
-	if (sc->sc_sysdev != NULL && sc->sc_sysdev->type == UART_DEV_CONSOLE) {
-		if ((kdb_brk = kdb_alt_break(key, &sc->sc_altbrk)) != 0) {
-			switch (kdb_brk) {
-			case KDB_REQ_DEBUGGER:
-				kdb_enter(KDB_WHY_BREAK,
-				    "Break sequence on console");
-				break;
-			case KDB_REQ_PANIC:
-				kdb_panic("Panic sequence on console");
-				break;
-			case KDB_REQ_REBOOT:
-				kdb_reboot();
-				break;
-			}
-		}
-	}
+#if defined(KDB)
+	if (sc->sc_sysdev != NULL && sc->sc_sysdev->type == UART_DEV_CONSOLE)
+		kdb_alt_break(key, &sc->sc_altbrk);
 #endif
 	uart_rx_put(sc, key);	
 }

Modified: stable/8/sys/conf/options
==============================================================================
--- stable/8/sys/conf/options	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/conf/options	Mon May  7 07:04:41 2012	(r235121)
@@ -47,6 +47,8 @@ TWA_DEBUG		opt_twa.h
 TWA_FLASH_FIRMWARE	opt_twa.h
 
 # Debugging options.
+ALT_BREAK_TO_DEBUGGER	opt_kdb.h
+BREAK_TO_DEBUGGER	opt_kdb.h
 DDB
 DDB_BUFR_SIZE	opt_ddb.h
 DDB_CAPTURE_DEFAULTBUFSIZE	opt_ddb.h
@@ -631,9 +633,6 @@ BKTR_SIS_VIA_MODE		opt_bktr.h
 BKTR_USE_FREEBSD_SMBUS		opt_bktr.h
 BKTR_NEW_MSP34XX_DRIVER		opt_bktr.h
 
-BREAK_TO_DEBUGGER	opt_comconsole.h
-ALT_BREAK_TO_DEBUGGER	opt_comconsole.h
-
 # Options to support PPS
 UART_PPS_ON_CTS		opt_uart.h
 

Modified: stable/8/sys/ddb/db_break.c
==============================================================================
--- stable/8/sys/ddb/db_break.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/ddb/db_break.c	Mon May  7 07:04:41 2012	(r235121)
@@ -35,8 +35,6 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "opt_comconsole.h"
-
 #include <sys/param.h>
 
 #include <vm/vm.h>

Modified: stable/8/sys/dev/cfe/cfe_console.c
==============================================================================
--- stable/8/sys/dev/cfe/cfe_console.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/dev/cfe/cfe_console.c	Mon May  7 07:04:41 2012	(r235121)
@@ -27,8 +27,6 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "opt_comconsole.h"
-
 #include <sys/param.h>
 #include <sys/kdb.h>
 #include <sys/kernel.h>
@@ -67,7 +65,7 @@ static int			polltime;
 static struct callout_handle	cfe_timeouthandle
     = CALLOUT_HANDLE_INITIALIZER(&cfe_timeouthandle);
 
-#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
+#if defined(KDB)
 static int			alt_break_state;
 #endif
 
@@ -191,24 +189,8 @@ cfe_cngetc(struct consdev *cp)
 	unsigned char ch;
 
 	if (cfe_read(conhandle, &ch, 1) == 1) {
-#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
-		int kdb_brk;
-
-		if ((kdb_brk = kdb_alt_break(ch, &alt_break_state)) != 0) {
-			switch (kdb_brk) {
-			case KDB_REQ_DEBUGGER:
-				kdb_enter(KDB_WHY_BREAK,
-				    "Break sequence on console");
-				break;
-			case KDB_REQ_PANIC:
-				kdb_panic("Panic sequence on console");
-				break;
-			case KDB_REQ_REBOOT:
-				kdb_reboot();
-				break;
-
-			}
-		}
+#if defined(KDB)
+		kdb_alt_break(ch, &alt_break_state);
 #endif
 		return (ch);
 	}

Modified: stable/8/sys/dev/dcons/dcons_os.c
==============================================================================
--- stable/8/sys/dev/dcons/dcons_os.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/dev/dcons/dcons_os.c	Mon May  7 07:04:41 2012	(r235121)
@@ -64,7 +64,6 @@
 #include <vm/vm_param.h>
 #include <vm/pmap.h>
 
-#include "opt_comconsole.h"
 #include "opt_dcons.h"
 #include "opt_kdb.h"
 #include "opt_gdb.h"
@@ -133,38 +132,21 @@ static struct ttydevsw dcons_ttydevsw = 
 	.tsw_outwakeup  = dcons_outwakeup,
 };
 
-#if (defined(GDB) || defined(DDB)) && defined(ALT_BREAK_TO_DEBUGGER)
+#if (defined(GDB) || defined(DDB))
 static int
 dcons_check_break(struct dcons_softc *dc, int c)
 {
-	int kdb_brk;
 
 	if (c < 0)
 		return (c);
 
-	if ((kdb_brk = kdb_alt_break(c, &dc->brk_state)) != 0) {
-		switch (kdb_brk) {
-		case KDB_REQ_DEBUGGER:
-			if ((dc->flags & DC_GDB) != 0) {
 #ifdef GDB
-				if (gdb_cur == &dcons_gdb_dbgport) {
-					kdb_dbbe_select("gdb");
-					kdb_enter(KDB_WHY_BREAK,
-					    "Break sequence on dcons gdb port");
-				}
-#endif
-			} else
-				kdb_enter(KDB_WHY_BREAK,
-				    "Break sequence on dcons console port");
-			break;
-		case KDB_REQ_PANIC:
-			kdb_panic("Panic sequence on dcons console port");
-			break;
-		case KDB_REQ_REBOOT:
-			kdb_reboot();
-			break;
-		}
-	}
+	if ((dc->flags & DC_GDB) != 0 && gdb_cur == &dcons_gdb_dbgport)
+		kdb_alt_break_gdb(c, &dc->brk_state);
+	else
+#endif
+		kdb_alt_break(c, &dc->brk_state);
+
 	return (c);
 }
 #else

Modified: stable/8/sys/dev/ofw/ofw_console.c
==============================================================================
--- stable/8/sys/dev/ofw/ofw_console.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/dev/ofw/ofw_console.c	Mon May  7 07:04:41 2012	(r235121)
@@ -26,7 +26,6 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "opt_comconsole.h"
 #include "opt_ofw.h"
 
 #include <sys/param.h>
@@ -64,7 +63,7 @@ static int			polltime;
 static struct callout_handle	ofw_timeouthandle
     = CALLOUT_HANDLE_INITIALIZER(&ofw_timeouthandle);
 
-#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
+#if defined(KDB)
 static int			alt_break_state;
 #endif
 
@@ -199,24 +198,8 @@ ofw_cngetc(struct consdev *cp)
 	unsigned char ch;
 
 	if (OF_read(stdin, &ch, 1) > 0) {
-#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
-		int kdb_brk;
-
-		if ((kdb_brk = kdb_alt_break(ch, &alt_break_state)) != 0) {
-			switch (kdb_brk) {
-			case KDB_REQ_DEBUGGER:
-				kdb_enter(KDB_WHY_BREAK,
-				    "Break sequence on console");
-				break;
-			case KDB_REQ_PANIC:
-				kdb_panic("Panic sequence on console");
-				break;
-			case KDB_REQ_REBOOT:
-				kdb_reboot();
-				break;
-
-			}
-		}
+#if defined(KDB)
+		kdb_alt_break(ch, &alt_break_state);
 #endif
 		return (ch);
 	}

Modified: stable/8/sys/dev/sio/sio.c
==============================================================================
--- stable/8/sys/dev/sio/sio.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/dev/sio/sio.c	Mon May  7 07:04:41 2012	(r235121)
@@ -33,7 +33,6 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "opt_comconsole.h"
 #include "opt_compat.h"
 #include "opt_gdb.h"
 #include "opt_kdb.h"
@@ -228,7 +227,7 @@ struct com_s {
 
 	struct	pps_state pps;
 	int	pps_bit;
-#ifdef ALT_BREAK_TO_DEBUGGER
+#ifdef KDB
 	int	alt_brk_state;
 #endif
 
@@ -1102,8 +1101,7 @@ determined_type: ;
 		}
 		if (ret)
 			device_printf(dev, "could not activate interrupt\n");
-#if defined(KDB) && (defined(BREAK_TO_DEBUGGER) || \
-    defined(ALT_BREAK_TO_DEBUGGER))
+#if defined(KDB)
 		/*
 		 * Enable interrupts for early break-to-debugger support
 		 * on the console.
@@ -1196,8 +1194,7 @@ comclose(tp)
 	com->poll_output = FALSE;
 	sio_setreg(com, com_cfcr, com->cfcr_image &= ~CFCR_SBREAK);
 
-#if defined(KDB) && (defined(BREAK_TO_DEBUGGER) || \
-    defined(ALT_BREAK_TO_DEBUGGER))
+#if defined(KDB)
 	/*
 	 * Leave interrupts enabled and don't clear DTR if this is the
 	 * console. This allows us to detect break-to-debugger events
@@ -1484,9 +1481,8 @@ siointr1(com)
 	u_char	modem_status;
 	u_char	*ioptr;
 	u_char	recv_data;
-#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
-	int	kdb_brk;
 
+#ifdef KDB
 again:
 #endif
 
@@ -1519,27 +1515,9 @@ again:
 			else
 				recv_data = inb(com->data_port);
 #ifdef KDB
-#ifdef ALT_BREAK_TO_DEBUGGER
 			if (com->unit == comconsole &&
-			    (kdb_brk = kdb_alt_break(recv_data,
-					&com->alt_brk_state)) != 0) {
-				mtx_unlock_spin(&sio_lock);
-				switch (kdb_brk) {
-				case KDB_REQ_DEBUGGER:
-					kdb_enter(KDB_WHY_BREAK,
-					    "Break sequence on console");
-					break;
-				case KDB_REQ_PANIC:
-					kdb_panic("panic on console");
-					break;
-				case KDB_REQ_REBOOT:
-					kdb_reboot();
-					break;
-				}
-				mtx_lock_spin(&sio_lock);
+			    kdb_alt_break(recv_data, &com->alt_brk_state) != 0)
 				goto again;
-			}
-#endif /* ALT_BREAK_TO_DEBUGGER */
 #endif /* KDB */
 			if (line_status & (LSR_BI | LSR_FE | LSR_PE)) {
 				/*
@@ -1555,10 +1533,9 @@ again:
 				 * Note: BI together with FE/PE means just BI.
 				 */
 				if (line_status & LSR_BI) {
-#if defined(KDB) && defined(BREAK_TO_DEBUGGER)
+#if defined(KDB)
 					if (com->unit == comconsole) {
-						kdb_enter(KDB_WHY_BREAK,
-						    "Line break on console");
+						kdb_break();
 						goto cont;
 					}
 #endif

Modified: stable/8/sys/dev/syscons/syscons.c
==============================================================================
--- stable/8/sys/dev/syscons/syscons.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/dev/syscons/syscons.c	Mon May  7 07:04:41 2012	(r235121)
@@ -3426,7 +3426,7 @@ next_code:
 	    case DBG:
 #ifndef SC_DISABLE_KDBKEY
 		if (enable_kdbkey)
-			kdb_enter(KDB_WHY_BREAK, "manual escape to debugger");
+			kdb_break();
 #endif
 		break;
 

Modified: stable/8/sys/dev/uart/uart_core.c
==============================================================================
--- stable/8/sys/dev/uart/uart_core.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/dev/uart/uart_core.c	Mon May  7 07:04:41 2012	(r235121)
@@ -27,10 +27,6 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#ifndef KLD_MODULE
-#include "opt_comconsole.h"
-#endif
-
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/bus.h>
@@ -119,10 +115,10 @@ uart_intr_break(void *arg)
 {
 	struct uart_softc *sc = arg;
 
-#if defined(KDB) && defined(BREAK_TO_DEBUGGER)
+#if defined(KDB)
 	if (sc->sc_sysdev != NULL && sc->sc_sysdev->type == UART_DEV_CONSOLE) {
-		kdb_enter(KDB_WHY_BREAK, "Line break on console");
-		return (0);
+		if (kdb_break())
+			return (0);
 	}
 #endif
 	if (sc->sc_opened)
@@ -171,26 +167,10 @@ uart_intr_rxready(void *arg)
 
 	rxp = sc->sc_rxput;
 	UART_RECEIVE(sc);
-#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
+#if defined(KDB)
 	if (sc->sc_sysdev != NULL && sc->sc_sysdev->type == UART_DEV_CONSOLE) {
 		while (rxp != sc->sc_rxput) {
-			int kdb_brk;
-
-			if ((kdb_brk = kdb_alt_break(sc->sc_rxbuf[rxp++],
-			    &sc->sc_altbrk)) != 0) {
-				switch (kdb_brk) {
-				case KDB_REQ_DEBUGGER:
-					kdb_enter(KDB_WHY_BREAK,
-					    "Break sequence on console");
-					break;
-				case KDB_REQ_PANIC:
-					kdb_panic("Panic sequence on console");
-					break;
-				case KDB_REQ_REBOOT:
-					kdb_reboot();
-					break;
-				}
-			}
+			kdb_alt_break(sc->sc_rxbuf[rxp++], &sc->sc_altbrk);
 			if (rxp == sc->sc_rxbufsz)
 				rxp = 0;
 		}

Modified: stable/8/sys/kern/subr_kdb.c
==============================================================================
--- stable/8/sys/kern/subr_kdb.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/kern/subr_kdb.c	Mon May  7 07:04:41 2012	(r235121)
@@ -56,6 +56,21 @@ struct pcb *kdb_thrctx = NULL;
 struct thread *kdb_thread = NULL;
 struct trapframe *kdb_frame = NULL;
 
+#ifdef BREAK_TO_DEBUGGER
+#define	KDB_BREAK_TO_DEBUGGER	1
+#else
+#define	KDB_BREAK_TO_DEBUGGER	0
+#endif
+
+#ifdef ALT_BREAK_TO_DEBUGGER
+#define	KDB_ALT_BREAK_TO_DEBUGGER	1
+#else
+#define	KDB_ALT_BREAK_TO_DEBUGGER	0
+#endif
+
+static int	kdb_break_to_debugger = KDB_BREAK_TO_DEBUGGER;
+static int	kdb_alt_break_to_debugger = KDB_ALT_BREAK_TO_DEBUGGER;
+
 KDB_BACKEND(null, NULL, NULL, NULL);
 SET_DECLARE(kdb_dbbe_set, struct kdb_dbbe);
 
@@ -86,6 +101,15 @@ SYSCTL_PROC(_debug_kdb, OID_AUTO, trap, 
 SYSCTL_PROC(_debug_kdb, OID_AUTO, trap_code, CTLTYPE_INT | CTLFLAG_RW, NULL, 0,
     kdb_sysctl_trap_code, "I", "set to cause a page fault via code access");
 
+SYSCTL_INT(_debug_kdb, OID_AUTO, break_to_debugger, CTLTYPE_INT | CTLFLAG_RW |
+    CTLFLAG_TUN, &kdb_break_to_debugger, 0, "Enable break to debugger");
+TUNABLE_INT("debug.kdb.break_to_debugger", &kdb_break_to_debugger);
+
+SYSCTL_INT(_debug_kdb, OID_AUTO, alt_break_to_debugger, CTLTYPE_INT |
+    CTLFLAG_RW | CTLFLAG_TUN, &kdb_alt_break_to_debugger, 0,
+    "Enable alternative break to debugger");
+TUNABLE_INT("debug.kdb.alt_break_to_debugger", &kdb_alt_break_to_debugger);
+
 /*
  * Flag indicating whether or not to IPI the other CPUs to stop them on
  * entering the debugger.  Sometimes, this will result in a deadlock as
@@ -260,7 +284,17 @@ kdb_reboot(void)
 #define	KEY_CRTLR	18	/* ^R */
 
 int
-kdb_alt_break(int key, int *state)
+kdb_break(void)
+{
+
+	if (!kdb_break_to_debugger)
+		return (0);
+	kdb_enter(KDB_WHY_BREAK, "Break to debugger");
+	return (KDB_REQ_DEBUGGER);
+}
+
+static int
+kdb_alt_break_state(int key, int *state)
 {
 	int brk;
 
@@ -286,6 +320,53 @@ kdb_alt_break(int key, int *state)
 	return (brk);
 }
 
+static int
+kdb_alt_break_internal(int key, int *state, int force_gdb)
+{
+	int brk;
+
+	if (!kdb_alt_break_to_debugger)
+		return (0);
+	brk = kdb_alt_break_state(key, state);
+	switch (brk) {
+	case KDB_REQ_DEBUGGER:
+		if (force_gdb)
+			kdb_dbbe_select("gdb");
+		kdb_enter(KDB_WHY_BREAK, "Break to debugger");
+		break;
+
+	case KDB_REQ_PANIC:
+		if (force_gdb)
+			kdb_dbbe_select("gdb");
+		kdb_panic("Panic sequence on console");
+		break;
+
+	case KDB_REQ_REBOOT:
+		kdb_reboot();
+		break;
+	}
+	return (0);
+}
+
+int
+kdb_alt_break(int key, int *state)
+{
+
+	return (kdb_alt_break_internal(key, state, 0));
+}
+
+/*
+ * This variation on kdb_alt_break() is used only by dcons, which has its own
+ * configuration flag to force GDB use regardless of the global KDB
+ * configuration.
+ */
+int
+kdb_alt_break_gdb(int key, int *state)
+{
+
+	return (kdb_alt_break_internal(key, state, 1));
+}
+
 /*
  * Print a backtrace of the calling thread. The backtrace is generated by
  * the selected debugger, provided it supports backtraces. If no debugger

Modified: stable/8/sys/modules/dcons/Makefile
==============================================================================
--- stable/8/sys/modules/dcons/Makefile	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/modules/dcons/Makefile	Mon May  7 07:04:41 2012	(r235121)
@@ -5,7 +5,7 @@
 
 KMOD	= dcons
 SRCS	= dcons.c dcons.h dcons_os.c dcons_os.h \
-		opt_dcons.h opt_kdb.h opt_ddb.h opt_gdb.h opt_comconsole.h
+		opt_dcons.h opt_kdb.h opt_ddb.h opt_gdb.h
 
 .if !defined(KERNBUILDDIR)
 opt_kdb.h:
@@ -13,9 +13,6 @@ opt_kdb.h:
 
 opt_ddb.h:
 	echo "#define DDB 1" > $@
-
-opt_comconsole.h:
-	echo "#define ALT_BREAK_TO_DEBUGGER 1" > $@
 .endif
 
 CFLAGS+= -I${.CURDIR}/../.. 

Modified: stable/8/sys/modules/sio/Makefile
==============================================================================
--- stable/8/sys/modules/sio/Makefile	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/modules/sio/Makefile	Mon May  7 07:04:41 2012	(r235121)
@@ -7,7 +7,7 @@
 
 KMOD=	sio
 SRCS=	bus_if.h card_if.h device_if.h isa_if.h pci_if.h serdev_if.h \
-	opt_comconsole.h opt_compat.h opt_gdb.h opt_kdb.h opt_sio.h \
+	opt_compat.h opt_gdb.h opt_kdb.h opt_sio.h \
 	sio.c sio_pccard.c sio_pci.c sio_puc.c pccarddevs.h
 .if ${MACHINE} == "pc98"
 SRCS+=	sio_cbus.c

Modified: stable/8/sys/pc98/cbus/sio.c
==============================================================================
--- stable/8/sys/pc98/cbus/sio.c	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/pc98/cbus/sio.c	Mon May  7 07:04:41 2012	(r235121)
@@ -31,7 +31,6 @@
  *	from: i386/isa sio.c,v 1.234
  */
 
-#include "opt_comconsole.h"
 #include "opt_compat.h"
 #include "opt_gdb.h"
 #include "opt_kdb.h"
@@ -310,7 +309,7 @@ struct com_s {
 
 	struct	pps_state pps;
 	int	pps_bit;
-#ifdef ALT_BREAK_TO_DEBUGGER
+#ifdef KDB
 	int	alt_brk_state;
 #endif
 
@@ -1752,8 +1751,7 @@ determined_type: ;
 		}
 		if (ret)
 			device_printf(dev, "could not activate interrupt\n");
-#if defined(KDB) && (defined(BREAK_TO_DEBUGGER) || \
-    defined(ALT_BREAK_TO_DEBUGGER))
+#if defined(KDB)
 		/*
 		 * Enable interrupts for early break-to-debugger support
 		 * on the console.
@@ -1896,8 +1894,7 @@ comclose(tp)
 	sio_setreg(com, com_cfcr, com->cfcr_image &= ~CFCR_SBREAK);
 #endif
 
-#if defined(KDB) && (defined(BREAK_TO_DEBUGGER) || \
-    defined(ALT_BREAK_TO_DEBUGGER))
+#if defined(KDB)
 	/*
 	 * Leave interrupts enabled and don't clear DTR if this is the
 	 * console. This allows us to detect break-to-debugger events
@@ -2273,7 +2270,7 @@ siointr1(com)
 	u_char	rsa_buf_status = 0;
 	int	rsa_tx_fifo_size = 0;
 #endif /* PC98 */
-#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
+#if defined(KDB)
 	int	kdb_brk;
 
 again:
@@ -2370,27 +2367,11 @@ more_intr:
 			else
 				recv_data = inb(com->data_port);
 #ifdef KDB
-#ifdef ALT_BREAK_TO_DEBUGGER
 			if (com->unit == comconsole &&
 			    (kdb_brk = kdb_alt_break(recv_data,
 					&com->alt_brk_state)) != 0) {
-				mtx_unlock_spin(&sio_lock);
-				switch (kdb_brk) {
-				case KDB_REQ_DEBUGGER:
-					kdb_enter(KDB_WHY_BREAK,
-					    "Break sequence on console");
-					break;
-				case KDB_REQ_PANIC:
-					kdb_panic("panic on console");
-					break;
-				case KDB_REQ_REBOOT:
-					kdb_reboot();
-					break;
-				}
-				mtx_lock_spin(&sio_lock);
 				goto again;
 			}
-#endif /* ALT_BREAK_TO_DEBUGGER */
 #endif /* KDB */
 			if (line_status & (LSR_BI | LSR_FE | LSR_PE)) {
 				/*
@@ -2406,7 +2387,7 @@ more_intr:
 				 * Note: BI together with FE/PE means just BI.
 				 */
 				if (line_status & LSR_BI) {
-#if defined(KDB) && defined(BREAK_TO_DEBUGGER)
+#if defined(KDB)
 					if (com->unit == comconsole) {
 						kdb_enter(KDB_WHY_BREAK,
 						    "Line break on console");

Modified: stable/8/sys/sys/kdb.h
==============================================================================
--- stable/8/sys/sys/kdb.h	Mon May  7 05:28:49 2012	(r235120)
+++ stable/8/sys/sys/kdb.h	Mon May  7 07:04:41 2012	(r235121)
@@ -64,6 +64,8 @@ extern struct pcb *kdb_thrctx;		/* Curre
 extern struct thread *kdb_thread;	/* Current thread. */
 
 int	kdb_alt_break(int, int *);
+int	kdb_alt_break_gdb(int, int *);
+int	kdb_break(void);
 void	kdb_backtrace(void);
 int	kdb_dbbe_select(const char *);
 void	kdb_enter(const char *, const char *);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201205070704.q4774ghF051352>