mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
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:
1 parent
2606d3eec6
commit
91c2518a67
2 files changed
+28
-3
No files matched your search
@@ -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
@@ -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':
|
||||
|
||||