[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



On Mon, Aug 17, 2009 at 01:56:38PM -0700, Caz Yokoyama wrote:
> 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

Is there a reason for #if 1 here?

> +        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
> 


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


_______________________________________________
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®.