diff --git a/lib/libsys/auxv.c b/lib/libsys/auxv.c index 88f49ef53be1..1a4fd352950e 100644 --- a/lib/libsys/auxv.c +++ b/lib/libsys/auxv.c @@ -36,6 +36,7 @@ #include #include "un-namespace.h" #include "libc_private.h" +#include extern int _DYNAMIC; #pragma weak _DYNAMIC @@ -66,7 +67,7 @@ __init_elf_aux_vector(void) } #endif -static bool aux_once = false; +static int aux_once; static int pagesize, osreldate, canary_len, ncpus, pagesizes_len, bsdflags; static int hwcap_present, hwcap2_present; static char *canary, *pagesizes, *execpath; @@ -92,7 +93,7 @@ init_aux(void) { Elf_Auxinfo *aux; - if (aux_once) + if (atomic_load_acq_int(&aux_once)) return; for (aux = __elf_aux_vector; aux->a_type != AT_NULL; aux++) { switch (aux->a_type) { @@ -179,7 +180,7 @@ init_aux(void) _init_aux_powerpc_fixup(); #endif - aux_once = true; + atomic_store_rel_int(&aux_once, 1); } #ifdef __powerpc__