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>