summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/IRMemoryMap.cpp
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2015-11-04 20:32:27 +0000
committerJim Ingham <jingham@apple.com>2015-11-04 20:32:27 +0000
commit2c38141423f6ed6ec4db641be76f61631366cbb1 (patch)
treeadde94fb56aa019d45639c2b75d83bbd5604ee67 /lldb/source/Expression/IRMemoryMap.cpp
parent1e41784f202df14a7171c5b7d98950d254720dda (diff)
downloadbcm5719-llvm-2c38141423f6ed6ec4db641be76f61631366cbb1.tar.gz
bcm5719-llvm-2c38141423f6ed6ec4db641be76f61631366cbb1.zip
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
Diffstat (limited to 'lldb/source/Expression/IRMemoryMap.cpp')
-rw-r--r--lldb/source/Expression/IRMemoryMap.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/lldb/source/Expression/IRMemoryMap.cpp b/lldb/source/Expression/IRMemoryMap.cpp
index 4733b16d5f1..e96bddde7cb 100644
--- a/lldb/source/Expression/IRMemoryMap.cpp
+++ b/lldb/source/Expression/IRMemoryMap.cpp
@@ -47,7 +47,7 @@ IRMemoryMap::~IRMemoryMap ()
}
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 @@ IRMemoryMap::FindSpace (size_t size)
{
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 @@ IRMemoryMap::Allocation::Allocation (lldb::addr_t process_alloc,
}
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 @@ IRMemoryMap::Malloc (size_t size, uint8_t alignment, uint32_t permissions, Alloc
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 @@ IRMemoryMap::Malloc (size_t size, uint8_t alignment, uint32_t permissions, Alloc
{
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;
}
OpenPOWER on IntegriCloud