--- old/src/hotspot/cpu/x86/frame_x86.cpp 2018-04-20 00:46:29.000000000 +0100 +++ new/src/hotspot/cpu/x86/frame_x86.cpp 2018-04-20 00:46:29.000000000 +0100 @@ -29,6 +29,7 @@ #include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" +#include "runtime/continuation.hpp" #include "runtime/frame.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/javaCalls.hpp" @@ -456,6 +457,11 @@ intptr_t* sender_sp = unextended_sp() + _cb->frame_size(); intptr_t* unextended_sp = sender_sp; + if (sender_sp != real_fp()) { + print_value_on(tty, map->thread()); + assert (sender_sp == real_fp(), "sender_sp: %p real_fp: %p", sender_sp, real_fp()); + } + // On Intel the return_address is always the word on the stack address sender_pc = (address) *(sender_sp-1); @@ -490,8 +496,8 @@ // update it accordingly map->set_include_argument_oops(false); - if (is_entry_frame()) return sender_for_entry_frame(map); - if (is_interpreted_frame()) return sender_for_interpreter_frame(map); + if (is_entry_frame()) return Continuation::fix_continuation_bottom_sender(*this, sender_for_entry_frame(map), map); + if (is_interpreted_frame()) return Continuation::fix_continuation_bottom_sender(*this, sender_for_interpreter_frame(map), map); assert(_cb == CodeCache::find_blob(pc()),"Must be the same"); if (_cb != NULL) {