XSetgv аварийно завершает работу в моем программном обеспечении на «голом железе»

Я разрабатываю программу для голого металла. Платформа x86, 32-битная, защищенный режим, я нахожусь в кольце 0. Я хотел бы включить AVX с помощью инструкции xsetgv. 18-й бит CR4 равен 1, если я использую xgetgv, то ничего плохого не происходит, но xsetgv дает сбой (виртуальный бокс сообщает о фатальной ошибке). Проблемный код следующий:

mov ecx, 0
mov eax, 0x7
mov edx, 0
xsetbv

В чем проблема?


person Pocokman    schedule 24.12.2015    source источник
comment
Убедитесь, что ваш виртуальный бокс действительно поддерживает AVX. IIRC, по умолчанию он не предоставляет гостю поддержку AVX, или с ним была старая ошибка. (Проверьте, загрузив Linux в экземпляре vbox и запустив grep avx /proc/cpuinfo или что-то в этом роде.   -  person Peter Cordes    schedule 24.12.2015
comment
В том же духе попробуйте использовать bochs, который, как известно, поддерживает AVX (убедитесь, что он включен). Он также имеет отладчик и исходный код;)   -  person Jester    schedule 24.12.2015


Ответы (1)


Проблема заключалась в глючном виртуальном ящике, мой код отлично работает на реальном оборудовании и новейшем виртуальном ящике.

person Pocokman    schedule 27.12.2015