WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ppc-devel

[XenPPC] [RFC] GDB "O" packets

To: XenPPC-devel <xen-ppc-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [XenPPC] [RFC] GDB "O" packets
From: Tony Breeds <tony@xxxxxxxxxxxxxxxxxx>
Date: Mon, 28 Aug 2006 17:13:45 +1000
Delivery-date: Mon, 28 Aug 2006 00:13:57 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ppc-devel-request@lists.xensource.com?subject=help>
List-id: Xen PPC development <xen-ppc-devel.lists.xensource.com>
List-post: <mailto:xen-ppc-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=unsubscribe>
Mail-followup-to: XenPPC-devel <xen-ppc-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.9i
Hello All,
        When GDB is atatched to the serial console you loose the output
from printk()'s.  Below is a quick patch that uses GDBs "O" packet to
pass this data out to GDB.

Currently it only works for Xen printk()'s (I'll work on dom0).  It's
not complete but I'll dump it here for a quick review to ensure I'm not
doing anything too horrendous.

---
diff -r f8233165fb80 xen/common/gdbstub.c
--- a/xen/common/gdbstub.c      Sun Aug 27 16:12:00 2006 -0400
+++ b/xen/common/gdbstub.c      Mon Aug 28 17:07:02 2006 +1000
@@ -470,6 +470,28 @@ __gdb_ctx = {
 };
 static struct gdb_context *gdb_ctx = &__gdb_ctx;
 
+/* FIXME: const? */
+/* FIXME: does this need to be protected by a lock?
+ *        Can it clobber another packet? */
+void
+gdb_puts(const char *str)
+{
+    char *p;
+   
+    /* FIXME Also check that console=gdb */
+    if ( gdb_ctx->currently_attached ) {
+       gdb_start_packet(gdb_ctx);
+        gdb_write_to_packet_char('O', gdb_ctx);
+
+        for(p=(char *)str; *p != '\x0'; p++) {
+           gdb_write_to_packet_char(hex2char((*p>>4) & 0x0f), gdb_ctx );
+           gdb_write_to_packet_char(hex2char((*p) & 0x0f), gdb_ctx );
+        }
+
+       gdb_send_packet(gdb_ctx);
+    }
+}
+
 /* trap handler: main entry point */
 int 
 __trap_to_gdb(struct cpu_user_regs *regs, unsigned long cookie)
diff -r f8233165fb80 xen/drivers/char/console.c
--- a/xen/drivers/char/console.c        Sun Aug 27 16:12:00 2006 -0400
+++ b/xen/drivers/char/console.c        Mon Aug 28 17:07:02 2006 +1000
@@ -26,6 +26,8 @@
 #include <asm/current.h>
 #include <asm/debugger.h>
 #include <asm/io.h>
+
+#include <xen/gdbstub.h>
 
 /* console: comma-separated list of console outputs. */
 static char opt_console[30] = OPT_CONSOLE_STR;
@@ -258,6 +260,8 @@ static inline void __putstr(const char *
     int c;
 
     serial_puts(sercon_handle, str);
+    /* FIXME: Make sure this builds without debug=y */
+    gdb_puts(str);
 
     while ( (c = *str++) != '\0' )
     {
diff -r f8233165fb80 xen/include/xen/gdbstub.h
--- a/xen/include/xen/gdbstub.h Sun Aug 27 16:12:00 2006 -0400
+++ b/xen/include/xen/gdbstub.h Mon Aug 28 17:07:02 2006 +1000
@@ -90,10 +90,12 @@ void gdb_arch_exit(struct cpu_user_regs 
 #define SIGTERM         15
 
 void initialise_gdb(void);
+void gdb_puts(const char *str);
 
 #else
 
 #define initialise_gdb() ((void)0)
+#define gdb_puts(str) ((void)0)
 
 #endif
 
---

Yours Tony

   linux.conf.au       http://linux.conf.au/ || http://lca2007.linux.org.au/
   Jan 15-20 2007      The Australian Linux Technical Conference!


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

<Prev in Thread] Current Thread [Next in Thread>