*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;
}
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:
from __future__ import generators
import os, re, sys, types, inspect
+from m5 import panic
from convert import *
noDot = False
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:
}
mmap_start = mmap_end = 0;
+ nxm_start = nxm_end = 0;
// other parameters will be initialized when the program is loaded
}
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)
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;
// 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)) {