VMCALLからの復帰
こんなコードをusr.sbin/bhyve/fbsdrun.cへ足してみる:
@@ -463,9 +463,10 @@ intr = (rip - 0x400) / 0x4; printf("intr=%"PRIu64"\n", intr); - return (VMEXIT_ABORT); - - return (VMEXIT_RESTART); + if (intr == 0x14) + return (VMEXIT_ABORT); + else + return (VMEXIT_CONTINUE); }
(svn diff -r238884:238885 https://socsvn.freebsd.org/socsvn/soc2012/syuu/bhyve-bios)
$ sudo bhyvebiosload -d ~/testbootsect/testbootsect.bin -m 128 -M 256 vm0 $ sudo bhyve -b -m 128 -M 256 vm0 VMCALL handled rsp=7ff8 rip=44c rax=1 rbx=2 rcx=3 rdx=4 intr=19 VMCALL handled rsp=7ff8 rip=450 rax=1 rbx=2 rcx=3 rdx=4 intr=20
すると、VMCALLから復帰して2つ目のint命令を実行、再びVMCALLでBHyVeへ戻ってこれた。
これでBIOSエミュレーションがBHyVeのユーザランド上へ構築できるようになったはず。