6925249: assert(last_sp < (intptr_t*) interpreter_frame_monitor_begin(),"bad tos")
Summary: Fix assert since top deoptimized frame has last_sp == interpreter_frame_monitor_begin if there are no expressions.
Reviewed-by: twisti
--- a/hotspot/src/cpu/x86/vm/frame_x86.inline.hpp Tue Feb 09 10:21:06 2010 -0800
+++ b/hotspot/src/cpu/x86/vm/frame_x86.inline.hpp Fri Feb 12 08:54:13 2010 -0800
@@ -233,7 +233,8 @@
} 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;
}
}
--- a/hotspot/src/share/vm/runtime/deoptimization.cpp Tue Feb 09 10:21:06 2010 -0800
+++ b/hotspot/src/share/vm/runtime/deoptimization.cpp Fri Feb 12 08:54:13 2010 -0800
@@ -938,21 +938,6 @@
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
--- a/hotspot/src/share/vm/runtime/frame.cpp Tue Feb 09 10:21:06 2010 -0800
+++ b/hotspot/src/share/vm/runtime/frame.cpp Fri Feb 12 08:54:13 2010 -0800
@@ -606,12 +606,12 @@
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());
--- a/hotspot/src/share/vm/runtime/vframeArray.cpp Tue Feb 09 10:21:06 2010 -0800
+++ b/hotspot/src/share/vm/runtime/vframeArray.cpp Fri Feb 12 08:54:13 2010 -0800
@@ -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 @@
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 @@
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 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 {