frysk.proc
Class Task

java.lang.Object
  extended by frysk.proc.Task
Direct Known Subclasses:
DeadTask, DummyTask, LiveTask

public abstract class Task
extends Object


Nested Class Summary
 class Task.TaskEventObservable
           
 
Field Summary
private static Log fine
           
private  TaskId id
           
private  Proc proc
           
private  SignalTable signalTable
           
private  SyscallTable syscallTable
           
private  int tid
           
 
Constructor Summary
private Task(int pid, Proc proc)
          Create a new Task skeleton.
protected Task(Proc proc)
          Create a newly created and attached main Task of Proc that is the result of a fork.
protected Task(Proc proc, int pid)
          Create a new unattached Task.
protected Task(Task cloningTask, int clone)
          Create a new attached CLONE of TASK.
 
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.
protected  void clearIsa()
           
 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.
protected abstract  RegisterBanks getRegisterBanks()
          Return this task's register banks.
 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.
protected abstract  String getStateFIXME()
          Return the state as a string; do not use!!!!
 SyscallTable getSyscallTable()
           
(package private)  TaskId getTaskId()
          Return the task's corresponding TaskId.
 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
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

fine

private static final Log fine

id

private final TaskId id

tid

private final int tid

syscallTable

private SyscallTable syscallTable

proc

private final Proc proc

signalTable

private SignalTable signalTable
Constructor Detail

Task

private Task(int pid,
             Proc proc)
Create a new Task skeleton.


Task

protected Task(Proc proc,
               int pid)
Create a new unattached Task.


Task

protected Task(Task cloningTask,
               int clone)
Create a new attached CLONE of TASK.


Task

protected Task(Proc proc)
Create a newly created and attached main Task of Proc that is the result of a fork.

Method Detail

getTaskId

TaskId getTaskId()
Return the task's corresponding TaskId.


getTid

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


getName

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


getStateFIXME

protected abstract String getStateFIXME()
Return the state as a string; do not use!!!!


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.


getRegisterBanks

protected abstract RegisterBanks getRegisterBanks()
Return this task's register banks.


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.


clearIsa

protected void clearIsa()

getSignalTable

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


compareTo

public int compareTo(Object o)