diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2020-05-06 16:20:38 +0100 |
---|---|---|
committer | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2020-05-06 16:20:38 +0100 |
commit | 1266778548e20de82983b6446f3cb685068cfb1e (patch) | |
tree | 1592b3347f4d077db559634404e622fd715a0cbf /libgcc/config/aarch64 | |
parent | 4e849a74a8512cb313831a5929501ac2a735b7e1 (diff) | |
download | gcc-1266778548e20de82983b6446f3cb685068cfb1e.tar.gz |
[AArch64] Use __getauxval instead of getauxval in LSE detection code in libgcc
This version of the fix uses __getauxval instead of getauxval.
The whole thing is guarded simply on __gnu_linux__.
__getauxval was introduced in 2.16 but the aarch64 port was added in 2.17 so in practice I expect all aarch64 glibcs to support __getauxval.
Bootstrapped and tested on aarch64-none-linux-gnu.
Also tested on aarch64-none-elf.
2020-05-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/aarch64/lse-init.c (init_have_lse_atomics): Use __getauxval
instead of getauxval.
(AT_HWCAP): Define.
(HWCAP_ATOMICS): Define.
Guard detection on __gnu_linux__.
Diffstat (limited to 'libgcc/config/aarch64')
-rw-r--r-- | libgcc/config/aarch64/lse-init.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/libgcc/config/aarch64/lse-init.c b/libgcc/config/aarch64/lse-init.c index 74acef25cce..00e9ab8cd1c 100644 --- a/libgcc/config/aarch64/lse-init.c +++ b/libgcc/config/aarch64/lse-init.c @@ -29,19 +29,20 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see _Bool __aarch64_have_lse_atomics __attribute__((visibility("hidden"), nocommon)); -/* Disable initialization of __aarch64_have_lse_atomics during bootstrap. */ -#if !defined(inhibit_libc) && defined(HAVE_SYS_AUXV_H) -# include <sys/auxv.h> +/* Gate availability of __getauxval on glibc. All AArch64-supporting glibc + versions support it. */ +#ifdef __gnu_linux__ -/* Disable initialization if the system headers are too old. */ -# if defined(AT_HWCAP) && defined(HWCAP_ATOMICS) +# define AT_HWCAP 16 +# define HWCAP_ATOMICS (1 << 8) + +unsigned long int __getauxval (unsigned long int); static void __attribute__((constructor)) init_have_lse_atomics (void) { - unsigned long hwcap = getauxval (AT_HWCAP); + unsigned long hwcap = __getauxval (AT_HWCAP); __aarch64_have_lse_atomics = (hwcap & HWCAP_ATOMICS) != 0; } -# endif /* HWCAP */ -#endif /* inhibit_libc */ +#endif /* __gnu_linux__ */ |