Detect broken RDRAND during initialization.
Some CPUs advertise RDRAND in CPUID, but return
0xFFFFFFFF unconditionally. To avoid locking up
later, test RDRAND during initialization, and if
it returns 0xFFFFFFFF, mark it as nonexistent.
Also fix a possible segmentation fault in CPUID check.
This commit is a squashed and slightly modified backport
of the following commits on the master branch:
*
0e5bbcaa162ac7850eb4fcd8f91391837d0efb50
*
4d36b0287d3ab0912ba8a4790340ca099960b2b0
*
80863140263be5f2dc630938ed8f0066f8a1ab43