Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Mar 2004 21:58:11 -0800 (PST)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 48765 for review
Message-ID:  <200403120558.i2C5wBxV061972@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=48765

Change 48765 by marcel@marcel_nfs on 2004/03/11 21:57:54

	Add an active field to the KDB backend structure and the
	GDB debug port structure. Meaning of these are:
		-1	backend or port is dead,
		0	backend or port is inactive,
		>0	backend or port is active.
	Use the active field to iterate over the linker set and
	display probed backends or ports.
	
	Initialize the GDB debug port after probing. uart(4) now
	properly displays:
	
	uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 on acpi0
	uart0: debug port (115200,n,8,1)

Affected files ...

.. //depot/projects/gdb/sys/gdb/gdb.h#3 edit
.. //depot/projects/gdb/sys/gdb/gdb_main.c#2 edit
.. //depot/projects/gdb/sys/kern/subr_kdb.c#4 edit
.. //depot/projects/gdb/sys/sys/kdb.h#3 edit

Differences ...

==== //depot/projects/gdb/sys/gdb/gdb.h#3 (text+ko) ====

@@ -44,6 +44,7 @@
 	gdb_probe_f	*gdb_probe;
 	gdb_putc_f	*gdb_putc;
 	gdb_term_f	*gdb_term;
+	int		gdb_active;
 };
 
 #define	GDB_DBGPORT(name, probe, init, term, checkc, getc, putc)	\
@@ -58,4 +59,6 @@
 	};								\
 	DATA_SET(gdb_dbgport_set, name##_gdb_dbgport)
 
+extern struct gdb_dbgport *gdb_cur;
+
 #endif /* !_GDB_GDB_H_ */

==== //depot/projects/gdb/sys/gdb/gdb_main.c#2 (text+ko) ====

@@ -55,22 +55,27 @@
 	SET_FOREACH(iter, gdb_dbgport_set) {
 		dp = *iter;
 		pri = (dp->gdb_probe != NULL) ? dp->gdb_probe() : -1;
-		if (pri >= 0) {
-			if (cur_pri == -1)
-				printf("GDB: debug ports:");
-			printf(" %s", dp->gdb_name);
-			if (pri > cur_pri) {
-				cur_pri = pri;
-				gdb_cur = dp;
-			}
+		dp->gdb_active = (pri >= 0) ? 0 : -1;
+		if (pri > cur_pri) {
+			cur_pri = pri;
+			gdb_cur = dp;
 		}
 	}
-	if (cur_pri != -1) {
+	if (gdb_cur != NULL) {
+		printf("GDB: debug ports:");
+		SET_FOREACH(iter, gdb_dbgport_set) {
+			dp = *iter;
+			if (dp->gdb_active == 0)
+				printf(" %s", dp->gdb_name);
+		}
 		printf("\n");
-		printf("GDB: current=%s\n", gdb_cur->gdb_name);
 	} else
 		printf("GDB: no debug ports present\n");
-	return ((cur_pri == -1) ? 0 : 1);
+	if (gdb_cur != NULL) {
+		gdb_cur->gdb_init();
+		printf("GDB: current port: %s\n", gdb_cur->gdb_name);
+	}
+	return ((gdb_cur != NULL) ? 1 : 0);
 }
 
 static int

==== //depot/projects/gdb/sys/kern/subr_kdb.c#4 (text+ko) ====

@@ -133,21 +133,23 @@
 	SET_FOREACH(iter, kdb_dbbe_set) {
 		be = *iter;
 		pri = (be->dbbe_init != NULL) ? be->dbbe_init() : -1;
-		if (pri >= 0) {
-			if (cur_pri == -1)
-				printf("KDB: debugger backends:");
-			printf(" %s", be->dbbe_name);
-			if (pri > cur_pri) {
-				cur_pri = pri;
-				kdb_cur = be;
-			}
+		be->dbbe_active = (pri >= 0) ? 0 : -1;
+		if (pri > cur_pri) {
+			cur_pri = pri;
+			kdb_cur = be;
 		}
 	}
-	if (cur_pri != -1) {
+	if (kdb_cur != NULL) {
+		printf("KDB: debugger backends:");
+		SET_FOREACH(iter, kdb_dbbe_set) {
+			be = *iter;
+			if (be->dbbe_active == 0)
+				printf(" %s", be->dbbe_name);
+		}
 		printf("\n");
-		printf("KDB: current=%s\n", kdb_cur->dbbe_name);
-	} else
-		printf("KDB: no debugger backends present\n");
+		printf("KDB: current backend: %s\n",
+		    kdb_cur->dbbe_name);
+	}
 }
 
 /*

==== //depot/projects/gdb/sys/sys/kdb.h#3 (text+ko) ====

@@ -42,6 +42,7 @@
 	dbbe_init_f	*dbbe_init;
 	dbbe_trace_f	*dbbe_trace;
 	dbbe_trap_f	*dbbe_trap;
+	int		dbbe_active;
 };
 
 #define	KDB_BACKEND(name, init, trace, enter, trap)	\



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