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.

llvm-svn: 182213
This commit is contained in:
Tim Northover 2013-05-19 15:28:16 +00:00
parent d5833c69b3
commit c462ec57b7
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