Demi kenyamanan, saya mencoba menjalankan instalasi Gentoo Linux yang "biasa" sebagai tamu di dalam VirtualBox di host Windows 7. Saya mem-bootstrap instalasi dengan menggunakan VirtualBox, bahkan. Tetapi sekarang, setelah sekitar satu tahun tak terhindarkan membangun kembali semua paket di Portage dengan -march = asli di flag kompiler saya, saya telah menemukan bahwa semua program non-sepele (sepele = ls, cd, cat, nontrivial = vim, man, pada dasarnya segala sesuatu yang tertaut ke pustaka standar c ++) terbunuh segera pada saat startup. Log kernel menunjukkan itu terperangkap instruksi ilegal, seolah-olah program dikompilasi dengan ekstensi CPU yang tidak didukung oleh CPU host. Tapi itu benar! Pemahaman saya tentang hypervisors seperti VirtualBox adalah bahwa program-program seharusnya tetap berjalan pada dasarnya dengan bare-metal, peran terbesarnya adalah menjaga OS tamu dan userland-nya dan OS host dan memori virtual userland-nya terpisah.
Pertanyaan saya adalah, apa yang menyebabkannya? Apakah VM hanya diperbolehkan menggunakan beberapa instruksi yang tersedia di CPU host? Atau apakah ini masalah yang sama sekali berbeda?
-march=native
atau -march=haswell
menghasilkan executable yang berfungsi pada tamu Gentoo.