diff options
author | Jim Ingham <jingham@apple.com> | 2015-11-04 20:32:27 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2015-11-04 20:32:27 +0000 |
commit | 2c38141423f6ed6ec4db641be76f61631366cbb1 (patch) | |
tree | adde94fb56aa019d45639c2b75d83bbd5604ee67 /lldb/source/Expression/IRMemoryMap.cpp | |
parent | 1e41784f202df14a7171c5b7d98950d254720dda (diff) | |
download | bcm5719-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.cpp | 21 |
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; } |