diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-06-21 18:02:50 +0100 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-06-21 18:02:50 +0100 |
commit | d127010888b19e06ecdf3fe33d7876eb09072121 (patch) | |
tree | 7ab8f741262e41a26574bddfb13178a82f79f129 /xen/arch/x86/x86_64/entry.S | |
parent | 5408361cc6d15d7dabdc263c749b8053e8f9b03d (diff) | |
download | xen-d127010888b19e06ecdf3fe33d7876eb09072121.tar.gz xen-d127010888b19e06ecdf3fe33d7876eb09072121.tar.bz2 xen-d127010888b19e06ecdf3fe33d7876eb09072121.zip |
Fix x86/64 failsafe callback handling.
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 | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index 3c586ae52d..b51c5d494b 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -57,23 +57,23 @@ restore_all_guest: /* 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 @@ failsafe_callback: 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 |