< prev index next >

src/hotspot/share/runtime/stackChunkFrameStream.inline.hpp

Print this page
@@ -103,11 +103,11 @@
    } DEBUG_ONLY(else _has_stub = false;)
  }
  
  template <ChunkFrames frame_kind>
  inline bool StackChunkFrameStream<frame_kind>::is_stub() const {
-   return cb() != nullptr && (_cb->is_safepoint_stub() || _cb->is_runtime_stub());
+   return cb() != nullptr && _cb->is_runtime_stub();
  }
  
  template <ChunkFrames frame_kind>
  inline bool StackChunkFrameStream<frame_kind>::is_compiled() const {
    return cb() != nullptr && _cb->is_compiled();

@@ -193,11 +193,18 @@
    return (cb()->as_compiled_method()->method()->num_stack_arg_slots() * VMRegImpl::stack_slot_size) >> LogBytesPerWord;
  }
  
  template <ChunkFrames frame_kind>
  inline int StackChunkFrameStream<frame_kind>::num_oops() const {
-   return is_interpreted() ? interpreter_frame_num_oops() : oopmap()->num_oops();
+   if (is_interpreted()) {
+     return interpreter_frame_num_oops();
+   } else if (is_compiled()) {
+     return oopmap()->num_oops();
+   } else {
+     assert(is_stub(), "invariant");
+     return 0;
+   }
  }
  
  template <ChunkFrames frame_kind>
  inline void StackChunkFrameStream<frame_kind>::initialize_register_map(RegisterMap* map) {
    update_reg_map_pd(map);

@@ -230,11 +237,11 @@
    }
  
    get_cb();
    update_reg_map_pd(map);
    if (safepoint && cb() != nullptr) { // there's no post-call nop and no fast oopmap lookup
-     _oopmap = cb()->oop_map_for_return_address(pc());
+     _oopmap = cb()->oop_map_for_return_address(orig_pc());
    }
  }
  
  template <ChunkFrames frame_kind>
  inline void StackChunkFrameStream<frame_kind>::get_cb() {

@@ -297,13 +304,12 @@
  }
  
  template<>
  template<>
  inline void StackChunkFrameStream<ChunkFrames::CompiledOnly>::update_reg_map(RegisterMap* map) {
-   assert(map->in_cont(), "");
-   assert(map->stack_chunk()() == _chunk, "");
-   if (map->update_map()) {
+   assert(!map->in_cont() || map->stack_chunk() == _chunk, "");
+   if (map->update_map() && is_stub()) {
      frame f = to_frame();
      oopmap()->update_register_map(&f, map); // we have callee-save registers in this case
    }
  }
  
< prev index next >