542 PRESERVE_EXCEPTION_MARK;
543 FrameValues values;
544
545 intptr_t* dump_fp = (intptr_t *) saved_bp;
546 address dump_pc = (address) saved_regs[trace_mh_nregs-2]; // LR (with LR,PC last in saved_regs)
547 frame dump_frame((intptr_t *)entry_sp, dump_fp, dump_pc);
548
549 dump_frame.describe(values, 1);
550 // mark Rsender_sp if seems valid
551 if (has_mh) {
552 if ((saved_sp >= entry_sp - UNREASONABLE_STACK_MOVE) && (saved_sp < dump_fp)) {
553 values.describe(-1, saved_sp, "*Rsender_sp");
554 }
555 }
556
557 // Note: the unextended_sp may not be correct
558 tty->print_cr(" stack layout:");
559 values.print(p);
560 }
561 if (Verbose) {
562 if (has_mh && mh->is_oop()) {
563 mh->print();
564 if (java_lang_invoke_MethodHandle::is_instance(mh)) {
565 if (java_lang_invoke_MethodHandle::form_offset_in_bytes() != 0)
566 java_lang_invoke_MethodHandle::form(mh)->print();
567 }
568 }
569 }
570 }
571
572 void MethodHandles::trace_method_handle(MacroAssembler* _masm, const char* adaptername) {
573 if (!TraceMethodHandles) return;
574 BLOCK_COMMENT("trace_method_handle {");
575 // register saving
576 // must correspond to trace_mh_nregs and trace_mh_regs defined above
577 int push_size = __ save_all_registers();
578 assert(trace_mh_nregs*wordSize == push_size,"saved register count mismatch");
579
580 __ mov_slow(R0, adaptername);
581 __ mov(R1, SP); // entry_sp (after pushes)
582 __ mov(R2, FP);
|
542 PRESERVE_EXCEPTION_MARK;
543 FrameValues values;
544
545 intptr_t* dump_fp = (intptr_t *) saved_bp;
546 address dump_pc = (address) saved_regs[trace_mh_nregs-2]; // LR (with LR,PC last in saved_regs)
547 frame dump_frame((intptr_t *)entry_sp, dump_fp, dump_pc);
548
549 dump_frame.describe(values, 1);
550 // mark Rsender_sp if seems valid
551 if (has_mh) {
552 if ((saved_sp >= entry_sp - UNREASONABLE_STACK_MOVE) && (saved_sp < dump_fp)) {
553 values.describe(-1, saved_sp, "*Rsender_sp");
554 }
555 }
556
557 // Note: the unextended_sp may not be correct
558 tty->print_cr(" stack layout:");
559 values.print(p);
560 }
561 if (Verbose) {
562 if (has_mh && oopDesc::is_oop(mh)) {
563 mh->print();
564 if (java_lang_invoke_MethodHandle::is_instance(mh)) {
565 if (java_lang_invoke_MethodHandle::form_offset_in_bytes() != 0)
566 java_lang_invoke_MethodHandle::form(mh)->print();
567 }
568 }
569 }
570 }
571
572 void MethodHandles::trace_method_handle(MacroAssembler* _masm, const char* adaptername) {
573 if (!TraceMethodHandles) return;
574 BLOCK_COMMENT("trace_method_handle {");
575 // register saving
576 // must correspond to trace_mh_nregs and trace_mh_regs defined above
577 int push_size = __ save_all_registers();
578 assert(trace_mh_nregs*wordSize == push_size,"saved register count mismatch");
579
580 __ mov_slow(R0, adaptername);
581 __ mov(R1, SP); // entry_sp (after pushes)
582 __ mov(R2, FP);
|