mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-03 04:30:06 +00:00
7043301: assert(locals < caller->fp() || locals > (caller->fp() + 16)) failed: locals in save area
Reviewed-by: kvn
This commit is contained in:
parent
9b9953cb0b
commit
42e49be1bc
@ -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();
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user