6925249: assert(last_sp < (intptr_t*) interpreter_frame_monitor_begin(),"bad tos")
Fix assert since top deoptimized frame has last_sp == interpreter_frame_monitor_begin if there are no expressions. Reviewed-by: twisti
This commit is contained in:
parent
1a1e145498
commit
d4437819bd
@ -233,7 +233,8 @@ inline intptr_t* frame::interpreter_frame_tos_address() const {
|
||||
} else {
|
||||
// sp() may have been extended or shrunk by an adapter. At least
|
||||
// check that we don't fall behind the legal region.
|
||||
assert(last_sp < (intptr_t*) interpreter_frame_monitor_begin(), "bad tos");
|
||||
// For top deoptimized frame last_sp == interpreter_frame_monitor_end.
|
||||
assert(last_sp <= (intptr_t*) interpreter_frame_monitor_end(), "bad tos");
|
||||
return last_sp;
|
||||
}
|
||||
}
|
||||
|
@ -938,21 +938,6 @@ vframeArray* Deoptimization::create_vframeArray(JavaThread* thread, frame fr, Re
|
||||
if (TraceDeoptimization) {
|
||||
ttyLocker ttyl;
|
||||
tty->print_cr(" Created vframeArray " INTPTR_FORMAT, array);
|
||||
if (Verbose) {
|
||||
int count = 0;
|
||||
// this used to leak deoptimizedVFrame like it was going out of style!!!
|
||||
for (int index = 0; index < array->frames(); index++ ) {
|
||||
vframeArrayElement* e = array->element(index);
|
||||
e->print(tty);
|
||||
|
||||
/*
|
||||
No printing yet.
|
||||
array->vframe_at(index)->print_activation(count++);
|
||||
// better as...
|
||||
array->print_activation_for(index, count++);
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // PRODUCT
|
||||
|
||||
|
@ -606,12 +606,12 @@ void frame::interpreter_frame_print_on(outputStream* st) const {
|
||||
for (BasicObjectLock* current = interpreter_frame_monitor_end();
|
||||
current < interpreter_frame_monitor_begin();
|
||||
current = next_monitor_in_interpreter_frame(current)) {
|
||||
st->print_cr(" [ - obj ");
|
||||
st->print(" - obj [");
|
||||
current->obj()->print_value_on(st);
|
||||
st->cr();
|
||||
st->print_cr(" - lock ");
|
||||
st->print_cr("]");
|
||||
st->print(" - lock [");
|
||||
current->lock()->print_on(st);
|
||||
st->cr();
|
||||
st->print_cr("]");
|
||||
}
|
||||
// monitor
|
||||
st->print_cr(" - monitor[" INTPTR_FORMAT "]", interpreter_frame_monitor_begin());
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
|
||||
* Copyright 1997-2010 Sun Microsystems, Inc. All Rights Reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -186,7 +186,7 @@ void vframeArrayElement::unpack_on_stack(int callee_parameters,
|
||||
int popframe_preserved_args_size_in_bytes = 0;
|
||||
int popframe_preserved_args_size_in_words = 0;
|
||||
if (is_top_frame) {
|
||||
JvmtiThreadState *state = thread->jvmti_thread_state();
|
||||
JvmtiThreadState *state = thread->jvmti_thread_state();
|
||||
if (JvmtiExport::can_pop_frame() &&
|
||||
(thread->has_pending_popframe() || thread->popframe_forcing_deopt_reexecution())) {
|
||||
if (thread->has_pending_popframe()) {
|
||||
@ -381,7 +381,6 @@ void vframeArrayElement::unpack_on_stack(int callee_parameters,
|
||||
RegisterMap map(thread);
|
||||
vframe* f = vframe::new_vframe(iframe(), &map, thread);
|
||||
f->print();
|
||||
iframe()->interpreter_frame_print_on(tty);
|
||||
|
||||
tty->print_cr("locals size %d", locals()->size());
|
||||
tty->print_cr("expression size %d", expressions()->size());
|
||||
@ -582,7 +581,7 @@ void vframeArray::print_on_2(outputStream* st) {
|
||||
}
|
||||
|
||||
void vframeArrayElement::print(outputStream* st) {
|
||||
st->print_cr(" - interpreter_frame -> sp: ", INTPTR_FORMAT, iframe()->sp());
|
||||
st->print_cr(" - interpreter_frame -> sp: " INTPTR_FORMAT, iframe()->sp());
|
||||
}
|
||||
|
||||
void vframeArray::print_value_on(outputStream* st) const {
|
||||
|
Loading…
x
Reference in New Issue
Block a user