X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmx_lowlevel.S;h=12aeb4bd75d34f92430ef939471e7ba835211c36;hp=065154250fcb5f947f06c9137c95cc2ea9b093d6;hb=cbe9bc8587261deb3aaee94a100594d88bc9765f;hpb=f1d8183ae8c4390dfc74cb2780dd2058c569fc57 diff --git a/palacios/src/palacios/vmx_lowlevel.S b/palacios/src/palacios/vmx_lowlevel.S index 0651542..12aeb4b 100644 --- a/palacios/src/palacios/vmx_lowlevel.S +++ b/palacios/src/palacios/vmx_lowlevel.S @@ -21,9 +21,9 @@ movq %rdx, 40(%rax); \ movq %rcx, 48(%rax); \ pushq %rbx; \ - movq 16(%rsp), %rbx; \ + movq 8(%rsp), %rbx; \ movq %rbx, 56(%rax); \ - popq %rbx; \ + popq %rbx; \ \ movq %r8, 64(%rax); \ movq %r9, 72(%rax); \ @@ -37,14 +37,13 @@ #define restore_registers(location) \ - push %rax; \ mov location, %rax; \ mov (%rax), %rdi; \ mov 8(%rax), %rsi; \ mov 16(%rax), %rbp; \ mov 32(%rax), %rbx; \ mov 40(%rax), %rdx; \ - mov 48(%rax), %rcx; \ + mov 48(%rax), %rcx; \ \ mov 64(%rax), %r8; \ mov 72(%rax), %r9; \ @@ -54,7 +53,11 @@ mov 104(%rax), %r13; \ mov 112(%rax), %r14; \ mov 120(%rax), %r15; \ - pop %rax; + pushq %rbx; \ + movq 56(%rax), %rbx; \ + movq %rbx, %rax; \ + popq %rbx; + @@ -100,12 +103,14 @@ v3_vmx_exit_handler: POPA popf pushq %rdi + pushq %rsi call v3_handle_vmx_exit andq %rax, %rax jnz .Lvmm_failure v3_vmx_vmresume: + pop %rsi pop %rdi pushf PUSHA @@ -114,9 +119,9 @@ v3_vmx_vmresume: vmresume - addq $8, %rsp jz .Lfail_valid jc .Lfail_invalid + addq $8, %rsp jmp .Lreturn .align 8 @@ -150,24 +155,24 @@ v3_vmx_vmlaunch: .Lfail_valid: addq $8, %rsp POPA + popf movq $VMX_FAIL_VALID, %rax jmp .Lreturn .Lfail_invalid: addq $8, %rsp POPA + popf movq $VMX_FAIL_INVALID, %rax jmp .Lreturn .Lvmm_failure: - addq $8, %rsp - POPA + addq $16, %rsp movq $VMM_FAILURE, %rax jmp .Lreturn .Lreturn: sti - popf ret #else @@ -222,10 +227,10 @@ v3_vmx_vmlaunch: .globl v3_vmx_exit_handler v3_vmx_exit_handler: save_registers(4(%esp)) - addl $8, %rsp + addl $8, %esp POPA popf - pushl %rdi + pushl %edi call v3_handle_vmx_exit andl %eax, %eax