1*2b54f0dbSXin Li #include <stdlib.h>
2*2b54f0dbSXin Li #include <stdio.h>
3*2b54f0dbSXin Li
4*2b54f0dbSXin Li #include <sys/auxv.h>
5*2b54f0dbSXin Li #include <errno.h>
6*2b54f0dbSXin Li #include <dlfcn.h>
7*2b54f0dbSXin Li
8*2b54f0dbSXin Li #include <cpuinfo.h>
9*2b54f0dbSXin Li
10*2b54f0dbSXin Li
11*2b54f0dbSXin Li typedef unsigned long (*getauxval_function_t)(unsigned long);
12*2b54f0dbSXin Li
main(int argc,char ** argv)13*2b54f0dbSXin Li int main(int argc, char** argv) {
14*2b54f0dbSXin Li void* libc = dlopen("libc.so", RTLD_NOW);
15*2b54f0dbSXin Li if (libc == NULL) {
16*2b54f0dbSXin Li fprintf(stderr, "Error: failed to load libc.so: %s\n", dlerror());
17*2b54f0dbSXin Li exit(EXIT_FAILURE);
18*2b54f0dbSXin Li }
19*2b54f0dbSXin Li
20*2b54f0dbSXin Li getauxval_function_t getauxval = (getauxval_function_t) dlsym(libc, "getauxval");
21*2b54f0dbSXin Li if (getauxval == NULL) {
22*2b54f0dbSXin Li fprintf(stderr, "Error: failed to locate getauxval in libc.so: %s", dlerror());
23*2b54f0dbSXin Li exit(EXIT_FAILURE);
24*2b54f0dbSXin Li }
25*2b54f0dbSXin Li
26*2b54f0dbSXin Li printf("AT_HWCAP = 0x%08lX\n", getauxval(AT_HWCAP));
27*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM
28*2b54f0dbSXin Li printf("AT_HWCAP2 = 0x%08lX\n", getauxval(AT_HWCAP2));
29*2b54f0dbSXin Li #endif
30*2b54f0dbSXin Li
31*2b54f0dbSXin Li return 0;
32*2b54f0dbSXin Li }
33