Mercurial > hg > truffle
diff src/share/vm/c1x/c1x_CodeInstaller.cpp @ 1936:8d88c9ac9247
Correct deopt handler entry. New flag -XX:+TraceSignals. More detailed deopt printing.
author | Thomas Wuerthinger <wuerthinger@ssw.jku.at> |
---|---|
date | Thu, 23 Dec 2010 18:13:28 +0100 |
parents | 48bbaead8b6c |
children | 4853c5cad3aa |
line wrap: on
line diff
--- a/src/share/vm/c1x/c1x_CodeInstaller.cpp Wed Dec 22 19:47:39 2010 +0100 +++ b/src/share/vm/c1x/c1x_CodeInstaller.cpp Thu Dec 23 18:13:28 2010 +0100 @@ -162,10 +162,6 @@ assert(_hotspot_method != NULL && _name == NULL, "installMethod needs NON-NULL method and NULL name"); assert(_hotspot_method->is_a(HotSpotMethodResolved::klass()), "installMethod needs a HotSpotMethodResolved"); - // TODO: This is a hack.. Produce correct entries. - _offsets.set_value(CodeOffsets::Exceptions, 0); - _offsets.set_value(CodeOffsets::Deopt, 0); - methodOop method = VmIds::get<methodOop>(HotSpotMethodResolved::vmId(_hotspot_method)); ciMethodObject = (ciMethod *) _env->get_object(method); _parameter_count = method->size_of_parameters(); @@ -366,6 +362,11 @@ GrowableArray<ScopeValue*>* expressions = new GrowableArray<ScopeValue*> (); GrowableArray<MonitorValue*>* monitors = new GrowableArray<MonitorValue*> (); + if (TraceC1X >= 2) { + tty->print_cr("Scope at bci %d with %d values", bci, values->length()); + tty->print_cr("%d locals %d expressions, %d monitors", local_count, expression_count, monitor_count); + } + for (jint i = 0; i < values->length(); i++) { ScopeValue* value = get_hotspot_value(((oop*) values->base(T_OBJECT))[i], _frame_size); @@ -600,6 +601,9 @@ case MARK_EXCEPTION_HANDLER_ENTRY: _offsets.set_value(CodeOffsets::Exceptions, pc_offset); break; + case MARK_DEOPT_HANDLER_ENTRY: + _offsets.set_value(CodeOffsets::Deopt, pc_offset); + break; case MARK_STATIC_CALL_STUB: { assert(references->length() == 1, "static call stub needs one reference"); oop ref = ((oop*) references->base(T_OBJECT))[0];