org.jikesrvm.mm.mmtk
Class TraceInterface

java.lang.Object
  extended by org.mmtk.vm.TraceInterface
      extended by org.jikesrvm.mm.mmtk.TraceInterface
All Implemented Interfaces:
ArchitectureSpecific.ArchConstants, ArchConstants, RegisterConstants, StackframeLayoutConstants, TrapConstants

public final class TraceInterface
extends TraceInterface
implements ArchitectureSpecific.ArchConstants

Class that supports scanning Objects or Arrays for references during tracing, handling those references, and computing death times


Nested Class Summary
 
Nested classes/interfaces inherited from interface org.jikesrvm.ia32.RegisterConstants
RegisterConstants.FloatingPointMachineRegister, RegisterConstants.FPR, RegisterConstants.GPR, RegisterConstants.MachineRegister, RegisterConstants.MM, RegisterConstants.XMM
 
Field Summary
private static byte[][] allocCallMethods
           
 
Fields inherited from interface org.jikesrvm.ia32.ArchConstants
SSE2_BASE, SSE2_FULL
 
Fields inherited from interface org.jikesrvm.ia32.StackframeLayoutConstants
BYTES_IN_STACKSLOT, FPU_STATE_SIZE, INVISIBLE_METHOD_ID, LOG_BYTES_IN_STACKSLOT, STACK_SIZE_BOOT, STACK_SIZE_COLLECTOR, STACK_SIZE_DLOPEN, STACK_SIZE_GCDISABLED, STACK_SIZE_GROW, STACK_SIZE_GUARD, STACK_SIZE_JNINATIVE_GROW, STACK_SIZE_MAX, STACK_SIZE_NORMAL, STACK_SIZE_SYSCALL, STACKFRAME_ALIGNMENT, STACKFRAME_BODY_OFFSET, STACKFRAME_FRAME_POINTER_OFFSET, STACKFRAME_HEADER_SIZE, STACKFRAME_METHOD_ID_OFFSET, STACKFRAME_RETURN_ADDRESS_OFFSET, STACKFRAME_SENTINEL_FP, XMM_STATE_SIZE
 
Fields inherited from interface org.jikesrvm.ia32.RegisterConstants
ALL_FPRS, ALL_GPRS, EAX, EBP, EBX, ECX, EDI, EDX, ESI, ESP, FP0, FP1, FP2, FP3, FP4, FP5, FP6, FP7, INSTRUCTION_WIDTH, LG_INSTRUCTION_WIDTH, MM0, MM1, MM10, MM11, MM12, MM13, MM14, MM15, MM2, MM3, MM4, MM5, MM6, MM7, MM8, MM9, NATIVE_NONVOLATILE_FPRS, NATIVE_NONVOLATILE_GPRS, NATIVE_PARAMETER_FPRS, NATIVE_PARAMETER_GPRS, NATIVE_VOLATILE_FPRS, NATIVE_VOLATILE_GPRS, NONVOLATILE_FPRS, NONVOLATILE_GPRS, NUM_FPRS, NUM_GPRS, NUM_NONVOLATILE_FPRS, NUM_NONVOLATILE_GPRS, NUM_PARAMETER_FPRS, NUM_PARAMETER_GPRS, NUM_RETURN_FPRS, NUM_RETURN_GPRS, NUM_VOLATILE_FPRS, NUM_VOLATILE_GPRS, PARAMETER_FPRS, PARAMETER_GPRS, R0, R1, R10, R11, R12, R13, R14, R15, R2, R3, R4, R5, R6, R7, R8, R9, RETURN_FPRS, RETURN_GPRS, STACK_POINTER, THREAD_REGISTER, VOLATILE_FPRS, VOLATILE_GPRS, XMM0, XMM1, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, XMM8, XMM9
 
Fields inherited from interface org.jikesrvm.ia32.TrapConstants
RVM_TRAP_BASE
 
Constructor Summary
TraceInterface()
           
 
Method Summary
 Offset adjustSlotOffset(boolean isScalar, ObjectReference src, Address slot)
          This adjusts the offset into an object to reflect what it would look like if the fields were laid out in memory space immediately after the object pointer.
 boolean gcEnabled()
          Returns true if the VM is ready for a garbage collection.
 Address getBootImageLink()
           
 Word getDeathTime(ObjectReference ref)
           
 int getHeaderEndOffset()
           
 int getHeaderSize()
           
 ObjectReference getLink(ObjectReference ref)
           
 Word getOID()
           
 Word getOID(ObjectReference ref)
           
private  boolean isAllocCall(byte[] name)
          Given a method name, determine if it is a "real" method or one used for allocation/tracing.
 void setDeathTime(ObjectReference ref, Word time_)
           
 void setLink(ObjectReference ref, ObjectReference link)
           
 void setOID(Word oid)
           
 Address skipOwnFramesAndDump(ObjectReference typeRef)
          This skips over the frames added by the tracing algorithm, outputs information identifying the method the containts the "new" call triggering the allocation, and returns the address of the first non-trace, non-alloc stack frame.
 void updateDeathTime(ObjectReference obj)
          Update an object's death time.
 void updateTime(Word time_)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

allocCallMethods

private static byte[][] allocCallMethods
Constructor Detail

TraceInterface

public TraceInterface()
Method Detail

gcEnabled

public boolean gcEnabled()
Returns true if the VM is ready for a garbage collection.

Specified by:
gcEnabled in class TraceInterface
Returns:
true if the VM is ready for GC, false otherwise.

isAllocCall

private boolean isAllocCall(byte[] name)
Given a method name, determine if it is a "real" method or one used for allocation/tracing.

Parameters:
name - The method name to test as an array of bytes
Returns:
true if the method is a "real" method, false otherwise.

adjustSlotOffset

public Offset adjustSlotOffset(boolean isScalar,
                               ObjectReference src,
                               Address slot)
Description copied from class: TraceInterface
This adjusts the offset into an object to reflect what it would look like if the fields were laid out in memory space immediately after the object pointer.

Specified by:
adjustSlotOffset in class TraceInterface
Parameters:
isScalar - If this is a pointer store to a scalar object
src - The address of the source object
slot - The address within src into which the update will be stored
Returns:
The easy to understand offset of the slot

skipOwnFramesAndDump

public Address skipOwnFramesAndDump(ObjectReference typeRef)
Description copied from class: TraceInterface
This skips over the frames added by the tracing algorithm, outputs information identifying the method the containts the "new" call triggering the allocation, and returns the address of the first non-trace, non-alloc stack frame.

Specified by:
skipOwnFramesAndDump in class TraceInterface
Parameters:
typeRef - The type reference (tib) of the object just allocated
Returns:
The frame pointer address for the method that allocated the object

updateDeathTime

public void updateDeathTime(ObjectReference obj)
Update an object's death time.

Specified by:
updateDeathTime in class TraceInterface
Parameters:
obj - the object

setDeathTime

public void setDeathTime(ObjectReference ref,
                         Word time_)
Specified by:
setDeathTime in class TraceInterface

setLink

public void setLink(ObjectReference ref,
                    ObjectReference link)
Specified by:
setLink in class TraceInterface

updateTime

public void updateTime(Word time_)
Specified by:
updateTime in class TraceInterface

getOID

public Word getOID(ObjectReference ref)
Specified by:
getOID in class TraceInterface

getDeathTime

public Word getDeathTime(ObjectReference ref)
Specified by:
getDeathTime in class TraceInterface

getLink

public ObjectReference getLink(ObjectReference ref)
Specified by:
getLink in class TraceInterface

getBootImageLink

public Address getBootImageLink()
Specified by:
getBootImageLink in class TraceInterface

getOID

public Word getOID()
Specified by:
getOID in class TraceInterface

setOID

public void setOID(Word oid)
Specified by:
setOID in class TraceInterface

getHeaderSize

public int getHeaderSize()
Specified by:
getHeaderSize in class TraceInterface

getHeaderEndOffset

public int getHeaderEndOffset()
Specified by:
getHeaderEndOffset in class TraceInterface