Added mmap start and end so detailed CPU can know if an access is
authorAli Saidi <saidi@eecs.umich.edu>
Wed, 23 Feb 2005 16:45:25 +0000 (11:45 -0500)
committerAli Saidi <saidi@eecs.umich.edu>
Wed, 23 Feb 2005 16:45:25 +0000 (11:45 -0500)
in a mmaped region

--HG--
extra : convert_revision : e4ee0520c84d94a0d2e804d02035228766abe71f

sim/process.cc
sim/process.hh
sim/syscall_emul.hh

index c725d3b1c3cc0b44dd7c489001353fcce9912c08..f09452c42885e8b2f2696dede837dd9ecad25464 100644 (file)
@@ -282,7 +282,7 @@ LiveProcess::LiveProcess(const string &name, ObjectFile *objFile,
 
     // Set up region for mmaps.  Tru64 seems to start just above 0 and
     // grow up from there.
-    mmap_base = 0x10000;
+    mmap_start = mmap_end = 0x10000;
 
     // Set pointer for next thread stack.  Reserve 8M for main stack.
     next_thread_stack_base = stack_base - (8 * 1024 * 1024);
index bb48298759a89bcf2342f6bc49fb3c91fb2dc583..6c7bc422244bfaf6affe1dc7dea125fdafecbb8e 100644 (file)
@@ -93,7 +93,8 @@ class Process : public SimObject
     Addr next_thread_stack_base;
 
     // Base of region for mmaps (when user doesn't specify an address).
-    Addr mmap_base;
+    Addr mmap_start;
+    Addr mmap_end;
 
     std::string prog_fname;    // file name
     Addr prog_entry;           // entry point (initial PC)
@@ -156,7 +157,8 @@ class Process : public SimObject
     {
         return ((data_base <= addr && addr < brk_point) ||
                 ((stack_base - 16*1024*1024) <= addr && addr < stack_base) ||
-                (text_base <= addr && addr < (text_base + text_size)));
+                (text_base <= addr && addr < (text_base + text_size)) ||
+                (mmap_start <= addr && addr < mmap_end));
     }
 
     virtual void syscall(ExecContext *xc) = 0;
index 768bc3700cbddbf596d882d38c265b3cb5200f0a..831708a21b648ead6b657724f74cb61f8089c727 100644 (file)
@@ -410,8 +410,8 @@ mmapFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc)
 
     if (start == 0) {
         // user didn't give an address... pick one from our "mmap region"
-        start = p->mmap_base;
-        p->mmap_base += RoundUp<Addr>(length, VMPageSize);
+        start = p->mmap_end;
+        p->mmap_end += RoundUp<Addr>(length, VMPageSize);
     }
 
     if (!(flags & OS::TGT_MAP_ANONYMOUS)) {