X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=arch_x86.h;h=8a5732536c9d3106af919b5467dab1f58c5f9313;hp=e7d945e3859393edece5eb4b2aee4c99538083e2;hb=5dba80f9bed985c23090ec74bb4173b31b28513a;hpb=794a737edb08278087a6628a37235d19ff68fce1 diff --git a/arch_x86.h b/arch_x86.h index e7d945e..8a57325 100644 --- a/arch_x86.h +++ b/arch_x86.h @@ -97,10 +97,22 @@ static inline void cpu_relax(void) /* * Serialize core instruction execution. Also acts as a compiler barrier. */ +#ifdef __PIC__ +/* + * Cannot use cpuid because it clobbers the ebx register and clashes + * with -fPIC : + * error: PIC register 'ebx' clobbered in 'asm' + */ +static inline void sync_core(void) +{ + mb(); +} +#else static inline void sync_core(void) { asm volatile("cpuid" : : : "memory", "eax", "ebx", "ecx", "edx"); } +#endif #define rdtscll(val) \ do { \