# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1169662824 0
# Node ID e68bf334ecb877189d718122894170a43de43575
# Parent 2932d0e7c5545167901afeb7ac87dc0c1edf4bfd
32-on-64: All argument registers must be zero extended to 64 bits
(%rdx was missed).
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/x86_64/compat/entry.S | 15 +++++++++------
1 files changed, 9 insertions(+), 6 deletions(-)
diff -r 2932d0e7c554 -r e68bf334ecb8 xen/arch/x86/x86_64/compat/entry.S
--- a/xen/arch/x86/x86_64/compat/entry.S Wed Jan 24 18:06:14 2007 +0000
+++ b/xen/arch/x86/x86_64/compat/entry.S Wed Jan 24 18:20:24 2007 +0000
@@ -16,7 +16,8 @@ ENTRY(compat_hypercall)
jae compat_bad_hypercall
#ifndef NDEBUG
/* Deliberately corrupt parameter regs not used by this hypercall. */
- pushq UREGS_rbx(%rsp); pushq %rcx; pushq %rdx; pushq %rsi; pushq %rdi;
pushq UREGS_rbp+5*8(%rsp)
+ pushq UREGS_rbx(%rsp); pushq %rcx; pushq %rdx; pushq %rsi; pushq %rdi
+ pushq UREGS_rbp+5*8(%rsp)
leaq compat_hypercall_args_table(%rip),%r10
movq $6,%rcx
subb (%r10,%rax,1),%cl
@@ -28,11 +29,13 @@ ENTRY(compat_hypercall)
pushq %rax
pushq UREGS_rip+8(%rsp)
#else
- movl %eax,%eax
- movl %ebp,%r9d
- movl %edi,%r8d
- xchgl %ecx,%esi
- movl UREGS_rbx(%rsp),%edi
+ /* Relocate argument registers and zero-extend to 64 bits. */
+ movl %eax,%eax /* Hypercall # */
+ movl UREGS_rbx(%rsp),%edi /* Arg 1 */
+ xchgl %ecx,%esi /* Arg 2, Arg 4 */
+ movl %edx,%edx /* Arg 3 */
+ movl %edi,%r8d /* Arg 5 */
+ movl %ebp,%r9d /* Arg 6 */
#endif
leaq compat_hypercall_table(%rip),%r10
PERFC_INCR(PERFC_hypercalls, %rax)
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|