From fc9b29bd617922a9c6fc3b602e075b353f5c2395 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Wed, 6 Jun 2018 06:26:18 +0000 Subject: [PATCH] [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 --- llvm/lib/Support/Unix/Memory.inc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Support/Unix/Memory.inc b/llvm/lib/Support/Unix/Memory.inc index cc5a43cd282b..adbfff2f59a5 100644 --- a/llvm/lib/Support/Unix/Memory.inc +++ b/llvm/lib/Support/Unix/Memory.inc @@ -25,6 +25,10 @@ #include #endif +#ifdef __Fuchsia__ +#include +#endif + #if defined(__mips__) # if defined(__OpenBSD__) # include @@ -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(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__) || \