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
This commit is contained in:
Dimitry Andric 2023-07-23 13:01:42 +02:00
parent 83e67a9d14
commit b8f1c9dd9b

View file

@ -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__)