1 /* Copyright (C) 2012-2022 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 #include <sys/auxv.h> 19 #include <errno.h> 20 #include <ldsodefs.h> 21 #include <stdbool.h> 22 23 bool __getauxval2(unsigned long int type,unsigned long int * result)24__getauxval2 (unsigned long int type, unsigned long int *result) 25 { 26 #ifdef HAVE_AUX_VECTOR 27 ElfW(auxv_t) *p; 28 #endif 29 30 if (type == AT_HWCAP) 31 { 32 *result = GLRO(dl_hwcap); 33 return true; 34 } 35 else if (type == AT_HWCAP2) 36 { 37 *result = GLRO(dl_hwcap2); 38 return true; 39 } 40 41 #ifdef HAVE_AUX_VECTOR 42 for (p = GLRO(dl_auxv); p->a_type != AT_NULL; p++) 43 if (p->a_type == type) 44 { 45 *result = p->a_un.a_val; 46 return true; 47 } 48 #endif 49 50 return false; 51 } libc_hidden_def(__getauxval2)52libc_hidden_def (__getauxval2) 53 54 unsigned long int 55 __getauxval (unsigned long int type) 56 { 57 unsigned long int result; 58 59 if (__getauxval2 (type, &result)) 60 return result; 61 62 __set_errno (ENOENT); 63 return 0; 64 } 65 66 weak_alias (__getauxval, getauxval) 67 libc_hidden_def (__getauxval) 68