From: <ste...@us...> - 2006-08-31 07:14:38
|
Revision: 10743 http://svn.sourceforge.net/jikesrvm/?rev=10743&view=rev Author: steveb-oss Date: 2006-08-31 00:14:19 -0700 (Thu, 31 Aug 2006) Log Message: ----------- Fixed minor bug where assumption is made about the offset between object reference and array base (element zero). Previously the value was actually uninitialized, but worked only because the correct value was zero! Modified Paths: -------------- rvmroot/trunk/MMTk/ext/vm/JikesRVM/com/ibm/JikesRVM/mm/mmtk/ObjectModel.java rvmroot/trunk/MMTk/src/org/mmtk/policy/CopySpace.java rvmroot/trunk/MMTk/src/org/mmtk/vm/ObjectModel.java rvmroot/trunk/MMTk/src/org/mmtk/vm/VM.java rvmroot/trunk/rvm/src/vm/objectModel/default/VM_JavaHeaderConstants.java Modified: rvmroot/trunk/MMTk/ext/vm/JikesRVM/com/ibm/JikesRVM/mm/mmtk/ObjectModel.java =================================================================== --- rvmroot/trunk/MMTk/ext/vm/JikesRVM/com/ibm/JikesRVM/mm/mmtk/ObjectModel.java 2006-08-31 06:32:10 UTC (rev 10742) +++ rvmroot/trunk/MMTk/ext/vm/JikesRVM/com/ibm/JikesRVM/mm/mmtk/ObjectModel.java 2006-08-31 07:14:19 UTC (rev 10743) @@ -15,6 +15,7 @@ import com.ibm.JikesRVM.VM_Magic; import com.ibm.JikesRVM.VM_Memory; import com.ibm.JikesRVM.VM_ObjectModel; +import com.ibm.JikesRVM.VM_JavaHeaderConstants; import com.ibm.JikesRVM.classloader.VM_Atom; import com.ibm.JikesRVM.classloader.VM_Array; import com.ibm.JikesRVM.classloader.VM_Class; @@ -36,6 +37,9 @@ * @date $Date: 2006/06/19 06:08:15 $ */ public final class ObjectModel extends org.mmtk.vm.ObjectModel implements Constants, VM_Constants, Uninterruptible { + + protected final Offset getArrayBaseOffset() { return VM_JavaHeaderConstants.ARRAY_BASE_OFFSET; } + /** * Copy an object using a plan's allocCopy to get space and install * the forwarding pointer. On entry, <code>from</code> must have Modified: rvmroot/trunk/MMTk/src/org/mmtk/policy/CopySpace.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/policy/CopySpace.java 2006-08-31 06:32:10 UTC (rev 10742) +++ rvmroot/trunk/MMTk/src/org/mmtk/policy/CopySpace.java 2006-08-31 07:14:19 UTC (rev 10743) @@ -260,7 +260,7 @@ setForwardingPointer(object, newObject); trace.enqueue(newObject); // Scan it later - return newObject; + return newObject; } } Modified: rvmroot/trunk/MMTk/src/org/mmtk/vm/ObjectModel.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/vm/ObjectModel.java 2006-08-31 06:32:10 UTC (rev 10742) +++ rvmroot/trunk/MMTk/src/org/mmtk/vm/ObjectModel.java 2006-08-31 07:14:19 UTC (rev 10743) @@ -210,4 +210,23 @@ * @return The type object for <code>object</code> */ public abstract MMType getObjectType(ObjectReference object); + + /* + * NOTE: The following methods must be implemented by subclasses of this + * class, but are internal to the VM<->MM interface glue, so are never + * called by MMTk users. + */ + /** @return The offset from array reference to element zero */ + protected abstract Offset getArrayBaseOffset(); + + /* + * NOTE: These methods should not be called by anything other than the + * reflective mechanisms in org.mmtk.vm.VM, and are not implemented by + * subclasses. This hack exists only to allow us to declare the respective + * methods as protected. + */ + static Offset arrayBaseOffsetTrapdoor(ObjectModel o) { + return o.getArrayBaseOffset(); + } + } Modified: rvmroot/trunk/MMTk/src/org/mmtk/vm/VM.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/vm/VM.java 2006-08-31 06:32:10 UTC (rev 10742) +++ rvmroot/trunk/MMTk/src/org/mmtk/vm/VM.java 2006-08-31 07:14:19 UTC (rev 10743) @@ -2,6 +2,7 @@ import org.mmtk.vm.SynchronizedCounter; import org.vmmagic.unboxed.Address; +import org.vmmagic.unboxed.Offset; public class VM { @@ -34,6 +35,8 @@ public static final int MAX_BYTES_PADDING; /** The value to store in alignment holes */ public static final int ALIGNMENT_VALUE; + /** The offset from an array reference to element zero */ + public static final Offset ARRAY_BASE_OFFSET; /* * VM-specific functionality captured in a series of singleton classs @@ -115,6 +118,7 @@ MAX_ALIGNMENT_SHIFT = Memory.maxAlignmentShiftTrapdoor(memory); MAX_BYTES_PADDING = Memory.maxBytesPaddingTrapdoor(memory); ALIGNMENT_VALUE = Memory.alignmentValueTrapdoor(memory); + ARRAY_BASE_OFFSET = ObjectModel.arrayBaseOffsetTrapdoor(objectModel); } public static Lock newLock(String name) { Modified: rvmroot/trunk/rvm/src/vm/objectModel/default/VM_JavaHeaderConstants.java =================================================================== --- rvmroot/trunk/rvm/src/vm/objectModel/default/VM_JavaHeaderConstants.java 2006-08-31 06:32:10 UTC (rev 10742) +++ rvmroot/trunk/rvm/src/vm/objectModel/default/VM_JavaHeaderConstants.java 2006-08-31 07:14:19 UTC (rev 10743) @@ -43,7 +43,7 @@ static final Offset JAVA_HEADER_OFFSET = ARRAY_LENGTH_OFFSET.minus(JAVA_HEADER_BYTES); static final Offset MISC_HEADER_OFFSET = JAVA_HEADER_OFFSET.minus(MISC_HEADER_BYTES); static final Offset GC_HEADER_OFFSET = MISC_HEADER_OFFSET.minus(GC_HEADER_BYTES); - + static final Offset ARRAY_BASE_OFFSET = Offset.zero(); /** * This object model supports two schemes for hashcodes: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |