279 iframe(), 280 is_top_frame, 281 is_bottom_frame); 282 283 // Update the pc in the frame object and overwrite the temporary pc 284 // we placed in the skeletal frame now that we finally know the 285 // exact interpreter address we should use. 286 287 _frame.patch_pc(thread, pc); 288 289 assert (!method()->is_synchronized() || locks > 0, "synchronized methods must have monitors"); 290 291 BasicObjectLock* top = iframe()->interpreter_frame_monitor_begin(); 292 for (int index = 0; index < locks; index++) { 293 top = iframe()->previous_monitor_in_interpreter_frame(top); 294 BasicObjectLock* src = _monitors->at(index); 295 top->set_obj(src->obj()); 296 src->lock()->move_to(src->obj(), top->lock()); 297 } 298 if (ProfileInterpreter) { 299 iframe()->interpreter_frame_set_mdx(0); // clear out the mdp. 300 } 301 iframe()->interpreter_frame_set_bcx((intptr_t)bcp); // cannot use bcp because frame is not initialized yet 302 if (ProfileInterpreter) { 303 MethodData* mdo = method()->method_data(); 304 if (mdo != NULL) { 305 int bci = iframe()->interpreter_frame_bci(); 306 if (use_next_mdp) ++bci; 307 address mdp = mdo->bci_to_dp(bci); 308 iframe()->interpreter_frame_set_mdp(mdp); 309 } 310 } 311 312 // Unpack expression stack 313 // If this is an intermediate frame (i.e. not top frame) then this 314 // only unpacks the part of the expression stack not used by callee 315 // as parameters. The callee parameters are unpacked as part of the 316 // callee locals. 317 int i; 318 for(i = 0; i < expressions()->size(); i++) { 319 StackValue *value = expressions()->at(i); 320 intptr_t* addr = iframe()->interpreter_frame_expression_stack_at(i); 321 switch(value->type()) { | 279 iframe(), 280 is_top_frame, 281 is_bottom_frame); 282 283 // Update the pc in the frame object and overwrite the temporary pc 284 // we placed in the skeletal frame now that we finally know the 285 // exact interpreter address we should use. 286 287 _frame.patch_pc(thread, pc); 288 289 assert (!method()->is_synchronized() || locks > 0, "synchronized methods must have monitors"); 290 291 BasicObjectLock* top = iframe()->interpreter_frame_monitor_begin(); 292 for (int index = 0; index < locks; index++) { 293 top = iframe()->previous_monitor_in_interpreter_frame(top); 294 BasicObjectLock* src = _monitors->at(index); 295 top->set_obj(src->obj()); 296 src->lock()->move_to(src->obj(), top->lock()); 297 } 298 if (ProfileInterpreter) { 299 iframe()->interpreter_frame_set_mdp(0); // clear out the mdp. 300 } 301 iframe()->interpreter_frame_set_bcp(bcp); 302 if (ProfileInterpreter) { 303 MethodData* mdo = method()->method_data(); 304 if (mdo != NULL) { 305 int bci = iframe()->interpreter_frame_bci(); 306 if (use_next_mdp) ++bci; 307 address mdp = mdo->bci_to_dp(bci); 308 iframe()->interpreter_frame_set_mdp(mdp); 309 } 310 } 311 312 // Unpack expression stack 313 // If this is an intermediate frame (i.e. not top frame) then this 314 // only unpacks the part of the expression stack not used by callee 315 // as parameters. The callee parameters are unpacked as part of the 316 // callee locals. 317 int i; 318 for(i = 0; i < expressions()->size(); i++) { 319 StackValue *value = expressions()->at(i); 320 intptr_t* addr = iframe()->interpreter_frame_expression_stack_at(i); 321 switch(value->type()) { |