Skip to content

Commit 6a5ccb2

Browse files
jcourregeststellar
authored andcommitted
[compiler-rt] Implement __clear_cache() on OpenBSD/riscv64
(cherry picked from commit 3db9590)
1 parent 6aa0542 commit 6a5ccb2

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

compiler-rt/lib/builtins/clear_cache.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ uintptr_t GetCurrentProcess(void);
3535
#include <machine/sysarch.h>
3636
#endif
3737

38-
#if defined(__OpenBSD__) && (defined(__arm__) || defined(__mips__))
38+
#if defined(__OpenBSD__) && (defined(__arm__) || defined(__mips__) || defined(__riscv))
3939
// clang-format off
4040
#include <sys/types.h>
4141
#include <machine/sysarch.h>
@@ -166,6 +166,13 @@ void __clear_cache(void *start, void *end) {
166166
: "=r"(start_reg)
167167
: "r"(start_reg), "r"(end_reg), "r"(flags), "r"(syscall_nr));
168168
assert(start_reg == 0 && "Cache flush syscall failed.");
169+
#elif defined(__riscv) && defined(__OpenBSD__)
170+
struct riscv_sync_icache_args arg;
171+
172+
arg.addr = (uintptr_t)start;
173+
arg.len = (uintptr_t)end - (uintptr_t)start;
174+
175+
sysarch(RISCV_SYNC_ICACHE, &arg);
169176
#else
170177
#if __APPLE__
171178
// On Darwin, sys_icache_invalidate() provides this functionality

0 commit comments

Comments
 (0)