Fix __builtin___clear_cache detection on GCC < 10.

* For real this time.
* Fixes #5617.
diff --git a/iree/hal/local/elf/platform/generic.c b/iree/hal/local/elf/platform/generic.c
index c1df242..7bf4d3c 100644
--- a/iree/hal/local/elf/platform/generic.c
+++ b/iree/hal/local/elf/platform/generic.c
@@ -94,10 +94,12 @@
 // IREE_ELF_CLEAR_CACHE can be defined externally to override this default
 // behavior.
 #if !defined(IREE_ELF_CLEAR_CACHE)
-// Explicitly enable for GCC, which has had this since 4.x but does not
-// seem to advertise it via __has_builtin.
-#if defined __has_builtin
-#if __has_builtin(__builtin___clear_cache) || defined(__GNUC__)
+// __has_builtin was added in GCC 10, so just hard-code the availability
+// for < 10, special cased here so it can be dropped once no longer needed.
+#if defined __GNUC__ && __GNUC__ < 10
+#define IREE_ELF_CLEAR_CACHE(start, end) __builtin___clear_cache(start, end)
+#elif defined __has_builtin
+#if __has_builtin(__builtin___clear_cache)
 #define IREE_ELF_CLEAR_CACHE(start, end) __builtin___clear_cache(start, end)
 #endif  // __builtin___clear_cache
 #endif  // __has_builtin
diff --git a/iree/hal/local/elf/platform/linux.c b/iree/hal/local/elf/platform/linux.c
index 394e7a1..3ad721b 100644
--- a/iree/hal/local/elf/platform/linux.c
+++ b/iree/hal/local/elf/platform/linux.c
@@ -144,10 +144,12 @@
 // IREE_ELF_CLEAR_CACHE can be defined externally to override this default
 // behavior.
 #if !defined(IREE_ELF_CLEAR_CACHE)
-// Explicitly enable for GCC, which has had this since 4.x but does not
-// seem to advertise it via __has_builtin.
-#if defined __has_builtin
-#if __has_builtin(__builtin___clear_cache) || defined(__GNUC__)
+// __has_builtin was added in GCC 10, so just hard-code the availability
+// for < 10, special cased here so it can be dropped once no longer needed.
+#if defined __GNUC__ && __GNUC__ < 10
+#define IREE_ELF_CLEAR_CACHE(start, end) __builtin___clear_cache(start, end)
+#elif defined __has_builtin
+#if __has_builtin(__builtin___clear_cache)
 #define IREE_ELF_CLEAR_CACHE(start, end) __builtin___clear_cache(start, end)
 #endif  // __builtin___clear_cache
 #endif  // __has_builtin