Mercurial > hg > truffle
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(); |