summaryrefslogtreecommitdiff
path: root/kern/tru64/tru64_system.cc
diff options
context:
space:
mode:
Diffstat (limited to 'kern/tru64/tru64_system.cc')
-rw-r--r--kern/tru64/tru64_system.cc46
1 files changed, 26 insertions, 20 deletions
diff --git a/kern/tru64/tru64_system.cc b/kern/tru64/tru64_system.cc
index 823a00e5a..a7940ed1f 100644
--- a/kern/tru64/tru64_system.cc
+++ b/kern/tru64/tru64_system.cc
@@ -72,10 +72,6 @@ Tru64System::Tru64System(const string _name, const uint64_t _init_param,
fatal("Could not load PALcode file %s", palcode);
pal->loadSections(physmem, true);
- // copy of initial reg file contents
- initRegs = new RegFile;
- memset(initRegs, 0, sizeof(RegFile));
-
// Load console file
console->loadSections(physmem, true);
@@ -90,10 +86,6 @@ Tru64System::Tru64System(const string _name, const uint64_t _init_param,
"Kernel entry = %#x\n",
kernelStart, kernelEnd, kernelEntry);
- // Setup kernel boot parameters
- initRegs->pc = 0x4001;
- initRegs->npc = initRegs->pc + sizeof(MachInst);
-
DPRINTF(Loader, "Kernel loaded...\n");
kernelPanicEvent = new BreakPCEvent(&pcEventQueue, "kernel panic");
@@ -164,8 +156,6 @@ Tru64System::Tru64System(const string _name, const uint64_t _init_param,
Tru64System::~Tru64System()
{
- delete initRegs;
-
delete kernel;
delete console;
@@ -184,24 +174,40 @@ Tru64System::~Tru64System()
}
-void
-Tru64System::init(ExecContext *xc)
+int
+Tru64System::registerExecContext(ExecContext *xc)
{
- xc->regs = *initRegs;
+ int xcIndex = System::registerExecContext(xc);
+
+ if (xcIndex == 0) {
+ xc->setStatus(ExecContext::Active);
+ }
+
+ RemoteGDB *rgdb = new RemoteGDB(this, xc);
+ GDBListener *gdbl = new GDBListener(rgdb, 7000 + xcIndex);
+ gdbl->listen();
- remoteGDB = new RemoteGDB(this, xc);
- gdbListen = new GDBListener(remoteGDB, 7000);
- gdbListen->listen();
+ if (remoteGDB.size() <= xcIndex) {
+ remoteGDB.resize(xcIndex+1);
+ }
+
+ remoteGDB[xcIndex] = rgdb;
+
+ return xcIndex;
+}
- // Reset the system
- //
- TheISA::init(physmem, &xc->regs);
+
+void
+Tru64System::replaceExecContext(ExecContext *xc, int xcIndex)
+{
+ System::replaceExecContext(xcIndex, xc);
+ remoteGDB[xcIndex]->replaceExecContext(xc);
}
bool
Tru64System::breakpoint()
{
- return remoteGDB->trap(ALPHA_KENTRY_IF);
+ return remoteGDB[0]->trap(ALPHA_KENTRY_IF);
}
BEGIN_DECLARE_SIM_OBJECT_PARAMS(Tru64System)