diff -Nuar fio-2.0.14.orig/arch/arch-x86-common.h fio-2.0.14/arch/arch-x86-common.h
--- fio-2.0.14.orig/arch/arch-x86-common.h	2013-02-21 18:12:32.000000000 +0000
+++ fio-2.0.14/arch/arch-x86-common.h	2013-03-27 01:48:04.000000000 +0000
@@ -6,10 +6,24 @@
 static inline void do_cpuid(unsigned int *eax, unsigned int *ebx,
 			    unsigned int *ecx, unsigned int *edx)
 {
+#ifdef __PIC__
+    /* 32-bit Hardened GCC (PIC) uses register EBX, so it must be preserved 
+     * Fix ported from Gentoo's x86info-1.24-pic patch 
+     * http://tuxion.com/2010/07/02/clobber-registers.html */
+	asm volatile(
+            "movl %%ebx,%%edi\n"
+            "cpuid\n"
+            "movl %%ebx,%1\n"
+            "movl %%edi,%%ebx\n"
+		: "=a" (*eax), "=m" (*ebx), "=c" (*ecx), "=d" (*edx)
+		: "0" (*eax), "2" (*ecx)
+		: "memory", "%edi");
+#else
 	asm volatile("cpuid"
 		: "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
 		: "0" (*eax), "2" (*ecx)
 		: "memory");
+#endif
 }
 
 static inline void cpuid(unsigned int op,