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