diff options
author | Keir Fraser <keir@xensource.com> | 2007-10-15 12:13:41 +0100 |
---|---|---|
committer | Keir Fraser <keir@xensource.com> | 2007-10-15 12:13:41 +0100 |
commit | b28b3c245ac495e87da7303954e2a1350dc6dd9d (patch) | |
tree | 01dcc69a007e88adb9ef6beaab0a087cd39f1ff5 /xen/arch/x86/x86_64/entry.S | |
parent | 4b90f16ed7bbde0563fbea879e50ae102f93ff37 (diff) | |
download | xen-b28b3c245ac495e87da7303954e2a1350dc6dd9d.tar.gz xen-b28b3c245ac495e87da7303954e2a1350dc6dd9d.tar.bz2 xen-b28b3c245ac495e87da7303954e2a1350dc6dd9d.zip |
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 <keir@xensource.com>
Diffstat (limited to 'xen/arch/x86/x86_64/entry.S')
-rw-r--r-- | xen/arch/x86/x86_64/entry.S | 3 |
1 files changed, 2 insertions, 1 deletions
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) |