frysk.proc
Class Task

java.lang.Object
  extended by frysk.proc.Task
Direct Known Subclasses:
DummyTask, LinuxCoreTask, LinuxExeTask, LinuxPtraceTask

public abstract class Task
extends Object


Nested Class Summary
 class Task.TaskEventObservable
           
 
Method Summary
 void access(Register register, int offset, int length, byte[] bytes, int start, boolean write)
          Access bytes OFFSET:LENGTH of the Task's register read/writing it into the byte buffer from START.
 Set bogusUseOfInternalBlockersVariableFIXME()
          XXX: Code using this needs a re-think.
 int compareTo(Object o)
           
abstract  ISA getISA()
          Return's this Task's Instruction Set Architecture; or throw a NullPointerException if the ISA is not available.
abstract  ByteBuffer getMemory()
          Return the Task's memory.
abstract  int getMod()
          Use a counter rather than a boolean because multiple caches may depend on this count and no cache should be able to clear it.
 String getName()
          Return the task's (derived) name
abstract  long getPC()
          Return the address of the instruction that this task will execute next.
 Proc getProc()
          Return the containing Proc.
 long getRegister(Register register)
          Return the Task's Register as a long.
 ByteBuffer[] getRegisterBuffersFIXME()
          Return the machine's register banks as an array of ByteBuffers.
 SignalTable getSignalTable()
          Return a table of known (and unknown) signals for this ISA.
 SyscallTable getSyscallTable()
           
 int getTid()
          Return the task's process id.
abstract  boolean isInstructionObserverAdded(TaskObserver.Instruction o)
          Returns true if the observer has been added to task's instruction observer list.
abstract  void requestAddAttachedObserver(TaskAttachedObserverXXX o)
          Add a TaskAttachedObserverXXX observer.
abstract  void requestAddClonedObserver(TaskObserver.Cloned o)
          Add a TaskObserver.Cloned observer.
abstract  void requestAddCodeObserver(TaskObserver.Code o, long a)
          Add TaskObserver.Code to the TaskObserver pool.
abstract  void requestAddExecedObserver(TaskObserver.Execed o)
          Add TaskObserver.Execed to the TaskObserver pool.
abstract  void requestAddForkedObserver(TaskObserver.Forked o)
          Add a TaskObserver.Forked observer.
abstract  void requestAddInstructionObserver(TaskObserver.Instruction o)
          Request the addition of a Instruction observer that will be notified as soon as the task executes an instruction.
abstract  void requestAddSignaledObserver(TaskObserver.Signaled o)
          Add TaskObserver.Signaled to the TaskObserver pool.
abstract  void requestAddSyscallsObserver(TaskObserver.Syscalls o)
          Add TaskObserver.Syscalls to the TaskObserver pool.
abstract  void requestAddTerminatedObserver(TaskObserver.Terminated o)
          Add a TaskObserver.Terminated observer.
abstract  void requestAddTerminatingObserver(TaskObserver.Terminating o)
          Add the Terminating observer to the TaskObserver pool.
abstract  void requestAddWatchObserver(TaskObserver.Watch o, long address, int length, boolean writeOnly)
          Add TaskObserver.Watch to the TaskObserver pool.
abstract  void requestDeleteAttachedObserver(TaskAttachedObserverXXX o)
          Delete a TaskAttachedObserverXXX observer.
abstract  void requestDeleteClonedObserver(TaskObserver.Cloned o)
          Delete a TaskObserver.Cloned observer.
abstract  void requestDeleteCodeObserver(TaskObserver.Code o, long a)
          Delete TaskObserver.Code for the TaskObserver pool.
abstract  void requestDeleteExecedObserver(TaskObserver.Execed o)
          Delete TaskObserver.Execed.
abstract  void requestDeleteForkedObserver(TaskObserver.Forked o)
          Delete a TaskObserver.Forked observer.
abstract  void requestDeleteInstructionObserver(TaskObserver.Instruction o)
          Delete TaskObserver.Instruction from the TaskObserver pool.
abstract  void requestDeleteSignaledObserver(TaskObserver.Signaled o)
          Delete TaskObserver.Signaled.
abstract  void requestDeleteSyscallsObserver(TaskObserver.Syscalls o)
          Delete TaskObserver.Syscall.
abstract  void requestDeleteTerminatedObserver(TaskObserver.Terminated o)
          Delete a TaskObserver.Terminated observer.
abstract  void requestDeleteTerminatingObserver(TaskObserver.Terminating o)
          Delete the Terminating observer.
abstract  void requestDeleteWatchObserver(TaskObserver.Watch o, long address, int length, boolean writeOnly)
          Delete TaskObserver.Watchfor the TaskObserver pool.
abstract  void requestUnblock(TaskObserver observerArg)
          Request that the observer be removed from this tasks set of blockers; once there are no blocking observers, this task resumes.
abstract  void setPC(long addr)
          Set the address of the instruction that this task will execute next.
 void setRegister(Register register, long value)
          Store the long value in the Task's register.
 String toString()
          Return a summary of the task's state.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Method Detail

getTid

public final int getTid()
Return the task's process id.


getName

public final String getName()
Return the task's (derived) name


getISA

public abstract ISA getISA()
Return's this Task's Instruction Set Architecture; or throw a NullPointerException if the ISA is not available. The isa is only available while the task is under observation (attached) as an un-observed task can switch isa's (using exec(2)) undetected.


getSyscallTable

public final SyscallTable getSyscallTable()

getProc

public Proc getProc()
Return the containing Proc.


toString

public String toString()
Return a summary of the task's state.

Overrides:
toString in class Object

bogusUseOfInternalBlockersVariableFIXME

public Set bogusUseOfInternalBlockersVariableFIXME()
XXX: Code using this needs a re-think.


requestUnblock

public abstract void requestUnblock(TaskObserver observerArg)
Request that the observer be removed from this tasks set of blockers; once there are no blocking observers, this task resumes.


requestAddClonedObserver

public abstract void requestAddClonedObserver(TaskObserver.Cloned o)
Add a TaskObserver.Cloned observer.


requestDeleteClonedObserver

public abstract void requestDeleteClonedObserver(TaskObserver.Cloned o)
Delete a TaskObserver.Cloned observer.


requestAddAttachedObserver

public abstract void requestAddAttachedObserver(TaskAttachedObserverXXX o)
Add a TaskAttachedObserverXXX observer.


requestDeleteAttachedObserver

public abstract void requestDeleteAttachedObserver(TaskAttachedObserverXXX o)
Delete a TaskAttachedObserverXXX observer.


requestAddForkedObserver

public abstract void requestAddForkedObserver(TaskObserver.Forked o)
Add a TaskObserver.Forked observer.


requestDeleteForkedObserver

public abstract void requestDeleteForkedObserver(TaskObserver.Forked o)
Delete a TaskObserver.Forked observer.


requestAddTerminatedObserver

public abstract void requestAddTerminatedObserver(TaskObserver.Terminated o)
Add a TaskObserver.Terminated observer.


requestDeleteTerminatedObserver

public abstract void requestDeleteTerminatedObserver(TaskObserver.Terminated o)
Delete a TaskObserver.Terminated observer.


requestAddTerminatingObserver

public abstract void requestAddTerminatingObserver(TaskObserver.Terminating o)
Add the Terminating observer to the TaskObserver pool.


requestDeleteTerminatingObserver

public abstract void requestDeleteTerminatingObserver(TaskObserver.Terminating o)
Delete the Terminating observer.


requestAddExecedObserver

public abstract void requestAddExecedObserver(TaskObserver.Execed o)
Add TaskObserver.Execed to the TaskObserver pool.


requestDeleteExecedObserver

public abstract void requestDeleteExecedObserver(TaskObserver.Execed o)
Delete TaskObserver.Execed.


requestAddSyscallsObserver

public abstract void requestAddSyscallsObserver(TaskObserver.Syscalls o)
Add TaskObserver.Syscalls to the TaskObserver pool.


requestDeleteSyscallsObserver

public abstract void requestDeleteSyscallsObserver(TaskObserver.Syscalls o)
Delete TaskObserver.Syscall.


requestAddSignaledObserver

public abstract void requestAddSignaledObserver(TaskObserver.Signaled o)
Add TaskObserver.Signaled to the TaskObserver pool.


requestDeleteSignaledObserver

public abstract void requestDeleteSignaledObserver(TaskObserver.Signaled o)
Delete TaskObserver.Signaled.


getMemory

public abstract ByteBuffer getMemory()
Return the Task's memory.


requestAddCodeObserver

public abstract void requestAddCodeObserver(TaskObserver.Code o,
                                            long a)
Add TaskObserver.Code to the TaskObserver pool.


requestDeleteCodeObserver

public abstract void requestDeleteCodeObserver(TaskObserver.Code o,
                                               long a)
Delete TaskObserver.Code for the TaskObserver pool.


requestAddWatchObserver

public abstract void requestAddWatchObserver(TaskObserver.Watch o,
                                             long address,
                                             int length,
                                             boolean writeOnly)
Add TaskObserver.Watch to the TaskObserver pool.


requestDeleteWatchObserver

public abstract void requestDeleteWatchObserver(TaskObserver.Watch o,
                                                long address,
                                                int length,
                                                boolean writeOnly)
Delete TaskObserver.Watchfor the TaskObserver pool.


requestAddInstructionObserver

public abstract void requestAddInstructionObserver(TaskObserver.Instruction o)
Request the addition of a Instruction observer that will be notified as soon as the task executes an instruction. o.updateExecuted is called as soon as the Task starts running again (is not blocked or stopped) and executes the next instruction.


requestDeleteInstructionObserver

public abstract void requestDeleteInstructionObserver(TaskObserver.Instruction o)
Delete TaskObserver.Instruction from the TaskObserver pool.


isInstructionObserverAdded

public abstract boolean isInstructionObserverAdded(TaskObserver.Instruction o)
Returns true if the observer has been added to task's instruction observer list.


getPC

public abstract long getPC()
Return the address of the instruction that this task will execute next.


setPC

public abstract void setPC(long addr)
Set the address of the instruction that this task will execute next.


getRegister

public long getRegister(Register register)
Return the Task's Register as a long.


setRegister

public void setRegister(Register register,
                        long value)
Store the long value in the Task's register.


access

public void access(Register register,
                   int offset,
                   int length,
                   byte[] bytes,
                   int start,
                   boolean write)
Access bytes OFFSET:LENGTH of the Task's register read/writing it into the byte buffer from START.


getRegisterBuffersFIXME

public ByteBuffer[] getRegisterBuffersFIXME()
Return the machine's register banks as an array of ByteBuffers. XXX: This is wrong. Clients cannot assume internal register layout.


getMod

public abstract int getMod()
Use a counter rather than a boolean because multiple caches may depend on this count and no cache should be able to clear it.


getSignalTable

public SignalTable getSignalTable()
Return a table of known (and unknown) signals for this ISA.


compareTo

public int compareTo(Object o)