From 820b147493d6d534f9482f1e7d4ff5af99d095b4 Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Sun, 19 May 2013 15:28:16 +0000 Subject: Invalidate instruction cache when setting memory to be executable. lli's remote MCJIT code calls setExecutable just prior to running code. In line with Darwin behaviour this seems to be the place to invalidate any caches needed so that relocations can take effect properly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182213 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/Unix/Memory.inc | 3 +++ 1 file changed, 3 insertions(+) (limited to 'lib/Support/Unix/Memory.inc') diff --git a/lib/Support/Unix/Memory.inc b/lib/Support/Unix/Memory.inc index cdd475c17f..1c6af7fa0f 100644 --- a/lib/Support/Unix/Memory.inc +++ b/lib/Support/Unix/Memory.inc @@ -268,6 +268,9 @@ bool Memory::setExecutable (MemoryBlock &M, std::string *ErrMsg) { kern_return_t kr = vm_protect(mach_task_self(), (vm_address_t)M.Address, (vm_size_t)M.Size, 0, VM_PROT_READ | VM_PROT_EXECUTE | VM_PROT_COPY); return KERN_SUCCESS == kr; +#elif defined(__arm__) || defined(__aarch64__) + Memory::InvalidateInstructionCache(M.Address, M.Size); + return true; #else return true; #endif -- cgit v1.2.3