From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12150 invoked by alias); 4 Jan 2008 23:05:46 -0000 Received: (qmail 12091 invoked by uid 367); 4 Jan 2008 23:05:31 -0000 Date: Fri, 04 Jan 2008 23:05:00 -0000 Message-ID: <20080104230531.12076.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Push the Task notify code into LinuxPtraceTask. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 36d3c3df1ee1a988cc5ee922f9f4652e9b8789b3 X-Git-Newrev: a0079985d4dda172b0a672fd1c73b647ac5bee35 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-q1/txt/msg00018.txt.bz2 The branch, master has been updated via a0079985d4dda172b0a672fd1c73b647ac5bee35 (commit) via 99efe6881517f4600199d07c24ca040da70b72eb (commit) via c43833bc36ef5c19cec682f48b4cfed3d0ba86af (commit) via ebff8ac5406157b84742901b3d36e391c17d2e27 (commit) via 6a48b4753eb27965a07cc13f8579da76e4b7f8ee (commit) via da9637baf507a0f780cf6921ff92e2beb3f99032 (commit) from 36d3c3df1ee1a988cc5ee922f9f4652e9b8789b3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit a0079985d4dda172b0a672fd1c73b647ac5bee35 Author: Andrew Cagney Date: Fri Jan 4 18:00:57 2008 -0500 Push the Task notify code into LinuxPtraceTask. frysk-core/frysk/proc/ChangeLog 2008-01-04 Andrew Cagney * TaskObservable.java: Make public. * Task.java (terminatingObservers): Delete. (notifyTerminating(boolean,int)): Delete. (terminatedObservers, notifyTerminated(boolean,int)): Delete. (execedObservers, notifyExeced()): Delete. (attachedObservers, notifyAttached()): Delete. (signaledObservers, notifySignaled(int)): Delete. (syscallObservers, notifySyscallEnter(), notifySyscallExit): Delete. (clonedObservers, notifyClonedParent(Task)) (notifyClonedOfspring()): Delete. (forkedObservers, notifyForkedParent(Task)) (notifyForkedOfspring()): Delete. (instructionObservers, notifyInstruction()): Delete. (codeObservers, notifyCodeBreakpoint()): New. frysk-core/frysk/proc/live/ChangeLog 2008-01-04 Andrew Cagney * LinuxPtraceTask.java (terminatingObservers): New. (notifyTerminating(boolean,int)): New. (terminatedObservers, notifyTerminated(boolean,int)): New. (execedObservers, notifyExeced()): New. (signaledObservers, notifySignaled(int)): New. (syscallObservers, notifySyscallEnter(), notifySyscallExit()): New. (clonedObservers, notifyClonedParent(Task)) (notifyClonedOfspring()): New. (forkedObservers, notifyForkedParent(Task)) (notifyForkedOfspring()): New. (instructionObservers, notifyInstruction()): New. (attachedObservers, notifyAttached()): New. (codeObservers, notifyCodeBreakpoint()): New. * LinuxPtraceProc.java: Update. commit 99efe6881517f4600199d07c24ca040da70b72eb Author: Andrew Cagney Date: Fri Jan 4 15:21:12 2008 -0500 Move removeObservers to LinuxPtraceTask. frysk-core/frysk/proc/ChangeLog 2008-01-04 Andrew Cagney * Task.java (removeObservers()): Delete. frysk-core/frysk/proc/live/ChangeLog 2008-01-04 Andrew Cagney * LinuxPtraceTask.java (removeObservers()): Copied to here from frysk.proc.Task. commit c43833bc36ef5c19cec682f48b4cfed3d0ba86af Author: Andrew Cagney Date: Fri Jan 4 14:26:35 2008 -0500 Make Proc's perform methods local to LinuxPtraceProc. frysk-core/frysk/proc/ChangeLog 2008-01-04 Andrew Cagney * Proc.java (performRemoval()): Delete. (performTaskAttachCompleted(Task)): Delete. (performTaskDetachCompleted(Task)): Delete. (performTaskDetachCompleted(Task,Task)): Delete. frysk-core/frysk/proc/dead/ChangeLog 2008-01-04 Andrew Cagney * DeadProc.java (performRemoval()): Delete. (performTaskAttachCompleted(Task)): Delete. (performTaskDetachCompleted(Task)): Delete. (performTaskDetachCompleted(Task,Task)): Delete. frysk-core/frysk/proc/dummy/ChangeLog 2008-01-04 Andrew Cagney * DummyProc.java (performRemoval()): Delete. (performTaskAttachCompleted(Task)): Delete. (performTaskDetachCompleted(Task)): Delete. (performTaskDetachCompleted(Task,Task)): Delete. frysk-core/frysk/proc/live/ChangeLog 2008-01-04 Andrew Cagney * LinuxPtraceProc.java (performRemoval()): Make package-private. (performTaskAttachCompleted(Task)): Ditto. (performTaskDetachCompleted(Task)): Ditto. (performTaskDetachCompleted(Task,Task)): Ditto. * LinuxPtraceTaskState.java: Update. * LinuxPtraceHost.java: Update. commit ebff8ac5406157b84742901b3d36e391c17d2e27 Author: Andrew Cagney Date: Fri Jan 4 14:00:43 2008 -0500 Make send methods local to LinuxPtraceProc. frysk-core/frysk/proc/ChangeLog 2008-01-04 Andrew Cagney * Task.java (sendContinue(int)): Delete. (sendSyscallContinue(int)): Delete. (sendStepInstruction(int)): Delete. (sendStop()): Delete. (sendSetOptions()): Delete. (sendAttach()): Delete. (sendDetach()): Delete. (startTracingSyscalls()): Delete. (stopTracingSyscalls()): Delete. frysk-core/frysk/proc/live/ChangeLog 2008-01-04 Andrew Cagney * LinuxPtraceProc.java (SyscallAction): Replace Task with LinuxPtraceTask. commit 6a48b4753eb27965a07cc13f8579da76e4b7f8ee Author: Andrew Cagney Date: Fri Jan 4 13:36:34 2008 -0500 Make state actions local to LinuxPtraceTask. frysk-core/frysk/proc/ChangeLog 2008-01-04 Andrew Cagney * Task.java (performRemoval()): Delete. (performContinue()): Delete. (performAttach(boolean)): Delete. (performDetach(boolean)): Delete. (handleUnblock(TaskObserver)): Delete. * TaskObservation.java: Update. frysk-core/frysk/proc/dead/ChangeLog 2008-01-04 Andrew Cagney * DeadTask.java (performRemoval()): Delete. (performContinue()): Delete. (performAttach(boolean)): Delete. (performDetach(boolean)): Delete. (handleUnblock(TaskObserver)): Delete. frysk-core/frysk/proc/dummy/ChangeLog 2008-01-04 Andrew Cagney * DummyTask.java (performRemoval()): Delete. (performContinue()): Delete. (performAttach(boolean)): Delete. (performDetach(boolean)): Delete. (handleUnblock(TaskObserver)): Delete. frysk-core/frysk/proc/live/ChangeLog 2008-01-04 Andrew Cagney * LinuxPtraceTask.java (performRemoval()): Make package-private.. (performContinue()): Ditto. (performAttach(boolean)): Ditto. (performDetach(boolean)): Ditto. (handleUnblock(TaskObserver)): Ditto.. * LinuxPtraceProc.java: Update. commit da9637baf507a0f780cf6921ff92e2beb3f99032 Author: Andrew Cagney Date: Fri Jan 4 13:17:00 2008 -0500 In LinuxPtrace*State use LinuxPtraceTask and LinuxPtraceProc. frysk-core/frysk/proc/live/ChangeLog 2008-01-04 Andrew Cagney * LinuxPtraceTaskState.java: Replace Task with LinuxPtraceTask and Proc with LinuxPtraceProc. * LinuxPtraceProcState.java: Ditto. * LinuxPtraceProc.java: Update. * LinuxPtraceTask.java: Update. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/proc/ChangeLog | 39 ++ frysk-core/frysk/proc/Proc.java | 31 -- frysk-core/frysk/proc/Task.java | 435 +------------------- frysk-core/frysk/proc/TaskObservable.java | 9 +- frysk-core/frysk/proc/dead/ChangeLog | 11 + frysk-core/frysk/proc/dead/DeadProc.java | 47 --- frysk-core/frysk/proc/dead/DeadTask.java | 43 -- frysk-core/frysk/proc/dummy/ChangeLog | 11 + frysk-core/frysk/proc/dummy/DummyProc.java | 12 - frysk-core/frysk/proc/dummy/DummyTask.java | 15 - frysk-core/frysk/proc/live/ChangeLog | 42 ++- frysk-core/frysk/proc/live/LinuxPtraceHost.java | 2 +- frysk-core/frysk/proc/live/LinuxPtraceProc.java | 35 +- .../frysk/proc/live/LinuxPtraceProcState.java | 83 ++-- frysk-core/frysk/proc/live/LinuxPtraceTask.java | 300 +++++++++++++- .../frysk/proc/live/LinuxPtraceTaskState.java | 303 +++++++------- 16 files changed, 605 insertions(+), 813 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/proc/ChangeLog b/frysk-core/frysk/proc/ChangeLog index 5842faa..45d48bb 100644 --- a/frysk-core/frysk/proc/ChangeLog +++ b/frysk-core/frysk/proc/ChangeLog @@ -1,5 +1,44 @@ 2008-01-04 Andrew Cagney + * TaskObservable.java: Make public. + * Task.java (terminatingObservers): Delete. + (notifyTerminating(boolean,int)): Delete. + (terminatedObservers, notifyTerminated(boolean,int)): Delete. + (execedObservers, notifyExeced()): Delete. + (attachedObservers, notifyAttached()): Delete. + (signaledObservers, notifySignaled(int)): Delete. + (syscallObservers, notifySyscallEnter(), notifySyscallExit): Delete. + (clonedObservers, notifyClonedParent(Task)) + (notifyClonedOfspring()): Delete. + (forkedObservers, notifyForkedParent(Task)) + (notifyForkedOfspring()): Delete. + (instructionObservers, notifyInstruction()): Delete. + (codeObservers, notifyCodeBreakpoint()): New. + + * Task.java (removeObservers()): Delete. + + * Proc.java (performRemoval()): Delete. + (performTaskAttachCompleted(Task)): Delete. + (performTaskDetachCompleted(Task)): Delete. + (performTaskDetachCompleted(Task,Task)): Delete. + + * Task.java (sendContinue(int)): Delete. + (sendSyscallContinue(int)): Delete. + (sendStepInstruction(int)): Delete. + (sendStop()): Delete. + (sendSetOptions()): Delete. + (sendAttach()): Delete. + (sendDetach()): Delete. + (startTracingSyscalls()): Delete. + (stopTracingSyscalls()): Delete. + + * Task.java (performRemoval()): Delete. + (performContinue()): Delete. + (performAttach(boolean)): Delete. + (performDetach(boolean)): Delete. + (handleUnblock(TaskObserver)): Delete. + * TaskObservation.java: Update. + * Host.java (getSelf()): Make abstract. (sendrecSelf()): Delete. (self): Delete. diff --git a/frysk-core/frysk/proc/Proc.java b/frysk-core/frysk/proc/Proc.java index ddc5cf0..7428700 100644 --- a/frysk-core/frysk/proc/Proc.java +++ b/frysk-core/frysk/proc/Proc.java @@ -336,37 +336,6 @@ public abstract class Proc { */ public abstract void requestRefresh(); - /** - * (Internal) Tell the process that is no longer listed in the - * system table remove itself. - * - * XXX: This should not be public. - */ - public abstract void performRemoval(); - - /** - *(Internal) Tell the process that the corresponding task has - * completed its attach. - * - * XXX: Should not be public. - */ - public abstract void performTaskAttachCompleted(Task theTask); - - /** - * (Internal) Tell the process that the corresponding task has - * completed its detach. - * - * XXX: Should not be public. - */ - public abstract void performTaskDetachCompleted(Task theTask); - - /** - * (Internal) Tell the process that the corresponding task has - * completed its detach. - */ - protected abstract void performTaskDetachCompleted(Task theTask, - Task theClone); - protected abstract void performDetach(); /** diff --git a/frysk-core/frysk/proc/Task.java b/frysk-core/frysk/proc/Task.java index 56ff8b4..359f248 100644 --- a/frysk-core/frysk/proc/Task.java +++ b/frysk-core/frysk/proc/Task.java @@ -39,15 +39,13 @@ package frysk.proc; -import frysk.syscall.Syscall; +import frysk.proc.TaskObserver.Terminating; import frysk.syscall.SyscallTable; import frysk.syscall.SyscallTableFactory; import java.util.LinkedList; import inua.eio.ByteBuffer; import java.util.Set; import java.util.HashSet; -import java.util.Collection; -import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; import java.util.Observer; @@ -63,7 +61,10 @@ public abstract class Task { * If known, as a result of tracing clone or fork, the task that * created this task. */ - final Task creator; + private final Task creator; + public Task getCreator() { + return creator; + } /** * Return the task's corresponding TaskId. @@ -191,55 +192,6 @@ public abstract class Task { this(new TaskId(proc.getPid()), proc, proc.creator); } - // Send operation to corresponding underlying [kernel] task. The - // continue, syscall and step methods should sig_send and set/reset - // step_send to indicate that last reques tot the Task was a single - // step. - - /** XXX: Should not be public. */ - public void sendContinue(int sig) { - throw new RuntimeException("unimplemented"); - } - /** XXX: Should not be public. */ - public void sendSyscallContinue(int sig) { - throw new RuntimeException("unimplemented"); - } - /** XXX: Should not be public. */ - public void sendStepInstruction(int sig) { - throw new RuntimeException("unimplemented"); - } - /** XXX: Should not be public. */ - public void sendStop() { - throw new RuntimeException("unimplemented"); - } - /** XXX: Should not be public. */ - public void sendSetOptions() { - throw new RuntimeException("unimplemented"); - } - /** XXX: Should not be public. */ - public void sendAttach() { - throw new RuntimeException("unimplemented"); - } - /** XXX: Should not be public. */ - public void sendDetach(int sig) { - throw new RuntimeException("unimplemented"); - } - /** - * Turns on systemcall entry and exit tracing XXX: Should not be - * public. - */ - public void startTracingSyscalls() { - throw new RuntimeException("unimplemented"); - } - - /** - * Turns off systemcall entry and exit tracing XXX: Should not be - * public. - */ - public void stopTracingSyscalls() { - throw new RuntimeException("unimplemented"); - } - protected LinkedList queuedEvents = new LinkedList(); /** @@ -252,65 +204,6 @@ public abstract class Task { */ protected abstract void handleDeleteObservation(TaskObservation observation); - /** - * Unblock the specified observer. - */ - public abstract void handleUnblock(TaskObserver observation); - - /** - * Requesting that the task go (or resume execution). - */ - public abstract void performContinue(); - - /** - * (Internal) Tell the task to remove itself (it is no longer - * listed in the system process table and, presumably, has - * exited). - * - * XXX: Should not be public. - */ - public abstract void performRemoval(); - - /** - * (Internal) Tell the task to attach itself (if it isn't - * already). Notify the containing process once the operation has - * been completed. The task is left in the stopped state. - * - * XXX: Should not be public. - */ - public abstract void performAttach(); - - /** - * (Internal) Tell the task to detach itself (if it isn't - * already). Notify the containing process once the operation has - * been processed; the task is allowed to run free. - * @param shouldRemoveObservers whether to remove the observers as well. - */ - public abstract void performDetach(boolean shouldRemoveObservers); - - /** - * (Internal) Request that all observers from this task be - * removed. Warning, should also be removed from the proc's - * observations. - * - * XXX: Should not be public. - */ - public void removeObservers() { - logger.log(Level.FINE, "{0} abandon", this); - - attachedObservers.removeAllObservers(); - clonedObservers.removeAllObservers(); - forkedObservers.removeAllObservers(); - terminatedObservers.removeAllObservers(); - terminatingObservers.removeAllObservers(); - execedObservers.removeAllObservers(); - syscallObservers.removeAllObservers(); - signaledObservers.removeAllObservers(); - instructionObservers.removeAllObservers(); - blockers.clear(); - pendingObservations.clear(); - } - public class TaskEventObservable extends java.util.Observable { protected void notify(Object o) { setChanged(); @@ -351,328 +244,77 @@ public abstract class Task { public abstract void requestUnblock(final TaskObserver observerArg); /** - * Set of Cloned observers. - * - * XXX: Should not be public. - */ - public final TaskObservable clonedObservers = new TaskObservable(this); - - /** * Add a TaskObserver.Cloned observer. */ public abstract void requestAddClonedObserver(TaskObserver.Cloned o); - /** * Delete a TaskObserver.Cloned observer. */ public abstract void requestDeleteClonedObserver(TaskObserver.Cloned o); /** - * Notify all cloned observers that this task cloned. Return the - * number of blocking observers. - * - * XXX: Should not be public. - */ - public int notifyClonedParent(Task offspring) { - for (Iterator i = clonedObservers.iterator(); i.hasNext();) { - TaskObserver.Cloned observer = (TaskObserver.Cloned) i.next(); - if (observer.updateClonedParent(this, offspring) == Action.BLOCK) { - blockers.add(observer); - } - } - return blockers.size(); - } - - /** - * Notify all cloned observers that this task cloned. Return the - * number of blocking observers. - * - * XXX: Should not be public. - */ - public int notifyClonedOffspring() { - logger.log(Level.FINE, "{0} notifyClonedOffspring\n", this); - for (Iterator i = creator.clonedObservers.iterator(); i.hasNext();) { - TaskObserver.Cloned observer = (TaskObserver.Cloned) i.next(); - if (observer.updateClonedOffspring(creator, this) == Action.BLOCK) { - blockers.add(observer); - } - } - return blockers.size(); - } - - /** - * Set of Attached observers. - * - * XXX: Should not be public. - */ - public final TaskObservable attachedObservers = new TaskObservable(this); - - /** * Add a TaskObserver.Attached observer. */ public abstract void requestAddAttachedObserver(TaskObserver.Attached o); - /** * Delete a TaskObserver.Attached observer. */ public abstract void requestDeleteAttachedObserver(TaskObserver.Attached o); /** - * Notify all Attached observers that this task attached. Return - * the number of blocking observers. - * - * XXX: Should not be public. - */ - public int notifyAttached() { - logger.log(Level.FINE, "{0} notifyAttached\n", this); - //Fill isa on attach. - getIsa(); - for (Iterator i = attachedObservers.iterator(); i.hasNext();) { - TaskObserver.Attached observer = (TaskObserver.Attached) i.next(); - if (observer.updateAttached(this) == Action.BLOCK) - blockers.add(observer); - } - return blockers.size(); - } - - /** - * Set of Forked observers. - * - * XXX: Should not be public. - */ - public final TaskObservable forkedObservers = new TaskObservable(this); - - /** * Add a TaskObserver.Forked observer. */ public abstract void requestAddForkedObserver(TaskObserver.Forked o); - /** * Delete a TaskObserver.Forked observer. */ public abstract void requestDeleteForkedObserver(TaskObserver.Forked o); /** - * Notify all Forked observers that this task forked. Return the - * number of blocking observers. - * - * XXX: Should not be public. - */ - public int notifyForkedParent(Task offspring) { - for (Iterator i = forkedObservers.iterator(); i.hasNext();) { - TaskObserver.Forked observer = (TaskObserver.Forked) i.next(); - if (observer.updateForkedParent(this, offspring) == Action.BLOCK) { - blockers.add(observer); - } - } - return blockers.size(); - } - - /** - * Notify all Forked observers that this task's new offspring, - * created using fork, is sitting at the first instruction. - * - * XXX: Should not be public. - */ - public int notifyForkedOffspring() { - for (Iterator i = creator.forkedObservers.iterator(); i.hasNext();) { - TaskObserver.Forked observer = (TaskObserver.Forked) i.next(); - if (observer.updateForkedOffspring(creator, this) == Action.BLOCK) { - blockers.add(observer); - } - } - return blockers.size(); - } - - /** - * Set of Terminated observers. - * - * XXX: Should not be public. - */ - public final TaskObservable terminatedObservers = new TaskObservable(this); - - /** * Add a TaskObserver.Terminated observer. */ public abstract void requestAddTerminatedObserver(TaskObserver.Terminated o); - /** * Delete a TaskObserver.Terminated observer. */ public abstract void requestDeleteTerminatedObserver(TaskObserver.Terminated o); /** - * Notify all Terminated observers, of this Task's demise. Return - * the number of blocking observers.(Does this make any sense?) - * - * XXX: Should not be public. - */ - public int notifyTerminated(boolean signal, int value) { - logger.log(Level.FINE, "{0} notifyTerminated\n", this); - for (Iterator i = terminatedObservers.iterator(); i.hasNext();) { - TaskObserver.Terminated observer = (TaskObserver.Terminated) i.next(); - if (observer.updateTerminated(this, signal, value) == Action.BLOCK) { - logger.log(Level.FINER, - "{0} notifyTerminated adding {1} to blockers\n", - new Object[] { this, observer }); - blockers.add(observer); - } - } - return blockers.size(); - } - - /** - * Set of Terminating observers. - * - * XXX: Should not be public. - */ - public final TaskObservable terminatingObservers = new TaskObservable(this); - - /** - * Add TaskObserver.Terminating to the TaskObserver pool. - */ - public abstract void requestAddTerminatingObserver(TaskObserver.Terminating o); - - /** - * Delete TaskObserver.Terminating. - */ - public abstract void requestDeleteTerminatingObserver(TaskObserver.Terminating o); - - /** - * Notify all Terminating observers, of this Task's demise. Return - * the number of blocking observers. - * - * XXX: Should not be public. + * Add the Terminating observer to the TaskObserver pool. */ - public int notifyTerminating(boolean signal, int value) { - for (Iterator i = terminatingObservers.iterator(); i.hasNext();) { - TaskObserver.Terminating observer = (TaskObserver.Terminating) i.next(); - if (observer.updateTerminating(this, signal, value) == Action.BLOCK) - blockers.add(observer); - } - return blockers.size(); - } - + public abstract void requestAddTerminatingObserver(Terminating o); /** - * Set of Execed observers. - * - * XXX: Should not be public. + * Delete the Terminating observer. */ - public final TaskObservable execedObservers = new TaskObservable(this); + public abstract void requestDeleteTerminatingObserver(Terminating o); /** * Add TaskObserver.Execed to the TaskObserver pool. */ public abstract void requestAddExecedObserver(TaskObserver.Execed o); - /** * Delete TaskObserver.Execed. */ public abstract void requestDeleteExecedObserver(TaskObserver.Execed o); /** - * Notify all Execed observers, of this Task's demise. Return the - * number of blocking observers. - * - * XXX: Should not be public. - */ - public int notifyExeced() { - //Flush the isa in case it has changed between exec's. - clearIsa(); - //XXX: When should the isa be rebuilt? - for (Iterator i = execedObservers.iterator(); i.hasNext();) { - TaskObserver.Execed observer = (TaskObserver.Execed) i.next(); - if (observer.updateExeced(this) == Action.BLOCK) - blockers.add(observer); - } - return blockers.size(); - } - - /** - * Set of Syscall observers. Checked in TaskState. - * - * XXX: Should not be public. - */ - public final TaskObservable syscallObservers = new TaskObservable(this); - - /** * Add TaskObserver.Syscalls to the TaskObserver pool. hooks/post-receive -- frysk system monitor/debugger