From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14433 invoked by alias); 9 Apr 2008 14:14:19 -0000 Received: (qmail 14404 invoked by uid 9112); 9 Apr 2008 14:14:18 -0000 Date: Wed, 09 Apr 2008 14:14:00 -0000 Message-ID: <20080409141418.14389.qmail@sourceware.org> From: mark@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Mark Task as justStarted when receiving an ExecedEvent. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: d1a490efa853a1a7c0d4c8f9c19e104950ade138 X-Git-Newrev: a3efa3a7e09b2760484ce7e6b0d67e74b170e8bb Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00069.txt.bz2 The branch, master has been updated via a3efa3a7e09b2760484ce7e6b0d67e74b170e8bb (commit) from d1a490efa853a1a7c0d4c8f9c19e104950ade138 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit a3efa3a7e09b2760484ce7e6b0d67e74b170e8bb Author: Mark Wielaard Date: Wed Apr 9 16:06:46 2008 +0200 Mark Task as justStarted when receiving an ExecedEvent. frysk-core/frysk/proc/ChangeLog 2008-04-09 Mark Wielaard * TestTaskObserverInstruction (testFirstInstructionAtEntry): New test. frysk-core/frysk/proc/live/ChangeLog 2008-04-09 Mark Wielaard * LinuxPtraceTaskState.java (Running.handleExecedEvent): Mark Task as justStarted. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/proc/ChangeLog | 5 +++ .../frysk/proc/TestTaskObserverInstruction.java | 27 ++++++++++++++++++++ frysk-core/frysk/proc/live/ChangeLog | 5 +++ .../frysk/proc/live/LinuxPtraceTaskState.java | 4 +++ 4 files changed, 41 insertions(+), 0 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/proc/ChangeLog b/frysk-core/frysk/proc/ChangeLog index ffcdbbf..eab7ef8 100644 --- a/frysk-core/frysk/proc/ChangeLog +++ b/frysk-core/frysk/proc/ChangeLog @@ -1,3 +1,8 @@ +2008-04-09 Mark Wielaard + + * TestTaskObserverInstruction (testFirstInstructionAtEntry): + New test. + 2008-04-07 Stan Cox * Host.java (requestCreateAttachedProc): Add libs parameter. Change diff --git a/frysk-core/frysk/proc/TestTaskObserverInstruction.java b/frysk-core/frysk/proc/TestTaskObserverInstruction.java index d5e3d2a..546a763 100644 --- a/frysk-core/frysk/proc/TestTaskObserverInstruction.java +++ b/frysk-core/frysk/proc/TestTaskObserverInstruction.java @@ -43,6 +43,9 @@ import frysk.testbed.TestLib; import frysk.testbed.Offspring; import frysk.testbed.SlaveOffspring; +import frysk.testbed.DaemonBlockedAtEntry; +import frysk.config.Config; + public class TestTaskObserverInstruction extends TestLib { public void testInstruction() @@ -136,6 +139,30 @@ public class TestTaskObserverInstruction extends TestLib assertTrue("InstructionObserver hit", instr.hit == 2); } + /** + * Tests stepping the very first instruction (actualy the start of the + * dynamic loader which is going to load the actual program). This is + * a nasty corner case since this isn't a "real step" but actually the + * kernel adjusting the task so that it will start running. + */ + public void testFirstInstructionAtEntry() + { + DaemonBlockedAtEntry daemon; + daemon = new DaemonBlockedAtEntry(Config.getPkgLibFile("funit-child")); + Task task = daemon.getMainTask(); + + InstructionObserver instr = new InstructionObserver(); + task.requestAddInstructionObserver(instr); + assertRunUntilStop("add InstructionObserver"); + assertTrue("InstructionObserver added", instr.added); + assertTrue("InstructionObserver hit", instr.hit == 1); + + daemon.requestUnblock(); + task.requestUnblock(instr); + assertRunUntilStop("step first instruction"); + assertTrue("InstructionObserver hit again", instr.hit == 2); + } + private class StepAttachedObserver implements TaskAttachedObserverXXX { private final InstructionObserver instr; diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog index 99e9c3a..1435679 100644 --- a/frysk-core/frysk/proc/live/ChangeLog +++ b/frysk-core/frysk/proc/live/ChangeLog @@ -1,3 +1,8 @@ +2008-04-09 Mark Wielaard + + * LinuxPtraceTaskState.java (Running.handleExecedEvent): Mark + Task as justStarted. + 2008-04-08 Phil Muldoon Mark Wielaard diff --git a/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java b/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java index 3e590c4..9a71530 100644 --- a/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java +++ b/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java @@ -891,6 +891,10 @@ abstract class LinuxPtraceTaskState extends State { ((TaskObservation) i.next()).delete(); } + // Mark this LinuxPtraceTask as just started. See + // Running.handleTrapped for more explanation. + task.justStartedXXX = true; + if (task.notifyExeced() > 0) { return (task.syscallObservers.numberOfObservers() > 0 ? syscallBlockedInSyscallContinue hooks/post-receive -- frysk system monitor/debugger