diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2009-10-02 01:32:00 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2009-10-02 01:32:00 -0700 |
commit | 86f3bec76d1bd14ed11188877dd3039d0bcfd489 (patch) | |
tree | 34f202e1c8637febb456ed2fe8a0899849f0b050 | |
parent | f09f84da6ef01870991345539edae46b401cf311 (diff) | |
download | gem5-86f3bec76d1bd14ed11188877dd3039d0bcfd489.tar.xz |
SE mode: Make the direction anonymous mmaps move through memory configurable.
-rw-r--r-- | src/kern/operatingsystem.hh | 4 | ||||
-rw-r--r-- | src/sim/syscall_emul.hh | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/kern/operatingsystem.hh b/src/kern/operatingsystem.hh index 47e64ffd9..6574e3c6b 100644 --- a/src/kern/operatingsystem.hh +++ b/src/kern/operatingsystem.hh @@ -122,6 +122,10 @@ class OperatingSystem { static int openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc); + static const bool mmapGrowsUp = true; + + static bool mmapGrowsDown() { return false; } + }; // class OperatingSystem diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh index c9ce4b14f..e45a6c797 100644 --- a/src/sim/syscall_emul.hh +++ b/src/sim/syscall_emul.hh @@ -978,9 +978,14 @@ mmapFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc) } // pick next address from our "mmap region" - start = p->mmap_end; + if (OS::mmapGrowsDown()) { + start = p->mmap_end - length; + p->mmap_end = start; + } else { + start = p->mmap_end; + p->mmap_end += length; + } p->pTable->allocate(start, length); - p->mmap_end += length; if (!(flags & OS::TGT_MAP_ANONYMOUS)) { warn("allowing mmap of file @ fd %d. " |