Program: 150270
Project: 150270
Buggy source:
/** 
 * Create (in host jdk address space) the rvm objects that will be needed at run time to execute enough of the virtual machine to dynamically load and compile the remainder of itself. Side effect: rvm objects are created in host jdk address space VM_Statics is populated "bootImageTypes" dictionary is populated with name/type pairs
 * @param typeNames names of rvm classes whose static fields will containthe objects comprising the virtual machine bootimage
 */
public static void createBootImageObjects(Vector typeNames,String bootImageTypeNamesFile) throws IllegalAccessException, ClassNotFoundException {
  VM_Callbacks.notifyBootImage(typeNames.elements());
  if (verbose >= 1)   say("String_Node_Str");
  for (Enumeration e=typeNames.elements(); e.hasMoreElements(); ) {
    String typeName=(String)e.nextElement();
    if (verbose >= 4)     say("String_Node_Str",typeName);
    VM_Type type;
    try {
      VM_TypeReference tRef=VM_TypeReference.findOrCreate(typeName);
      type=tRef.resolve();
    }
 catch (    NoClassDefFoundError ncdf) {
      ncdf.printStackTrace();
      fail(bootImageTypeNamesFile + "String_Node_Str" + typeName+ "String_Node_Str"+ ncdf);
      return;
    }
catch (    IllegalArgumentException ila) {
      ila.printStackTrace();
      fail(bootImageTypeNamesFile + "String_Node_Str" + typeName+ "String_Node_Str"+ ila);
      return;
    }
    type.markAsBootImageClass();
    typeName=typeName.replace('/','.');
    if (typeName.startsWith("String_Node_Str"))     typeName=typeName.substring(1,typeName.length() - 1);
    bootImageTypes.put(typeName,type);
  }
  if (verbose >= 1)   say(String.valueOf(bootImageTypes.size()),"String_Node_Str");
  if (verbose >= 1)   say("String_Node_Str");
  for (Enumeration e=bootImageTypes.elements(); e.hasMoreElements(); ) {
    VM_Type type=(VM_Type)e.nextElement();
    if (verbose >= 2)     say("String_Node_Str" + type);
    type.resolve();
  }
  VM_BootRecord bootRecord=VM_BootRecord.the_boot_record;
  VM_Class rvmBRType=getRvmType(bootRecord.getClass()).asClass();
  VM_Array intArrayType=VM_Array.getPrimitiveArrayType(10);
  int bp=bootImageAddress;
  bp+=rvmBRType.getInstanceSize();
  int align=VM_ObjectModel.getAlignment(intArrayType);
  int offset=VM_ObjectModel.getOffsetForAlignment(intArrayType);
  int mod=(bp + offset) & (align - 1);
  int delta=(align - mod) & (align - 1);
  bp+=delta;
  bp+=intArrayType.getInstanceSize(0);
  bootRecord.tocRegister=VM_Address.fromIntZeroExtend(bp);
  if (verbose >= 1)   say("String_Node_Str");
  if (PARALLELIZE < 1) {
    int count=0;
    for (Enumeration e=bootImageTypes.elements(); e.hasMoreElements(); ) {
      VM_Type type=(VM_Type)e.nextElement();
      count++;
      if (verbose >= 1)       say(count + "String_Node_Str" + type);
      type.instantiate();
    }
  }
 else {
    if (verbose >= 1)     say("String_Node_Str" + PARALLELIZE + "String_Node_Str");
    BootImageWorker.startup(bootImageTypes.elements());
    BootImageWorker[] workers=new BootImageWorker[PARALLELIZE];
    for (int i=0; i < workers.length; i++) {
      workers[i].id=i;
      workers[i].start();
    }
    try {
      for (int i=0; i < workers.length; i++)       workers[i].join();
    }
 catch (    InterruptedException ie) {
      say("String_Node_Str");
    }
  }
  VM_CodeArray[] functionTable=BuildJNIFunctionTable.buildTable();
  VM_JNIEnvironment.initFunctionTable(functionTable);
  if (verbose >= 1)   say("String_Node_Str");
  bootImageTypeFields=new HashMap(bootImageTypes.size());
  for (Enumeration e=bootImageTypes.elements(); e.hasMoreElements(); ) {
    VM_Type rvmType=(VM_Type)e.nextElement();
    FieldInfo fieldInfo;
    if (!rvmType.isClassType())     continue;
    Class jdkType=getJdkType(rvmType);
    if (jdkType == null)     continue;
    Key key=new Key(jdkType);
    fieldInfo=(FieldInfo)bootImageTypeFields.get(key);
    if (fieldInfo != null) {
      fieldInfo.rvmType=rvmType;
    }
 else {
      if (verbose >= 1)       say("String_Node_Str" + rvmType);
      fieldInfo=new FieldInfo();
      fieldInfo.jdkFields=jdkType.getDeclaredFields();
      fieldInfo.jdkType=jdkType;
      fieldInfo.rvmType=rvmType;
      bootImageTypeFields.put(key,fieldInfo);
      for (Class cls=jdkType.getSuperclass(); cls != null; cls=cls.getSuperclass()) {
        key=new Key(cls);
        fieldInfo=(FieldInfo)bootImageTypeFields.get(key);
        if (fieldInfo != null) {
          break;
        }
 else {
          if (verbose >= 1)           say("String_Node_Str" + jdkType);
          fieldInfo=new FieldInfo();
          fieldInfo.jdkFields=cls.getDeclaredFields();
          fieldInfo.jdkType=cls;
          fieldInfo.rvmType=null;
          bootImageTypeFields.put(key,fieldInfo);
        }
      }
    }
  }
  for (Iterator iter=bootImageTypeFields.values().iterator(); iter.hasNext(); ) {
    FieldInfo fieldInfo=(FieldInfo)iter.next();
    VM_Type rvmType=fieldInfo.rvmType;
    if (rvmType == null) {
      if (verbose >= 1)       say("String_Node_Str" + fieldInfo.jdkType);
      continue;
    }
    Class jdkType=fieldInfo.jdkType;
    if (verbose >= 1)     say("String_Node_Str" + rvmType);
    VM_Field rvmFields[]=rvmType.getStaticFields();
    fieldInfo.jdkStaticFields=new Field[rvmFields.length];
    for (int j=0; j < rvmFields.length; j++) {
      String rvmName=rvmFields[j].getName().toString();
      for (int k=0; k < fieldInfo.jdkFields.length; k++) {
        Field f=fieldInfo.jdkFields[k];
        if (f.getName().equals(rvmName)) {
          fieldInfo.jdkStaticFields[j]=f;
          f.setAccessible(true);
          break;
        }
      }
    }
    rvmFields=rvmType.getInstanceFields();
    fieldInfo.jdkInstanceFields=new Field[rvmFields.length];
    for (int j=0; j < rvmFields.length; j++) {
      String rvmName=rvmFields[j].getName().toString();
      jdkType=getJdkType(rvmFields[j].getDeclaringClass());
      if (jdkType == null)       continue;
      FieldInfo jdkFieldInfo=(FieldInfo)bootImageTypeFields.get(new Key(jdkType));
      if (jdkFieldInfo == null)       continue;
      Field[] jdkFields=jdkFieldInfo.jdkFields;
      for (int k=0; k < jdkFields.length; k++) {
        Field f=jdkFields[k];
        if (f.getName().equals(rvmName)) {
          fieldInfo.jdkInstanceFields[j]=f;
          f.setAccessible(true);
          break;
        }
      }
    }
  }
  int initProc=VM_Scheduler.PRIMORDIAL_PROCESSOR_ID;
  VM_Thread startupThread=new VM_Thread(new byte[STACK_SIZE_BOOT]);
  VM_Scheduler.processors[initProc].activeThread=startupThread;
  int idx=startupThread.stack.length - 1;
  if (VM.LittleEndian) {
    startupThread.stack[idx--]=(byte)0xde;
    startupThread.stack[idx--]=(byte)0xad;
    startupThread.stack[idx--]=(byte)0xba;
    startupThread.stack[idx--]=(byte)0xbe;
  }
 else {
    startupThread.stack[idx--]=(byte)0xbe;
    startupThread.stack[idx--]=(byte)0xba;
    startupThread.stack[idx--]=(byte)0xad;
    startupThread.stack[idx--]=(byte)0xde;
  }
  VM_ClassLoader.setVmRepositories(bootImageRepositoriesAtExecutionTime);
  if (verbose >= 1)   say("String_Node_Str");
  for (Enumeration e=bootImageTypes.elements(); e.hasMoreElements(); ) {
    VM_Type rvmType=(VM_Type)e.nextElement();
    if (verbose >= 1)     say("String_Node_Str",rvmType.toString());
    if (!rvmType.isClassType())     continue;
    Class jdkType=getJdkType(rvmType);
    if (jdkType == null && verbose >= 1) {
      say("String_Node_Str" + rvmType + "String_Node_Str");
    }
    VM_Field rvmFields[]=rvmType.getStaticFields();
    for (int j=0; j < rvmFields.length; ++j) {
      VM_Field rvmField=rvmFields[j];
      VM_TypeReference rvmFieldType=rvmField.getType();
      int rvmFieldSlot=(rvmField.getOffset() >>> 2);
      String rvmFieldName=rvmField.getName().toString();
      Field jdkFieldAcc=null;
      if (jdkType != null)       jdkFieldAcc=getJdkFieldAccessor(jdkType,j,STATIC_FIELD);
      if (jdkFieldAcc == null) {
        if (jdkType != null) {
          if (verbose >= 2)           traceContext.push(rvmFieldType.toString(),jdkType.getName(),rvmFieldName);
          if (verbose >= 2)           traceContext.traceFieldNotInHostJdk();
          if (verbose >= 2)           traceContext.pop();
        }
        VM_Statics.setSlotContents(rvmFieldSlot,0);
        if (!VM.runningTool)         bootImage.countNulledReference();
        continue;
      }
      if (verbose >= 2)       say("String_Node_Str",String.valueOf(rvmFieldSlot),"String_Node_Str",rvmField.toString());
      if (rvmFieldType.isPrimitiveType()) {
        if (rvmFieldType.isBooleanType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getBoolean(null) ? 1 : 0);
        }
 else         if (rvmFieldType.isByteType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getByte(null));
        }
 else         if (rvmFieldType.isCharType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getChar(null));
        }
 else         if (rvmFieldType.isShortType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getShort(null));
        }
 else         if (rvmFieldType.isIntType()) {
          try {
            VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getInt(null));
          }
 catch (          IllegalArgumentException ex) {
            System.err.println("String_Node_Str" + rvmType + "String_Node_Str"+ rvmField);
            throw ex;
          }
        }
 else         if (rvmFieldType.isLongType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getLong(null));
        }
 else         if (rvmFieldType.isFloatType()) {
          float f=jdkFieldAcc.getFloat(null);
          VM_Statics.setSlotContents(rvmFieldSlot,Float.floatToIntBits(f));
        }
 else         if (rvmFieldType.isDoubleType()) {
          double d=jdkFieldAcc.getDouble(null);
          VM_Statics.setSlotContents(rvmFieldSlot,Double.doubleToLongBits(d));
        }
 else         if (rvmFieldType.equals(VM_TypeReference.Address)) {
          Object o=jdkFieldAcc.get(null);
          VM_Address addr=(VM_Address)o;
          String msg="String_Node_Str" + rvmField.toString();
          VM_Statics.setSlotContents(rvmFieldSlot,getAddressValue(addr,msg,true));
        }
 else         if (rvmFieldType.equals(VM_TypeReference.Word)) {
          VM_Word w=(VM_Word)jdkFieldAcc.get(null);
          int val=w == null ? 0 : w.toInt();
          VM_Statics.setSlotContents(rvmFieldSlot,val);
        }
 else         if (rvmFieldType.equals(VM_TypeReference.Offset)) {
          VM_Offset o=(VM_Offset)jdkFieldAcc.get(null);
          int val=o == null ? 0 : o.toInt();
          VM_Statics.setSlotContents(rvmFieldSlot,val);
        }
 else         if (rvmFieldType.equals(VM_TypeReference.Extent)) {
          VM_Extent ex=(VM_Extent)jdkFieldAcc.get(null);
          int val=ex == null ? 0 : ex.toInt();
          VM_Statics.setSlotContents(rvmFieldSlot,val);
        }
 else {
          fail("String_Node_Str" + rvmFieldType);
        }
      }
 else {
        Object o=jdkFieldAcc.get(null);
        if (verbose >= 3)         say("String_Node_Str",String.valueOf(VM_Magic.objectAsAddress(o).toInt()));
        VM_Statics.setSlotContents(rvmFieldSlot,VM_Magic.objectAsAddress(o).toInt());
        VM_Statics.setSlotContents(rvmFieldSlot,VM_Magic.objectAsAddress(o).toLong());
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Create (in host jdk address space) the rvm objects that will be needed at run time to execute enough of the virtual machine to dynamically load and compile the remainder of itself. Side effect: rvm objects are created in host jdk address space VM_Statics is populated "bootImageTypes" dictionary is populated with name/type pairs
 * @param typeNames names of rvm classes whose static fields will containthe objects comprising the virtual machine bootimage
 */
public static void createBootImageObjects(Vector typeNames,String bootImageTypeNamesFile) throws IllegalAccessException, ClassNotFoundException {
  VM_Callbacks.notifyBootImage(typeNames.elements());
  if (verbose >= 1)   say("String_Node_Str");
  for (Enumeration e=typeNames.elements(); e.hasMoreElements(); ) {
    String typeName=(String)e.nextElement();
    if (verbose >= 4)     say("String_Node_Str",typeName);
    VM_Type type;
    try {
      VM_TypeReference tRef=VM_TypeReference.findOrCreate(typeName);
      type=tRef.resolve();
    }
 catch (    NoClassDefFoundError ncdf) {
      ncdf.printStackTrace();
      fail(bootImageTypeNamesFile + "String_Node_Str" + typeName+ "String_Node_Str"+ ncdf);
      return;
    }
catch (    IllegalArgumentException ila) {
      ila.printStackTrace();
      fail(bootImageTypeNamesFile + "String_Node_Str" + typeName+ "String_Node_Str"+ ila);
      return;
    }
    type.markAsBootImageClass();
    typeName=typeName.replace('/','.');
    if (typeName.startsWith("String_Node_Str"))     typeName=typeName.substring(1,typeName.length() - 1);
    bootImageTypes.put(typeName,type);
  }
  if (verbose >= 1)   say(String.valueOf(bootImageTypes.size()),"String_Node_Str");
  if (verbose >= 1)   say("String_Node_Str");
  for (Enumeration e=bootImageTypes.elements(); e.hasMoreElements(); ) {
    VM_Type type=(VM_Type)e.nextElement();
    if (verbose >= 2)     say("String_Node_Str" + type);
    type.resolve();
  }
  VM_BootRecord bootRecord=VM_BootRecord.the_boot_record;
  VM_Class rvmBRType=getRvmType(bootRecord.getClass()).asClass();
  VM_Array intArrayType=VM_Array.getPrimitiveArrayType(10);
  int bp=bootImageAddress;
  bp+=rvmBRType.getInstanceSize();
  int align=VM_ObjectModel.getAlignment(intArrayType);
  int offset=VM_ObjectModel.getOffsetForAlignment(intArrayType);
  int mod=(bp + offset) & (align - 1);
  int delta=(align - mod) & (align - 1);
  bp+=delta;
  bp+=intArrayType.getInstanceSize(0);
  bootRecord.tocRegister=VM_Address.fromIntZeroExtend(bp);
  if (verbose >= 1)   say("String_Node_Str");
  if (PARALLELIZE < 1) {
    int count=0;
    for (Enumeration e=bootImageTypes.elements(); e.hasMoreElements(); ) {
      VM_Type type=(VM_Type)e.nextElement();
      count++;
      if (verbose >= 1)       say(count + "String_Node_Str" + type);
      type.instantiate();
    }
  }
 else {
    if (verbose >= 1)     say("String_Node_Str" + PARALLELIZE + "String_Node_Str");
    BootImageWorker.startup(bootImageTypes.elements());
    BootImageWorker[] workers=new BootImageWorker[PARALLELIZE];
    for (int i=0; i < workers.length; i++) {
      workers[i].id=i;
      workers[i].start();
    }
    try {
      for (int i=0; i < workers.length; i++)       workers[i].join();
    }
 catch (    InterruptedException ie) {
      say("String_Node_Str");
    }
  }
  VM_CodeArray[] functionTable=BuildJNIFunctionTable.buildTable();
  VM_JNIEnvironment.initFunctionTable(functionTable);
  if (verbose >= 1)   say("String_Node_Str");
  bootImageTypeFields=new HashMap(bootImageTypes.size());
  for (Enumeration e=bootImageTypes.elements(); e.hasMoreElements(); ) {
    VM_Type rvmType=(VM_Type)e.nextElement();
    FieldInfo fieldInfo;
    if (!rvmType.isClassType())     continue;
    Class jdkType=getJdkType(rvmType);
    if (jdkType == null)     continue;
    Key key=new Key(jdkType);
    fieldInfo=(FieldInfo)bootImageTypeFields.get(key);
    if (fieldInfo != null) {
      fieldInfo.rvmType=rvmType;
    }
 else {
      if (verbose >= 1)       say("String_Node_Str" + rvmType);
      fieldInfo=new FieldInfo();
      fieldInfo.jdkFields=jdkType.getDeclaredFields();
      fieldInfo.jdkType=jdkType;
      fieldInfo.rvmType=rvmType;
      bootImageTypeFields.put(key,fieldInfo);
      for (Class cls=jdkType.getSuperclass(); cls != null; cls=cls.getSuperclass()) {
        key=new Key(cls);
        fieldInfo=(FieldInfo)bootImageTypeFields.get(key);
        if (fieldInfo != null) {
          break;
        }
 else {
          if (verbose >= 1)           say("String_Node_Str" + jdkType);
          fieldInfo=new FieldInfo();
          fieldInfo.jdkFields=cls.getDeclaredFields();
          fieldInfo.jdkType=cls;
          fieldInfo.rvmType=null;
          bootImageTypeFields.put(key,fieldInfo);
        }
      }
    }
  }
  for (Iterator iter=bootImageTypeFields.values().iterator(); iter.hasNext(); ) {
    FieldInfo fieldInfo=(FieldInfo)iter.next();
    VM_Type rvmType=fieldInfo.rvmType;
    if (rvmType == null) {
      if (verbose >= 1)       say("String_Node_Str" + fieldInfo.jdkType);
      continue;
    }
    Class jdkType=fieldInfo.jdkType;
    if (verbose >= 1)     say("String_Node_Str" + rvmType);
    VM_Field rvmFields[]=rvmType.getStaticFields();
    fieldInfo.jdkStaticFields=new Field[rvmFields.length];
    for (int j=0; j < rvmFields.length; j++) {
      String rvmName=rvmFields[j].getName().toString();
      for (int k=0; k < fieldInfo.jdkFields.length; k++) {
        Field f=fieldInfo.jdkFields[k];
        if (f.getName().equals(rvmName)) {
          fieldInfo.jdkStaticFields[j]=f;
          f.setAccessible(true);
          break;
        }
      }
    }
    rvmFields=rvmType.getInstanceFields();
    fieldInfo.jdkInstanceFields=new Field[rvmFields.length];
    for (int j=0; j < rvmFields.length; j++) {
      String rvmName=rvmFields[j].getName().toString();
      jdkType=getJdkType(rvmFields[j].getDeclaringClass());
      if (jdkType == null)       continue;
      FieldInfo jdkFieldInfo=(FieldInfo)bootImageTypeFields.get(new Key(jdkType));
      if (jdkFieldInfo == null)       continue;
      Field[] jdkFields=jdkFieldInfo.jdkFields;
      for (int k=0; k < jdkFields.length; k++) {
        Field f=jdkFields[k];
        if (f.getName().equals(rvmName)) {
          fieldInfo.jdkInstanceFields[j]=f;
          f.setAccessible(true);
          break;
        }
      }
    }
  }
  int initProc=VM_Scheduler.PRIMORDIAL_PROCESSOR_ID;
  VM_Thread startupThread=new VM_Thread(new byte[STACK_SIZE_BOOT]);
  VM_Scheduler.processors[initProc].activeThread=startupThread;
  int idx=startupThread.stack.length - 1;
  if (VM.LittleEndian) {
    startupThread.stack[idx--]=(byte)0xde;
    startupThread.stack[idx--]=(byte)0xad;
    startupThread.stack[idx--]=(byte)0xba;
    startupThread.stack[idx--]=(byte)0xbe;
  }
 else {
    startupThread.stack[idx--]=(byte)0xbe;
    startupThread.stack[idx--]=(byte)0xba;
    startupThread.stack[idx--]=(byte)0xad;
    startupThread.stack[idx--]=(byte)0xde;
  }
  VM_ClassLoader.setVmRepositories(bootImageRepositoriesAtExecutionTime);
  if (verbose >= 1)   say("String_Node_Str");
  for (Enumeration e=bootImageTypes.elements(); e.hasMoreElements(); ) {
    VM_Type rvmType=(VM_Type)e.nextElement();
    if (verbose >= 1)     say("String_Node_Str",rvmType.toString());
    if (!rvmType.isClassType())     continue;
    Class jdkType=getJdkType(rvmType);
    if (jdkType == null && verbose >= 1) {
      say("String_Node_Str" + rvmType + "String_Node_Str");
    }
    VM_Field rvmFields[]=rvmType.getStaticFields();
    for (int j=0; j < rvmFields.length; ++j) {
      VM_Field rvmField=rvmFields[j];
      VM_TypeReference rvmFieldType=rvmField.getType();
      int rvmFieldSlot=(rvmField.getOffset() >>> 2);
      String rvmFieldName=rvmField.getName().toString();
      Field jdkFieldAcc=null;
      if (jdkType != null)       jdkFieldAcc=getJdkFieldAccessor(jdkType,j,STATIC_FIELD);
      if (jdkFieldAcc == null) {
        if (jdkType != null) {
          if (verbose >= 2)           traceContext.push(rvmFieldType.toString(),jdkType.getName(),rvmFieldName);
          if (verbose >= 2)           traceContext.traceFieldNotInHostJdk();
          if (verbose >= 2)           traceContext.pop();
        }
        VM_Statics.setSlotContents(rvmFieldSlot,0);
        if (!VM.runningTool)         bootImage.countNulledReference();
        continue;
      }
      if (verbose >= 2)       say("String_Node_Str",String.valueOf(rvmFieldSlot),"String_Node_Str",rvmField.toString());
      if (rvmFieldType.isPrimitiveType()) {
        if (rvmFieldType.isBooleanType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getBoolean(null) ? 1 : 0);
        }
 else         if (rvmFieldType.isByteType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getByte(null));
        }
 else         if (rvmFieldType.isCharType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getChar(null));
        }
 else         if (rvmFieldType.isShortType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getShort(null));
        }
 else         if (rvmFieldType.isIntType()) {
          try {
            VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getInt(null));
          }
 catch (          IllegalArgumentException ex) {
            System.err.println("String_Node_Str" + rvmType + "String_Node_Str"+ rvmField);
            throw ex;
          }
        }
 else         if (rvmFieldType.isLongType()) {
          VM_Statics.setSlotContents(rvmFieldSlot,jdkFieldAcc.getLong(null));
        }
 else         if (rvmFieldType.isFloatType()) {
          float f=jdkFieldAcc.getFloat(null);
          VM_Statics.setSlotContents(rvmFieldSlot,Float.floatToIntBits(f));
        }
 else         if (rvmFieldType.isDoubleType()) {
          double d=jdkFieldAcc.getDouble(null);
          VM_Statics.setSlotContents(rvmFieldSlot,Double.doubleToLongBits(d));
        }
 else         if (rvmFieldType.equals(VM_TypeReference.Address) || rvmFieldType.equals(VM_TypeReference.Word) || rvmFieldType.equals(VM_TypeReference.Extent)|| rvmFieldType.equals(VM_TypeReference.Offset)) {
          Object o=jdkFieldAcc.get(null);
          String msg="String_Node_Str" + rvmField.toString();
          boolean warn=rvmFieldType.equals(VM_TypeReference.Address);
          VM_Statics.setSlotContents(rvmFieldSlot,getAddressValue(o,msg,warn));
        }
 else {
          fail("String_Node_Str" + rvmFieldType);
        }
      }
 else {
        Object o=jdkFieldAcc.get(null);
        if (verbose >= 3)         say("String_Node_Str",String.valueOf(VM_Magic.objectAsAddress(o).toInt()));
        VM_Statics.setSlotContents(rvmFieldSlot,VM_Magic.objectAsAddress(o).toInt());
        VM_Statics.setSlotContents(rvmFieldSlot,VM_Magic.objectAsAddress(o).toLong());
      }
    }
  }
}