summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShih-wei Liao <sliao@google.com>2011-07-05 09:38:10 -0700
committerShih-wei Liao <sliao@google.com>2011-07-05 09:38:10 -0700
commit41c74e13ed51f64d46b859ddce0edc3abb1fd635 (patch)
treee193b7f3cdc0c2196f61c7b3c0c501ca42884e49
parent0702eea209b208513ca9082a76abb929b287ecea (diff)
downloadlinkloader-41c74e13ed51f64d46b859ddce0edc3abb1fd635.tar.gz
Use arbitrary address instead of 0x7e000000.
Change-Id: I05d8a1be0dce1b006bf02893f171fae04d236ec8
-rw-r--r--lib/MemChunk.cpp14
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;