Merge zizzer:/bk/m5 into zed.eecs.umich.edu:/z/hsul/work/m5/pact05
authorLisa Hsu <hsul@eecs.umich.edu>
Thu, 17 Mar 2005 19:34:03 +0000 (14:34 -0500)
committerLisa Hsu <hsul@eecs.umich.edu>
Thu, 17 Mar 2005 19:34:03 +0000 (14:34 -0500)
--HG--
extra : convert_revision : a0a10fccc03edcc5164536ea853788b982e332d7

arch/alpha/alpha_tru64_process.cc
configs/splash2/run.mpy
python/m5/config.py
sim/process.cc
sim/process.hh
sim/syscall_emul.hh

index 1722b658e8a65ec1d7b9b0831db284b98a4fc78f..a211e0ae84e61c3753389048b40a21c7b0f5f056 100644 (file)
@@ -877,6 +877,10 @@ class Tru64 {
         *configptr_ptr = config_addr;
         configptr_ptr.copyOut(xc->mem);
 
+        // Register this as a valid address range with the process
+        process->nxm_start = base_addr;
+        process->nxm_end = cur_addr;
+
         return 0;
     }
 
index a19dcdc939c6ae038c3ef27cf5963c06cec7d711..800bff6f85cf672d9e9982acccb7f39e95a26bd9 100644 (file)
@@ -5,12 +5,12 @@ if 'SYSTEM' not in env:
 
 if env['SYSTEM'] == 'Simple':
     from SimpleConfig import *
-    BaseCPU.workload = Super.workload
+    BaseCPU.workload = parent.workload
     SimpleStandAlone.cpu = [ CPU() for i in xrange(int(env['NP'])) ]
     root = SimpleStandAlone
 elif env['SYSTEM'] == 'Detailed':
     from DetailedConfig import *
-    BaseCPU.workload = Super.workload
+    BaseCPU.workload = parent.workload
     DetailedStandAlone.cpu = [ DetailedCPU() for i in xrange(int(env['NP'])) ]
     root = DetailedStandAlone
 else:
index bb880cd2962a8c7bf099736d53a706368e073e03..64ec994906ee3a5b12062017e18695aac078a55c 100644 (file)
@@ -27,6 +27,7 @@
 from __future__ import generators
 import os, re, sys, types, inspect
 
+from m5 import panic
 from convert import *
 
 noDot = False
@@ -197,12 +198,13 @@ class Proxy(object):
                 raise AttributeError, \
                       'Parent of %s type %s not found at path %s' \
                       % (base.name, ptype, self._path)
-            found, done = obj.find(ptype, self._path)
-            if isinstance(found, Proxy):
-                done = False
+            result, done = obj.find(ptype, self._path)
             obj = obj.parent
 
-        return self._mulcheck(found)
+        if isinstance(result, Proxy):
+            result = result.unproxy(obj, ptype)
+
+        return self._mulcheck(result)
 
     def getindex(obj, index):
         if index == None:
index 7111e873373f6d029c22e8be2ee5b1bb77a97787..c18b31da765b587b357f256d932d1ccc0c7df0ab 100644 (file)
@@ -89,6 +89,7 @@ Process::Process(const string &nm,
     }
 
     mmap_start = mmap_end = 0;
+    nxm_start = nxm_end = 0;
     // other parameters will be initialized when the program is loaded
 }
 
index 1ab43cd62b4fb3291090dd41fc1275eed3859468..51d7639aca9a1b9a0a968e74810955561f986357 100644 (file)
@@ -97,6 +97,10 @@ class Process : public SimObject
     Addr mmap_start;
     Addr mmap_end;
 
+    // Base of region for nxm data
+    Addr nxm_start;
+    Addr nxm_end;
+
     std::string prog_fname;    // file name
     Addr prog_entry;           // entry point (initial PC)
 
@@ -159,9 +163,10 @@ class Process : public SimObject
     bool validDataAddr(Addr addr)
     {
         return ((data_base <= addr && addr < brk_point) ||
-                ((stack_base - 16*1024*1024) <= addr && addr < stack_base) ||
+                (next_thread_stack_base <= addr && addr < stack_base) ||
                 (text_base <= addr && addr < (text_base + text_size)) ||
-                (mmap_start <= addr && addr < mmap_end));
+                (mmap_start <= addr && addr < mmap_end) ||
+                (nxm_start <= addr && addr < nxm_end));
     }
 
     virtual void syscall(ExecContext *xc) = 0;
index 51a075a28f84960fd95f3a483f93bae9ccd1d3c3..69c17c3309b2ba11b1678804dd53a26b3b4cb91e 100644 (file)
@@ -412,6 +412,10 @@ mmapFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc)
         // user didn't give an address... pick one from our "mmap region"
         start = p->mmap_end;
         p->mmap_end += RoundUp<Addr>(length, VMPageSize);
+        if (p->nxm_start != 0) {
+            //If we have an nxm space, make sure we haven't colided
+            assert(p->mmap_end < p->nxm_start);
+        }
     }
 
     if (!(flags & OS::TGT_MAP_ANONYMOUS)) {