diff options
Diffstat (limited to 'kern/freebsd')
-rw-r--r-- | kern/freebsd/freebsd_system.cc | 21 | ||||
-rw-r--r-- | kern/freebsd/freebsd_system.hh | 13 |
2 files changed, 23 insertions, 11 deletions
diff --git a/kern/freebsd/freebsd_system.cc b/kern/freebsd/freebsd_system.cc index 5e0ce113b..283713d40 100644 --- a/kern/freebsd/freebsd_system.cc +++ b/kern/freebsd/freebsd_system.cc @@ -48,18 +48,13 @@ using namespace std; FreebsdSystem::FreebsdSystem(Params *p) : System(p) { - Addr addr = 0; - /** * Any time DELAY is called just skip the function. + * Shouldn't we actually emulate the delay? */ - skipDelayEvent = new SkipFuncEvent(&pcEventQueue, "DELAY"); - if (kernelSymtab->findAddress("DELAY", addr)) - skipDelayEvent->schedule(addr+sizeof(MachInst)); - - skipCalibrateClocks = new FreebsdSkipCalibrateClocksEvent(&pcEventQueue, "calibrate_clocks"); - if (kernelSymtab->findAddress("calibrate_clocks", addr)) - skipCalibrateClocks->schedule(addr + sizeof(MachInst) * 2); + skipDelayEvent = addKernelFuncEvent<SkipFuncEvent>("DELAY"); + skipCalibrateClocks = + addKernelFuncEvent<SkipCalibrateClocksEvent>("calibrate_clocks"); } @@ -92,6 +87,14 @@ FreebsdSystem::doCalibrateClocks(ExecContext *xc) } +void +FreebsdSystem::SkipCalibrateClocksEvent::process(ExecContext *xc) +{ + SkipFuncEvent::process(xc); + ((FreebsdSystem *)xc->system)->doCalibrateClocks(xc); +} + + BEGIN_DECLARE_SIM_OBJECT_PARAMS(FreebsdSystem) Param<Tick> boot_cpu_frequency; diff --git a/kern/freebsd/freebsd_system.hh b/kern/freebsd/freebsd_system.hh index 6429b5690..ecb842ec6 100644 --- a/kern/freebsd/freebsd_system.hh +++ b/kern/freebsd/freebsd_system.hh @@ -29,13 +29,22 @@ #ifndef __KERN_FREEBSD_FREEBSD_SYSTEM_HH__ #define __KERN_FREEBSD_FREEBSD_SYSTEM_HH__ -#include "kern/freebsd/freebsd_events.hh" +#include "kern/system_events.hh" class FreebsdSystem : public System { private: + class SkipCalibrateClocksEvent : public SkipFuncEvent + { + public: + SkipCalibrateClocksEvent(PCEventQueue *q, const std::string &desc, + Addr addr) + : SkipFuncEvent(q, desc, addr) {} + virtual void process(ExecContext *xc); + }; + SkipFuncEvent *skipDelayEvent; - FreebsdSkipCalibrateClocksEvent *skipCalibrateClocks; + SkipCalibrateClocksEvent *skipCalibrateClocks; public: FreebsdSystem(Params *p); |