summaryrefslogtreecommitdiff
path: root/src/arch/alpha/system.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/alpha/system.cc')
-rw-r--r--src/arch/alpha/system.cc70
1 files changed, 46 insertions, 24 deletions
diff --git a/src/arch/alpha/system.cc b/src/arch/alpha/system.cc
index 8d6629169..51e1d7e07 100644
--- a/src/arch/alpha/system.cc
+++ b/src/arch/alpha/system.cc
@@ -63,6 +63,27 @@ AlphaSystem::AlphaSystem(Params *p)
pal = createObjectFile(params()->pal);
if (pal == NULL)
fatal("Could not load PALcode file %s", params()->pal);
+
+ // load symbols
+ if (!console->loadGlobalSymbols(consoleSymtab))
+ panic("could not load console symbols\n");
+
+ if (!pal->loadGlobalSymbols(palSymtab))
+ panic("could not load pal symbols\n");
+
+ if (!pal->loadLocalSymbols(palSymtab))
+ panic("could not load pal symbols\n");
+
+ if (!console->loadGlobalSymbols(debugSymbolTable))
+ panic("could not load console symbols\n");
+
+ if (!pal->loadGlobalSymbols(debugSymbolTable))
+ panic("could not load pal symbols\n");
+
+ if (!pal->loadLocalSymbols(debugSymbolTable))
+ panic("could not load pal symbols\n");
+
+
}
AlphaSystem::~AlphaSystem()
@@ -78,6 +99,8 @@ AlphaSystem::~AlphaSystem()
void
AlphaSystem::initState()
{
+ Addr addr = 0;
+
// Moved from the constructor to here since it relies on the
// address map being resolved in the interconnect
@@ -88,30 +111,6 @@ AlphaSystem::initState()
pal->loadSections(physProxy, loadAddrMask);
console->loadSections(physProxy, loadAddrMask);
- // load symbols
- if (!console->loadGlobalSymbols(consoleSymtab))
- panic("could not load console symbols\n");
-
- if (!pal->loadGlobalSymbols(palSymtab))
- panic("could not load pal symbols\n");
-
- if (!pal->loadLocalSymbols(palSymtab))
- panic("could not load pal symbols\n");
-
- if (!console->loadGlobalSymbols(debugSymbolTable))
- panic("could not load console symbols\n");
-
- if (!pal->loadGlobalSymbols(debugSymbolTable))
- panic("could not load pal symbols\n");
-
- if (!pal->loadLocalSymbols(debugSymbolTable))
- panic("could not load pal symbols\n");
-
- Addr addr = 0;
-#ifndef NDEBUG
- consolePanicEvent = addConsoleFuncEvent<BreakPCEvent>("panic");
-#endif
-
/**
* Copy the osflags (kernel arguments) into the consoles
* memory. (Presently Linux does not use the console service
@@ -135,6 +134,29 @@ AlphaSystem::initState()
virtProxy.write(addr+0x58, data);
} else
panic("could not find hwrpb\n");
+
+ // Setup all the function events now that we have a system and a symbol
+ // table
+ setupFuncEvents();
+}
+
+void
+AlphaSystem::loadState(Checkpoint *cp)
+{
+ System::loadState(cp);
+
+ // Setup all the function events now that we have a system and a symbol
+ // table
+ setupFuncEvents();
+
+}
+
+void
+AlphaSystem::setupFuncEvents()
+{
+#ifndef NDEBUG
+ consolePanicEvent = addConsoleFuncEvent<BreakPCEvent>("panic");
+#endif
}
/**