Make CRYPTO_is_NEON_capable aware of the buggy CPU.

If we're to allow the buggy CPU workaround to fire when __ARM_NEON__ is set,
CRYPTO_is_NEON_capable also needs to be aware of it. Also add an API to export
this value out of BoringSSL, so we can get some metrics on how prevalent this
chip is.

BUG=chromium:606629

Change-Id: I97d65a47a6130689098b32ce45a8c57c468aa405
Reviewed-on: https://boringssl-review.googlesource.com/7796
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/cpu-arm-linux.c b/crypto/cpu-arm-linux.c
index ab4648c..73c38ec 100644
--- a/crypto/cpu-arm-linux.c
+++ b/crypto/cpu-arm-linux.c
@@ -288,6 +288,8 @@
 
 extern uint32_t OPENSSL_armcap_P;
 
+static int g_has_broken_neon;
+
 void OPENSSL_cpuid_setup(void) {
   char *cpuinfo_data;
   size_t cpuinfo_len;
@@ -317,7 +319,8 @@
   }
 
   /* Clear NEON support if known broken. */
-  if (has_broken_neon(&cpuinfo)) {
+  g_has_broken_neon = has_broken_neon(&cpuinfo);
+  if (g_has_broken_neon) {
     hwcap &= ~HWCAP_NEON;
   }
 
@@ -352,4 +355,6 @@
   OPENSSL_free(cpuinfo_data);
 }
 
+int CRYPTO_has_broken_NEON(void) { return g_has_broken_neon; }
+
 #endif /* OPENSSL_ARM && !OPENSSL_STATIC_ARMCAP */