#include #include #include /* Run with/without environment variables does not influence HWCAPs: GLIBC_TUNABLES="" LD_HWCAP_MASK="" HWCAPs passed as argument to ifunc-resolver: 0x67ffff HWCAPs from getauxval (AT_HWCAP): 0x67ffff GLIBC_TUNABLES="glibc.cpu.hwcap_mask=0" LD_HWCAP_MASK="" HWCAPs passed as argument to ifunc-resolver: 0x67ffff HWCAPs from getauxval (AT_HWCAP): 0x67ffff GLIBC_TUNABLES="" LD_HWCAP_MASK="0x0" HWCAPs passed as argument to ifunc-resolver: 0x67ffff HWCAPs from getauxval (AT_HWCAP): 0x67ffff */ static unsigned long global_hwcaps = 0; static int impl(void) { printf ("HWCAPs passed as argument to ifunc-resolver: 0x%lx\n", global_hwcaps); return 42; } static void *resolver(unsigned long hwcap) { global_hwcaps = hwcap; return impl; } int ifunc(void) __attribute__((ifunc("resolver"))); int main (void) { printf ("GLIBC_TUNABLES=\"%s\"\n", getenv ("GLIBC_TUNABLES") ? : ""); printf ("LD_HWCAP_MASK=\"%s\"\n", getenv ("LD_HWCAP_MASK") ? : ""); ifunc (); printf ("HWCAPs from getauxval (AT_HWCAP): 0x%lx\n", getauxval (AT_HWCAP)); return EXIT_SUCCESS; }