From 9085ce6f615d9d2e0182d3ce029b882835bd0a6b Mon Sep 17 00:00:00 2001 From: Matt Turner 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 Signed-off-by: Dominik Brodowski --- 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