Make expressions clean up their JIT'ed code allocation.



git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@123855 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Expression/ClangFunction.cpp b/source/Expression/ClangFunction.cpp
index e7b6f77..31b74c6 100644
--- a/source/Expression/ClangFunction.cpp
+++ b/source/Expression/ClangFunction.cpp
@@ -61,7 +61,6 @@
     m_clang_ast_context (ast_context),
     m_wrapper_function_name ("__lldb_caller_function"),
     m_wrapper_struct_name ("__lldb_caller_struct"),
-    m_wrapper_function_addr (),
     m_wrapper_args_addrs (),
     m_arg_values (arg_value_list),
     m_compiled (false),
@@ -83,7 +82,6 @@
     m_clang_ast_context (ast_context),
     m_wrapper_function_name ("__lldb_function_caller"),
     m_wrapper_struct_name ("__lldb_caller_struct"),
-    m_wrapper_function_addr (),
     m_wrapper_args_addrs (),
     m_arg_values (arg_value_list),
     m_compiled (false),
@@ -240,12 +238,12 @@
     if (m_JITted)
         return true;
     
-    lldb::addr_t wrapper_function_end;
-    
-    Error jit_error = m_parser->MakeJIT(m_wrapper_function_addr, wrapper_function_end, exe_ctx);
+    Error jit_error (m_parser->MakeJIT (m_jit_alloc, m_jit_start_addr, m_jit_end_addr, exe_ctx));
     
     if (!jit_error.Success())
         return false;
+    if (exe_ctx.process && m_jit_alloc != LLDB_INVALID_ADDRESS)
+        m_jit_process_sp = exe_ctx.process->GetSP();
 
     return true;
 }
@@ -360,7 +358,7 @@
 
     lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP));
     if (log)
-        log->Printf ("Call Address: 0x%llx Struct Address: 0x%llx.\n", m_wrapper_function_addr, args_addr_ref);
+        log->Printf ("Call Address: 0x%llx Struct Address: 0x%llx.\n", m_jit_start_addr, args_addr_ref);
         
     return true;
 }
@@ -524,8 +522,14 @@
             return lldb::eExecutionSetupError;
     }
     
-    return_value = ClangFunction::ExecuteFunction(exe_ctx, m_wrapper_function_addr, args_addr, stop_others, 
-                                                  try_all_threads, discard_on_error, single_thread_timeout_usec, errors);
+    return_value = ClangFunction::ExecuteFunction (exe_ctx, 
+                                                   m_jit_start_addr, 
+                                                   args_addr, 
+                                                   stop_others, 
+                                                   try_all_threads, 
+                                                   discard_on_error, 
+                                                   single_thread_timeout_usec, 
+                                                   errors);
 
     if (args_addr_ptr != NULL)
         *args_addr_ptr = args_addr;