Don't bother insisting on AT_HWCAP2 for 32-bit devices.
Bug: http://b/27874785
Change-Id: I9dcf345ae1221f665f267cba3ed9279435671b75
diff --git a/tests/getauxval_test.cpp b/tests/getauxval_test.cpp
index 54458c4..79df978 100644
--- a/tests/getauxval_test.cpp
+++ b/tests/getauxval_test.cpp
@@ -16,6 +16,7 @@
#include <errno.h>
#include <sys/cdefs.h>
+#include <sys/utsname.h>
#include <gtest/gtest.h>
// getauxval() was only added as of glibc version 2.16.
@@ -64,6 +65,16 @@
TEST(getauxval, arm_has_AT_HWCAP2) {
#if defined(__arm__)
+ // There are no known 32-bit processors that implement any of these instructions, so rather
+ // than require that OEMs backport kernel patches, let's just ignore old hardware. Strictly
+ // speaking this would be fooled by someone choosing to ship a 32-bit kernel on 64-bit hardware,
+ // but that doesn't seem very likely in 2016.
+ utsname u;
+ ASSERT_EQ(0, uname(&u));
+ if (strcmp("aarch64", u.machine) == 0) {
+ GTEST_LOG_(INFO) << "This test is only meaningful for 32-bit ARM code on 64-bit devices.\n";
+ return;
+ }
// If this test fails, apps that use getauxval to decide at runtime whether crypto hardware is
// available will incorrectly assume that it isn't, and will have really bad performance.
// If this test fails, ensure that you've enabled COMPAT_BINFMT_ELF in your kernel configuration.
@@ -71,8 +82,8 @@
// to check errno to see whether we got a "true" 0 or a "not found" 0.
errno = 0;
getauxval(AT_HWCAP2);
- ASSERT_EQ(0, errno) << "kernel not reporting AT_HWCAP2 to 32-bit ARM process";
+ ASSERT_EQ(0, errno) << "64-bit kernel not reporting AT_HWCAP2 to 32-bit ARM process";
#else
- GTEST_LOG_(INFO) << "This test is only meaningful for 32-bit ARM code.\n";
+ GTEST_LOG_(INFO) << "This test is only meaningful for 32-bit ARM code on 64-bit devices.\n";
#endif
}