Pregunta:
Tengo una computadora en la que estoy ejecutando Windows 7 y Gentoo Linux (ambos de 64 bits). Quiero poder cargar mi instalación de Linux en una máquina virtual mientras arranco en Windows. Instalé VirtualBox y seguí las instrucciones para crear un disco sin formato VMDK. Cuando inicio la VM, Linux comienza a arrancar, pero luego falla con el siguiente error al desbloquear mi partición raíz:
truecrypt[441] trap invalid opcode ip:373615538e0 sp:3dd0e0dfb60 error:0 in libpixman-1.so.0[373614d6000+8d000]
Todo funciona bien cuando inicio Linux directamente.
¿Qué podría causar que se golpee una instrucción ilegal en libpixman solo al arrancar en VirtualBox?
Actualizar:
Como paso de resolución de problemas, volví a compilar pixman sin "-march" y ya no obtengo un error de instrucción ilegal en esa biblioteca. (Sin embargo, el arranque falla en el mismo lugar con el mismo error en una biblioteca diferente).
¿Cómo puedo determinar el código de operación específico que no funciona en VirtualBox para poder deshabilitarlo en mi CFLAGS sin tener que deshabilitar todas las optimizaciones específicas de la CPU?
Todavía estoy confundido sobre por qué habría alguna instrucción en modo de usuario que no funcionaría en una máquina virtual. ¿Es esta una limitación conocida? Mi CPU es un Intel Core i7 3720QM y tengo habilitado el soporte de virtualización de hardware.
Respuesta:
Resultó que el problema era que "-march = native" daba como resultado binarios del sistema compilados que contenían instrucciones SSE4 y AVX, que no son compatibles con la versión de VirtualBox que estaba usando. La desactivación explícita de los indicadores de mi compilador y la recompilación permitió que el sistema se iniciara correctamente en VirtualBox.