bds@lzaz.ATT.COM (Bruce Szablak) (01/19/90)
I'm attempting to port my Minix debugger to TOS, and I'm having a difficulty that perhaps some TOS guru can quickly identify for me. Consider the following pseudo-code fragment (taken from memory): Pexec(LOAD-DON'T-GO,...) move user stack to static buffer Pexec(GO,...) Cconws("Program terminated.") ... This code works fine: program starts up, proceeds until requested to exit. Now consider the following: Pexec(LOAD-DON'T-GO,...) save registers and insert breakpoint at start of loaded program move user stack to static buffer Pexec(GO,...) Cconws("Program terminated.") ... break entrypoint : Save registers and restore debugger's registers ... return to process entry point: Save registers and restore process's registers RTE (I've ommitted obvious details like setting up vectors etc. I'm using a trap #0 instruction for the breakpoint.) The above code works great (breakpoint hit, additional breakpoints can be set, process can be single stepped, etc.) but when I "continue" the child process the system locks up at the point that the child should exit: i.e. in Pterm() (and no "Program terminated" message is seen). Since I'm using a local stack arena to do the Pexec (which shouldn't get trashed), and the process executes just fine after returning from the debugger, I don't understand the lock up at all. The test program can be as simple as: main() { Pterm0(); } I've also tried calling a C function that in turn did the Pexec (to make sure the base register was set up correctly). Any suggestions?