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

[Xen-devel] [PATCH] fix the bug of gdb which debugs xen.


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: Caz Yokoyama <cazyokoyama@xxxxxxxxx>
  • Date: Tue, 11 Aug 2009 19:15:24 -0700
  • Delivery-date: Tue, 11 Aug 2009 19:15:55 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:subject:date:message-id:mime-version:content-type:x-mailer :thread-index:x-mimeole; b=oNgyWfs14yjzUoQ299sMJqe6P4pk/KdfA3mzR5edKv5u9qn+2nYfPwfPg0hNczznqA u29BSM8Nl+a0dWt7eqyMnsL322wUplHpVuEkEVkt9ApvtnF4I1hCqlsLbnK86K2bkNF2 ZO/fm9sV84JCB+1zFISH1wnnbVDdEatWN7HSE=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: Acoa8r/5gPp6Qi5vSqWmE3+LHCGKRQ==

Hello,

This patch fixes the bug of gdb which debugs Xen hypervisor, i.e. not domU. As Emre Can Sezer reported in http://lists.xensource.com/archives/html/xen-devel/2009-01/msg00885.html, once break point is hit, continue command produces SIGTRAP at restore_all_xen(). This patch makes continue command resume Xen running. I still see other bugs like backtrace command does not show function name. But I hope this helps your debug.

FYI, related postings.

http://lists.xensource.com/archives/html/xen-devel/2007-12/msg00678.html

http://www.filewatcher.com/p/xen_2.0.6.orig.tar.gz.2456215/xen-2.0/docs/misc/XenDebugger-HOWTO.html

 

connect gdb on step command

--- a/xen/arch/x86/traps.c      Thu Aug 06 13:27:53 2009 +0100

+++ b/xen/arch/x86/traps.c      Tue Aug 11 18:15:25 2009 -0700

@@ -2977,13 +2977,7 @@

         if ( regs->eflags & EF_TF )

         {

 #ifdef __x86_64__

-            void sysenter_entry(void);

-            void sysenter_eflags_saved(void);

-            /* In SYSENTER entry path we can't zap TF until EFLAGS is saved. */

-            if ( (regs->rip >= (unsigned long)sysenter_entry) &&

-                 (regs->rip < (unsigned long)sysenter_eflags_saved) )

-                goto out;

-            WARN_ON(regs->rip != (unsigned long)sysenter_eflags_saved);

+            debugger_trap_fatal(TRAP_debug, regs);

 #else

             WARN_ON(1);

 #endif

 

Value of gdb command is little endian.

diff -r 13fe7f07df15 xen/common/gdbstub.c

--- a/xen/common/gdbstub.c      Thu Aug 06 13:27:53 2009 +0100

+++ b/xen/common/gdbstub.c      Tue Aug 11 18:15:25 2009 -0700

@@ -53,6 +53,10 @@

 

 #define GDB_RETRY_MAX   10

 

+#define swap16(_v) ((((u16)(_v)>>8)&0xff)|(((u16)(_v)&0xff)<<8))

+#define swap32(_v) (((u32)swap16((u16)(_v))<<16)|(u32)swap16((u32)((_v)>>16)))

+#define swap64(_v) (((u64)swap32((u32)(_v))<<32)|(u64)swap32((u32)((_v)>>32)))

+

 struct gdb_cpu_info

 {

     atomic_t paused;

@@ -489,6 +493,7 @@

         }

         ptr++;

         val = str2ulong(ptr, sizeof(unsigned long));

+        val = swap64(val);

         gdb_arch_write_reg(addr, val, regs, ctx);

         break;

     case 'D':

 

Thank you.

-Caz Yokoyama, caz at caztech dot com. 503-804-1028(m).

 

Attachment: XenGdb.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®.