ChangeSet 1.1741, 2005/06/23 11:05:06+01:00, arun.sharma@xxxxxxxxx
[PATCH] vmx-gdbserver-paging.patch
gdbserver should not try to convert guest physical to machine physical
if
paging is not enabled.
Signed-off-by: Arun Sharma <arun.sharma@xxxxxxxxx>
tools/libxc/xc_ptrace.c | 11 ++++++++++-
xen/arch/x86/dom0_ops.c | 5 ++++-
xen/include/public/arch-x86_32.h | 2 ++
3 files changed, 16 insertions(+), 2 deletions(-)
diff -Nru a/tools/libxc/xc_ptrace.c b/tools/libxc/xc_ptrace.c
--- a/tools/libxc/xc_ptrace.c 2005-06-23 07:06:32 -04:00
+++ b/tools/libxc/xc_ptrace.c 2005-06-23 07:06:32 -04:00
@@ -3,6 +3,8 @@
#include "xc_private.h"
#include <time.h>
+#define X86_CR0_PE 0x00000001 /* Enable Protected Mode (RW) */
+#define X86_CR0_PG 0x80000000 /* Paging (RW) */
#define BSD_PAGE_MASK (PAGE_SIZE-1)
#define PG_FRAME (~((unsigned long)BSD_PAGE_MASK)
@@ -132,6 +134,13 @@
static unsigned long cr3[MAX_VIRT_CPUS];
static vcpu_guest_context_t ctxt[MAX_VIRT_CPUS];
+static inline int paging_enabled(vcpu_guest_context_t *v)
+{
+ unsigned long cr0 = v->cr0;
+
+ return (cr0 & X86_CR0_PE) && (cr0 & X86_CR0_PG);
+}
+
/* --------------------- */
static void *
@@ -179,7 +188,7 @@
}
if ((pde = cr3_virt[cpu][vtopdi(va)]) == 0) /* logical address */
goto error_out;
- if (ctxt[cpu].flags & VGCF_VMX_GUEST)
+ if ((ctxt[cpu].flags & VGCF_VMX_GUEST) && paging_enabled(&ctxt[cpu]))
pde = page_array[pde >> PAGE_SHIFT] << PAGE_SHIFT;
if (pde != pde_phys[cpu])
{
diff -Nru a/xen/arch/x86/dom0_ops.c b/xen/arch/x86/dom0_ops.c
--- a/xen/arch/x86/dom0_ops.c 2005-06-23 07:06:32 -04:00
+++ b/xen/arch/x86/dom0_ops.c 2005-06-23 07:06:32 -04:00
@@ -393,8 +393,11 @@
#ifdef __i386__
#ifdef CONFIG_VMX
- if ( VMX_DOMAIN(v) )
+ if ( VMX_DOMAIN(v) ) {
save_vmx_cpu_user_regs(&c->user_regs);
+ __vmread(CR0_READ_SHADOW, &c->cr0);
+ __vmread(CR4_READ_SHADOW, &c->cr4);
+ }
#endif
#endif
diff -Nru a/xen/include/public/arch-x86_32.h b/xen/include/public/arch-x86_32.h
--- a/xen/include/public/arch-x86_32.h 2005-06-23 07:06:32 -04:00
+++ b/xen/include/public/arch-x86_32.h 2005-06-23 07:06:32 -04:00
@@ -137,6 +137,8 @@
unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
unsigned long pt_base; /* CR3 (pagetable base) */
+ unsigned long cr0; /* CR0 */
+ unsigned long cr4; /* CR4 */
unsigned long debugreg[8]; /* DB0-DB7 (debug registers) */
unsigned long event_callback_cs; /* CS:EIP of event callback */
unsigned long event_callback_eip;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|