More progress toward actually running a program.
authorSteve Reinhardt <stever@eecs.umich.edu>
Wed, 1 Mar 2006 23:45:50 +0000 (18:45 -0500)
committerSteve Reinhardt <stever@eecs.umich.edu>
Wed, 1 Mar 2006 23:45:50 +0000 (18:45 -0500)
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

base/chunk_generator.hh
base/intmath.hh
configs/test.py [new file with mode: 0644]
cpu/base.cc
mem/physical.cc
python/m5/objects/BaseCPU.py
python/m5/objects/Ethernet.py
python/m5/objects/PhysicalMemory.py
python/m5/objects/Root.py
sim/process.cc

index afd577814a48768881f1eb146e18afaf43f664d3..a584679d0caf44020af12bc7f9ffafbb8610aba1 100644 (file)
@@ -77,7 +77,7 @@ class ChunkGenerator
         : chunkSize(_chunkSize)
     {
         // chunkSize must be a power of two
-        assert(isPowerOf2(chunkSize));
+        assert(chunkSize == 0 || isPowerOf2(chunkSize));
 
         // set up initial chunk.
         curAddr = startAddr;
index c8b9c5ec5dfb501d23bdb1a42c62ada592e220ec..198278d6fc200cb05b646d578d73fa7ba78b98fb 100644 (file)
@@ -202,9 +202,9 @@ roundUp(T val, int align)
 
 template <class 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;
 }
 
diff --git a/configs/test.py b/configs/test.py
new file mode 100644 (file)
index 0000000..ea0e63a
--- /dev/null
@@ -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)
index 64ea9aaa859cad581ff0621560f84349a8a0f522..154143712446be889a8be4d41c9eb2af0e1f3efe 100644 (file)
@@ -212,17 +212,15 @@ BaseCPU::registerExecContexts()
     for (int i = 0; i < execContexts.size(); ++i) {
         ExecContext *xc = execContexts[i];
 
-        if (xc->status() == ExecContext::Suspended) {
 #if FULL_SYSTEM
-            int id = params->cpu_id;
-            if (id != -1)
-                id += i;
+        int id = params->cpu_id;
+        if (id != -1)
+            id += i;
 
-            xc->cpu_id = system->registerExecContext(xc, id);
+        xc->cpu_id = system->registerExecContext(xc, id);
 #else
-            xc->cpu_id = xc->process->registerExecContext(xc);
+        xc->cpu_id = xc->process->registerExecContext(xc);
 #endif
-        }
     }
 }
 
index d7c6345be66a3b4efac8a7bed10bcc64368a6e47..fea4b6ec5dd662924d26edddb724dc7fec061496 100644 (file)
@@ -167,8 +167,10 @@ PhysicalMemory::doFunctionalAccess(Packet &pkt)
     switch (pkt.cmd) {
       case Read:
         memcpy(pkt.data, pmem_addr + pkt.addr - base_addr, pkt.size);
+        break;
       case Write:
         memcpy(pmem_addr + pkt.addr - base_addr, pkt.data, pkt.size);
+        break;
       default:
         panic("unimplemented");
     }
index e5e43022f3645711850ac5dfc88a2323d3bc88da..07cb850f1229a0422640fff27dabe21c898be343 100644 (file)
@@ -9,7 +9,7 @@ class BaseCPU(SimObject):
         system = Param.System(Parent.any, "system object")
         cpu_id = Param.Int(-1, "CPU identifier")
     else:
-        mem = Param.Memory("memory")
+        mem = Param.Memory(Parent.any, "memory")
         workload = VectorParam.Process("processes to run")
 
     max_insts_all_threads = Param.Counter(0,
index f58ece0be3d79cb525bf075878ce03d2884d4a1c..2edc7576e89fabaceabb57da834b079b187a12ac 100644 (file)
@@ -69,7 +69,6 @@ class EtherDevBase(PciDevice):
 
     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")
     dma_read_delay = Param.Latency('0us', "fixed delay for dma reads")
     dma_read_factor = Param.Latency('0us', "multiplier for dma reads")
index ab2714a6f5d3d0bdd0f3f6159b7b4c793fe4e096..b0aba1a7d05f477f55b91ef1b7548fc7cec45e0b 100644 (file)
@@ -5,4 +5,5 @@ class PhysicalMemory(Memory):
     type = 'PhysicalMemory'
     range = Param.AddrRange("Device Address")
     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")
index 23b13fc675ba40fce4e4e083e1ae628d6939aaf6..f51516098dd965bbc1d80ddb5c92012f9baf4200 100644 (file)
@@ -1,5 +1,4 @@
 from m5 import *
-from HierParams import HierParams
 from Serialize import Serialize
 from Statistics import Statistics
 from Trace import Trace
@@ -13,12 +12,9 @@ class Root(SimObject):
         "print a progress message every n ticks (0 = never)")
     output_file = Param.String('cout', "file to dump simulator output to")
     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")
 #    trace = Param.Trace(Trace(), "trace object")
 #    serialize = Param.Serialize(Serialize(), "checkpoint generation options")
-    hier = HierParams(do_data = False, do_events = True)
     stats = Statistics()
     trace = Trace()
     exetrace = ExecutionTrace()
index ac2aae5d470ea5330783de1cba034dde10e4b4d3..bb13bd35f2b50adbdc71bb0fc2951c2884ee54cb 100644 (file)
@@ -331,7 +331,8 @@ LiveProcess::startup()
     stack_min &= ~7;
     stack_size = stack_base - stack_min;
     // map memory
-    pTable->allocate(stack_min, stack_size);
+    pTable->allocate(roundDown(stack_min, VMPageSize),
+                     roundUp(stack_size, VMPageSize));
 
     // map out initial stack contents
     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.");
     }
 
-    delete objFile;
-
     if (process == NULL)
         fatal("Unknown error creating process object.");