/* Override the broken static getauxval from compiler-rt/CRT. * * The static version reads from __libc_auxv which is NULL in shared libs * loaded via dlopen, causing SIGSEGV in init_have_lse_atomics at load time. * This version calls the real bionic getauxval via dlsym. * * Copied verbatim from crates/wzp-android/cpp/getauxval_fix.c — the legacy * wzp-android crate has been using this shim successfully for months. */ #ifdef __ANDROID__ #include #include typedef unsigned long (*getauxval_fn)(unsigned long); unsigned long getauxval(unsigned long type) { static getauxval_fn real_getauxval = (getauxval_fn)0; if (!real_getauxval) { real_getauxval = (getauxval_fn)dlsym((void*)-1L /* RTLD_DEFAULT */, "getauxval"); if (!real_getauxval) { return 0; } } return real_getauxval(type); } #endif