x86/32on64: adjust address when converting syscall to fault
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 5 Dec 2008 15:21:59 +0000 (15:21 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 5 Dec 2008 15:21:59 +0000 (15:21 +0000)
The faulting address is at the start of the syscall instruction rather
than at the following one.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
xen/arch/x86/x86_64/compat/entry.S

index 085babedc49e854485bf6bd78ade5ed015ad12ee..f08c180fd9ac9dedea53db6a22cae8eac51ae7b2 100644 (file)
@@ -234,6 +234,7 @@ ENTRY(compat_syscall)
         call  compat_create_bounce_frame
         jmp   compat_test_all_events
 2:      movl  $TRAP_gp_fault,UREGS_entry_vector(%rsp)
+        subl  $2,UREGS_rip(%rsp)
         movq  VCPU_gp_fault_addr(%rbx),%rax
         movzwl VCPU_gp_fault_sel(%rbx),%esi
         movb  $(TBF_EXCEPTION|TBF_EXCEPTION_ERRCODE|TBF_INTERRUPT),%cl