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