system.hh revision 312
12810Srdreslin@umich.edu/* 213732Snikos.nikoleris@arm.com * Copyright (c) 2003 The Regents of The University of Michigan 311051Sandreas.hansson@arm.com * All rights reserved. 411051Sandreas.hansson@arm.com * 511051Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 611051Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 711051Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 811051Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 911051Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 1011051Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 1111051Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 1211051Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 1311051Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 1411051Sandreas.hansson@arm.com * this software without specific prior written permission. 1511051Sandreas.hansson@arm.com * 162810Srdreslin@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172810Srdreslin@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182810Srdreslin@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192810Srdreslin@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202810Srdreslin@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212810Srdreslin@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222810Srdreslin@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232810Srdreslin@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242810Srdreslin@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252810Srdreslin@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262810Srdreslin@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272810Srdreslin@umich.edu */ 282810Srdreslin@umich.edu 292810Srdreslin@umich.edu#ifndef __SYSTEM_HH__ 302810Srdreslin@umich.edu#define __SYSTEM_HH__ 312810Srdreslin@umich.edu 322810Srdreslin@umich.edu#include <string> 332810Srdreslin@umich.edu#include <vector> 342810Srdreslin@umich.edu 352810Srdreslin@umich.edu#include "sim/sim_object.hh" 362810Srdreslin@umich.edu#include "cpu/pc_event.hh" 372810Srdreslin@umich.edu#include "base/loader/symtab.hh" 382810Srdreslin@umich.edu 392810Srdreslin@umich.edu#ifdef FS_MEASURE 402810Srdreslin@umich.edu#include "base/statistics.hh" 412810Srdreslin@umich.edu#include "sim/sw_context.hh" 4211051Sandreas.hansson@arm.com#endif 4311051Sandreas.hansson@arm.com 442810Srdreslin@umich.educlass MemoryController; 4511051Sandreas.hansson@arm.comclass PhysicalMemory; 4611051Sandreas.hansson@arm.comclass RemoteGDB; 4712349Snikos.nikoleris@arm.comclass GDBListener; 482810Srdreslin@umich.edu 492810Srdreslin@umich.educlass ExecContext; 502810Srdreslin@umich.edu 512810Srdreslin@umich.educlass System : public SimObject 5211051Sandreas.hansson@arm.com{ 532810Srdreslin@umich.edu#ifdef FS_MEASURE 542810Srdreslin@umich.edu protected: 5511051Sandreas.hansson@arm.com std::map<const std::string, Statistics::GenBin *> fnBins; 562810Srdreslin@umich.edu std::map<const Addr, SWContext *> swCtxMap; 5712724Snikos.nikoleris@arm.com#endif //FS_MEASURE 5812724Snikos.nikoleris@arm.com 5912724Snikos.nikoleris@arm.com public: 6012334Sgabeblack@google.com const uint64_t init_param; 6112724Snikos.nikoleris@arm.com MemoryController *memCtrl; 6211051Sandreas.hansson@arm.com PhysicalMemory *physmem; 6311051Sandreas.hansson@arm.com bool bin; 6411051Sandreas.hansson@arm.com 6511288Ssteve.reinhardt@amd.com PCEventQueue pcEventQueue; 6612724Snikos.nikoleris@arm.com 6713223Sodanrc@yahoo.com.br std::vector<ExecContext *> execContexts; 6811051Sandreas.hansson@arm.com 6912724Snikos.nikoleris@arm.com virtual int registerExecContext(ExecContext *xc); 7012724Snikos.nikoleris@arm.com virtual void replaceExecContext(int xcIndex, ExecContext *xc); 7112724Snikos.nikoleris@arm.com 7212724Snikos.nikoleris@arm.com#ifdef FS_MEASURE 7311051Sandreas.hansson@arm.com Statistics::Scalar<Counter, Statistics::MainBin> fnCalls; 7411053Sandreas.hansson@arm.com Statistics::MainBin *nonPath; 7511053Sandreas.hansson@arm.com#endif //FS_MEASURE 7612724Snikos.nikoleris@arm.com 7711051Sandreas.hansson@arm.com public: 7811051Sandreas.hansson@arm.com System(const std::string _name, const uint64_t _init_param, 7911051Sandreas.hansson@arm.com MemoryController *, PhysicalMemory *, const bool); 8011051Sandreas.hansson@arm.com ~System(); 8111601Sandreas.hansson@arm.com 8211601Sandreas.hansson@arm.com virtual Addr getKernelStart() const = 0; 8311051Sandreas.hansson@arm.com virtual Addr getKernelEnd() const = 0; 8412724Snikos.nikoleris@arm.com virtual Addr getKernelEntry() const = 0; 8511051Sandreas.hansson@arm.com virtual bool breakpoint() = 0; 8612724Snikos.nikoleris@arm.com 8711600Sandreas.hansson@arm.com#ifdef FS_MEASURE 8811600Sandreas.hansson@arm.com Statistics::GenBin * getBin(const std::string &name); 8911051Sandreas.hansson@arm.com virtual bool findCaller(std::string, std::string) const = 0; 9011051Sandreas.hansson@arm.com 9111051Sandreas.hansson@arm.com SWContext *findContext(Addr pcb); 9211284Sandreas.hansson@arm.com bool addContext(Addr pcb, SWContext *ctx) { 9311051Sandreas.hansson@arm.com return (swCtxMap.insert(make_pair(pcb, ctx))).second; 9411051Sandreas.hansson@arm.com } 9511051Sandreas.hansson@arm.com void remContext(Addr pcb) { 9611602Sandreas.hansson@arm.com swCtxMap.erase(pcb); 9711051Sandreas.hansson@arm.com return; 9811051Sandreas.hansson@arm.com } 9911284Sandreas.hansson@arm.com 10011051Sandreas.hansson@arm.com virtual void dumpState(ExecContext *xc) const = 0; 10111284Sandreas.hansson@arm.com#endif //FS_MEASURE 10211602Sandreas.hansson@arm.com 10311051Sandreas.hansson@arm.com public: 10411051Sandreas.hansson@arm.com //////////////////////////////////////////// 10511284Sandreas.hansson@arm.com // 10611051Sandreas.hansson@arm.com // STATIC GLOBAL SYSTEM LIST 10711284Sandreas.hansson@arm.com // 10811284Sandreas.hansson@arm.com //////////////////////////////////////////// 10911284Sandreas.hansson@arm.com 11011051Sandreas.hansson@arm.com static std::vector<System *> systemList; 11111051Sandreas.hansson@arm.com static int numSystemsRunning; 11211051Sandreas.hansson@arm.com 11311284Sandreas.hansson@arm.com static void printSystems(); 11411284Sandreas.hansson@arm.com}; 11511284Sandreas.hansson@arm.com 11611284Sandreas.hansson@arm.com#endif // __SYSTEM_HH__ 11711051Sandreas.hansson@arm.com