1*cb14a3feSDimitry Andricvoid __init_cpu_features_resolver(unsigned long hwcap, 2*cb14a3feSDimitry Andric const __ifunc_arg_t *arg) { 3*cb14a3feSDimitry Andric if (__aarch64_cpu_features.features) 4*cb14a3feSDimitry Andric return; 5*cb14a3feSDimitry Andric __init_cpu_features_constructor(hwcap, arg); 6*cb14a3feSDimitry Andric} 7*cb14a3feSDimitry Andric 8*cb14a3feSDimitry Andricvoid CONSTRUCTOR_ATTRIBUTE __init_cpu_features(void) { 9*cb14a3feSDimitry Andric // CPU features already initialized. 10*cb14a3feSDimitry Andric if (__aarch64_cpu_features.features) 11*cb14a3feSDimitry Andric return; 12*cb14a3feSDimitry Andric 13*cb14a3feSDimitry Andric unsigned long hwcap = getauxval(AT_HWCAP); 14*cb14a3feSDimitry Andric unsigned long hwcap2 = getauxval(AT_HWCAP2); 15*cb14a3feSDimitry Andric 16*cb14a3feSDimitry Andric __ifunc_arg_t arg; 17*cb14a3feSDimitry Andric arg._size = sizeof(__ifunc_arg_t); 18*cb14a3feSDimitry Andric arg._hwcap = hwcap; 19*cb14a3feSDimitry Andric arg._hwcap2 = hwcap2; 20*cb14a3feSDimitry Andric __init_cpu_features_constructor(hwcap | _IFUNC_ARG_HWCAP, &arg); 21*cb14a3feSDimitry Andric} 22