414 // this is weird "H" ought to be at a higher address however the 415 // oopMaps seems to have the "H" regs at the same address and the 416 // vanilla register. 417 // XXXX make this go away 418 if (true) { 419 map->set_location(rfp->as_VMReg()->next(), (address) link_addr); 420 } 421 } 422 423 424 //------------------------------------------------------------------------------ 425 // frame::sender_for_interpreter_frame 426 frame frame::sender_for_interpreter_frame(RegisterMap* map) const { 427 // SP is the raw SP from the sender after adapter or interpreter 428 // extension. 429 intptr_t* sender_sp = this->sender_sp(); 430 431 // This is the sp before any possible extension (adapter/locals). 432 intptr_t* unextended_sp = interpreter_frame_sender_sp(); 433 434 #if defined(COMPILER2) || INCLUDE_JVMCI 435 if (map->update_map()) { 436 update_map_with_saved_link(map, (intptr_t**) addr_at(link_offset)); 437 } 438 #endif // COMPILER2 || INCLUDE_JVMCI 439 440 return frame(sender_sp, unextended_sp, link(), sender_pc()); 441 } 442 443 444 //------------------------------------------------------------------------------ 445 // frame::sender_for_compiled_frame 446 frame frame::sender_for_compiled_frame(RegisterMap* map) const { 447 // we cannot rely upon the last fp having been saved to the thread 448 // in C2 code but it will have been pushed onto the stack. so we 449 // have to find it relative to the unextended sp 450 451 assert(_cb->frame_size() >= 0, "must have non-zero frame size"); 452 intptr_t* l_sender_sp = unextended_sp() + _cb->frame_size(); 453 intptr_t* unextended_sp = l_sender_sp; 454 455 // the return_address is always the word on the stack 456 address sender_pc = (address) *(l_sender_sp-1); 457 458 intptr_t** saved_fp_addr = (intptr_t**) (l_sender_sp - frame::sender_sp_offset); | 414 // this is weird "H" ought to be at a higher address however the 415 // oopMaps seems to have the "H" regs at the same address and the 416 // vanilla register. 417 // XXXX make this go away 418 if (true) { 419 map->set_location(rfp->as_VMReg()->next(), (address) link_addr); 420 } 421 } 422 423 424 //------------------------------------------------------------------------------ 425 // frame::sender_for_interpreter_frame 426 frame frame::sender_for_interpreter_frame(RegisterMap* map) const { 427 // SP is the raw SP from the sender after adapter or interpreter 428 // extension. 429 intptr_t* sender_sp = this->sender_sp(); 430 431 // This is the sp before any possible extension (adapter/locals). 432 intptr_t* unextended_sp = interpreter_frame_sender_sp(); 433 434 #if COMPILER2_OR_JVMCI 435 if (map->update_map()) { 436 update_map_with_saved_link(map, (intptr_t**) addr_at(link_offset)); 437 } 438 #endif // COMPILER2_OR_JVMCI 439 440 return frame(sender_sp, unextended_sp, link(), sender_pc()); 441 } 442 443 444 //------------------------------------------------------------------------------ 445 // frame::sender_for_compiled_frame 446 frame frame::sender_for_compiled_frame(RegisterMap* map) const { 447 // we cannot rely upon the last fp having been saved to the thread 448 // in C2 code but it will have been pushed onto the stack. so we 449 // have to find it relative to the unextended sp 450 451 assert(_cb->frame_size() >= 0, "must have non-zero frame size"); 452 intptr_t* l_sender_sp = unextended_sp() + _cb->frame_size(); 453 intptr_t* unextended_sp = l_sender_sp; 454 455 // the return_address is always the word on the stack 456 address sender_pc = (address) *(l_sender_sp-1); 457 458 intptr_t** saved_fp_addr = (intptr_t**) (l_sender_sp - frame::sender_sp_offset); |