X-Git-Url: https://git.lttng.org/?p=urcu.git;a=blobdiff_plain;f=arch_x86.h;h=8a5732536c9d3106af919b5467dab1f58c5f9313;hp=e7d945e3859393edece5eb4b2aee4c99538083e2;hb=dd052bd346ddd497ed79f771ea1d5b3406bbcf07;hpb=ebb22fff4a06b0661b55726ad332c4c53f6603fe 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 { \