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@citrix.com>
This commit is contained in:
Keir Fraser committed 2009-08-12 14:27:52 +01:00
1 parent 2606d3eec6
commit 91c2518a67
2 files changed
+28 -3

No files matched your search

+5 -2
View File
@@ -3007,9 +3007,12 @@ asmlinkage void do_debug(struct cpu_user_regs *regs)
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;
}
+23 -1
View File
@@ -116,6 +116,28 @@ str2ulong(const char *str, unsigned long bytes)
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 *regs, struct gdb_context *ctx)
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':
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.