Disabling SVE via `-cpu max,sve=off` leaves SVE2 advertised by `getauxval`
Host environment
- Operating system: Ubuntu 22.04
- OS/kernel version: Linux 6.2.0
- Architecture: x86_64
- QEMU flavor: qemu-aarch64
- QEMU version: qemu-aarch64 version 8.2.94
Description of problem
The documentation on https://qemu-project.gitlab.io/qemu/system/arm/cpu-features.html suggests that it should be possible to disable SVE support by passing -cpu max,sve=off
on the command line, however this appears to only disable the SVE support advertised in the return value from getauxval(AT_HWCAP)
. In particular it leaves SVE2 reported as enabled. This leaves the feature set advertised by getauxval
in an inconsistent state since SVE is mandatory if SVE2 is available.
This may also affect other feature dependencies for example FEAT_SVE_BITPerm also requiring SVE2 to be available, I've not checked exhaustively.
For example, given the following code:
#include <sys/auxv.h>
#include <stdio.h>
int main() {
unsigned long hwcap = getauxval(AT_HWCAP);
unsigned long hwcap2 = getauxval(AT_HWCAP2);
if (hwcap & HWCAP_SVE) {
printf("have sve!\n");
} else {
printf("don't have sve!\n");
}
if (hwcap2 & HWCAP2_SVE2) {
printf("have sve2!\n");
} else {
printf("don't have sve2!\n");
}
}
We can observe the following:
$ aarch64-linux-gnu-gcc test.c -static
$ ../qemu-aarch64 -cpu max ./a.out
have sve!
have sve2!
$ ../qemu-aarch64 -cpu max,sve=off ./a.out
don't have sve!
have sve2!
I don't believe that there is a -cpu ...,sve2=off
option, so I would expect that disabling SVE also prevents SVE2 from being advertised as available.