X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fsim%2Fsim_object.cc;h=7a7b83b259ebc6e0866e049b9f4fafbaab5e0f40;hb=e6ee56c6571999631ce31b05d0e563d66a7bbdd8;hp=907f015dc4927d4179f572f5345cc20520ce6f0f;hpb=54cc0053f0a6822e47a49771976af6daaabc24bb;p=gem5.git diff --git a/src/sim/sim_object.cc b/src/sim/sim_object.cc index 907f015dc..7a7b83b25 100644 --- a/src/sim/sim_object.cc +++ b/src/sim/sim_object.cc @@ -1,5 +1,6 @@ /* * Copyright (c) 2001-2005 The Regents of The University of Michigan + * Copyright (c) 2010 Advanced Micro Devices, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -29,15 +30,14 @@ * Nathan Binkert */ -#include +#include #include "base/callback.hh" #include "base/inifile.hh" #include "base/match.hh" #include "base/misc.hh" #include "base/trace.hh" -#include "base/stats/events.hh" -#include "sim/host.hh" +#include "base/types.hh" #include "sim/sim_object.hh" #include "sim/stats.hh" @@ -59,7 +59,7 @@ SimObject::SimObjectList SimObject::simObjectList; // SimObject constructor: used to maintain static simObjectList // SimObject::SimObject(const Params *p) - : _params(p) + : EventManager(p->eventq), _params(p) { #ifdef DEBUG doDebugBreak = false; @@ -69,105 +69,44 @@ SimObject::SimObject(const Params *p) state = Running; } -SimObjectParams * -SimObject::makeParams(const std::string &name) -{ - SimObjectParams *params = new SimObjectParams; - params->name = name; - return params; -} - void SimObject::init() { } -// -// no default statistics, so nothing to do in base implementation -// void -SimObject::regStats() +SimObject::loadState(Checkpoint *cp) { + if (cp->sectionExists(name())) + unserialize(cp, name()); } void -SimObject::regFormulas() +SimObject::initState() { } void -SimObject::resetStats() +SimObject::startup() { } // -// static function: -// call regStats() on all SimObjects and then regFormulas() on all -// SimObjects. +// no default statistics, so nothing to do in base implementation // -struct SimObjectResetCB : public Callback -{ - virtual void process() { SimObject::resetAllStats(); } -}; - -namespace { - static SimObjectResetCB StatResetCB; -} - void -SimObject::regAllStats() +SimObject::regStats() { - SimObjectList::iterator i; - SimObjectList::iterator end = simObjectList.end(); - - /** - * @todo change cprintfs to DPRINTFs - */ - for (i = simObjectList.begin(); i != end; ++i) { -#ifdef STAT_DEBUG - cprintf("registering stats for %s\n", (*i)->name()); -#endif - (*i)->regStats(); - } - - for (i = simObjectList.begin(); i != end; ++i) { -#ifdef STAT_DEBUG - cprintf("registering formulas for %s\n", (*i)->name()); -#endif - (*i)->regFormulas(); - } - - Stats::registerResetCallback(&StatResetCB); } -// -// static function: call init() on all SimObjects. -// void -SimObject::initAll() +SimObject::regFormulas() { - SimObjectList::iterator i = simObjectList.begin(); - SimObjectList::iterator end = simObjectList.end(); - - for (; i != end; ++i) { - SimObject *obj = *i; - obj->init(); - } } -// -// static function: call resetStats() on all SimObjects. -// void -SimObject::resetAllStats() +SimObject::resetStats() { - SimObjectList::iterator i = simObjectList.begin(); - SimObjectList::iterator end = simObjectList.end(); - - for (; i != end; ++i) { - SimObject *obj = *i; - obj->resetStats(); - } } // @@ -204,6 +143,8 @@ SimObject::unserializeAll(Checkpoint *cp) } } + + #ifdef DEBUG // // static function: flag which objects should have the debugger break @@ -228,12 +169,6 @@ debugObjectBreak(const char *objs) } #endif -void -SimObject::recordEvent(const std::string &stat) -{ - Stats::recordEvent(stat); -} - unsigned int SimObject::drain(Event *drain_event) { @@ -264,3 +199,19 @@ SimObject::takeOverFrom(BaseCPU *cpu) { panic("Unimplemented!"); } + + +SimObject * +SimObject::find(const char *name) +{ + SimObjectList::const_iterator i = simObjectList.begin(); + SimObjectList::const_iterator end = simObjectList.end(); + + for (; i != end; ++i) { + SimObject *obj = *i; + if (obj->name() == name) + return obj; + } + + return NULL; +}