diff options
author | Amara Emerson <amara.emerson@arm.com> | 2012-10-31 17:41:51 +0000 |
---|---|---|
committer | Amara Emerson <amara.emerson@arm.com> | 2012-10-31 17:41:51 +0000 |
commit | eb7fb84a3e884d591a76accd9b5fac61f51b98de (patch) | |
tree | f11c9e3b3d53e078a0f3cdacfe05ac9b7af930dd /llvm/unittests | |
parent | f270b82181229be844430cdfbca1d95782772b3d (diff) | |
download | bcm5719-llvm-eb7fb84a3e884d591a76accd9b5fac61f51b98de.tar.gz bcm5719-llvm-eb7fb84a3e884d591a76accd9b5fac61f51b98de.zip |
Port lli bug fix from r166920 to MCJIT unit test.
llvm-svn: 167145
Diffstat (limited to 'llvm/unittests')
-rw-r--r-- | llvm/unittests/ExecutionEngine/MCJIT/SectionMemoryManager.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/llvm/unittests/ExecutionEngine/MCJIT/SectionMemoryManager.cpp b/llvm/unittests/ExecutionEngine/MCJIT/SectionMemoryManager.cpp index 7f3cf2455ec..d6baf3c9bb8 100644 --- a/llvm/unittests/ExecutionEngine/MCJIT/SectionMemoryManager.cpp +++ b/llvm/unittests/ExecutionEngine/MCJIT/SectionMemoryManager.cpp @@ -14,6 +14,7 @@ #include "llvm/Config/config.h" #include "llvm/Support/DynamicLibrary.h" +#include "llvm/Support/MathExtras.h" #include "SectionMemoryManager.h" @@ -34,9 +35,16 @@ uint8_t *SectionMemoryManager::allocateDataSection(uintptr_t Size, unsigned SectionID) { if (!Alignment) Alignment = 16; - uint8_t *Addr = (uint8_t*)calloc((Size + Alignment - 1)/Alignment, Alignment); - AllocatedDataMem.push_back(sys::MemoryBlock(Addr, Size)); - return Addr; + // Ensure that enough memory is requested to allow aligning. + size_t NumElementsAligned = 1 + (Size + Alignment - 1)/Alignment; + uint8_t *Addr = (uint8_t*)calloc(NumElementsAligned, Alignment); + + // Honour the alignment requirement. + uint8_t *AlignedAddr = (uint8_t*)RoundUpToAlignment((uint64_t)Addr, Alignment); + + // Store the original address from calloc so we can free it later. + AllocatedDataMem.push_back(sys::MemoryBlock(Addr, NumElementsAligned*Alignment)); + return AlignedAddr; } uint8_t *SectionMemoryManager::allocateCodeSection(uintptr_t Size, |