7043301: assert(locals < caller->fp() || locals > (caller->fp() + 16)) failed: locals in save area

Reviewed-by: kvn
This commit is contained in:
Tom Rodriguez 2011-05-09 19:45:52 -07:00
parent 9b9953cb0b
commit 42e49be1bc
5 changed files with 9 additions and 6 deletions

View file

@ -1712,7 +1712,10 @@ int AbstractInterpreter::layout_activation(methodOop method,
// frames so place the locals adjacent to the varargs area.
locals = fp + frame::memory_parameter_word_sp_offset + local_words - 1;
if (caller->is_interpreted_frame()) {
*interpreter_frame->register_addr(I5_savedSP) = (intptr_t) (fp + rounded_cls) - STACK_BIAS;
int parm_words = method->size_of_parameters() * Interpreter::stackElementWords;
int delta = local_words - parm_words;
int computed_sp_adjustment = (delta > 0) ? round_to(delta, WordsPerLong) : 0;
*interpreter_frame->register_addr(I5_savedSP) = (intptr_t) (fp + computed_sp_adjustment) - STACK_BIAS;
}
}
if (TraceDeoptimization) {