summaryrefslogtreecommitdiff
path: root/sys-apps/x86info/files/x86info-1.30-pic.patch
diff options
context:
space:
mode:
Diffstat (limited to 'sys-apps/x86info/files/x86info-1.30-pic.patch')
-rw-r--r--sys-apps/x86info/files/x86info-1.30-pic.patch31
1 files changed, 31 insertions, 0 deletions
diff --git a/sys-apps/x86info/files/x86info-1.30-pic.patch b/sys-apps/x86info/files/x86info-1.30-pic.patch
new file mode 100644
index 000000000000..6288846b48b7
--- /dev/null
+++ b/sys-apps/x86info/files/x86info-1.30-pic.patch
@@ -0,0 +1,31 @@
+--- a/cpuid.c
++++ b/cpuid.c
+@@ -25,12 +25,28 @@
+
+ bind_cpu(cpunr);
+
++#ifdef __PIC__
++ /* GCC on i386 bitches if you clobber ebx. So hide it behind
++ * gcc's back. */
++ asm(
++ "movl %%ebx,%%edi\n"
++ "cpuid\n"
++ "movl %%ebx,%1\n"
++ "movl %%edi,%%ebx\n"
++ : "=a" (a),
++ "=m" (b),
++ "+c" (c),
++ "=d" (d)
++ : "0" ((unsigned int)idx)
++ : "edi");
++#else
+ asm("cpuid"
+ : "=a" (a),
+ "=b" (b),
+ "+c" (c),
+ "=d" (d)
+ : "0" ((unsigned int)idx));
++#endif
+
+ if (eax!=NULL)
+ *eax = a;