summaryrefslogtreecommitdiff
path: root/sys-apps/iotools/files/iotools-1.4-cpuid-pic.patch
blob: 3fde16c6ca014d3638b70317f448cca240a5e19d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
http://code.google.com/p/iotools/issues/detail?id=2

--- a/misc.c
+++ b/misc.c
@@ -149,8 +149,16 @@ cpuid_inline(int cpu, int function, int index, uint32_t *data)
 	}
 
 	asm volatile (
+#ifdef __i386__
+	      "xchg %%ebx, %%esi;" /* save ebx (for PIC) */
+	      "cpuid;"
+	      "xchg %%esi, %%ebx;" /* restore ebx & pass to caller */
+	      : "=S" (data[1]),
+#else
 	      "cpuid\n\t"
-	      : "=a" (data[0]), "=b" (data[1]), "=c" (data[2]), "=d" (data[3])
+	      : "=b" (data[1]),
+#endif
+	        "=a" (data[0]), "=c" (data[2]), "=d" (data[3])
 	      : "0" (function), "2" (index)
 	      : "memory"
 	);