/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.mmtk.vm; import org.vmmagic.unboxed.*; import org.vmmagic.pragma.*; /** * Class that supports scanning Objects or Arrays for references * during tracing, handling those references, and computing death times */ @Uninterruptible public abstract class TraceInterface { /*********************************************************************** * * Public Methods */ /** * Returns if the VM is ready for a garbage collection. * * @return True if the VM is ready for GC, false otherwise. */ public abstract boolean gcEnabled(); /** * 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. * * @param isScalar If this is a pointer store to a scalar object * @param src The address of the source object * @param slot The address within <code>src</code> into which * the update will be stored * @return The easy to understand offset of the slot */ public abstract Offset adjustSlotOffset(boolean isScalar, ObjectReference src, Address slot); /** * 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. * *@param typeRef The type reference (tib) of the object just allocated * @return The frame pointer address for the method that allocated the object */ @Interruptible public abstract Address skipOwnFramesAndDump(ObjectReference typeRef); /*********************************************************************** * * Wrapper methods */ public abstract void updateDeathTime(ObjectReference obj); public abstract void setDeathTime(ObjectReference ref, Word time_); public abstract void setLink(ObjectReference ref, ObjectReference link); public abstract void updateTime(Word time_); public abstract Word getOID(ObjectReference ref); public abstract Word getDeathTime(ObjectReference ref); public abstract ObjectReference getLink(ObjectReference ref); public abstract Address getBootImageLink(); public abstract Word getOID(); public abstract void setOID(Word oid); public abstract int getHeaderSize(); public abstract int getHeaderEndOffset(); }