inline intptr_t*    frame::sender_sp() const  { 
  if (is_interpreted_frame()) {
    return (intptr_t*) (*register_addr(GR_Lsave_SP));
  } else {
#ifndef CORE
    CodeBlob* cb =  CodeCache::find_blob(pc());
    assert(cb != NULL, "Didn't find code");
    return compiled_sender_sp(cb);
#else
    ShouldNotReachHere();
    return NULL;
#endif
  }
}
Example #2
0
frame frame::sender_for_compiled_frame(RegisterMap *map) const {
  assert(map != NULL, "map must be set");

  // Frame owned by compiler.
  address pc = *compiled_sender_pc_addr(_cb);
  frame caller(compiled_sender_sp(_cb), pc);

  // Now adjust the map.

  // Get the rest.
  if (map->update_map()) {
    // Tell GC to use argument oopmaps for some runtime stubs that need it.
    map->set_include_argument_oops(_cb->caller_must_gc_arguments(map->thread()));
    if (_cb->oop_maps() != NULL) {
      OopMapSet::update_register_map(this, map);
    }
  }

  return caller;
}