Rdrand инструкция SIGILL

Cpuid говорит, что в моей системе есть rdrand, но инструкция rdrand выдает sigill. Я использую linux mint внутри рабочей станции VmWare 11, я погуглил поддержку рабочей станции rdrand, и они говорят, что она включена с 9-й версии. Процесс хоста i5-2550k и он должен поддерживать rdrand. Можно как-нибудь это исправить? Вот список GDB:

Breakpoint 1, 0x08048060 in _start ()
(gdb) x/5i $eip

=> 0x8048060 <_start>:  mov    $0x1,%eax

   0x8048065 <_start+5>:    cpuid  

   0x8048067 <_start+7>:    rdrand %eax

   0x804806a <_start+10>:   mov    $0x1,%eax

   0x804806f <_start+15>:   int    $0x80

(gdb) si 2

0x08048067 in _start ()

(gdb) p/t $ecx

$1 = 10011111101110100010001000000011 ; bit 30 is set -- rdrand enabled.

(gdb) p/t $ebx

$2 = 10000100000000000

(gdb) p/t $eax

$3 = 100000011010100111

(gdb) si


Program received signal SIGILL, Illegal instruction.

0x08048067 in _start ()

Breakpoint 1, 0x08048060 in _start ()

(gdb) x/5i $eip

=> 0x8048060 <_start>:  mov    $0x1,%eax

  0x8048065 <_start+5>: cpuid  

  0x8048067 <_start+7>: rdrand %eax

 0x804806a <_start+10>: mov    $0x1,%eax

  0x804806f <_start+15>:    int    $0x80

(gdb) si 2

0x08048067 in _start ()

(gdb) p/t $ecx

$1 = 10011111101110100010001000000011

(gdb) p/t $ebx

$2 = 10000100000000000

(gdb) p/t $eax

$3 = 100000011010100111

(gdb) si


Program received signal SIGILL, Illegal instruction.

0x08048067 in _start ()

1 ответ

Решение

Вы неправильно прочитали регистр ECX. Бит RDRAND не установлен. Бит 30 является вторым битом слева:

10011111101110100010001000000011
 ^
 Bit 30                        ^ Bit 0

Информация CPUID, возвращенная в ECX

Изображение выше взято из описания инструкции CPUID, приведенного в Руководстве разработчика программного обеспечения для архитектуры Intel 64 и IA-32.

Также ваш процессор i5-2550K является процессором Sandy Bridge. RDRAND не был представлен до следующего поколения процессоров Intel, Ivy Bridge.

RdRand был представлен в Ivy Bridge. I5-2550K является частью Sandy Bridge предыдущего поколения.

Другие вопросы по тегам