diff --git a/src/hotspot/cpu/ppc/abstractInterpreter_ppc.cpp b/src/hotspot/cpu/ppc/abstractInterpreter_ppc.cpp index beadce33637..e59a6d05ea4 100644 --- a/src/hotspot/cpu/ppc/abstractInterpreter_ppc.cpp +++ b/src/hotspot/cpu/ppc/abstractInterpreter_ppc.cpp @@ -100,7 +100,7 @@ int AbstractInterpreter::size_activation(int max_stack, // It is also guaranteed to be walkable even though it is in a skeletal state // // is_top_frame == true: -// We're processing the *oldest* interpreter frame! +// We're processing the *youngest* interpreter frame on top of stack! // // pop_frame_extra_args: // If this is != 0 we are returning to a deoptimized frame by popping @@ -133,6 +133,17 @@ void AbstractInterpreter::layout_activation(Method* method, assert(locals_base <= caller->interpreter_frame_expression_stack(), "bad placement"); const int caller_abi_bytesize = (is_bottom_frame ? frame::top_ijava_frame_abi_size : frame::parent_ijava_frame_abi_size); intptr_t* l2 = caller->sp() + method->max_locals() - 1 + (caller_abi_bytesize / Interpreter::stackElementSize); + if (locals_base < l2) { + tty->print_cr("======================= ASSERTION ====================="); + tty->print_cr("locals_base:" PTR_FORMAT " l2:" PTR_FORMAT, p2i(locals_base), p2i(l2)); + tty->print_cr("is_top_frame:%d is_bottom_frame:%d", is_top_frame, is_bottom_frame); + tty->print_cr("method->max_locals():%d caller_actual_parameters:%d", method->max_locals(), caller_actual_parameters); + tty->print_cr("frame::top_ijava_frame_abi_size=%d frame::parent_ijava_frame_abi_size=%d", frame::top_ijava_frame_abi_size, frame::parent_ijava_frame_abi_size); + tty->print_cr("caller->interpreter_frame_esp():" PTR_FORMAT, p2i(caller->interpreter_frame_esp())); + tty->print_cr("caller->sp():" PTR_FORMAT, p2i(caller->sp())); + tty->print_cr("caller: "); caller->print_on(tty); + tty->print_cr("method: "); method->print_on(tty); + } assert(locals_base >= l2, "bad placement"); } #endif