diff -r 5044bb906d5a -r 7e216174e96a src/base/cp_annotate.hh --- a/src/base/cp_annotate.hh Sat Jun 26 09:41:39 2010 -0400 +++ b/src/base/cp_annotate.hh Sun Jun 27 20:23:12 2010 -0700 @@ -43,7 +43,6 @@ #include "config/cp_annotate.hh" #include "config/the_isa.hh" #include "sim/serialize.hh" -#include "sim/startup.hh" #include "sim/system.hh" #if CP_ANNOTATE diff -r 5044bb906d5a -r 7e216174e96a src/python/m5/simulate.py --- a/src/python/m5/simulate.py Sat Jun 26 09:41:39 2010 -0400 +++ b/src/python/m5/simulate.py Sun Jun 27 20:23:12 2010 -0700 @@ -91,7 +91,7 @@ global need_resume, need_startup if need_startup: - internal.core.SimStartup() + internal.core.startupAll() need_startup = False for root in need_resume: diff -r 5044bb906d5a -r 7e216174e96a src/python/swig/core.i --- a/src/python/swig/core.i Sat Jun 26 09:41:39 2010 -0400 +++ b/src/python/swig/core.i Sun Jun 27 20:23:12 2010 -0700 @@ -38,7 +38,6 @@ #include "base/socket.hh" #include "base/types.hh" #include "sim/core.hh" -#include "sim/startup.hh" extern const char *compileDate; @@ -62,7 +61,6 @@ %include "base/types.hh" void setOutputDir(const std::string &dir); -void SimStartup(); void doExitCleanup(); void disableAllListeners(); @@ -82,6 +80,7 @@ void initAll(); void regAllStats(); +void startupAll(); bool want_warn, warn_verbose; bool want_info, info_verbose; diff -r 5044bb906d5a -r 7e216174e96a src/python/swig/pyobject.hh --- a/src/python/swig/pyobject.hh Sat Jun 26 09:41:39 2010 -0400 +++ b/src/python/swig/pyobject.hh Sun Jun 27 20:23:12 2010 -0700 @@ -69,3 +69,8 @@ Serializable::unserializeAll(cpt_dir); } +inline void +startupAll() +{ + SimObject::startupAll(); +} diff -r 5044bb906d5a -r 7e216174e96a src/sim/SConscript --- a/src/sim/SConscript Sat Jun 26 09:41:39 2010 -0400 +++ b/src/sim/SConscript Sun Jun 27 20:23:12 2010 -0700 @@ -48,7 +48,6 @@ Source('sim_events.cc') Source('sim_object.cc') Source('simulate.cc') -Source('startup.cc') Source('stat_control.cc') Source('system.cc') diff -r 5044bb906d5a -r 7e216174e96a src/sim/sim_events.cc --- a/src/sim/sim_events.cc Sat Jun 26 09:41:39 2010 -0400 +++ b/src/sim/sim_events.cc Sun Jun 27 20:23:12 2010 -0700 @@ -35,7 +35,6 @@ #include "sim/eventq.hh" #include "sim/sim_events.hh" #include "sim/sim_exit.hh" -#include "sim/startup.hh" #include "sim/stats.hh" using namespace std; diff -r 5044bb906d5a -r 7e216174e96a src/sim/sim_object.hh --- a/src/sim/sim_object.hh Sat Jun 26 09:41:39 2010 -0400 +++ b/src/sim/sim_object.hh Sun Jun 27 20:23:12 2010 -0700 @@ -45,7 +45,6 @@ #include "params/SimObject.hh" #include "sim/eventq.hh" #include "sim/serialize.hh" -#include "sim/startup.hh" class BaseCPU; class Event; @@ -55,8 +54,7 @@ * correspond to physical components and can be specified via the * config file (CPUs, caches, etc.). */ -class SimObject - : public EventManager, public Serializable, protected StartupCallback +class SimObject : public EventManager, public Serializable { public: enum State { @@ -103,6 +101,11 @@ virtual void regFormulas(); virtual void resetStats(); + // final initialization before simulation + // all state is unserialized so + virtual void startup(); + static void startupAll(); + // static: call reg_stats on all SimObjects static void regAllStats(); diff -r 5044bb906d5a -r 7e216174e96a src/sim/sim_object.cc --- a/src/sim/sim_object.cc Sat Jun 26 09:41:39 2010 -0400 +++ b/src/sim/sim_object.cc Sun Jun 27 20:23:12 2010 -0700 @@ -73,6 +73,11 @@ { } +void +SimObject::startup() +{ +} + // // no default statistics, so nothing to do in base implementation // @@ -195,6 +200,20 @@ } } + +void +SimObject::startupAll() +{ + SimObjectList::iterator i = simObjectList.begin(); + SimObjectList::iterator end = simObjectList.end(); + + while (i != end) { + (*i)->startup(); + ++i; + } +} + + #ifdef DEBUG // // static function: flag which objects should have the debugger break diff -r 5044bb906d5a -r 7e216174e96a src/sim/startup.hh --- a/src/sim/startup.hh Sat Jun 26 09:41:39 2010 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: Nathan Binkert - */ - -#ifndef __SIM_STARTUP_HH__ -#define __SIM_STARTUP_HH__ - -struct StartupCallback -{ - StartupCallback(); - virtual ~StartupCallback(); - virtual void startup(); -}; - -void SimStartup(); - -#endif // __SIM_STARTUP_HH__ diff -r 5044bb906d5a -r 7e216174e96a src/sim/startup.cc --- a/src/sim/startup.cc Sat Jun 26 09:41:39 2010 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: Nathan Binkert - * Kevin Lim - */ - -#include - -#include "base/misc.hh" -#include "sim/debug.hh" -#include "sim/startup.hh" - -typedef std::list startupq_t; - -startupq_t *startupq = NULL; - -StartupCallback::StartupCallback() -{ - if (startupq == NULL) - startupq = new startupq_t; - startupq->push_back(this); -} - -StartupCallback::~StartupCallback() -{ - startupq->remove(this); -} - -void StartupCallback::startup() { } - -void -SimStartup() -{ - startupq_t::iterator i = startupq->begin(); - startupq_t::iterator end = startupq->end(); - - while (i != end) { - (*i)->startup(); - ++i; - } -}