git: 3ea609f7d794 - stable/13 - Merge commit 2b0f5df7b4e0 from llvm-project (by Jessica Clarke):

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Sun, 23 Jul 2023 18:27:19 UTC
The branch stable/13 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=3ea609f7d794675ff74194a36125a1201dabc8fb

commit 3ea609f7d794675ff74194a36125a1201dabc8fb
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2023-07-23 11:01:42 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2023-07-23 17:38:13 +0000

    Merge commit 2b0f5df7b4e0 from llvm-project (by Jessica Clarke):
    
      [builtins][Mips] Un-break FreeBSD build of __clear_cache
    
      Commit 674a17e9bbe8 ("MIPS/compiler_rt: use synci to flush icache on
      r6") completely removed the OS-specific guards under the guise of "For
      pre-r6, we can use cacheflush libc function, which is same on Linux and
      FreeBSD." However, the code in question had guards for Linux and
      OpenBSD, not Linux and FreeBSD, and FreeBSD does not have a cacheflush
      libc function as claimed, so this was neither the statement they
      intended to make nor was it sufficient justification for making the code
      completely unconditional. Whilst the upcoming FreeBSD 14 release has
      dropped support for MIPS, FreeBSD 13 has support for it.
    
      Fix this by only calling cacheflush on the OSes where it was previously
      called, and not on other OSes where it either definitely isn't available
      (FreeBSD) or is unknown (any other OS than the three mentioned in this
      commit).
    
    This is only needed for MFC'ing, as mips has been removed from
    14-CURRENT.
    
    PR:             271047
    MFC after:      immediately
    
    (cherry picked from commit b8f1c9dd9b3dd9b91e6999b28ab941a2af142702)
---
 contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c b/contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c
index 8993761eb3d4..54cbda059315 100644
--- a/contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c
+++ b/contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c
@@ -110,10 +110,14 @@ void __clear_cache(void *start, void *end) {
                      "jr.hb $at\n"
                      "move $at, $0\n"
                      ".set at");
-#else
+#elif defined(__linux__) || defined(__OpenBSD__)
     // Pre-R6 may not be globalized. And some implementations may give strange
     // synci_step. So, let's use libc call for it.
     cacheflush(start, end_int - start_int, BCACHE);
+#else
+    (void)start_int;
+    (void)end_int;
+    compilerrt_abort();
 #endif
   }
 #elif defined(__aarch64__) && !defined(__APPLE__)