diff options
Diffstat (limited to 'libatomic/config/x86/init.c')
-rw-r--r-- | libatomic/config/x86/init.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/libatomic/config/x86/init.c b/libatomic/config/x86/init.c index 8b9ccd3b3de..5a4cf8b0456 100644 --- a/libatomic/config/x86/init.c +++ b/libatomic/config/x86/init.c @@ -26,13 +26,17 @@ #if HAVE_IFUNC -unsigned int libat_feat1_ecx, libat_feat1_edx; +unsigned int __libat_feat1; -static void __attribute__((constructor)) -init_cpuid (void) +unsigned int +__libat_feat1_init (void) { - unsigned int eax, ebx; - __get_cpuid (1, &eax, &ebx, &libat_feat1_ecx, &libat_feat1_edx); + unsigned int eax, ebx, ecx, edx; + FEAT1_REGISTER = 0; + __get_cpuid (1, &eax, &ebx, &ecx, &edx); + /* See the load in load_feat1. */ + __atomic_store_n (&__libat_feat1, FEAT1_REGISTER, __ATOMIC_RELAXED); + return FEAT1_REGISTER; } #endif /* HAVE_IFUNC */ |