Commit 6a5ccb2e authored by Jeremie Courreges-Anglas's avatar Jeremie Courreges-Anglas Committed by Tom Stellard
Browse files

[compiler-rt] Implement __clear_cache() on OpenBSD/riscv64

(cherry picked from commit 3db95906)
parent 6aa05424
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ uintptr_t GetCurrentProcess(void);
#include <machine/sysarch.h>
#endif

#if defined(__OpenBSD__) && (defined(__arm__) || defined(__mips__))
#if defined(__OpenBSD__) && (defined(__arm__) || defined(__mips__) || defined(__riscv))
// clang-format off
#include <sys/types.h>
#include <machine/sysarch.h>
@@ -166,6 +166,13 @@ void __clear_cache(void *start, void *end) {
                   : "=r"(start_reg)
                   : "r"(start_reg), "r"(end_reg), "r"(flags), "r"(syscall_nr));
  assert(start_reg == 0 && "Cache flush syscall failed.");
#elif defined(__riscv) && defined(__OpenBSD__)
  struct riscv_sync_icache_args arg;

  arg.addr = (uintptr_t)start;
  arg.len = (uintptr_t)end - (uintptr_t)start;

  sysarch(RISCV_SYNC_ICACHE, &arg);
#else
#if __APPLE__
  // On Darwin, sys_icache_invalidate() provides this functionality