mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-07-24 19:55:26 +03:00
46 lines
1.2 KiB
Diff
46 lines
1.2 KiB
Diff
From 9085ce6f615d9d2e0182d3ce029b882835bd0a6b Mon Sep 17 00:00:00 2001
|
|
From: Matt Turner <mattst88@gmail.com>
|
|
Date: Tue, 26 Jul 2011 19:28:31 -0400
|
|
Subject: [PATCH 6/8] aperf: fix compilation on x86-32 with -fPIC
|
|
|
|
ebx is used to store the GOT pointer when compiled with -fPIC, so it's
|
|
not usable by inline assembly.
|
|
|
|
https://bugs.gentoo.org/375967
|
|
|
|
Signed-off-by: Matt Turner <mattst88@gmail.com>
|
|
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
|
|
---
|
|
utils/cpuid.h | 14 +++++++++++++-
|
|
1 file changed, 13 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/utils/cpuid.h b/utils/cpuid.h
|
|
index 2bac69a..53da789 100644
|
|
--- a/utils/cpuid.h
|
|
+++ b/utils/cpuid.h
|
|
@@ -5,9 +5,21 @@ static inline void __cpuid(unsigned int *eax, unsigned int *ebx,
|
|
unsigned int *ecx, unsigned int *edx)
|
|
{
|
|
/* ecx is often an input as well as an output. */
|
|
- asm volatile("cpuid"
|
|
+ asm volatile(
|
|
+#if defined(__i386__) && defined(__PIC__)
|
|
+ "push %%ebx\n"
|
|
+ "cpuid\n"
|
|
+ "movl %%ebx, %1\n"
|
|
+ "pop %%ebx\n"
|
|
+#else
|
|
+ "cpuid\n"
|
|
+#endif
|
|
: "=a" (*eax),
|
|
+#if defined(__i386__) && defined(__PIC__)
|
|
+ "=r" (*ebx),
|
|
+#else
|
|
"=b" (*ebx),
|
|
+#endif
|
|
"=c" (*ecx),
|
|
"=d" (*edx)
|
|
: "0" (*eax), "2" (*ecx));
|
|
--
|
|
1.7.10
|
|
|