diff options
Diffstat (limited to 'src/arch/alpha/system.cc')
-rw-r--r-- | src/arch/alpha/system.cc | 70 |
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 } /** |