< prev index next >

src/hotspot/share/runtime/vframeArray.cpp

Print this page
@@ -488,10 +488,11 @@
                                        is_top_frame);
  }
  
  
  intptr_t* vframeArray::unextended_sp() const {
+   assert(owner_thread()->is_in_usable_stack((address) _original.unextended_sp()), INTPTR_FORMAT, p2i(_original.unextended_sp())); 
    return _original.unextended_sp();
  }
  
  vframeArray* vframeArray::allocate(JavaThread* thread, int frame_size, GrowableArray<compiledVFrame*>* chunk,
                                     RegisterMap *reg_map, frame sender, frame caller, frame self,

@@ -535,18 +536,18 @@
        // [phh] FIXME: this is a temporary hack!  This code *should* work
        // correctly w/o this hack, possibly by changing RegisterMap::pd_location
        // in frame_amd64.cpp and the values of the phantom high half registers
        // in amd64.ad.
        //      if (VMReg::Name(i) < SharedInfo::stack0 && is_even(i)) {
-         intptr_t* src = (intptr_t*) reg_map->location(VMRegImpl::as_VMReg(i));
+         intptr_t* src = (intptr_t*) reg_map->location(VMRegImpl::as_VMReg(i), _caller.sp());
          _callee_registers[i] = src != NULL ? *src : NULL_WORD;
          //      } else {
          //      jint* src = (jint*) reg_map->location(VMReg::Name(i));
          //      _callee_registers[i] = src != NULL ? *src : NULL_WORD;
          //      }
  #else
-       jint* src = (jint*) reg_map->location(VMRegImpl::as_VMReg(i));
+       jint* src = (jint*) reg_map->location(VMRegImpl::as_VMReg(i), _caller.sp());
        _callee_registers[i] = src != NULL ? *src : NULL_WORD;
  #endif
        if (src == NULL) {
          set_location_valid(i, false);
        } else {
< prev index next >