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

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


  • To: "'Keir Fraser'" <keir.fraser@xxxxxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: Caz Yokoyama <cazyokoyama@xxxxxxxxx>
  • Date: Wed, 12 Aug 2009 19:54:21 -0700
  • Cc:
  • Delivery-date: Wed, 12 Aug 2009 19:54:26 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:references:subject:date:message-id:mime-version :content-type:x-mailer:in-reply-to:thread-index:x-mimeole; b=d0DOgwzl4yugHYDGMzJBOPhtbSoeUwYC+c5KKy5T4aYb9oPd9LDnS+SHH84I/Iznqv xm5v7B2iHKw9nSiXRkQkG4pJayWsmfVI0sByGcoMInzECkTuSSuErhh739c+k156h+0A ERF2ci4ORFu4b8k+foUrJihqyPVWScS0D25PQ=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: Acoa8r/5gPp6Qi5vSqWmE3+LHCGKRQAL+ch1AAhh8kAAAy/QtgAPyLvAAAwxkAA=

Hello Keir,
You code does not work. When each byte string is more than 0x7f, sign bit is
extended and produce wrong value.

diff -r 8a9f81672c76 xen/common/gdbstub.c
--- a/xen/common/gdbstub.c      Wed Aug 12 14:27:52 2009 +0100
+++ b/xen/common/gdbstub.c      Wed Aug 12 19:49:12 2009 -0700
@@ -93,7 +93,7 @@
     return -1;
 }
 
-char
+unsigned char
 str2hex(const char *str)
 {
     return (char2hex(str[0]) << 4) | char2hex(str[1]);
@@ -127,7 +127,7 @@
         x <<= 8;
         x += str2hex(*str);
 #elif defined(__LITTLE_ENDIAN)
-        x += (unsigned long)str2hex(*str) << (i*8);
+        x += (unsigned long)str2hex(str) << (i*8);
 #else
 # error unknown endian
 #endif
diff -r 8a9f81672c76 xen/include/xen/gdbstub.h
--- a/xen/include/xen/gdbstub.h Wed Aug 12 14:27:52 2009 +0100
+++ b/xen/include/xen/gdbstub.h Wed Aug 12 19:49:12 2009 -0700
@@ -29,7 +29,7 @@
 /* value <-> char (de)serialzers for arch specific gdb backends */
 char hex2char(unsigned long x);
 int char2hex(unsigned char c);
-char str2hex(const char *str);
+unsigned char str2hex(const char *str);
 unsigned long str2ulong(const char *str, unsigned long bytes);
 
 struct gdb_context {
-caz

-----Original Message-----
From: Caz Yokoyama [mailto:caz@xxxxxxxxxxx] 
Sent: Wednesday, August 12, 2009 2:03 PM
To: 'Keir Fraser'; 'xen-devel@xxxxxxxxxxxxxxxxxxx'
Subject: RE: [Xen-devel] [PATCH] fix the bug of gdb which debugs xen.

Probably, you mean.

diff -r 8a9f81672c76 xen/common/gdbstub.c
--- a/xen/common/gdbstub.c      Wed Aug 12 14:27:52 2009 +0100
+++ b/xen/common/gdbstub.c      Wed Aug 12 14:00:20 2009 -0700
@@ -127,7 +127,7 @@
         x <<= 8;
         x += str2hex(*str);
 #elif defined(__LITTLE_ENDIAN)
-        x += (unsigned long)str2hex(*str) << (i*8);
+        x += (unsigned long)str2hex(str) << (i*8);
 #else
 # error unknown endian
 #endif
-caz
-----Original Message-----
From: Keir Fraser [mailto:keir.fraser@xxxxxxxxxxxxx] 
Sent: Wednesday, August 12, 2009 6:30 AM
To: Caz Yokoyama; xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [Xen-devel] [PATCH] fix the bug of gdb which debugs xen.

I rewrote it some more. Take a look at changeset 20054.

 -- Keir

On 12/08/2009 13:52, "Caz Yokoyama" <cazyokoyama@xxxxxxxxx> wrote:

> Hello Keir,
> You are right and good points. Thank you. I did not aware them because
only
> environment I test is x86_64. How about this? I am glad if you check in. I
> regularly update my local source code by "hg pull; hg up".
> -caz
> 
> -----Original Message-----
> From: Keir Fraser [mailto:keir.fraser@xxxxxxxxxxxxx]
> Sent: Wednesday, August 12, 2009 12:58 AM
> To: Caz Yokoyama; xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: Re: [Xen-devel] [PATCH] fix the bug of gdb which debugs xen.
> 
> I don't know whether you intend this for immediate checkin, but anyway:
> 
>  * Don't delete the sysenter logic in traps.c, leave it.
>  * I'm not sure about swap64() in gdbstub.c. The value may not be 64 bits
> (e.g., running on i386), or the system may not be little endian. Might be
> better to define an alternative to str2ulong() which is endian aware, like
> gdb_write_to_packet_hex().
> 
>  -- Keir
> 
> On 12/08/2009 03:15, "Caz Yokoyama" <cazyokoyama@xxxxxxxxx> wrote:
> 
>> 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
> /X
>> enDebugger-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: str_to_native_ulong.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®.