470 __ jump(RuntimeAddress(StubRoutines::throw_IncompatibleClassChangeError_entry())); 471 } 472 } 473 } 474 475 #ifndef PRODUCT 476 void trace_method_handle_stub(const char* adaptername, 477 oop mh, 478 intptr_t* saved_regs, 479 intptr_t* entry_sp) { 480 // called as a leaf from native code: do not block the JVM! 481 bool has_mh = (strstr(adaptername, "/static") == NULL && 482 strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH 483 const char* mh_reg_name = has_mh ? "rcx_mh" : "rcx"; 484 tty->print_cr("MH %s %s="PTR_FORMAT" sp="PTR_FORMAT, 485 adaptername, mh_reg_name, 486 (void *)mh, entry_sp); 487 488 if (Verbose) { 489 tty->print_cr("Registers:"); 490 const int saved_regs_count = RegisterImpl::number_of_registers; 491 for (int i = 0; i < saved_regs_count; i++) { 492 Register r = as_Register(i); 493 // The registers are stored in reverse order on the stack (by pusha). 494 tty->print("%3s=" PTR_FORMAT, r->name(), saved_regs[((saved_regs_count - 1) - i)]); 495 if ((i + 1) % 4 == 0) { 496 tty->cr(); 497 } else { 498 tty->print(", "); 499 } 500 } 501 tty->cr(); 502 503 { 504 // dumping last frame with frame::describe 505 506 JavaThread* p = JavaThread::active(); 507 508 ResourceMark rm; 509 PRESERVE_EXCEPTION_MARK; // may not be needed by safer and unexpensive here 510 FrameValues values; 511 512 // Note: We want to allow trace_method_handle from any call site. 513 // While trace_method_handle creates a frame, it may be entered 514 // without a PC on the stack top (e.g. not just after a call). | 470 __ jump(RuntimeAddress(StubRoutines::throw_IncompatibleClassChangeError_entry())); 471 } 472 } 473 } 474 475 #ifndef PRODUCT 476 void trace_method_handle_stub(const char* adaptername, 477 oop mh, 478 intptr_t* saved_regs, 479 intptr_t* entry_sp) { 480 // called as a leaf from native code: do not block the JVM! 481 bool has_mh = (strstr(adaptername, "/static") == NULL && 482 strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH 483 const char* mh_reg_name = has_mh ? "rcx_mh" : "rcx"; 484 tty->print_cr("MH %s %s="PTR_FORMAT" sp="PTR_FORMAT, 485 adaptername, mh_reg_name, 486 (void *)mh, entry_sp); 487 488 if (Verbose) { 489 tty->print_cr("Registers:"); 490 const int saved_regs_count = Register::number_of_registers; 491 for (int i = 0; i < saved_regs_count; i++) { 492 Register r = as_Register(i); 493 // The registers are stored in reverse order on the stack (by pusha). 494 tty->print("%3s=" PTR_FORMAT, r.name(), saved_regs[((saved_regs_count - 1) - i)]); 495 if ((i + 1) % 4 == 0) { 496 tty->cr(); 497 } else { 498 tty->print(", "); 499 } 500 } 501 tty->cr(); 502 503 { 504 // dumping last frame with frame::describe 505 506 JavaThread* p = JavaThread::active(); 507 508 ResourceMark rm; 509 PRESERVE_EXCEPTION_MARK; // may not be needed by safer and unexpensive here 510 FrameValues values; 511 512 // Note: We want to allow trace_method_handle from any call site. 513 // While trace_method_handle creates a frame, it may be entered 514 // without a PC on the stack top (e.g. not just after a call). |