comparison src/share/vm/runtime/vframeArray.cpp @ 8506:c3657d00e343

-Merge with tip
author Christos Kotselidis <christos.kotselidis@oracle.com>
date Thu, 21 Mar 2013 14:11:13 +0100
parents 6b6cbd8b8914
children 9f9aaa65294e
comparison
equal deleted inserted replaced
8505:dee7c8b578c7 8506:c3657d00e343
61 // interpreter frame we will be creating to replace vf 61 // interpreter frame we will be creating to replace vf
62 62
63 _method = vf->method(); 63 _method = vf->method();
64 _bci = vf->raw_bci(); 64 _bci = vf->raw_bci();
65 _reexecute = vf->should_reexecute(); 65 _reexecute = vf->should_reexecute();
66 66
67 int index; 67 int index;
68 68
69 // Get the monitors off-stack 69 // Get the monitors off-stack
70 70
71 GrowableArray<MonitorInfo*>* list = vf->monitors(); 71 GrowableArray<MonitorInfo*>* list = vf->monitors();
231 } 231 }
232 } else if (JvmtiExport::can_force_early_return() && state != NULL && state->is_earlyret_pending()) { 232 } else if (JvmtiExport::can_force_early_return() && state != NULL && state->is_earlyret_pending()) {
233 // Force early return from top frame after deoptimization 233 // Force early return from top frame after deoptimization
234 #ifndef CC_INTERP 234 #ifndef CC_INTERP
235 pc = Interpreter::remove_activation_early_entry(state->earlyret_tos()); 235 pc = Interpreter::remove_activation_early_entry(state->earlyret_tos());
236 #else
237 // TBD: Need to implement ForceEarlyReturn for CC_INTERP (ia64)
238 #endif 236 #endif
239 } else { 237 } else {
240 // Possibly override the previous pc computation of the top (youngest) frame 238 // Possibly override the previous pc computation of the top (youngest) frame
241 switch (exec_mode) { 239 switch (exec_mode) {
242 case Deoptimization::Unpack_deopt: 240 case Deoptimization::Unpack_deopt:
286 // we placed in the skeletal frame now that we finally know the 284 // we placed in the skeletal frame now that we finally know the
287 // exact interpreter address we should use. 285 // exact interpreter address we should use.
288 286
289 _frame.patch_pc(thread, pc); 287 _frame.patch_pc(thread, pc);
290 288
291 assert (!method()->is_synchronized() || locks > 0, "synchronized methods must have monitors"); 289 assert (!method()->is_synchronized() || locks > 0 || raw_bci() == SynchronizationEntryBCI, "synchronized methods must have monitors");
292 290
293 BasicObjectLock* top = iframe()->interpreter_frame_monitor_begin(); 291 BasicObjectLock* top = iframe()->interpreter_frame_monitor_begin();
294 for (int index = 0; index < locks; index++) { 292 for (int index = 0; index < locks; index++) {
295 top = iframe()->previous_monitor_in_interpreter_frame(top); 293 top = iframe()->previous_monitor_in_interpreter_frame(top);
296 BasicObjectLock* src = _monitors->at(index); 294 BasicObjectLock* src = _monitors->at(index);
429 tty->print_cr("[%d Interpreted Frame]", ++unpack_counter); 427 tty->print_cr("[%d Interpreted Frame]", ++unpack_counter);
430 iframe()->print_on(tty); 428 iframe()->print_on(tty);
431 RegisterMap map(thread); 429 RegisterMap map(thread);
432 vframe* f = vframe::new_vframe(iframe(), &map, thread); 430 vframe* f = vframe::new_vframe(iframe(), &map, thread);
433 f->print(); 431 f->print();
432
433 tty->print_cr("locals size %d", locals()->size());
434 tty->print_cr("expression size %d", expressions()->size());
435
436 method()->print_value();
434 tty->cr(); 437 tty->cr();
435 // method()->print_codes(); 438 // method()->print_codes();
436 } else if (TraceDeoptimization) { 439 } else if (TraceDeoptimization) {
437 tty->print(" "); 440 tty->print(" ");
438 method()->print_value(); 441 method()->print_value();