You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by wj...@apache.org on 2006/08/24 23:02:35 UTC
svn commit: r434524 - in
/incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk:
Barriers.java Lock.java ObjectModel.java Scanning.java
Author: wjwashburn
Date: Thu Aug 24 14:02:34 2006
New Revision: 434524
URL: http://svn.apache.org/viewvc?rev=434524&view=rev
Log:
mods that make marksweep work partially
Modified:
incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Barriers.java
incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Lock.java
incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/ObjectModel.java
incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Scanning.java
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Barriers.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Barriers.java?rev=434524&r1=434523&r2=434524&view=diff
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Barriers.java (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Barriers.java Thu Aug 24 14:02:34 2006
@@ -102,7 +102,7 @@
public static final char getArrayNoBarrierStatic(char [] src, int index) {
if (oneShot2 == false )
{
- System.out.println("org.apache.HarmonyDRLVM.mm.mmtk.Barriers.getArrayNoBarrier()" );
+ System.out.println("org.apache.HarmonyDRLVM.mm.mmtk.Barriers.getArrayNoBarrierStatic()" );
//VM.assertions._assert(false);
oneShot2 = true;
}
@@ -121,7 +121,7 @@
return getArrayNoBarrierStatic(src, index);
}
public static final byte getArrayNoBarrierStatic(byte [] src, int index) {
- System.out.println("org.apache.HarmonyDRLVM.mm.mmtk.Barriers.getArrayNoBarrier()" );
+ System.out.println("org.apache.HarmonyDRLVM.mm.mmtk.Barriers.getArrayNoBarrierStatic()" );
return src[index];
}
@@ -134,7 +134,7 @@
* @return the new value of element
*/
public final int getArrayNoBarrier(int [] src, int index) {
- System.out.println("org.apache.HarmonyDRLVM.mm.mmtk.Barriers.getArrayNoBarrier()" );
+ //System.out.println("org.apache.HarmonyDRLVM.mm.mmtk.Barriers.getArrayNoBarrier()" );
//VM.assertions._assert(false);
return src[index];
}
@@ -148,7 +148,7 @@
* @return the new value of element
*/
public final Object getArrayNoBarrier(Object [] src, int index) {
- System.out.println("org.apache.HarmonyDRLVM.mm.mmtk.Barriers.getArrayNoBarrier()" );
+ //System.out.println("org.apache.HarmonyDRLVM.mm.mmtk.Barriers.getArrayNoBarrier()" );
//VM.assertions._assert(false);
return src[index];
}
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Lock.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Lock.java?rev=434524&r1=434523&r2=434524&view=diff
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Lock.java (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Lock.java Thu Aug 24 14:02:34 2006
@@ -47,11 +47,12 @@
public Lock()
{
this("no name lock");
+ //System.out.println("mm.mmtk.Lock --1");
}
public Lock(String name) {
this.name = name;
-
+ //System.out.println("mm.mmtk.Lock --2");
try
{
synchronized(criticalSection)
@@ -66,6 +67,7 @@
public void setName(String str) {
name = str;
+ //System.out.println("mm.mmtk.Lock --3");
}
public void acquire() {
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/ObjectModel.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/ObjectModel.java?rev=434524&r1=434523&r2=434524&view=diff
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/ObjectModel.java (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/ObjectModel.java Thu Aug 24 14:02:34 2006
@@ -21,6 +21,10 @@
import org.vmmagic.unboxed.*;
import org.vmmagic.pragma.*;
import org.mmtk.vm.*;
+import org.mmtk.policy.Space;
+import org.mmtk.plan.MutatorContext;
+import org.mmtk.utility.alloc.Allocator;
+import org.mmtk.plan.Plan;
public final class ObjectModel extends org.mmtk.vm.ObjectModel implements Constants, Uninterruptible {
/**
@@ -55,7 +59,7 @@
*/
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.copy was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.copy was called");
VM.assertions._assert(false);
return from; //wjw -- keep the compiler happy for now
}
@@ -77,7 +81,7 @@
public Address copyTo(ObjectReference from, ObjectReference to, Address region)
throws InlinePragma {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.copyTo() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.copyTo() was called");
VM.assertions._assert(false);
return Address.fromInt(0);
}
@@ -92,7 +96,7 @@
* @return The resulting reference.
*/
public ObjectReference getReferenceWhenCopiedTo(ObjectReference from, Address to) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getReferenceWhenCopiedTo() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getReferenceWhenCopiedTo() was called");
VM.assertions._assert(false);
return from; // keep the compiler happy -
}
@@ -103,7 +107,7 @@
* @param object The objecty.
*/
public Address getObjectEndAddress(ObjectReference object) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getObjectEndAddress() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getObjectEndAddress() was called");
VM.assertions._assert(false);
return Address.fromInt(0); // keep the compiler happy
}
@@ -116,7 +120,7 @@
*/
public int getSizeWhenCopied(ObjectReference object) {
//need to use drlvm's get_object_size_bytes()
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getSizeWhenCopied() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getSizeWhenCopied() was called");
VM.assertions._assert(false);
return 0;
}
@@ -129,7 +133,7 @@
*/
public int getAlignWhenCopied(ObjectReference object) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getAlignWhenCopied() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getAlignWhenCopied() was called");
VM.assertions._assert(false);
return 0;
}
@@ -141,7 +145,7 @@
* @return The alignment offset required for a copy of <code>obj</code>
*/
public int getAlignOffsetWhenCopied(ObjectReference object) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getAlignOffsetWhenCopied() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getAlignOffsetWhenCopied() was called");
VM.assertions._assert(false);
return 0;
}
@@ -153,7 +157,7 @@
* @return The size of <code>obj</code>
*/
public int getCurrentSize(ObjectReference object) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getCurrentSize() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getCurrentSize() was called");
VM.assertions._assert(false);
return 0;
}
@@ -162,7 +166,7 @@
* Return the next object in the heap under contiguous allocation
*/
public ObjectReference getNextObject(ObjectReference object) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getNextObject() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getNextObject() was called");
VM.assertions._assert(false);
return ObjectReference.fromObject(null);
}
@@ -171,7 +175,7 @@
* Return an object reference from knowledge of the low order word
*/
public ObjectReference getObjectFromStartAddress(Address start) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getObjectFromStartAddress() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getObjectFromStartAddress() was called");
VM.assertions._assert(false);
return ObjectReference.fromObject(null);
}
@@ -183,14 +187,14 @@
* @return byte array with the type descriptor
*/
public byte [] getTypeDescriptor(ObjectReference ref) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getTypeDescriptor() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getTypeDescriptor() was called");
VM.assertions._assert(false);
return new byte[10];
}
public int getArrayLength(ObjectReference object)
throws InlinePragma {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getArrayLength() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getArrayLength() was called");
VM.assertions._assert(false);
return 0;
}
@@ -201,7 +205,7 @@
* @param idx the index of the bit
*/
public boolean testAvailableBit(ObjectReference object, int idx) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.testAvailableBit() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.testAvailableBit() was called");
VM.assertions._assert(false);
return false;
}
@@ -216,7 +220,7 @@
*/
public void setAvailableBit(ObjectReference object, int idx,
boolean flag) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.setAvailableBit() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.setAvailableBit() was called");
VM.assertions._assert(false);
return;
}
@@ -236,9 +240,17 @@
*/
public boolean attemptAvailableBits(ObjectReference object,
Word oldVal, Word newVal) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.attemptAvailableBits() was called");
- VM.assertions._assert(false);
- return false;
+ //System.out.print("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.attemptAvailableBits() ");
+ //System.out.println("object = " + Integer.toHexString(object.toAddress().toInt()) +
+ // " oldVal = " + Integer.toHexString(oldVal.toInt() ) + " newVal = " + Integer.toHexString(newVal.toInt() ) );
+
+ Address addr = object.toAddress();
+ addr = addr.plus(4); // wjw --
+ int xx = addr.loadInt();
+ VM.assertions._assert(xx == oldVal.toInt()); // wjw temporary single thread hack, need real atomic ops
+ addr.store(newVal.toInt());
+ //VM.assertions._assert(false);
+ return true;
}
/**
@@ -249,9 +261,15 @@
* @return the value of the bits
*/
public Word prepareAvailableBits(ObjectReference object) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.attemptAvailableBits() was called");
- VM.assertions._assert(false);
- return Word.fromInt(0);
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.prepareAvailableBits() was called " +
+ //Integer.toHexString(object.toAddress().toInt()) );
+
+ Address addr = object.toAddress();
+ addr = addr.plus(4); // wjw --
+ int xx = addr.loadInt();
+ //System.out.println("prepareAvailableBits() returning = " + Integer.toHexString(xx) );
+ //VM.assertions._assert(false);
+ return Word.fromInt(xx);
}
/**
@@ -261,7 +279,7 @@
* @param val the new value of the bits
*/
public void writeAvailableBitsWord(ObjectReference object, Word val) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.attemptAvailableBits() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.attemptAvailableBits() was called");
VM.assertions._assert(false);
return;
}
@@ -273,7 +291,7 @@
* @return the value of the bits
*/
public Word readAvailableBitsWord(ObjectReference object) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.readAvailableBitsWord() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.readAvailableBitsWord() was called");
VM.assertions._assert(false);
return Word.fromInt(0);
}
@@ -288,7 +306,7 @@
*/
/* AJG: Should this be a variable rather than method? */
public Offset GC_HEADER_OFFSET() {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.GC_HEADER_OFFSET() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.GC_HEADER_OFFSET() was called");
VM.assertions._assert(false);
return Offset.fromInt(0);
}
@@ -301,7 +319,9 @@
*/
public Address objectStartRef(ObjectReference object)
throws InlinePragma {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.objectStartRef() was called");
+ //System.out.println("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.objectStartRef() was called");
+
VM.assertions._assert(false);
return Address.fromInt(0);
}
@@ -313,10 +333,16 @@
* @param object the reference address of the object
* @return an address inside the object
*/
+ private static int tripCount = 0;
+
public Address refToAddress(ObjectReference object) {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.objectStartRef() was called");
- VM.assertions._assert(false);
- return Address.fromInt(0);
+ Address addr = object.toAddress();
+ int xx = addr.toInt();
+ String ss = Integer.toHexString(xx);
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.refToAddress() was called " + ss);
+ //if (tripCount == 1) VM.assertions._assert(false);
+ tripCount++;
+ return addr.plus(4); //wjw -- I don't know if what the ref ptr points at "qualifies", hopefully the lock bits does...
}
/**
@@ -328,7 +354,7 @@
*/
public boolean isAcyclic(ObjectReference typeRef)
{
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.isAcyclic() was called");
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.isAcyclic() was called");
VM.assertions._assert(false);
return false;
}
@@ -341,9 +367,32 @@
*/
public MMType getObjectType(ObjectReference object)
throws InlinePragma {
- System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getObjectType() was called");
- VM.assertions._assert(false);
- return new MMType(false, false, false, 0, null);
+ //System.out.println("wjw org.apache.HarmonyDRLVM.mm.mmtk.ObjectModel.getObjectType() was called");
+ //VM.assertions._assert(false);
+ //public MMType(boolean isDelegated, boolean isReferenceArray,
+ //boolean isAcyclic, int allocator, int[] offsets)
+ boolean isDelegated = false; //scanning is *not* delegated to the VM
+
+ Class clsObj = object.getClass();
+ boolean isArr = clsObj.isArray();
+ boolean isRefArray = false;
+ if (isArr)
+ {
+ String clsName = clsObj.toString();
+ if (clsName.charAt(1) == '[') isRefArray = true;
+ if (clsName.charAt(1) == 'L') isRefArray = true;
+ }
+
+ boolean isAcyclic = false; //wjw -- I don't have a clue what this is...
+
+ Space spx = Space.getSpaceForObject(object);
+ MutatorContext mc = SelectedPlan.ap.mutator();
+ Allocator alc = mc.getAllocatorFromSpace(spx);
+
+ int [] offs = new int[0];
+
+ MMType mmt = new MMType(isDelegated, isRefArray, isAcyclic, Plan.ALLOC_DEFAULT, offs);
+ return mmt;
}
}
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Scanning.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Scanning.java?rev=434524&r1=434523&r2=434524&view=diff
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Scanning.java (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/MMTk/ext/vm/HarmonyDRLVM/org/apache/HarmonyDRLVM/mm/mmtk/Scanning.java Thu Aug 24 14:02:34 2006
@@ -135,9 +135,15 @@
*
* @param trace The trace object to use to report root locations.
*/
+ public static int addressOfTestRoot; // temporary hack, filled in by test.java
public final void computeAllRoots(TraceLocal trace) {
- //System.out.println("*****************************org.apache.HarmonyDRLVM.mm.mmtk.Scanning.computeAllRoots() was called TraceLocal = " + trace);
- /////////////////VM.assertions._assert(false);
- return;
+ ///System.out.println("*****************************org.apache.HarmonyDRLVM.mm.mmtk.Scanning.computeAllRoots() was called TraceLocal = " + trace);
+
+ if (addressOfTestRoot != 0)
+ trace.addRootLocation(Address.fromInt(addressOfTestRoot));
+
+ //TODO: somehow get all java threads to enumerate their stacks -- where is this supposed to happen??
+ //TODO: somehow put a barrier at the end of this method so that all java threads must have enumerated before proceeding
+
}
}