sim_object.cc revision 12334
15222Sksewell@umich.edu/* 25268Sksewell@umich.edu * Copyright (c) 2001-2005 The Regents of The University of Michigan 35268Sksewell@umich.edu * Copyright (c) 2010 Advanced Micro Devices, Inc. 45222Sksewell@umich.edu * All rights reserved. 55268Sksewell@umich.edu * 65268Sksewell@umich.edu * Redistribution and use in source and binary forms, with or without 75268Sksewell@umich.edu * modification, are permitted provided that the following conditions are 85268Sksewell@umich.edu * met: redistributions of source code must retain the above copyright 95268Sksewell@umich.edu * notice, this list of conditions and the following disclaimer; 105268Sksewell@umich.edu * redistributions in binary form must reproduce the above copyright 115268Sksewell@umich.edu * notice, this list of conditions and the following disclaimer in the 125268Sksewell@umich.edu * documentation and/or other materials provided with the distribution; 135268Sksewell@umich.edu * neither the name of the copyright holders nor the names of its 145268Sksewell@umich.edu * contributors may be used to endorse or promote products derived from 155222Sksewell@umich.edu * this software without specific prior written permission. 165268Sksewell@umich.edu * 175268Sksewell@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 185268Sksewell@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 195268Sksewell@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 205268Sksewell@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 215268Sksewell@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 225268Sksewell@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 235268Sksewell@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 245268Sksewell@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 255268Sksewell@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 265268Sksewell@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 275222Sksewell@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 285222Sksewell@umich.edu * 295222Sksewell@umich.edu * Authors: Steve Reinhardt 305222Sksewell@umich.edu * Nathan Binkert 315222Sksewell@umich.edu */ 325222Sksewell@umich.edu 335222Sksewell@umich.edu#include "sim/sim_object.hh" 345222Sksewell@umich.edu 355222Sksewell@umich.edu#include "base/logging.hh" 365222Sksewell@umich.edu#include "base/match.hh" 375222Sksewell@umich.edu#include "base/trace.hh" 385222Sksewell@umich.edu#include "debug/Checkpoint.hh" 395222Sksewell@umich.edu#include "sim/probe/probe.hh" 405222Sksewell@umich.edu 415222Sksewell@umich.eduusing namespace std; 425222Sksewell@umich.edu 435222Sksewell@umich.edu 445222Sksewell@umich.edu//////////////////////////////////////////////////////////////////////// 455222Sksewell@umich.edu// 465222Sksewell@umich.edu// SimObject member definitions 475222Sksewell@umich.edu// 485222Sksewell@umich.edu//////////////////////////////////////////////////////////////////////// 495222Sksewell@umich.edu 505222Sksewell@umich.edu// 515222Sksewell@umich.edu// static list of all SimObjects, used for initialization etc. 525222Sksewell@umich.edu// 535222Sksewell@umich.eduSimObject::SimObjectList SimObject::simObjectList; 545222Sksewell@umich.edu 555222Sksewell@umich.edu// 565222Sksewell@umich.edu// SimObject constructor: used to maintain static simObjectList 575222Sksewell@umich.edu// 585222Sksewell@umich.eduSimObject::SimObject(const Params *p) 59 : EventManager(getEventQueue(p->eventq_index)), _params(p) 60{ 61#ifdef DEBUG 62 doDebugBreak = false; 63#endif 64 simObjectList.push_back(this); 65 probeManager = new ProbeManager(this); 66} 67 68SimObject::~SimObject() 69{ 70 delete probeManager; 71} 72 73void 74SimObject::init() 75{ 76} 77 78void 79SimObject::loadState(CheckpointIn &cp) 80{ 81 if (cp.sectionExists(name())) { 82 DPRINTF(Checkpoint, "unserializing\n"); 83 // This works despite name() returning a fully qualified name 84 // since we are at the top level. 85 unserializeSection(cp, name()); 86 } else { 87 DPRINTF(Checkpoint, "no checkpoint section found\n"); 88 } 89} 90 91void 92SimObject::initState() 93{ 94} 95 96void 97SimObject::startup() 98{ 99} 100 101// 102// no default statistics, so nothing to do in base implementation 103// 104void 105SimObject::regStats() 106{ 107} 108 109void 110SimObject::resetStats() 111{ 112} 113 114/** 115 * No probe points by default, so do nothing in base. 116 */ 117void 118SimObject::regProbePoints() 119{ 120} 121 122/** 123 * No probe listeners by default, so do nothing in base. 124 */ 125void 126SimObject::regProbeListeners() 127{ 128} 129 130ProbeManager * 131SimObject::getProbeManager() 132{ 133 return probeManager; 134} 135 136// 137// static function: serialize all SimObjects. 138// 139void 140SimObject::serializeAll(CheckpointOut &cp) 141{ 142 SimObjectList::reverse_iterator ri = simObjectList.rbegin(); 143 SimObjectList::reverse_iterator rend = simObjectList.rend(); 144 145 for (; ri != rend; ++ri) { 146 SimObject *obj = *ri; 147 // This works despite name() returning a fully qualified name 148 // since we are at the top level. 149 obj->serializeSection(cp, obj->name()); 150 } 151} 152 153 154#ifdef DEBUG 155// 156// static function: flag which objects should have the debugger break 157// 158void 159SimObject::debugObjectBreak(const string &objs) 160{ 161 SimObjectList::const_iterator i = simObjectList.begin(); 162 SimObjectList::const_iterator end = simObjectList.end(); 163 164 ObjectMatch match(objs); 165 for (; i != end; ++i) { 166 SimObject *obj = *i; 167 obj->doDebugBreak = match.match(obj->name()); 168 } 169} 170 171void 172debugObjectBreak(const char *objs) 173{ 174 SimObject::debugObjectBreak(string(objs)); 175} 176#endif 177 178SimObject * 179SimObject::find(const char *name) 180{ 181 SimObjectList::const_iterator i = simObjectList.begin(); 182 SimObjectList::const_iterator end = simObjectList.end(); 183 184 for (; i != end; ++i) { 185 SimObject *obj = *i; 186 if (obj->name() == name) 187 return obj; 188 } 189 190 return NULL; 191} 192