提交 653ef337 编写于 作者: N never

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

Reviewed-by: kvn
上级 63ceb304
......@@ -811,7 +811,7 @@ intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
#ifdef ASSERT
#define DESCRIBE_FP_OFFSET(name) \
values.describe(-1, fp() + frame::name##_offset, #name)
values.describe(frame_no, fp() + frame::name##_offset, #name)
void frame::describe_pd(FrameValues& values, int frame_no) {
for (int w = 0; w < frame::register_save_words; w++) {
......
......@@ -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) {
......
......@@ -650,7 +650,7 @@ intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
#ifdef ASSERT
#define DESCRIBE_FP_OFFSET(name) \
values.describe(-1, fp() + frame::name##_offset, #name)
values.describe(frame_no, fp() + frame::name##_offset, #name)
void frame::describe_pd(FrameValues& values, int frame_no) {
if (is_interpreted_frame()) {
......
......@@ -1423,7 +1423,7 @@ void FrameValues::describe(int owner, intptr_t* location, const char* descriptio
}
bool FrameValues::validate() {
void FrameValues::validate() {
_values.sort(compare);
bool error = false;
FrameValue prev;
......@@ -1446,7 +1446,7 @@ bool FrameValues::validate() {
prev = fv;
}
}
return error;
assert(!error, "invalid layout");
}
......
......@@ -511,7 +511,7 @@ class FrameValues {
// Used by frame functions to describe locations.
void describe(int owner, intptr_t* location, const char* description, int priority = 0);
bool validate();
void validate();
void print();
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册