aarch64: Add hwcap string routines

Add support for routines in dl-procinfo.h to show string versions of
HWCAP entries when a program is invoked with the LD_SHOW_AUXV
environment variable set and also to aid in path resolution for
ldconfig.

	* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c
	(_dl_aarch64_cap_flags): New array.
	* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h
	(_dl_hwcap_string, _dl_string_hwcap, _dl_procinfo): Implement
	functions.
This commit is contained in:
Siddhesh Poyarekar 2017-05-25 15:34:55 +05:30
parent 511c5a1087
commit ea01a4da21
3 changed files with 71 additions and 8 deletions

View File

@ -1,5 +1,11 @@
2017-06-07 Siddhesh Poyarekar <siddhesh@sourceware.org>
* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c
(_dl_aarch64_cap_flags): New array.
* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h
(_dl_hwcap_string, _dl_string_hwcap, _dl_procinfo): Implement
functions.
* elf/dl-hwcaps.h [HAVE_TUNABLES]: Always read hwcap_mask.
* sysdeps/sparc/sparc32/dl-machine.h [HAVE_TUNABLES]:
Likewise.

View File

@ -56,5 +56,20 @@ PROCINFO_CLASS struct cpu_features _dl_aarch64_cpu_features
# endif
#endif
#if !defined PROCINFO_DECL && defined SHARED
._dl_aarch64_cap_flags
#else
PROCINFO_CLASS const char _dl_aarch64_cap_flags[13][10]
#endif
#ifndef PROCINFO_DECL
= { "fp", "asimd", "evtstrm", "aes", "pmull", "sha1", "sha2", "crc32",
"atomics", "fphp", "asimdhp", "cpuid", "asimdrdm"}
#endif
#if !defined SHARED || defined PROCINFO_DECL
;
#else
,
#endif
#undef PROCINFO_DECL
#undef PROCINFO_CLASS

View File

@ -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 */