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=ee244edd7e56d0ef745fdabbee333294b327e60b;hb=cbe9bc8587261deb3aaee94a100594d88bc9765f;hpb=a24a1722328a575cec8dd8578902fd0f68c72c1c diff --git a/palacios/src/palacios/vmx_lowlevel.S b/palacios/src/palacios/vmx_lowlevel.S index ee244ed..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 @@ -162,7 +167,7 @@ v3_vmx_vmlaunch: jmp .Lreturn .Lvmm_failure: - addq $8, %rsp + addq $16, %rsp movq $VMM_FAILURE, %rax jmp .Lreturn