[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] gdbstub: Small fixes.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1250083672 -3600 # Node ID 8a9f81672c76c93891a2af0bbc2659c83493a440 # Parent ebb07c5934c8cc0090bbbd6ce17a558e73428339 gdbstub: Small fixes. * Correctly handly EFLAGS.TF in the hypervisor * Register value sent with 'P' command is in native byte order. Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- xen/arch/x86/traps.c | 7 +++++-- xen/common/gdbstub.c | 24 +++++++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff -r ebb07c5934c8 -r 8a9f81672c76 xen/arch/x86/traps.c --- a/xen/arch/x86/traps.c Wed Aug 12 14:16:09 2009 +0100 +++ b/xen/arch/x86/traps.c Wed Aug 12 14:27:52 2009 +0100 @@ -3007,9 +3007,12 @@ asmlinkage void do_debug(struct cpu_user 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); + if ( (regs->rip != (unsigned long)sysenter_eflags_saved) && + !debugger_trap_fatal(TRAP_debug, regs) ) + WARN_ON(1); #else - WARN_ON(1); + if ( !debugger_trap_fatal(TRAP_debug, regs) ) + WARN_ON(1); #endif regs->eflags &= ~EF_TF; } diff -r ebb07c5934c8 -r 8a9f81672c76 xen/common/gdbstub.c --- a/xen/common/gdbstub.c Wed Aug 12 14:16:09 2009 +0100 +++ b/xen/common/gdbstub.c Wed Aug 12 14:27:52 2009 +0100 @@ -116,6 +116,28 @@ str2ulong(const char *str, unsigned long return x; } +unsigned long +str_to_native_ulong(const char *str) +{ + unsigned long x = 0, i = 0; + + while ( *str && (i < BYTES_PER_LONG) ) + { +#ifdef __BIG_ENDIAN + x <<= 8; + x += str2hex(*str); +#elif defined(__LITTLE_ENDIAN) + x += (unsigned long)str2hex(*str) << (i*8); +#else +# error unknown endian +#endif + str += 2; + i++; + } + + return x; +} + /* gdb io wrappers */ static signed long gdb_io_write(const char *buf, unsigned long len, struct gdb_context *ctx) @@ -488,7 +510,7 @@ process_command(struct cpu_user_regs *re return 0; } ptr++; - val = str2ulong(ptr, sizeof(unsigned long)); + val = str_to_native_ulong(ptr); gdb_arch_write_reg(addr, val, regs, ctx); break; case 'D': _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |