[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-devel] [PATCH] break-in to Xen 1) when gdb is invoked and 2) ^C on gdb


  • To: "'Keir Fraser'" <keir.fraser@xxxxxxxxxxxxx>
  • From: Caz Yokoyama <cazyokoyama@xxxxxxxxx>
  • Date: Mon, 17 Aug 2009 13:56:38 -0700
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
  • Delivery-date: Mon, 17 Aug 2009 13:57:38 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:references:subject:date:message-id:mime-version :content-type:x-mailer:in-reply-to:thread-index:x-mimeole; b=KKKMGXmY6SeeQc4WyS3QIaTxE8I2PjcFhyiXd5I3gXEgDjgEzU2lzY2IRXJnXIFFNs Vh+ZmcjRlbEGM4LkQR0xCVpjHCv8FS0M86Q6xIGfEmYtc966X8q53IpUOgCgab2FHUug qciOq2/icwGqrXpLkuJPoNpS9a/LuPxi2X+3E=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: Acoa8r/5gPp6Qi5vSqWmE3+LHCGKRQAL+ch1AAhh8kAAAy/QtgAPyLvAAAwxkAAACdKF+gAqBCLAACJmbeAAmDWbsA==

Hello Keir,
This patch makes gdb break-in to Xen when 1) it is invoked and 2) ^C is
typed on gdb or clicking interrupt on ddd.
diff -r 8b0f1f37e145 xen/common/keyhandler.c
--- a/xen/common/keyhandler.c   Sun Aug 16 08:46:08 2009 +0100
+++ b/xen/common/keyhandler.c   Mon Aug 17 10:07:04 2009 -0700
@@ -397,7 +397,11 @@
     .desc = "print all diagnostics"
 };
 
+#if 1
+void do_debug_key(unsigned char key, struct cpu_user_regs *regs)
+#else
 static void do_debug_key(unsigned char key, struct cpu_user_regs *regs)
+#endif
 {
     printk("'%c' pressed -> trapping into debugger\n", key);
     (void)debugger_trap_fatal(0xf001, regs);
diff -r 8b0f1f37e145 xen/drivers/char/ns16550.c
--- a/xen/drivers/char/ns16550.c        Sun Aug 16 08:46:08 2009 +0100
+++ b/xen/drivers/char/ns16550.c        Mon Aug 17 10:07:04 2009 -0700
@@ -16,6 +16,7 @@
 #include <xen/serial.h>
 #include <xen/iocap.h>
 #include <asm/io.h>
+#include <xen/keyhandler.h>
 
 /*
  * Configure serial port with a string:
@@ -125,10 +126,16 @@
 {
     struct serial_port *port = dev_id;
     struct ns16550 *uart = port->uart;
+    char lsr;
 
     while ( !(ns_read_reg(uart, IIR) & IIR_NOINT) )
     {
-        char lsr = ns_read_reg(uart, LSR);
+        lsr = ns_read_reg(uart, LSR);
+#if 1
+        if ( lsr & LSR_BI ) { /* on BREAK */
+            do_debug_key('g', regs); /* g is meaningless */
+        }
+#endif
         if ( lsr & LSR_THRE )
             serial_tx_interrupt(port, regs);
         if ( lsr & LSR_DR )
diff -r 8b0f1f37e145 xen/include/xen/keyhandler.h
--- a/xen/include/xen/keyhandler.h      Sun Aug 16 08:46:08 2009 +0100
+++ b/xen/include/xen/keyhandler.h      Mon Aug 17 10:07:04 2009 -0700
@@ -40,6 +40,10 @@
     char *desc;
 };
 
+#if 1
+extern void do_debug_key(unsigned char key, struct cpu_user_regs *regs);
+#endif
+
 /* Initialize keytable with default handlers */
 extern void initialize_keytable(void);

Xen expects BREAK and 'g' which is the same sequence of the one on Linux
kernel. I submitted a patch which sends BREAK and 'g' to gdb-patches on
08/07, but it is not approved yet.
You can't use ssplitd/nsplitd because it does not pass BREAK. Therefore, you
lose console output and corresponding ^A^A^A functions. My associated lines
for the patch are
menu.lst
        kernel /boot/xen-3.5-unstable.gz com1=115200,8n1 gdb=com1 
.gdbinit
        set remotebreak BREAK-g
        target remote /dev/ttyS0
 ddd --gdb --debugger "/home/caz/lightfleet/kgdb/gdb-KgdbLight/gdb/gdb"
xen/xen-syms
-caz

Attachment: BREAK-g.patch
Description: Binary data

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.