X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fgeekos%2Fsvm_lowlevel.asm;h=57ea853114d557c75b41315822896033af4a116c;hp=c468c5af0db6036bb1a132d9e5bd0a8966ac39c5;hb=701de97007c8b6776998eeab78469a4304f6b871;hpb=b4963a8a43ca9103946f926e062e609e4498c2e2 diff --git a/palacios/src/geekos/svm_lowlevel.asm b/palacios/src/geekos/svm_lowlevel.asm index c468c5a..57ea853 100644 --- a/palacios/src/geekos/svm_lowlevel.asm +++ b/palacios/src/geekos/svm_lowlevel.asm @@ -9,6 +9,8 @@ +EXTERN handle_svm_exit + EXPORT launch_svm @@ -60,4 +62,30 @@ launch_svm: ; ret ; ; -; \ No newline at end of file +; + + + +;; Need to check this.. +;; Since RAX/EAX is saved in the VMCB, we should probably just +;; do our own replacement for pusha/popa that excludes [e|r]ax +safe_svm_launch: + push ebp + mov ebp, esp + pushf + pusha + +.vmm_loop: + mov eax, [ebp + 8] + vmrun + pusha + call handle_svm_exit + and eax, eax + popa ;; restore the guest GPRs, (DOES THIS AFFECT E/RFLAGS?) + jz .vmm_loop + + ;; HOW DO WE GET THE RETURN VALUE OF HANDLE_SVM_EXIT BACK TO THE CALLER + popf + popa + pop ebp + ret \ No newline at end of file