thr.contextRegisters.setInnermost( VM_Address.zero(), thr.jniEnv.JNITopJavaFP );
thr.contextRegisters.setInnermost( VM_Address.zero(), thr.jniEnv.topJavaFP() );
  private static void  prepareNonParticipatingVPsForGC() throws VM_PragmaUninterruptible {    // include NativeDaemonProcessor in following loop over processors    for (int i = 1; i <= VM_Scheduler.numProcessors+1; i++) {      VM_Processor vp = VM_Scheduler.processors[i];            if (vp == null) continue; 	// protect next stmt      int vpStatus = VM_Processor.vpStatus[vp.vpStatusIndex];      if ((vpStatus == VM_Processor.BLOCKED_IN_NATIVE) || (vpStatus == VM_Processor.BLOCKED_IN_SIGWAIT)) {	if (vpStatus == VM_Processor.BLOCKED_IN_NATIVE) {	  // processor & its running thread are block in C for this GC.  Its stack	  // needs to be scanned, starting from the "top" java frame, which has	  // been saved in the running threads JNIEnv.  Put the saved frame pointer	  // into the threads saved context regs, which is where the stack scan starts.	  //	  VM_Thread thr = vp.activeThread;	  thr.contextRegisters.setInnermost( VM_Address.zero(), thr.jniEnv.JNITopJavaFP );	}	smallHeap.zeromarks(vp);		// reset mark bits for nonparticipating vps      }    }  }