system.hh revision 885
111308Santhony.gutierrez@amd.com/* 211308Santhony.gutierrez@amd.com * Copyright (c) 2003 The Regents of The University of Michigan 311308Santhony.gutierrez@amd.com * All rights reserved. 411308Santhony.gutierrez@amd.com * 511308Santhony.gutierrez@amd.com * Redistribution and use in source and binary forms, with or without 611308Santhony.gutierrez@amd.com * modification, are permitted provided that the following conditions are 711308Santhony.gutierrez@amd.com * met: redistributions of source code must retain the above copyright 811308Santhony.gutierrez@amd.com * notice, this list of conditions and the following disclaimer; 911308Santhony.gutierrez@amd.com * redistributions in binary form must reproduce the above copyright 1011308Santhony.gutierrez@amd.com * notice, this list of conditions and the following disclaimer in the 1111308Santhony.gutierrez@amd.com * documentation and/or other materials provided with the distribution; 1211308Santhony.gutierrez@amd.com * neither the name of the copyright holders nor the names of its 1311308Santhony.gutierrez@amd.com * contributors may be used to endorse or promote products derived from 1411308Santhony.gutierrez@amd.com * this software without specific prior written permission. 1511308Santhony.gutierrez@amd.com * 1611308Santhony.gutierrez@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1712697Santhony.gutierrez@amd.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1812697Santhony.gutierrez@amd.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1912697Santhony.gutierrez@amd.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2011308Santhony.gutierrez@amd.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2111308Santhony.gutierrez@amd.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2211308Santhony.gutierrez@amd.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2311308Santhony.gutierrez@amd.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2411308Santhony.gutierrez@amd.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2511308Santhony.gutierrez@amd.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2611308Santhony.gutierrez@amd.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711308Santhony.gutierrez@amd.com */ 2811308Santhony.gutierrez@amd.com 2911308Santhony.gutierrez@amd.com#ifndef __SYSTEM_HH__ 3011308Santhony.gutierrez@amd.com#define __SYSTEM_HH__ 3111308Santhony.gutierrez@amd.com 3211308Santhony.gutierrez@amd.com#include <string> 3312697Santhony.gutierrez@amd.com#include <vector> 3411308Santhony.gutierrez@amd.com 3511308Santhony.gutierrez@amd.com#include "base/loader/symtab.hh" 3611308Santhony.gutierrez@amd.com#include "base/statistics.hh" 3711308Santhony.gutierrez@amd.com#include "cpu/pc_event.hh" 3811308Santhony.gutierrez@amd.com#include "kern/system_events.hh" 3911308Santhony.gutierrez@amd.com#include "sim/sim_object.hh" 4011308Santhony.gutierrez@amd.com#include "sim/sw_context.hh" 4111308Santhony.gutierrez@amd.com 4211308Santhony.gutierrez@amd.comclass MemoryController; 4311308Santhony.gutierrez@amd.comclass PhysicalMemory; 4411308Santhony.gutierrez@amd.comclass Platform; 4511308Santhony.gutierrez@amd.comclass RemoteGDB; 4611308Santhony.gutierrez@amd.comclass GDBListener; 4711308Santhony.gutierrez@amd.com 4811308Santhony.gutierrez@amd.comclass ExecContext; 4911308Santhony.gutierrez@amd.com 5011308Santhony.gutierrez@amd.comclass System : public SimObject 5111308Santhony.gutierrez@amd.com{ 5211341Sandreas.hansson@arm.com // lisa's binning stuff 5311308Santhony.gutierrez@amd.com private: 5411308Santhony.gutierrez@amd.com std::map<const std::string, Stats::MainBin *> fnBins; 5511308Santhony.gutierrez@amd.com std::map<const Addr, SWContext *> swCtxMap; 5611341Sandreas.hansson@arm.com 5711308Santhony.gutierrez@amd.com protected: 5811308Santhony.gutierrez@amd.com std::vector<FnEvent *> fnEvents; 5911308Santhony.gutierrez@amd.com 6011308Santhony.gutierrez@amd.com public: 6111308Santhony.gutierrez@amd.com Stats::Scalar<> fnCalls; 6211308Santhony.gutierrez@amd.com Stats::MainBin *Kernel; 63 Stats::MainBin *User; 64 65 Stats::MainBin * getBin(const std::string &name); 66 bool findCaller(std::string, std::string) const; 67 68 SWContext *findContext(Addr pcb); 69 bool addContext(Addr pcb, SWContext *ctx) { 70 return (swCtxMap.insert(make_pair(pcb, ctx))).second; 71 } 72 void remContext(Addr pcb) { 73 swCtxMap.erase(pcb); 74 return; 75 } 76 void dumpState(ExecContext *xc) const; 77 78 virtual void serialize(std::ostream &os); 79 virtual void unserialize(Checkpoint *cp, const std::string §ion); 80 81 82 private: 83 std::multimap<const std::string, std::string> callerMap; 84 void populateMap(std::string caller, std::string callee); 85// 86 87 public: 88 const uint64_t init_param; 89 MemoryController *memCtrl; 90 PhysicalMemory *physmem; 91 Platform *platform; 92 bool bin; 93 std::vector<string> binned_fns; 94 95 PCEventQueue pcEventQueue; 96 97 std::vector<ExecContext *> execContexts; 98 99 virtual int registerExecContext(ExecContext *xc); 100 virtual void replaceExecContext(int xcIndex, ExecContext *xc); 101 102 public: 103 System(const std::string _name, const uint64_t _init_param, 104 MemoryController *, PhysicalMemory *, const bool, 105 const std::vector<string> &binned_fns); 106 ~System(); 107 108 virtual Addr getKernelStart() const = 0; 109 virtual Addr getKernelEnd() const = 0; 110 virtual Addr getKernelEntry() const = 0; 111 virtual bool breakpoint() = 0; 112 113 public: 114 //////////////////////////////////////////// 115 // 116 // STATIC GLOBAL SYSTEM LIST 117 // 118 //////////////////////////////////////////// 119 120 static std::vector<System *> systemList; 121 static int numSystemsRunning; 122 123 static void printSystems(); 124}; 125 126#endif // __SYSTEM_HH__ 127