Hi, This patch solves a couple of issues with stepping a breakpoint while a signal becomes pending (in particular bug #4747 and #4889). Most of the patch is the addition of new tests based on funit-raise.S, modeled after funit-symbols.S, that contains several ways of raising an signal from an instruction on which a breakpoint has been put (divde by zero, illegal address, illegal instruction, syscall raising a terminating or ignored signal), this complements some earlier tests written (and now enabled with this patch) that raise an signal externally or through frysk-core (testCodeSignalInterrupt and testInstallCodeDuringCode). When an event interrupts our breakpoint stepping we now abort and reset the Breakpoint if it happened before the step or finish it if it happened after the step before handling the event. The code is pretty conservative in reverting everything related to the breakpoint step setup. This is necessary because we are mostly using reset stepping, so we want to set the breakpoint instruction back quickly, or other tasks that are still running could miss it, and in the case of out of line stepping we currently only have one out of line address available, so we need to return it to the Proc immediately so other tasks can use it (or a new breakpoint in this task is hit through the signal handler for example). frysk-core/frysk/proc/ChangeLog 2007-08-15 Mark Wielaard * getSetupAddress (getSetupAddress): New method. (stepAbort): Likewise. * TestTaskObserverCode.java (testCodeSignalInterrupt): Enable test. (testInstallCodeDuringCode): Likewise. (Symbol): New static helper class. (getGlobalLabelAddress): New helper method. (breakTest): New test harness for funit-raise. (testBreakDivZero): New test based on breakTest. (testBreakIllegalAddress): Likewise. (testBreakIllegalInstruction): Likewise. (testBreakSignalTerminate): Likewise. (testBreakSignalIgnore): Likewise. (AttachedObserver.task): New field. (updateAttached): Set task field. (TerminatingObserver.task): New field. (TerminatingObserver.signal): Likewise. (TerminatingObserver.value): Likewise. (TerminatingObserver.updateTerminating): Set new fields. frysk-core/frysk/proc/live/ChangeLog 2007-08-15 Mark Wielaard * LinuxTaskState.java (Stepping.handleTrappedpEvent): Always check steppingBreakpoint. (checkBreakpointStepping): New helper method. (handleSignaledEvent): Use checkBreakpointStepping before continuing. (handleStoppedEvent): Likewise. frysk-core/frysk/pkglibdir/ChangeLog 2007-08-15 Mark Wielaard * funit-raise.S: New test. Tested on x86_64 kernel 2.6.20 and 2.6.22 (fc6) and x86 kernel 2.6.20-xen and 2.6.22 (f7) both dual core machines. There were no regressions, but there are currently a lot of failures on both architectures which make comparisons of test results somewhat hard. So please let me know if you think this broke something for you. Cheers, Mark