QEMU-user doesn't report HWCAP2_MTE Reproducible on ffa090bc56e73e287a63261e70ac02c0970be61a Host Debian 5.10.24 x86_64 GNU Configured with "configure --disable-system --enable-linux-user --static" This one works and prints "OK" as expected: clang tests/tcg/aarch64/mte-3.c -target aarch64-linux-gnu -fsanitize=memtag -march=armv8+memtag qemu-aarch64 --cpu max -L /usr/aarch64-linux-gnu ./a.out && echo OK This one fails and print "0": cat mytest.c #include #include #ifndef HWCAP2_MTE #define HWCAP2_MTE (1 << 18) #endif int main(int ac, char **av) { printf("%d\n", (int)(getauxval(AT_HWCAP2) & HWCAP2_MTE)); } clang mytest.c -target aarch64-linux-gnu -fsanitize=memtag -march=armv8+memtag qemu-aarch64 --cpu max -L /usr/aarch64-linux-gnu ./a.out Actually if we make it like this: #include #include int main(int ac, char **av) { for (int i = 0; i < 32; ++i) if ((int)(getauxval(AT_HWCAP2) & (1 << i))) printf("%d\n", i); } clang mytest.c -target aarch64-linux-gnu -fsanitize=memtag -march=armv8+memtag qemu-aarch64 --cpu max -L /usr/aarch64-linux-gnu ./a.out I see only: HWCAP_FP HWCAP_CRC32 HWCAP_ATOMICS So no HWCAP2_BTI as well. Sorry, 0 7 8 should be "HWCAP2_DCPODP HWCAP2_FLAGM2 HWCAP2_FRINT" Yep, there's a whole bunch that have been missed. https://