src/cpu/x86/vm/methodHandles_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/cpu/x86/vm

src/cpu/x86/vm/methodHandles_x86.cpp

Print this page




 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).


src/cpu/x86/vm/methodHandles_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File