Obter erro de instrução ilegal ao inicializar o Linux no VirtualBox, funciona bem quando inicializado diretamente

4

Eu tenho um computador no qual eu sou dual boot do Windows 7 e Gentoo Linux (ambos de 64 bits). Eu quero ser capaz de carregar minha instalação do Linux em uma máquina virtual enquanto eu estou inicializado no Windows. Eu instalei o VirtualBox e segui as instruções para criar um disco virtual VMDK. Quando inicio a VM, o Linux inicia a inicialização, mas falha com o seguinte erro ao desbloquear minha partição raiz:

truecrypt[441] trap invalid opcode ip:373615538e0 sp:3dd0e0dfb60 error:0 in libpixman-1.so.0[373614d6000+8d000]

Tudo funciona bem quando inicializo diretamente no Linux.

O que poderia causar uma instrução ilegal a ser atingida no libpixman somente ao inicializar no VirtualBox?

Atualização:

Como uma etapa de solução de problemas, recompilei o pixman sem "-march" e não recebi mais um erro de instrução ilegal nessa biblioteca. (A inicialização falha no mesmo ponto com o mesmo erro em uma biblioteca diferente, no entanto.)

Como posso determinar o opcode específico que não está funcionando no VirtualBox para que eu possa desativá-lo em minhas CFLAGS sem ter que desabilitar todas as otimizações específicas da CPU?

Ainda estou confuso sobre por que haveria qualquer instrução no modo de usuário que não funcionasse em uma VM. Esta é uma limitação conhecida? Meu CPU é um Intel Core i7 3720QM e tenho suporte de virtualização de hardware ativado.

    
por rkjnsn 21.10.2012 / 03:25

1 resposta

0

Descobriu-se que o problema era que "-march = native" resultava nos binários do sistema compilado contendo instruções SSE4 e AVX, que não são suportadas pela versão do VirtualBox que eu estava usando. A desativação explícita daqueles nos meus sinalizadores de compilador e recompilação permitiu que o sistema inicializasse corretamente no VirtualBox.

    
por 24.06.2015 / 03:05