system.hh revision 451
110388SAndreas.Sandberg@ARM.com/*
211932Ssascha.bischoff@arm.com * Copyright (c) 2003 The Regents of The University of Michigan
310388SAndreas.Sandberg@ARM.com * All rights reserved.
410388SAndreas.Sandberg@ARM.com *
510388SAndreas.Sandberg@ARM.com * Redistribution and use in source and binary forms, with or without
610388SAndreas.Sandberg@ARM.com * modification, are permitted provided that the following conditions are
710388SAndreas.Sandberg@ARM.com * met: redistributions of source code must retain the above copyright
810388SAndreas.Sandberg@ARM.com * notice, this list of conditions and the following disclaimer;
910388SAndreas.Sandberg@ARM.com * redistributions in binary form must reproduce the above copyright
1010388SAndreas.Sandberg@ARM.com * notice, this list of conditions and the following disclaimer in the
1110388SAndreas.Sandberg@ARM.com * documentation and/or other materials provided with the distribution;
1210388SAndreas.Sandberg@ARM.com * neither the name of the copyright holders nor the names of its
1310388SAndreas.Sandberg@ARM.com * contributors may be used to endorse or promote products derived from
1410388SAndreas.Sandberg@ARM.com * this software without specific prior written permission.
1510388SAndreas.Sandberg@ARM.com *
1610388SAndreas.Sandberg@ARM.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1710388SAndreas.Sandberg@ARM.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1810388SAndreas.Sandberg@ARM.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1910388SAndreas.Sandberg@ARM.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2010388SAndreas.Sandberg@ARM.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2110388SAndreas.Sandberg@ARM.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2210388SAndreas.Sandberg@ARM.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2310388SAndreas.Sandberg@ARM.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2410388SAndreas.Sandberg@ARM.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2510388SAndreas.Sandberg@ARM.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2610388SAndreas.Sandberg@ARM.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2710388SAndreas.Sandberg@ARM.com */
2810388SAndreas.Sandberg@ARM.com
2910388SAndreas.Sandberg@ARM.com#ifndef __LINUX_SYSTEM_HH__
3010388SAndreas.Sandberg@ARM.com#define __LINUX_SYSTEM_HH__
3110388SAndreas.Sandberg@ARM.com
3210388SAndreas.Sandberg@ARM.com#include <vector>
3310388SAndreas.Sandberg@ARM.com
3410388SAndreas.Sandberg@ARM.com#include "sim/system.hh"
3510388SAndreas.Sandberg@ARM.com#include "targetarch/isa_traits.hh"
3610388SAndreas.Sandberg@ARM.com
3710388SAndreas.Sandberg@ARM.com#ifdef FS_MEASURE
3810388SAndreas.Sandberg@ARM.com#include <map>
3910388SAndreas.Sandberg@ARM.com#endif
4011793Sbrandon.potter@amd.com
4111793Sbrandon.potter@amd.comclass ExecContext;
4211932Ssascha.bischoff@arm.comclass ElfObject;
4311930Sandreas.sandberg@arm.comclass SymbolTable;
4410388SAndreas.Sandberg@ARM.com
4510388SAndreas.Sandberg@ARM.comclass BreakPCEvent;
4610388SAndreas.Sandberg@ARM.comclass LinuxBadAddrEvent;
4710388SAndreas.Sandberg@ARM.comclass LinuxSkipFuncEvent;
4810559Sandreas.hansson@arm.comclass LinuxPrintfEvent;
4910559Sandreas.hansson@arm.comclass LinuxDebugPrintfEvent;
5010388SAndreas.Sandberg@ARM.comclass LinuxDumpMbufEvent;
5110388SAndreas.Sandberg@ARM.com#ifdef FS_MEASURE
5210388SAndreas.Sandberg@ARM.comclass FnEvent;
5311932Ssascha.bischoff@arm.com#endif
5411932Ssascha.bischoff@arm.comclass AlphaArguments;
5511932Ssascha.bischoff@arm.com
5611932Ssascha.bischoff@arm.comclass LinuxSystem : public System
5711932Ssascha.bischoff@arm.com{
5811932Ssascha.bischoff@arm.com  private:
5910388SAndreas.Sandberg@ARM.com    ElfObject *kernel;
6010388SAndreas.Sandberg@ARM.com    ElfObject *console;
6110388SAndreas.Sandberg@ARM.com    ElfObject *bootloader;
6210388SAndreas.Sandberg@ARM.com
6310388SAndreas.Sandberg@ARM.com    SymbolTable *kernelSymtab;
6410388SAndreas.Sandberg@ARM.com    SymbolTable *bootloaderSymtab;
6510388SAndreas.Sandberg@ARM.com    SymbolTable *consoleSymtab;
6610388SAndreas.Sandberg@ARM.com
6710388SAndreas.Sandberg@ARM.com#ifdef FS_MEASURE
6810388SAndreas.Sandberg@ARM.com    //INSTRUMENTATION CODEGEN BEGIN ONE
6910388SAndreas.Sandberg@ARM.com    Statistics::MainBin *esIntrBin;
7010388SAndreas.Sandberg@ARM.com    Statistics::MainBin *esRxeofBin;
7110388SAndreas.Sandberg@ARM.com    Statistics::MainBin *esNewbufBin;
7210388SAndreas.Sandberg@ARM.com    Statistics::MainBin *esDmaLoadBin;
7310388SAndreas.Sandberg@ARM.com    Statistics::MainBin *dmaMapLoadBin;
7410388SAndreas.Sandberg@ARM.com    Statistics::MainBin *etherInputBin;
7510388SAndreas.Sandberg@ARM.com    Statistics::MainBin *netisrInputBin;
7610388SAndreas.Sandberg@ARM.com    Statistics::MainBin *schednetisrIsrBin;
7711930Sandreas.sandberg@arm.com    Statistics::MainBin *ipintrBin;
7810388SAndreas.Sandberg@ARM.com    Statistics::MainBin *ipDooptionsBin;
7910388SAndreas.Sandberg@ARM.com    Statistics::MainBin *ipReassBin;
8010388SAndreas.Sandberg@ARM.com    Statistics::MainBin *tcpInputBin;
8110388SAndreas.Sandberg@ARM.com    Statistics::MainBin *sbappendBin;
8210388SAndreas.Sandberg@ARM.com    Statistics::MainBin *readBin;
8310388SAndreas.Sandberg@ARM.com    Statistics::MainBin *sooReadBin;
8410388SAndreas.Sandberg@ARM.com    Statistics::MainBin *orecvBin;
8510602SAndreas.Sandberg@ARM.com    Statistics::MainBin *recvitBin;
8610602SAndreas.Sandberg@ARM.com    Statistics::MainBin *soreceiveBin;
8710388SAndreas.Sandberg@ARM.com    Statistics::MainBin *osendBin;
8810388SAndreas.Sandberg@ARM.com    Statistics::MainBin *writeBin;
8911930Sandreas.sandberg@arm.com    Statistics::MainBin *sooWriteBin;
9010388SAndreas.Sandberg@ARM.com    Statistics::MainBin *senditBin;
9113342Sgabeblack@google.com    Statistics::MainBin *sosendBin;
9210388SAndreas.Sandberg@ARM.com    Statistics::MainBin *tcpSosendBin;
9310388SAndreas.Sandberg@ARM.com    Statistics::MainBin *tcpOutputBin;
9410388SAndreas.Sandberg@ARM.com    Statistics::MainBin *ipOutputBin;
9511930Sandreas.sandberg@arm.com    Statistics::MainBin *etherOutputBin;
9610388SAndreas.Sandberg@ARM.com    Statistics::MainBin *esStartBin;
9713342Sgabeblack@google.com    Statistics::MainBin *esTransmitBin;
9810388SAndreas.Sandberg@ARM.com    Statistics::MainBin *esTxeofBin;
9910388SAndreas.Sandberg@ARM.com    Statistics::MainBin *idleThreadBin;
10010388SAndreas.Sandberg@ARM.com    //INSTRUMENTATION CODEGEN END
10111930Sandreas.sandberg@arm.com#endif //FS_MEASURE
10210388SAndreas.Sandberg@ARM.com
10313342Sgabeblack@google.com    BreakPCEvent *kernelPanicEvent;
10410388SAndreas.Sandberg@ARM.com    BreakPCEvent *consolePanicEvent;
10510388SAndreas.Sandberg@ARM.com    LinuxBadAddrEvent *badaddrEvent;
10610388SAndreas.Sandberg@ARM.com    LinuxSkipFuncEvent *skipPowerStateEvent;
10711930Sandreas.sandberg@arm.com    LinuxSkipFuncEvent *skipScavengeBootEvent;
10810388SAndreas.Sandberg@ARM.com    LinuxPrintfEvent *printfEvent;
10913342Sgabeblack@google.com    LinuxDebugPrintfEvent *debugPrintfEvent;
11010388SAndreas.Sandberg@ARM.com    LinuxDebugPrintfEvent *debugPrintfrEvent;
11110388SAndreas.Sandberg@ARM.com    LinuxDumpMbufEvent *dumpMbufEvent;
11210388SAndreas.Sandberg@ARM.com#ifdef FS_MEASURE
11311930Sandreas.sandberg@arm.com    //INSTRUMENTATION CODEGEN BEGIN TWO
11410388SAndreas.Sandberg@ARM.com    FnEvent *esIntrEvent;
11513342Sgabeblack@google.com    FnEvent *esRxeofEvent;
11610388SAndreas.Sandberg@ARM.com    FnEvent *esNewbufEvent;
11710388SAndreas.Sandberg@ARM.com    FnEvent *esDmaLoadEvent;
11810388SAndreas.Sandberg@ARM.com    FnEvent *dmaMapLoadEvent;
11911930Sandreas.sandberg@arm.com    FnEvent *etherInputEvent;
12010388SAndreas.Sandberg@ARM.com    FnEvent *netisrInputEvent;
12113342Sgabeblack@google.com    FnEvent *schednetisrIsrEvent;
12210388SAndreas.Sandberg@ARM.com    FnEvent *ipintrEvent;
12310388SAndreas.Sandberg@ARM.com    FnEvent *ipDooptionsEvent;
12410388SAndreas.Sandberg@ARM.com    FnEvent *ipReassEvent;
12511930Sandreas.sandberg@arm.com    FnEvent *tcpInputEvent;
12610388SAndreas.Sandberg@ARM.com    FnEvent *sbappendEvent;
12713342Sgabeblack@google.com    FnEvent *readEvent;
12810388SAndreas.Sandberg@ARM.com    FnEvent *sooReadEvent;
12910388SAndreas.Sandberg@ARM.com    FnEvent *orecvEvent;
13010388SAndreas.Sandberg@ARM.com    FnEvent *recvitEvent;
13111930Sandreas.sandberg@arm.com    FnEvent *soreceiveEvent;
13210388SAndreas.Sandberg@ARM.com    FnEvent *osendEvent;
13310672SAndreas.Sandberg@ARM.com    FnEvent *writeEvent;
13410672SAndreas.Sandberg@ARM.com    FnEvent *sooWriteEvent;
13510672SAndreas.Sandberg@ARM.com    FnEvent *senditEvent;
13610672SAndreas.Sandberg@ARM.com    FnEvent *sosendEvent;
13710672SAndreas.Sandberg@ARM.com    FnEvent *tcpSosendEvent;
13813342Sgabeblack@google.com    FnEvent *tcpOutputEvent;
13910388SAndreas.Sandberg@ARM.com    FnEvent *ipOutputEvent;
14010388SAndreas.Sandberg@ARM.com    FnEvent *etherOutputEvent;
14110388SAndreas.Sandberg@ARM.com    FnEvent *esStartEvent;
14210388SAndreas.Sandberg@ARM.com    FnEvent *esTransmitEvent;
14310388SAndreas.Sandberg@ARM.com    FnEvent *esTxeofEvent;
14410388SAndreas.Sandberg@ARM.com    FnEvent *idleThreadEvent;
14510388SAndreas.Sandberg@ARM.com    //INSTRUMENTATION CODEGEN END
14610388SAndreas.Sandberg@ARM.com#endif //FS_MEASURE
14710388SAndreas.Sandberg@ARM.com
14810388SAndreas.Sandberg@ARM.com  private:
14910388SAndreas.Sandberg@ARM.com
15010388SAndreas.Sandberg@ARM.com    Addr kernelStart;
15110388SAndreas.Sandberg@ARM.com    Addr kernelEnd;
15210388SAndreas.Sandberg@ARM.com    Addr kernelEntry;
15310388SAndreas.Sandberg@ARM.com    bool bin;
15410388SAndreas.Sandberg@ARM.com
15510388SAndreas.Sandberg@ARM.com#ifdef FS_MEASURE
15610388SAndreas.Sandberg@ARM.com    std::multimap<const std::string, std::string> callerMap;
15710388SAndreas.Sandberg@ARM.com    void populateMap(std::string caller, std::string callee);
15811930Sandreas.sandberg@arm.com#endif
15910388SAndreas.Sandberg@ARM.com
16010388SAndreas.Sandberg@ARM.com  public:
16110388SAndreas.Sandberg@ARM.com    std::vector<RemoteGDB *>   remoteGDB;
16210388SAndreas.Sandberg@ARM.com    std::vector<GDBListener *> gdbListen;
16310388SAndreas.Sandberg@ARM.com
16410388SAndreas.Sandberg@ARM.com  public:
16510388SAndreas.Sandberg@ARM.com    LinuxSystem(const std::string _name,
16610602SAndreas.Sandberg@ARM.com                const uint64_t _init_param,
16710602SAndreas.Sandberg@ARM.com                MemoryController *_memCtrl,
16810388SAndreas.Sandberg@ARM.com                PhysicalMemory *_physmem,
16910388SAndreas.Sandberg@ARM.com                const std::string &kernel_path,
17010388SAndreas.Sandberg@ARM.com                const std::string &console_path,
17110388SAndreas.Sandberg@ARM.com                const std::string &palcode,
17210388SAndreas.Sandberg@ARM.com                const std::string &boot_osflags,
17310388SAndreas.Sandberg@ARM.com        const std::string &bootloader_path,
17411930Sandreas.sandberg@arm.com                                const bool _bin);
17510388SAndreas.Sandberg@ARM.com    ~LinuxSystem();
17613342Sgabeblack@google.com
17710388SAndreas.Sandberg@ARM.com    int registerExecContext(ExecContext *xc);
17810388SAndreas.Sandberg@ARM.com    void replaceExecContext(ExecContext *xc, int xcIndex);
17910388SAndreas.Sandberg@ARM.com
18011930Sandreas.sandberg@arm.com    Addr getKernelStart() const { return kernelStart; }
18110388SAndreas.Sandberg@ARM.com    Addr getKernelEnd() const { return kernelEnd; }
18213342Sgabeblack@google.com    Addr getKernelEntry() const { return kernelEntry; }
18310388SAndreas.Sandberg@ARM.com    bool breakpoint();
18410388SAndreas.Sandberg@ARM.com
18510388SAndreas.Sandberg@ARM.com    static void Printf(AlphaArguments args);
18610388SAndreas.Sandberg@ARM.com    static void DumpMbuf(AlphaArguments args);
18710388SAndreas.Sandberg@ARM.com
18810388SAndreas.Sandberg@ARM.com#ifdef FS_MEASURE
18910388SAndreas.Sandberg@ARM.com    bool findCaller(std::string callee, std::string caller) const;
19011930Sandreas.sandberg@arm.com    void dumpState(ExecContext *xc) const;
19110388SAndreas.Sandberg@ARM.com#endif //FS_MEASURE
19213342Sgabeblack@google.com};
19310388SAndreas.Sandberg@ARM.com
19410388SAndreas.Sandberg@ARM.com#endif // __LINUX_SYSTEM_HH__
19510388SAndreas.Sandberg@ARM.com