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).