All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fix the bug of gdb which debugs xen.
@ 2009-08-12  2:15 Caz Yokoyama
  2009-08-12  7:58 ` Keir Fraser
  0 siblings, 1 reply; 16+ messages in thread
From: Caz Yokoyama @ 2009-08-12  2:15 UTC (permalink / raw)
  To: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 2239 bytes --]

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 #1.2: Type: text/html, Size: 19052 bytes --]

[-- Attachment #2: XenGdb.patch --]
[-- Type: application/octet-stream, Size: 1436 bytes --]

--- 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
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':

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2009-08-21 11:12 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-12  2:15 [PATCH] fix the bug of gdb which debugs xen Caz Yokoyama
2009-08-12  7:58 ` Keir Fraser
2009-08-12 12:52   ` Caz Yokoyama
2009-08-12 13:29     ` Keir Fraser
2009-08-12 21:03       ` Caz Yokoyama
2009-08-13 13:30         ` Paolo Bonzini
2009-08-13 14:05           ` Caz Yokoyama
2009-08-13  2:54       ` Caz Yokoyama
2009-08-13  7:31         ` Keir Fraser
2009-08-14  3:52           ` Caz Yokoyama
2009-08-14 20:03           ` Caz Yokoyama
2009-08-17 20:56           ` [PATCH] break-in to Xen 1) when gdb is invoked and 2) ^C on gdb Caz Yokoyama
2009-08-21  0:24             ` Simon Horman
2009-08-21  5:37               ` Caz Yokoyama
2009-08-21  6:08                 ` Simon Horman
2009-08-21 11:12                   ` Caz Yokoyama

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.