More progress toward actually running a program.
See configs/test.py for test config (using simple binary in my home directory on zizzer). base/chunk_generator.hh: Fix assertion for chunkSize == 0 (not a power of 2) base/intmath.hh: Fix roundDown to take integer alignments. cpu/base.cc: Register exec contexts regardless of state (not sure why this check was in here in the first place). mem/physical.cc: Add breaks to switch. python/m5/objects/BaseCPU.py: Default mem to Parent.any (e.g. get from System). python/m5/objects/Ethernet.py: python/m5/objects/Root.py: HierParams is gone. python/m5/objects/PhysicalMemory.py: mmu param is full-system only. sim/process.cc: Stack mapping request must be page-aligned and page-sized. Don't delete objFile object in create since we are counting on it being around for startup(). --HG-- extra : convert_revision : 90c43ee927e7d82a045d6e10302d965797d006f7
This commit is contained in:
parent
31fc398f06
commit
22504f8b48
|
@ -77,7 +77,7 @@ class ChunkGenerator
|
||||||
: chunkSize(_chunkSize)
|
: chunkSize(_chunkSize)
|
||||||
{
|
{
|
||||||
// chunkSize must be a power of two
|
// chunkSize must be a power of two
|
||||||
assert(isPowerOf2(chunkSize));
|
assert(chunkSize == 0 || isPowerOf2(chunkSize));
|
||||||
|
|
||||||
// set up initial chunk.
|
// set up initial chunk.
|
||||||
curAddr = startAddr;
|
curAddr = startAddr;
|
||||||
|
|
|
@ -202,9 +202,9 @@ roundUp(T val, int align)
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline T
|
inline T
|
||||||
roundDown(T val, T align)
|
roundDown(T val, int align)
|
||||||
{
|
{
|
||||||
T mask = align - 1;
|
T mask = (T)align - 1;
|
||||||
return val & ~mask;
|
return val & ~mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
8
configs/test.py
Normal file
8
configs/test.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
from m5 import *
|
||||||
|
AddToPath('/z/stever/bk/m5-test')
|
||||||
|
import Benchmarks
|
||||||
|
|
||||||
|
mem = PhysicalMemory()
|
||||||
|
cpu = SimpleCPU(workload=Benchmarks.HelloWorld(), mem=mem)
|
||||||
|
system = System(physmem=mem, cpu=cpu)
|
||||||
|
root = Root(system=system)
|
12
cpu/base.cc
12
cpu/base.cc
|
@ -212,17 +212,15 @@ BaseCPU::registerExecContexts()
|
||||||
for (int i = 0; i < execContexts.size(); ++i) {
|
for (int i = 0; i < execContexts.size(); ++i) {
|
||||||
ExecContext *xc = execContexts[i];
|
ExecContext *xc = execContexts[i];
|
||||||
|
|
||||||
if (xc->status() == ExecContext::Suspended) {
|
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
int id = params->cpu_id;
|
int id = params->cpu_id;
|
||||||
if (id != -1)
|
if (id != -1)
|
||||||
id += i;
|
id += i;
|
||||||
|
|
||||||
xc->cpu_id = system->registerExecContext(xc, id);
|
xc->cpu_id = system->registerExecContext(xc, id);
|
||||||
#else
|
#else
|
||||||
xc->cpu_id = xc->process->registerExecContext(xc);
|
xc->cpu_id = xc->process->registerExecContext(xc);
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -167,8 +167,10 @@ PhysicalMemory::doFunctionalAccess(Packet &pkt)
|
||||||
switch (pkt.cmd) {
|
switch (pkt.cmd) {
|
||||||
case Read:
|
case Read:
|
||||||
memcpy(pkt.data, pmem_addr + pkt.addr - base_addr, pkt.size);
|
memcpy(pkt.data, pmem_addr + pkt.addr - base_addr, pkt.size);
|
||||||
|
break;
|
||||||
case Write:
|
case Write:
|
||||||
memcpy(pmem_addr + pkt.addr - base_addr, pkt.data, pkt.size);
|
memcpy(pmem_addr + pkt.addr - base_addr, pkt.data, pkt.size);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
panic("unimplemented");
|
panic("unimplemented");
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ class BaseCPU(SimObject):
|
||||||
system = Param.System(Parent.any, "system object")
|
system = Param.System(Parent.any, "system object")
|
||||||
cpu_id = Param.Int(-1, "CPU identifier")
|
cpu_id = Param.Int(-1, "CPU identifier")
|
||||||
else:
|
else:
|
||||||
mem = Param.Memory("memory")
|
mem = Param.Memory(Parent.any, "memory")
|
||||||
workload = VectorParam.Process("processes to run")
|
workload = VectorParam.Process("processes to run")
|
||||||
|
|
||||||
max_insts_all_threads = Param.Counter(0,
|
max_insts_all_threads = Param.Counter(0,
|
||||||
|
|
|
@ -69,7 +69,6 @@ class EtherDevBase(PciDevice):
|
||||||
|
|
||||||
physmem = Param.PhysicalMemory(Parent.any, "Physical Memory")
|
physmem = Param.PhysicalMemory(Parent.any, "Physical Memory")
|
||||||
|
|
||||||
hier = Param.HierParams(Parent.any, "Hierarchy global variables")
|
|
||||||
payload_bus = Param.Bus(NULL, "The IO Bus to attach to for payload")
|
payload_bus = Param.Bus(NULL, "The IO Bus to attach to for payload")
|
||||||
dma_read_delay = Param.Latency('0us', "fixed delay for dma reads")
|
dma_read_delay = Param.Latency('0us', "fixed delay for dma reads")
|
||||||
dma_read_factor = Param.Latency('0us', "multiplier for dma reads")
|
dma_read_factor = Param.Latency('0us', "multiplier for dma reads")
|
||||||
|
|
|
@ -5,4 +5,5 @@ class PhysicalMemory(Memory):
|
||||||
type = 'PhysicalMemory'
|
type = 'PhysicalMemory'
|
||||||
range = Param.AddrRange("Device Address")
|
range = Param.AddrRange("Device Address")
|
||||||
file = Param.String('', "memory mapped file")
|
file = Param.String('', "memory mapped file")
|
||||||
mmu = Param.MemoryController(Parent.any, "Memory Controller")
|
if build_env['FULL_SYSTEM']:
|
||||||
|
mmu = Param.MemoryController(Parent.any, "Memory Controller")
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
from m5 import *
|
from m5 import *
|
||||||
from HierParams import HierParams
|
|
||||||
from Serialize import Serialize
|
from Serialize import Serialize
|
||||||
from Statistics import Statistics
|
from Statistics import Statistics
|
||||||
from Trace import Trace
|
from Trace import Trace
|
||||||
|
@ -13,12 +12,9 @@ class Root(SimObject):
|
||||||
"print a progress message every n ticks (0 = never)")
|
"print a progress message every n ticks (0 = never)")
|
||||||
output_file = Param.String('cout', "file to dump simulator output to")
|
output_file = Param.String('cout', "file to dump simulator output to")
|
||||||
checkpoint = Param.String('', "checkpoint file to load")
|
checkpoint = Param.String('', "checkpoint file to load")
|
||||||
# hier = Param.HierParams(HierParams(do_data = False, do_events = True),
|
|
||||||
# "shared memory hierarchy parameters")
|
|
||||||
# stats = Param.Statistics(Statistics(), "statistics object")
|
# stats = Param.Statistics(Statistics(), "statistics object")
|
||||||
# trace = Param.Trace(Trace(), "trace object")
|
# trace = Param.Trace(Trace(), "trace object")
|
||||||
# serialize = Param.Serialize(Serialize(), "checkpoint generation options")
|
# serialize = Param.Serialize(Serialize(), "checkpoint generation options")
|
||||||
hier = HierParams(do_data = False, do_events = True)
|
|
||||||
stats = Statistics()
|
stats = Statistics()
|
||||||
trace = Trace()
|
trace = Trace()
|
||||||
exetrace = ExecutionTrace()
|
exetrace = ExecutionTrace()
|
||||||
|
|
|
@ -331,7 +331,8 @@ LiveProcess::startup()
|
||||||
stack_min &= ~7;
|
stack_min &= ~7;
|
||||||
stack_size = stack_base - stack_min;
|
stack_size = stack_base - stack_min;
|
||||||
// map memory
|
// map memory
|
||||||
pTable->allocate(stack_min, stack_size);
|
pTable->allocate(roundDown(stack_min, VMPageSize),
|
||||||
|
roundUp(stack_size, VMPageSize));
|
||||||
|
|
||||||
// map out initial stack contents
|
// map out initial stack contents
|
||||||
Addr argv_array_base = stack_min + sizeof(uint64_t); // room for argc
|
Addr argv_array_base = stack_min + sizeof(uint64_t); // room for argc
|
||||||
|
@ -396,8 +397,6 @@ LiveProcess::create(const string &nm, System *system,
|
||||||
fatal("Unknown object file architecture.");
|
fatal("Unknown object file architecture.");
|
||||||
}
|
}
|
||||||
|
|
||||||
delete objFile;
|
|
||||||
|
|
||||||
if (process == NULL)
|
if (process == NULL)
|
||||||
fatal("Unknown error creating process object.");
|
fatal("Unknown error creating process object.");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue