diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h | 58 |
1 files changed, 50 insertions, 8 deletions
diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h index 7a60d72844..cdb36d3316 100644 --- a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h +++ b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h @@ -20,25 +20,67 @@ #define _DL_PROCINFO_H 1 #include <sys/auxv.h> +#include <unistd.h> +#include <ldsodefs.h> +#include <sysdep.h> /* We cannot provide a general printing function. */ -#define _dl_procinfo(type, word) -1 +static inline int +__attribute__ ((unused)) +_dl_procinfo (unsigned int type, unsigned long int word) +{ + /* This table should match the information from arch/arm64/kernel/cpuinfo.c + in the kernel sources. */ + int i; -/* There are no hardware capabilities defined. */ -#define _dl_hwcap_string(idx) "" + /* Fallback to unknown output mechanism. */ + if (type == AT_HWCAP2) + return -1; + + _dl_printf ("AT_HWCAP: "); + + for (i = 0; i < 32; ++i) + if (word & (1 << i)) + _dl_printf (" %s", GLRO(dl_aarch64_cap_flags)[i]); + + _dl_printf ("\n"); + + return 0; +} + +static inline const char * +__attribute__ ((unused)) +_dl_hwcap_string (int idx) +{ + return GLRO(dl_aarch64_cap_flags)[idx]; +}; + + +/* 13 HWCAP bits set. */ +#define _DL_HWCAP_COUNT 13 + +/* Low 13 bits are allocated in HWCAP. */ +#define _DL_HWCAP_LAST 12 /* HWCAP_CPUID should be available by default to influence IFUNC as well as library search. */ #define HWCAP_IMPORTANT HWCAP_CPUID +static inline int +__attribute__ ((unused)) +_dl_string_hwcap (const char *str) +{ + for (int i = 0; i < _DL_HWCAP_COUNT; i++) + { + if (strcmp (str, _dl_hwcap_string (i)) == 0) + return i; + } + return -1; +}; + /* There're no platforms to filter out. */ #define _DL_HWCAP_PLATFORM 0 -/* We don't have any hardware capabilities. */ -#define _DL_HWCAP_COUNT 0 - -#define _dl_string_hwcap(str) (-1) - #define _dl_string_platform(str) (-1) #endif /* dl-procinfo.h */ |