diff options
Diffstat (limited to 'sim/system.hh')
-rw-r--r-- | sim/system.hh | 136 |
1 files changed, 87 insertions, 49 deletions
diff --git a/sim/system.hh b/sim/system.hh index da974cfdd..07881ff01 100644 --- a/sim/system.hh +++ b/sim/system.hh @@ -32,85 +32,123 @@ #include <string> #include <vector> -#include "base/loader/symtab.hh" #include "base/statistics.hh" #include "cpu/pc_event.hh" #include "kern/system_events.hh" #include "sim/sim_object.hh" -#include "sim/sw_context.hh" class MemoryController; class PhysicalMemory; class Platform; class RemoteGDB; class GDBListener; - +class SymbolTable; +class ObjectFile; class ExecContext; +namespace Kernel { class Binning; } class System : public SimObject { - // lisa's binning stuff - private: - std::map<const std::string, Stats::MainBin *> fnBins; - std::map<const Addr, SWContext *> swCtxMap; + public: + MemoryController *memctrl; + PhysicalMemory *physmem; + Platform *platform; + PCEventQueue pcEventQueue; + uint64_t init_param; - protected: - std::vector<FnEvent *> fnEvents; + std::vector<ExecContext *> execContexts; - public: - Stats::Scalar<> fnCalls; - Stats::MainBin *Kernel; - Stats::MainBin *User; + /** kernel Symbol table */ + SymbolTable *kernelSymtab; - Stats::MainBin * getBin(const std::string &name); - bool findCaller(std::string, std::string) const; + /** console symbol table */ + SymbolTable *consoleSymtab; - SWContext *findContext(Addr pcb); - bool addContext(Addr pcb, SWContext *ctx) { - return (swCtxMap.insert(make_pair(pcb, ctx))).second; - } - void remContext(Addr pcb) { - swCtxMap.erase(pcb); - return; - } - void dumpState(ExecContext *xc) const; + /** pal symbol table */ + SymbolTable *palSymtab; - virtual void serialize(std::ostream &os); - virtual void unserialize(Checkpoint *cp, const std::string §ion); + /** Object pointer for the kernel code */ + ObjectFile *kernel; + /** Object pointer for the console code */ + ObjectFile *console; - private: - std::multimap<const std::string, std::string> callerMap; - void populateMap(std::string caller, std::string callee); -// + /** Object pointer for the PAL code */ + ObjectFile *pal; - public: - const uint64_t init_param; - MemoryController *memCtrl; - PhysicalMemory *physmem; - Platform *platform; - bool bin; - std::vector<string> binned_fns; + /** Begining of kernel code */ + Addr kernelStart; - PCEventQueue pcEventQueue; + /** End of kernel code */ + Addr kernelEnd; - std::vector<ExecContext *> execContexts; + /** Entry point in the kernel to start at */ + Addr kernelEntry; - std::string readfile; + Kernel::Binning *kernelBinning; - virtual int registerExecContext(ExecContext *xc); - virtual void replaceExecContext(int xcIndex, ExecContext *xc); +#ifdef DEBUG + /** Event to halt the simulator if the console calls panic() */ + BreakPCEvent *consolePanicEvent; +#endif public: - System(const std::string _name, const uint64_t _init_param, - MemoryController *, PhysicalMemory *, const bool, - const std::vector<string> &binned_fns); + std::vector<RemoteGDB *> remoteGDB; + std::vector<GDBListener *> gdbListen; + bool breakpoint(); + + public: + struct Params + { + std::string name; + MemoryController *memctrl; + PhysicalMemory *physmem; + uint64_t init_param; + bool bin; + std::vector<std::string> binned_fns; + bool bin_int; + + std::string kernel_path; + std::string console_path; + std::string palcode; + std::string boot_osflags; + + std::string readfile; + uint64_t system_type; + uint64_t system_rev; + }; + Params *params; + + System(Params *p); ~System(); - virtual Addr getKernelStart() const = 0; - virtual Addr getKernelEnd() const = 0; - virtual Addr getKernelEntry() const = 0; - virtual bool breakpoint() = 0; + void startup(); + + public: + /** + * Returns the addess the kernel starts at. + * @return address the kernel starts at + */ + Addr getKernelStart() const { return kernelStart; } + + /** + * Returns the addess the kernel ends at. + * @return address the kernel ends at + */ + Addr getKernelEnd() const { return kernelEnd; } + + /** + * Returns the addess the entry point to the kernel code. + * @return entry point of the kernel code + */ + Addr getKernelEntry() const { return kernelEntry; } + + int registerExecContext(ExecContext *xc); + void replaceExecContext(ExecContext *xc, int xcIndex); + + void regStats(); + void serialize(std::ostream &os); + void unserialize(Checkpoint *cp, const std::string §ion); public: //////////////////////////////////////////// |