From: Keir Fraser Date: Mon, 15 Oct 2007 11:13:41 +0000 (+0100) Subject: x86/64: Do not clobber %r11 (user rflags) on syscall from guest X-Git-Tag: 3.2.0-rc1~228^2~36 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=b28b3c245ac495e87da7303954e2a1350dc6dd9d;p=xen.git x86/64: Do not clobber %r11 (user rflags) on syscall from guest 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 --- diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index ad9e9ceebc..ca67151e0b 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -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)