# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1182445370 -3600
# Node ID b35b8053012e6b1720a392964bc7114ba30de420
# Parent 04d4b7b6f5b752a4375cbb58f6ce3efc207f708a
Fix x86/64 failsafe callback handling.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/x86_64/compat/entry.S | 10 +++++-----
xen/arch/x86/x86_64/entry.S | 22 +++++++++++-----------
2 files changed, 16 insertions(+), 16 deletions(-)
diff -r 04d4b7b6f5b7 -r b35b8053012e xen/arch/x86/x86_64/compat/entry.S
--- a/xen/arch/x86/x86_64/compat/entry.S Thu Jun 21 15:17:31 2007 +0100
+++ b/xen/arch/x86/x86_64/compat/entry.S Thu Jun 21 18:02:50 2007 +0100
@@ -143,12 +143,12 @@ compat_restore_all_guest:
.Lft0: iretq
.section .fixup,"ax"
-.Lfx0: popq -15*8-8(%rsp) # error_code/entry_vector
- SAVE_ALL # 15*8 bytes pushed
- movq -8(%rsp),%rsi # error_code/entry_vector
- sti # after stack abuse (-1024(%rsp))
+.Lfx0: sti
+ SAVE_ALL
+ movq UREGS_error_code(%rsp),%rsi
+ movq %rsp,%rax
+ andq $~0xf,%rsp
pushq $__HYPERVISOR_DS # SS
- leaq 8(%rsp),%rax
pushq %rax # RSP
pushfq # RFLAGS
pushq $__HYPERVISOR_CS # CS
diff -r 04d4b7b6f5b7 -r b35b8053012e xen/arch/x86/x86_64/entry.S
--- a/xen/arch/x86/x86_64/entry.S Thu Jun 21 15:17:31 2007 +0100
+++ b/xen/arch/x86/x86_64/entry.S Thu Jun 21 18:02:50 2007 +0100
@@ -57,23 +57,23 @@ 1: sysretl
/* No special register assumptions. */
iret_exit_to_guest:
addq $8,%rsp
-.Lft1: iretq
+.Lft0: iretq
.section .fixup,"ax"
-.Lfx1: popq -15*8-8(%rsp) # error_code/entry_vector
- SAVE_ALL # 15*8 bytes pushed
- movq -8(%rsp),%rsi # error_code/entry_vector
- sti # after stack abuse (-1024(%rsp))
+.Lfx0: sti
+ SAVE_ALL
+ movq UREGS_error_code(%rsp),%rsi
+ movq %rsp,%rax
+ andq $~0xf,%rsp
pushq $__HYPERVISOR_DS # SS
- leaq 8(%rsp),%rax
pushq %rax # RSP
- pushf # RFLAGS
+ pushfq # RFLAGS
pushq $__HYPERVISOR_CS # CS
- leaq .Ldf1(%rip),%rax
+ leaq .Ldf0(%rip),%rax
pushq %rax # RIP
pushq %rsi # error_code/entry_vector
jmp handle_exception
-.Ldf1: GET_CURRENT(%rbx)
+.Ldf0: GET_CURRENT(%rbx)
jmp test_all_events
failsafe_callback:
GET_CURRENT(%rbx)
@@ -88,10 +88,10 @@ 1: call create_bounce_frame
jmp test_all_events
.previous
.section __pre_ex_table,"a"
- .quad .Lft1,.Lfx1
+ .quad .Lft0,.Lfx0
.previous
.section __ex_table,"a"
- .quad .Ldf1,failsafe_callback
+ .quad .Ldf0,failsafe_callback
.previous
ALIGN
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|