| /* |
| * 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(); |
| } |