summaryrefslogtreecommitdiff
path: root/kern/linux
diff options
context:
space:
mode:
Diffstat (limited to 'kern/linux')
-rw-r--r--kern/linux/linux_system.cc108
-rw-r--r--kern/linux/linux_system.hh23
2 files changed, 17 insertions, 114 deletions
diff --git a/kern/linux/linux_system.cc b/kern/linux/linux_system.cc
index 0e0f141b6..a0000fe33 100644
--- a/kern/linux/linux_system.cc
+++ b/kern/linux/linux_system.cc
@@ -45,17 +45,16 @@
extern SymbolTable *debugSymbolTable;
-//un-comment this to see the state of call stack when it changes.
-//#define SW_DEBUG
-
using namespace std;
LinuxSystem::LinuxSystem(const string _name, const uint64_t _init_param,
MemoryController *_memCtrl, PhysicalMemory *_physmem,
const string &kernel_path, const string &console_path,
const string &palcode, const string &boot_osflags,
- const string &bootloader_path, const bool _bin)
- : System(_name, _init_param, _memCtrl, _physmem, _bin), bin(_bin)
+ const string &bootloader_path, const bool _bin,
+ const vector<string> &_binned_fns)
+ : System(_name, _init_param, _memCtrl, _physmem, _bin, _binned_fns),
+ bin(_bin), binned_fns(_binned_fns)
{
kernelSymtab = new SymbolTable;
consoleSymtab = new SymbolTable;
@@ -122,13 +121,6 @@ LinuxSystem::LinuxSystem(const string _name, const uint64_t _init_param,
consolePanicEvent = new BreakPCEvent(&pcEventQueue, "console panic");
#endif
- badaddrEvent = new LinuxBadAddrEvent(&pcEventQueue, "badaddr");
- skipPowerStateEvent = new LinuxSkipFuncEvent(&pcEventQueue,
- "tl_v48_capture_power_state");
- skipScavengeBootEvent = new LinuxSkipFuncEvent(&pcEventQueue,
- "pmap_scavenge_boot");
- printfEvent = new LinuxPrintfEvent(&pcEventQueue, "printf");
-
skipIdeDelay50msEvent = new LinuxSkipIdeDelay50msEvent(&pcEventQueue,
"ide_delay_50ms");
@@ -137,13 +129,6 @@ LinuxSystem::LinuxSystem(const string _name, const uint64_t _init_param,
skipCacheProbeEvent = new LinuxSkipFuncEvent(&pcEventQueue, "determine_cpu_caches");
- /* debugPrintfEvent = new DebugPrintfEvent(&pcEventQueue,
- "debug_printf", false);
- debugPrintfrEvent = new DebugPrintfEvent(&pcEventQueue,
- "debug_printfr", true);
- dumpMbufEvent = new DumpMbufEvent(&pcEventQueue, "dump_mbuf");
-*/
-
Addr addr = 0;
if (kernelSymtab->findAddress("est_cycle_freq", addr)) {
@@ -197,17 +182,6 @@ LinuxSystem::LinuxSystem(const string _name, const uint64_t _init_param,
consolePanicEvent->schedule(addr);
#endif
- if (kernelSymtab->findAddress("badaddr", addr))
- badaddrEvent->schedule(addr);
- // else
- //panic("could not find kernel symbol \'badaddr\'");
-
- if (kernelSymtab->findAddress("tl_v48_capture_power_state", addr))
- skipPowerStateEvent->schedule(addr);
-
- if (kernelSymtab->findAddress("pmap_scavenge_boot", addr))
- skipScavengeBootEvent->schedule(addr);
-
if (kernelSymtab->findAddress("ide_delay_50ms", addr))
skipIdeDelay50msEvent->schedule(addr+8);
@@ -216,20 +190,6 @@ LinuxSystem::LinuxSystem(const string _name, const uint64_t _init_param,
if (kernelSymtab->findAddress("determine_cpu_caches", addr))
skipCacheProbeEvent->schedule(addr+8);
-
-#if TRACING_ON
- if (kernelSymtab->findAddress("printk", addr))
- printfEvent->schedule(addr);
-
- if (kernelSymtab->findAddress("m5printf", addr))
- debugPrintfEvent->schedule(addr);
-
- if (kernelSymtab->findAddress("m5printfr", addr))
- debugPrintfrEvent->schedule(addr);
-
- if (kernelSymtab->findAddress("m5_dump_mbuf", addr))
- dumpMbufEvent->schedule(addr);
-#endif
}
LinuxSystem::~LinuxSystem()
@@ -243,14 +203,9 @@ LinuxSystem::~LinuxSystem()
delete kernelPanicEvent;
delete consolePanicEvent;
- delete badaddrEvent;
- delete skipPowerStateEvent;
- delete skipScavengeBootEvent;
- delete printfEvent;
- /*delete debugPrintfEvent;
- delete debugPrintfrEvent;
- delete dumpMbufEvent;
-*/
+ delete skipIdeDelay50msEvent;
+ delete skipDelayLoopEvent;
+ delete skipCacheProbeEvent;
}
void
@@ -309,48 +264,6 @@ LinuxSystem::breakpoint()
return remoteGDB[0]->trap(ALPHA_KENTRY_IF);
}
-void
-LinuxSystem::populateMap(std::string callee, std::string caller)
-{
- multimap<const string, string>::const_iterator i;
- i = callerMap.insert(make_pair(callee, caller));
- assert(i != callerMap.end() && "should not fail populating callerMap");
-}
-
-bool
-LinuxSystem::findCaller(std::string callee, std::string caller) const
-{
- typedef multimap<const std::string, std::string>::const_iterator iter;
- pair<iter, iter> range;
-
- range = callerMap.equal_range(callee);
- for (iter i = range.first; i != range.second; ++i) {
- if ((*i).second == caller)
- return true;
- }
- return false;
-}
-
-void
-LinuxSystem::dumpState(ExecContext *xc) const
-{
-#ifndef SW_DEBUG
- return;
-#endif
- if (xc->swCtx) {
- stack<fnCall *> copy(xc->swCtx->callStack);
- if (copy.empty())
- return;
- cprintf("xc->swCtx:\n");
- fnCall *top;
- cprintf("|| call: %d\n",xc->swCtx->calls);
- for (top = copy.top(); !copy.empty(); copy.pop() ) {
- top = copy.top();
- cprintf("|| %13s : %s \n", top->name, top->myBin->name());
- }
- }
-}
-
BEGIN_DECLARE_SIM_OBJECT_PARAMS(LinuxSystem)
Param<bool> bin;
@@ -363,6 +276,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(LinuxSystem)
Param<string> pal_code;
Param<string> boot_osflags;
Param<string> bootloader_code;
+ VectorParam<string> binned_fns;
END_DECLARE_SIM_OBJECT_PARAMS(LinuxSystem)
@@ -378,7 +292,8 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(LinuxSystem)
INIT_PARAM(pal_code, "file that contains palcode"),
INIT_PARAM_DFLT(boot_osflags, "flags to pass to the kernel during boot",
"a"),
- INIT_PARAM(bootloader_code, "file that contains the bootloader")
+ INIT_PARAM(bootloader_code, "file that contains the bootloader"),
+ INIT_PARAM(binned_fns, "functions to be broken down and binned")
END_INIT_SIM_OBJECT_PARAMS(LinuxSystem)
@@ -387,7 +302,8 @@ CREATE_SIM_OBJECT(LinuxSystem)
{
LinuxSystem *sys = new LinuxSystem(getInstanceName(), init_param, mem_ctl,
physmem, kernel_code, console_code,
- pal_code, boot_osflags, bootloader_code, bin);
+ pal_code, boot_osflags, bootloader_code,
+ bin, binned_fns);
return sys;
}
diff --git a/kern/linux/linux_system.hh b/kern/linux/linux_system.hh
index 93f765ba1..3b65e7379 100644
--- a/kern/linux/linux_system.hh
+++ b/kern/linux/linux_system.hh
@@ -64,16 +64,9 @@ class LinuxSystem : public System
BreakPCEvent *kernelPanicEvent;
BreakPCEvent *consolePanicEvent;
- LinuxBadAddrEvent *badaddrEvent;
- LinuxSkipFuncEvent *skipPowerStateEvent;
- LinuxSkipFuncEvent *skipScavengeBootEvent;
LinuxSkipFuncEvent *skipCacheProbeEvent;
LinuxSkipIdeDelay50msEvent *skipIdeDelay50msEvent;
LinuxSkipDelayLoopEvent *skipDelayLoopEvent;
- LinuxPrintfEvent *printfEvent;
- LinuxDebugPrintfEvent *debugPrintfEvent;
- LinuxDebugPrintfEvent *debugPrintfrEvent;
- LinuxDumpMbufEvent *dumpMbufEvent;
private:
@@ -81,9 +74,7 @@ class LinuxSystem : public System
Addr kernelEnd;
Addr kernelEntry;
bool bin;
-
- std::multimap<const std::string, std::string> callerMap;
- void populateMap(std::string caller, std::string callee);
+ std::vector<string> binned_fns;
public:
std::vector<RemoteGDB *> remoteGDB;
@@ -98,8 +89,10 @@ class LinuxSystem : public System
const std::string &console_path,
const std::string &palcode,
const std::string &boot_osflags,
- const std::string &bootloader_path,
- const bool _bin);
+ const std::string &bootloader_path,
+ const bool _bin,
+ const std::vector<std::string> &_binned_fns);
+
~LinuxSystem();
void setDelayLoop(ExecContext *xc);
@@ -111,12 +104,6 @@ class LinuxSystem : public System
Addr getKernelEnd() const { return kernelEnd; }
Addr getKernelEntry() const { return kernelEntry; }
bool breakpoint();
-
- static void Printf(AlphaArguments args);
- static void DumpMbuf(AlphaArguments args);
-
- bool findCaller(std::string callee, std::string caller) const;
- void dumpState(ExecContext *xc) const;
};
#endif // __LINUX_SYSTEM_HH__