diff options
author | Shih-wei Liao <sliao@google.com> | 2011-07-05 09:38:10 -0700 |
---|---|---|
committer | Shih-wei Liao <sliao@google.com> | 2011-07-05 09:38:10 -0700 |
commit | 41c74e13ed51f64d46b859ddce0edc3abb1fd635 (patch) | |
tree | e193b7f3cdc0c2196f61c7b3c0c501ca42884e49 | |
parent | 0702eea209b208513ca9082a76abb929b287ecea (diff) | |
download | linkloader-41c74e13ed51f64d46b859ddce0edc3abb1fd635.tar.gz |
Use arbitrary address instead of 0x7e000000.
Change-Id: I05d8a1be0dce1b006bf02893f171fae04d236ec8
-rw-r--r-- | lib/MemChunk.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/MemChunk.cpp b/lib/MemChunk.cpp index 605d800..5c9a873 100644 --- a/lib/MemChunk.cpp +++ b/lib/MemChunk.cpp @@ -31,7 +31,9 @@ // define it as zero, so that it won't manipulate the flags. #endif +#if USE_FIXED_ADDR_MEM_CHUNK static uintptr_t StartAddr = 0x7e000000UL; +#endif MemChunk::MemChunk() : buf((unsigned char *)MAP_FAILED), buf_size(0) { } @@ -43,15 +45,25 @@ MemChunk::~MemChunk() { } bool MemChunk::allocate(size_t size) { - buf = (unsigned char *)mmap((void *)StartAddr, size, PROT_READ | PROT_WRITE, +#if USE_FIXED_ADDR_MEM_CHUNK + buf = (unsigned char *)mmap((void *)StartAddr, size, + PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON | MAP_32BIT, + -1, 0); +#else + buf = (unsigned char *)mmap(0, size, + PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_32BIT, -1, 0); +#endif if (buf == MAP_FAILED) { return false; } +#if USE_FIXED_ADDR_MEM_CHUNK StartAddr += (size + 4095) / 4096 * 4096; +#endif buf_size = size; return true; |