]> xenbits.xensource.com Git - xen.git/commitdiff
x86/64: Do not clobber %r11 (user rflags) on syscall from guest
authorKeir Fraser <keir@xensource.com>
Mon, 15 Oct 2007 11:13:41 +0000 (12:13 +0100)
committerKeir Fraser <keir@xensource.com>
Mon, 15 Oct 2007 11:13:41 +0000 (12:13 +0100)
userspace to guest kernel. The flags are saved on the guest kernel
stack anyway, but some guests rely on %r11 instead.
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/x86_64/entry.S

index ad9e9ceebc276eda492a635986d791dccfc2d7c4..ca67151e0b5cc9b9911a53763464449677c09d3d 100644 (file)
@@ -106,7 +106,7 @@ restore_all_xen:
  * When entering SYSCALL from kernel mode:
  *  %rax                            = hypercall vector
  *  %rdi, %rsi, %rdx, %r10, %r8, %9 = hypercall arguments
- *  %r11, %rcx                      = SYSCALL-saved %rflags and %rip
+ *  %rcx                            = SYSCALL-saved %rip
  *  NB. We must move %r10 to %rcx for C function-calling ABI.
  *
  * When entering SYSCALL from user mode:
@@ -125,6 +125,7 @@ ENTRY(syscall_enter)
         pushq %rcx
         pushq $0
         movl  $TRAP_syscall,4(%rsp)
+        movq  24(%rsp),%r11 /* Re-load user RFLAGS into %r11 before SAVE_ALL */
         SAVE_ALL
         GET_CURRENT(%rbx)
         testb $TF_kernel_mode,VCPU_thread_flags(%rbx)