Preliminary support for systems which require changing JIT memory regions privilege from read / write to read / executable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56303 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/JIT/JITEmitter.cpp b/lib/ExecutionEngine/JIT/JITEmitter.cpp
index 02752a0..4803fdf 100644
--- a/lib/ExecutionEngine/JIT/JITEmitter.cpp
+++ b/lib/ExecutionEngine/JIT/JITEmitter.cpp
@@ -925,6 +925,9 @@
        << Relocations.size() << " relocations\n";
   Relocations.clear();
 
+  // Mark code region readable and executable if it's not so already.
+  sys::Memory::SetRXPrivilege(FnStart, FnEnd-FnStart);
+
 #ifndef NDEBUG
   {
   DOUT << std::hex;
diff --git a/lib/ExecutionEngine/JIT/JITMemoryManager.cpp b/lib/ExecutionEngine/JIT/JITMemoryManager.cpp
index d2d5c2f..804e88d 100644
--- a/lib/ExecutionEngine/JIT/JITMemoryManager.cpp
+++ b/lib/ExecutionEngine/JIT/JITMemoryManager.cpp
@@ -370,7 +370,11 @@
 
 DefaultJITMemoryManager::DefaultJITMemoryManager() {
   // Allocate a 16M block of memory for functions.
+#if defined(__APPLE__) && defined(__arm__)
+  sys::MemoryBlock MemBlock = getNewMemoryBlock(4 << 20);
+#else
   sys::MemoryBlock MemBlock = getNewMemoryBlock(16 << 20);
+#endif
 
   unsigned char *MemBase = static_cast<unsigned char*>(MemBlock.base());