Add "zero_memory" option to IRMemoryMap::FindSpace & IRMemoryMap::Malloc.  Zero out
the Expression ResultVariable so it's in a known initial state.

llvm-svn: 252072
diff --git a/lldb/source/Expression/IRMemoryMap.cpp b/lldb/source/Expression/IRMemoryMap.cpp
index 4733b16..e96bddd 100644
--- a/lldb/source/Expression/IRMemoryMap.cpp
+++ b/lldb/source/Expression/IRMemoryMap.cpp
@@ -47,7 +47,7 @@
 }
 
 lldb::addr_t
-IRMemoryMap::FindSpace (size_t size)
+IRMemoryMap::FindSpace (size_t size, bool zero_memory)
 {
     lldb::TargetSP target_sp = m_target_wp.lock();
     lldb::ProcessSP process_sp = m_process_wp.lock();
@@ -60,7 +60,10 @@
     {
         Error alloc_error;
 
-        ret = process_sp->AllocateMemory(size, lldb::ePermissionsReadable | lldb::ePermissionsWritable, alloc_error);
+        if (!zero_memory)
+            ret = process_sp->AllocateMemory(size, lldb::ePermissionsReadable | lldb::ePermissionsWritable, alloc_error);
+        else
+            ret = process_sp->CallocateMemory(size, lldb::ePermissionsReadable | lldb::ePermissionsWritable, alloc_error);
 
         if (!alloc_error.Success())
             return LLDB_INVALID_ADDRESS;
@@ -225,7 +228,7 @@
 }
 
 lldb::addr_t
-IRMemoryMap::Malloc (size_t size, uint8_t alignment, uint32_t permissions, AllocationPolicy policy, Error &error)
+IRMemoryMap::Malloc (size_t size, uint8_t alignment, uint32_t permissions, AllocationPolicy policy, bool zero_memory, Error &error)
 {
     lldb_private::Log *log (lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
     error.Clear();
@@ -263,7 +266,11 @@
             log->Printf ("IRMemoryMap::%s process_sp=0x%" PRIx64 ", process_sp->CanJIT()=%s, process_sp->IsAlive()=%s", __FUNCTION__, (lldb::addr_t) process_sp.get (), process_sp && process_sp->CanJIT () ? "true" : "false", process_sp && process_sp->IsAlive () ? "true" : "false");
         if (process_sp && process_sp->CanJIT() && process_sp->IsAlive())
         {
-            allocation_address = process_sp->AllocateMemory(allocation_size, permissions, error);
+            if (!zero_memory)
+              allocation_address = process_sp->AllocateMemory(allocation_size, permissions, error);
+            else
+              allocation_address = process_sp->CallocateMemory(allocation_size, permissions, error);
+
             if (!error.Success())
                 return LLDB_INVALID_ADDRESS;
         }
@@ -287,7 +294,11 @@
         {
             if (process_sp->CanJIT() && process_sp->IsAlive())
             {
-                allocation_address = process_sp->AllocateMemory(allocation_size, permissions, error);
+                if (!zero_memory)
+                  allocation_address = process_sp->AllocateMemory(allocation_size, permissions, error);
+                else
+                  allocation_address = process_sp->CallocateMemory(allocation_size, permissions, error);
+
                 if (!error.Success())
                     return LLDB_INVALID_ADDRESS;
             }