Index: include/lldb/Expression/ClangUserExpression.h
===================================================================
--- include/lldb/Expression/ClangUserExpression.h
+++ include/lldb/Expression/ClangUserExpression.h
@@ -30,8 +30,6 @@
 #include "lldb/Symbol/TaggedASTType.h"
 #include "lldb/Target/ExecutionContext.h"
 
-#include "llvm/ExecutionEngine/JITMemoryManager.h"
-
 namespace lldb_private 
 {
 
Index: include/lldb/Expression/IRExecutionUnit.h
===================================================================
--- include/lldb/Expression/IRExecutionUnit.h
+++ include/lldb/Expression/IRExecutionUnit.h
@@ -25,7 +25,7 @@
 #include "lldb/lldb-private.h"
 #include "lldb/Core/ClangForward.h"
 #include "lldb/Core/DataBufferHeap.h"
-#include "llvm/ExecutionEngine/JITMemoryManager.h"
+#include "llvm/ExecutionEngine/SectionMemoryManager.h"
 #include "lldb/Expression/ClangExpression.h"
 #include "lldb/Expression/ClangExpressionParser.h"
 #include "lldb/Expression/IRMemoryMap.h"
@@ -56,7 +56,7 @@
 /// then be used as input to the IR interpreter, or the address of the
 /// executable code can be passed to a thread plan to run in the target.
 /// 
-/// This class creates a subclass of LLVM's JITMemoryManager, because that is
+/// This class creates a subclass of LLVM's SectionMemoryManager, because that is
 /// how the JIT emits code.  Because LLDB needs to move JIT-compiled code
 /// into the target process, the IRExecutionUnit knows how to copy the
 /// emitted code into the target process.
@@ -207,101 +207,12 @@
     DisassembleFunction (Stream &stream,
                          lldb::ProcessSP &process_sp);
 
-    class MemoryManager : public llvm::JITMemoryManager
+    class MemoryManager : public llvm::SectionMemoryManager
     {
     public:
         MemoryManager (IRExecutionUnit &parent);
         
         virtual ~MemoryManager();
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual void setMemoryWritable ();
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual void setMemoryExecutable ();
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual void setPoisonMemory (bool poison)
-        {
-            m_default_mm_ap->setPoisonMemory (poison);
-        }
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual void AllocateGOT()
-        {
-            m_default_mm_ap->AllocateGOT();
-        }
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual uint8_t *getGOTBase() const
-        {
-            return m_default_mm_ap->getGOTBase();
-        }
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual uint8_t *startFunctionBody(const llvm::Function *F,
-                                           uintptr_t &ActualSize);
-        
-        //------------------------------------------------------------------
-        /// Allocate room for a dyld stub for a lazy-referenced function,
-        /// and add it to the m_stubs map
-        ///
-        /// @param[in] F
-        ///     The function being referenced.
-        ///
-        /// @param[in] StubSize
-        ///     The size of the stub.
-        ///
-        /// @param[in] Alignment
-        ///     The required alignment of the stub.
-        ///
-        /// @return
-        ///     Allocated space for the stub.
-        //------------------------------------------------------------------
-        virtual uint8_t *allocateStub(const llvm::GlobalValue* F,
-                                      unsigned StubSize,
-                                      unsigned Alignment);
-        
-        //------------------------------------------------------------------
-        /// Complete the body of a function, and add it to the m_functions map
-        ///
-        /// @param[in] F
-        ///     The function being completed.
-        ///
-        /// @param[in] FunctionStart
-        ///     The first instruction of the function.
-        ///
-        /// @param[in] FunctionEnd
-        ///     The last byte of the last instruction of the function.
-        //------------------------------------------------------------------
-        virtual void endFunctionBody(const llvm::Function *F,
-                                     uint8_t *FunctionStart,
-                                     uint8_t *FunctionEnd);
-        //------------------------------------------------------------------
-        /// Allocate space for an unspecified purpose, and add it to the
-        /// m_spaceBlocks map
-        ///
-        /// @param[in] Size
-        ///     The size of the area.
-        ///
-        /// @param[in] Alignment
-        ///     The required alignment of the area.
-        ///
-        /// @return
-        ///     Allocated space.
-        //------------------------------------------------------------------
-        virtual uint8_t *allocateSpace(intptr_t Size, unsigned Alignment);
         
         //------------------------------------------------------------------
         /// Allocate space for executable code, and add it to the
@@ -347,22 +258,6 @@
                                              bool IsReadOnly);
         
         //------------------------------------------------------------------
-        /// Allocate space for a global variable, and add it to the
-        /// m_spaceBlocks map
-        ///
-        /// @param[in] Size
-        ///     The size of the variable.
-        ///
-        /// @param[in] Alignment
-        ///     The required alignment of the variable.
-        ///
-        /// @return
-        ///     Allocated space for the global.
-        //------------------------------------------------------------------
-        virtual uint8_t *allocateGlobal(uintptr_t Size,
-                                        unsigned Alignment);
-        
-        //------------------------------------------------------------------
         /// Called when object loading is complete and section page
         /// permissions can be applied. Currently unimplemented for LLDB.
         ///
@@ -380,50 +275,6 @@
             return false;
         }
         
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual void deallocateFunctionBody(void *Body);
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual size_t GetDefaultCodeSlabSize() {
-            return m_default_mm_ap->GetDefaultCodeSlabSize();
-        }
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual size_t GetDefaultDataSlabSize() {
-            return m_default_mm_ap->GetDefaultDataSlabSize();
-        }
-        
-        virtual size_t GetDefaultStubSlabSize() {
-            return m_default_mm_ap->GetDefaultStubSlabSize();
-        }
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual unsigned GetNumCodeSlabs() {
-            return m_default_mm_ap->GetNumCodeSlabs();
-        }
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual unsigned GetNumDataSlabs() {
-            return m_default_mm_ap->GetNumDataSlabs();
-        }
-        
-        //------------------------------------------------------------------
-        /// Passthrough interface stub
-        //------------------------------------------------------------------
-        virtual unsigned GetNumStubSlabs() {
-            return m_default_mm_ap->GetNumStubSlabs();
-        }
-        
         virtual void registerEHFrames(uint8_t *Addr, uint64_t LoadAddr, size_t Size) {
             return m_default_mm_ap->registerEHFrames(Addr, LoadAddr, Size);
         }
@@ -436,7 +287,7 @@
             return m_default_mm_ap->getPointerToNamedFunction(Name, AbortOnFailure);
         }
     private:
-        std::unique_ptr<JITMemoryManager>    m_default_mm_ap;    ///< The memory allocator to use in actually creating space.  All calls are passed through to it.
+        std::unique_ptr<SectionMemoryManager>    m_default_mm_ap;    ///< The memory allocator to use in actually creating space.  All calls are passed through to it.
         IRExecutionUnit                    &m_parent;           ///< The execution unit this is a proxy for.
     };
     
Index: source/Expression/IRExecutionUnit.cpp
===================================================================
--- source/Expression/IRExecutionUnit.cpp
+++ source/Expression/IRExecutionUnit.cpp
@@ -300,7 +300,7 @@
     builder.setEngineKind(llvm::EngineKind::JIT)
     .setErrorStr(&error_string)
     .setRelocationModel(relocModel)
-    .setJITMemoryManager(new MemoryManager(*this))
+    .setMCJITMemoryManager(new MemoryManager(*this))
     .setCodeModel(codeModel)
     .setOptLevel(llvm::CodeGenOpt::Less);
 
@@ -423,7 +423,7 @@
 }
 
 IRExecutionUnit::MemoryManager::MemoryManager (IRExecutionUnit &parent) :
-    m_default_mm_ap (llvm::JITMemoryManager::CreateDefaultMemManager()),
+    m_default_mm_ap (new llvm::SectionMemoryManager()),
     m_parent (parent)
 {
 }
@@ -431,60 +431,6 @@
 IRExecutionUnit::MemoryManager::~MemoryManager ()
 {
 }
-void
-IRExecutionUnit::MemoryManager::setMemoryWritable ()
-{
-    m_default_mm_ap->setMemoryWritable();
-}
-
-void
-IRExecutionUnit::MemoryManager::setMemoryExecutable ()
-{
-    m_default_mm_ap->setMemoryExecutable();
-}
-
-
-uint8_t *
-IRExecutionUnit::MemoryManager::startFunctionBody(const llvm::Function *F,
-                                                  uintptr_t &ActualSize)
-{
-    return m_default_mm_ap->startFunctionBody(F, ActualSize);
-}
-
-uint8_t *
-IRExecutionUnit::MemoryManager::allocateStub(const llvm::GlobalValue* F,
-                                             unsigned StubSize,
-                                             unsigned Alignment)
-{
-    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
-
-    uint8_t *return_value = m_default_mm_ap->allocateStub(F, StubSize, Alignment);
-
-    m_parent.m_records.push_back(AllocationRecord((uintptr_t)return_value,
-                                                  lldb::ePermissionsReadable | lldb::ePermissionsWritable,
-                                                  GetSectionTypeFromSectionName (llvm::StringRef(), AllocationKind::Stub),
-                                                  StubSize,
-                                                  Alignment,
-                                                  eSectionIDInvalid,
-                                                  NULL));
-
-    if (log)
-    {
-        log->Printf("IRExecutionUnit::allocateStub (F=%p, StubSize=%u, Alignment=%u) = %p",
-                    static_cast<const void*>(F), StubSize, Alignment,
-                    static_cast<void*>(return_value));
-    }
-
-    return return_value;
-}
-
-void
-IRExecutionUnit::MemoryManager::endFunctionBody(const llvm::Function *F,
-                                                uint8_t *FunctionStart,
-                                                uint8_t *FunctionEnd)
-{
-    m_default_mm_ap->endFunctionBody(F, FunctionStart, FunctionEnd);
-}
 
 lldb::SectionType
 IRExecutionUnit::GetSectionTypeFromSectionName (const llvm::StringRef &name, IRExecutionUnit::AllocationKind alloc_kind)
@@ -596,30 +542,6 @@
 }
 
 uint8_t *
-IRExecutionUnit::MemoryManager::allocateSpace(intptr_t Size, unsigned Alignment)
-{
-    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
-
-    uint8_t *return_value = m_default_mm_ap->allocateSpace(Size, Alignment);
-
-    m_parent.m_records.push_back(AllocationRecord((uintptr_t)return_value,
-                                                  lldb::ePermissionsReadable | lldb::ePermissionsWritable,
-                                                  GetSectionTypeFromSectionName (llvm::StringRef(), AllocationKind::Bytes),
-                                                  Size,
-                                                  Alignment,
-                                                  eSectionIDInvalid,
-                                                  NULL));
-
-    if (log)
-    {
-        log->Printf("IRExecutionUnit::allocateSpace(Size=%" PRIu64 ", Alignment=%u) = %p",
-                               (uint64_t)Size, Alignment, return_value);
-    }
-
-    return return_value;
-}
-
-uint8_t *
 IRExecutionUnit::MemoryManager::allocateCodeSection(uintptr_t Size,
                                                     unsigned Alignment,
                                                     unsigned SectionID,
@@ -673,37 +595,6 @@
     return return_value;
 }
 
-uint8_t *
-IRExecutionUnit::MemoryManager::allocateGlobal(uintptr_t Size,
-                                               unsigned Alignment)
-{
-    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
-
-    uint8_t *return_value = m_default_mm_ap->allocateGlobal(Size, Alignment);
-
-    m_parent.m_records.push_back(AllocationRecord((uintptr_t)return_value,
-                                                  lldb::ePermissionsReadable | lldb::ePermissionsWritable,
-                                                  GetSectionTypeFromSectionName (llvm::StringRef(), AllocationKind::Global),
-                                                  Size,
-                                                  Alignment,
-                                                  eSectionIDInvalid,
-                                                  NULL));
-
-    if (log)
-    {
-        log->Printf("IRExecutionUnit::allocateGlobal(Size=0x%" PRIx64 ", Alignment=%u) = %p",
-                    (uint64_t)Size, Alignment, return_value);
-    }
-
-    return return_value;
-}
-
-void
-IRExecutionUnit::MemoryManager::deallocateFunctionBody(void *Body)
-{
-    m_default_mm_ap->deallocateFunctionBody(Body);
-}
-
 lldb::addr_t
 IRExecutionUnit::GetRemoteAddressForLocal (lldb::addr_t local_address)
 {