summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/IRMemoryMap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Expression/IRMemoryMap.cpp')
-rw-r--r--lldb/source/Expression/IRMemoryMap.cpp38
1 files changed, 8 insertions, 30 deletions
diff --git a/lldb/source/Expression/IRMemoryMap.cpp b/lldb/source/Expression/IRMemoryMap.cpp
index 9239e087b6e..a4fe7a96837 100644
--- a/lldb/source/Expression/IRMemoryMap.cpp
+++ b/lldb/source/Expression/IRMemoryMap.cpp
@@ -53,6 +53,8 @@ IRMemoryMap::FindSpace (size_t size)
lldb::ProcessSP process_sp = m_process_wp.lock();
lldb::addr_t ret = LLDB_INVALID_ADDRESS;
+ if (size == 0)
+ return ret;
if (process_sp && process_sp->CanJIT() && process_sp->IsAlive())
{
@@ -66,37 +68,13 @@ IRMemoryMap::FindSpace (size_t size)
return ret;
}
- for (int iterations = 0; iterations < 16; ++iterations)
+ ret = 0;
+ if (!m_allocations.empty())
{
- lldb::addr_t candidate = LLDB_INVALID_ADDRESS;
-
- switch (target_sp->GetArchitecture().GetAddressByteSize())
- {
- case 4:
- {
- uint32_t random_data = rand();
- candidate = random_data;
- candidate &= ~0xfffull;
- break;
- }
- case 8:
- {
- uint32_t random_low = rand();
- uint32_t random_high = rand();
- candidate = random_high;
- candidate <<= 32ull;
- candidate |= random_low;
- candidate &= ~0xfffull;
- break;
- }
- }
-
- if (IntersectsAllocation(candidate, size))
- continue;
-
- ret = candidate;
-
- return ret;
+ auto back = m_allocations.rbegin();
+ lldb::addr_t addr = back->first;
+ size_t alloc_size = back->second.m_size;
+ ret = llvm::RoundUpToAlignment(addr+alloc_size, 4096);
}
return ret;
OpenPOWER on IntegriCloud