[compiler-rt] Implement __clear_cache() on OpenBSD/riscv64
This commit is contained in:
parent
5a6c38fbef
commit
3db9590605
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue