From 28b7205609252b365b5fbcb140de22858cd631da Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Mon, 25 Jul 2011 15:11:46 -0400 Subject: [PATCH] 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 --- utils/cpuid.h | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-) 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.3.4