[Support] Use zx_cache_flush on Fuchsia to flush instruction cache

Fuchsia doesn't use __clear_cache, instead it provide zx_cache_flush
system call. Use it to flush instruction cache.

Differential Revision: https://reviews.llvm.org/D47753

llvm-svn: 334068
This commit is contained in:
Petr Hosek 2018-06-06 06:26:18 +00:00
parent a7d25d5934
commit fc9b29bd61
1 changed files with 10 additions and 1 deletions

View File

@ -25,6 +25,10 @@
#include <mach/mach.h>
#endif
#ifdef __Fuchsia__
#include <zircon/syscalls.h>
#endif
#if defined(__mips__)
# if defined(__OpenBSD__)
# include <mips64/sysarch.h>
@ -33,7 +37,7 @@
# endif
#endif
#ifdef __APPLE__
#if defined(__APPLE__)
extern "C" void sys_icache_invalidate(const void *Addr, size_t len);
#else
extern "C" void __clear_cache(void *, void*);
@ -206,6 +210,11 @@ void Memory::InvalidateInstructionCache(const void *Addr,
sys_icache_invalidate(const_cast<void *>(Addr), Len);
# endif
#elif defined(__Fuchsia__)
zx_status_t Status = zx_cache_flush(Addr, Len, ZX_CACHE_FLUSH_INSN);
assert(Status == ZX_OK && "cannot invalidate instruction cache");
#else
# if (defined(__POWERPC__) || defined (__ppc__) || \