Инструкция QEMU RDRAND не поддерживается
Я пытаюсь запустить собственное ядро в qemu-system-x86_64
, Это ядро требует использования rdrand
инструкция в начале цикла загрузки и не сможет загрузиться, если она не поддерживается процессором. Я прочитал в ответе на этот вопрос, что rdrand
требуется как минимум процессор Ivy Bridge. Тем не менее, когда я запускаю QEMU с -cpu SandyBridge
параметр (который должен указывать ему эмулировать процессор Sandy Bridge, который поддерживает rdrand
), мое ядро все равно не загрузится. я пытался -cpu Broadwell
, предположительно потому, что это более новый процессор, но ничего не меняется.
Вот запускаемая сборка, которая проверяет cpuid
и выполняет rdrand
:
00025c79 xorl %ebp, %ebp
00025c7b movl $0x1, %eax
00025c80 xorl %ecx, %ecx
00025c82 cpuid
00025c84 testl $0x40000000, %ecx ## imm = 0x40000000
00025c8a jne 0x25c98
00025c8c movl $0x2d479, (%esp) ## 0x2D479 points to an error string
00025c93 calll _stop ## This function call does not return
00025c98 movl $0x2d4b1, (%esp) ## 0x2D4B1 points to a debugging message
00025c9f calll _printf
00025ca4 movb $0x0, 0x1b(%esp)
00025ca9 rdrandl %eax
00025cac setb 0x1b(%esp)
00025cb1 cmpb $0x0, 0x1b(%esp)
00025cb6 je 0x25ca9