]> git.ipfire.org Git - thirdparty/openssl.git/commit
vpaes: LoongArch: Use getauxval(AT_HWCAP) for LSX detection
authorXi Ruoyao <xry111@xry111.site>
Fri, 21 Jul 2023 02:07:04 +0000 (02:07 +0000)
committerPauli <pauli@openssl.org>
Fri, 28 Jul 2023 02:39:41 +0000 (12:39 +1000)
commitc612289b77c37f7295d5af0d0e6b6c04e6ba727c
tree8d2c541d218c93a8ce658ebae4db163869015fe2
parent7f14656e1cc002a09b2d6148302a1fc71a30f7cd
vpaes: LoongArch: Use getauxval(AT_HWCAP) for LSX detection

Running LSX instructions requires both the hardware support and the
kernel support.  The `cpucfg` instruction only tests the hardware
support, causing a SIGILL if the hardware supports LSX but the kernel
does not.

Use `getauxval(AT_HWCAP)` as the ["Software Development and Build
Convention for LoongArch Architectures"][1] manual suggests.

The LOONGARCH_HWCAP_LSX and LOONGARCH_HWCAP_LASX bits are copied from
the manual too.  In Glibc 2.38 they'll be provided by <sys/auxv.h> as
well, but they are unavailable in earlier Glibc versions so we cannot
rely on it.

The getauxval syscall and Glibc wrapper are available since day one
(Linux-5.19 and Glibc-2.36) for LoongArch.

Fixes #21508.

[1]:https://github.com/loongson/la-softdev-convention/blob/master/la-softdev-convention.adoc#kernel-constraints

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/21509)
crypto/loongarch_arch.h
crypto/loongarchcap.c
include/crypto/aes_platform.h