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
This commit is contained in:
Tim Northover 2013-05-19 15:28:16 +00:00
parent ff9a6b44e0
commit 820b147493
6 changed files with 7 additions and 15 deletions

View File

@ -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

View File

@ -1,11 +0,0 @@
config.suffixes = ['.ll', '.c', '.cpp']
def getRoot(config):
if not config.parent:
return config
return getRoot(config.parent)
root = getRoot(config)
if 'arm' in root.target_triple:
config.unsupported = True

View File

@ -1,5 +1,5 @@
; RUN: %lli_mcjit -remote-mcjit -O0 -disable-lazy-compilation=false %s
; XFAIL: arm, mips
; XFAIL: mips
; The intention of this test is to verify that symbols mapped to COMMON in ELF
; work as expected.

View File

@ -1,5 +1,5 @@
; RUN: %lli_mcjit -remote-mcjit -O0 %s
; XFAIL: armv7, mips
; XFAIL: mips
; Check that a variable is always aligned as specified.

View File

@ -1,5 +1,5 @@
; RUN: %lli_mcjit -remote-mcjit %s > /dev/null
; XFAIL: arm, mips
; XFAIL: mips
@count = global i32 1, align 4

View File

@ -1,5 +1,5 @@
; RUN: %lli_mcjit -remote-mcjit -O0 %s
; XFAIL: arm, mips
; XFAIL: mips
@.str = private unnamed_addr constant [6 x i8] c"data1\00", align 1
@ptr = global i8* getelementptr inbounds ([6 x i8]* @.str, i32 0, i32 0), align 4