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 &section);
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