Use raw opcodes for rdrand to build with older binutils
authorMartin Willi <martin@revosec.ch>
Fri, 4 Jan 2013 15:34:56 +0000 (16:34 +0100)
committerMartin Willi <martin@revosec.ch>
Fri, 11 Jan 2013 09:45:14 +0000 (10:45 +0100)
src/libstrongswan/plugins/rdrand/rdrand_rng.c

index 8c219b4..d032cbe 100644 (file)
@@ -61,9 +61,9 @@ static bool rdrand16(u_int16_t *out)
 
        for (i = 0; i < MAX_TRIES; i++)
        {
-               asm("rdrand %0;"
+               asm(".byte 0x66;.byte 0x0f;.byte 0xc7;.byte 0xf0; " /* rdrand */
                        "setc %1;"
-                       : "=r"(*out), "=qm"(res));
+                       : "=a"(*out), "=qm"(res));
 
                if (res)
                {
@@ -83,9 +83,9 @@ static bool rdrand32(u_int32_t *out)
 
        for (i = 0; i < MAX_TRIES; i++)
        {
-               asm("rdrand %0;"
+               asm(".byte 0x0f;.byte 0xc7;.byte 0xf0;" /* rdrand */
                        "setc %1;"
-                       : "=r"(*out), "=qm"(res));
+                       : "=a"(*out), "=qm"(res));
 
                if (res)
                {
@@ -106,9 +106,9 @@ static bool rdrand64(u_int64_t *out)
 
        for (i = 0; i < MAX_TRIES; i++)
        {
-               asm("rdrand %0;"
+               asm(".byte 0x48;.byte 0x0f;.byte 0xc7;.byte 0xf0;" /* rdrand */
                        "setc %1;"
-                       : "=r"(*out), "=qm"(res));
+                       : "=a"(*out), "=qm"(res));
 
                if (res)
                {