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