508
509 // Robust search of trace_calling_frame (independant of inlining).
510 assert(cur_frame.sp() <= saved_regs, "registers not saved on stack ?");
511 frame trace_calling_frame = os::get_sender_for_C_frame(&cur_frame);
512 while (trace_calling_frame.fp() < saved_regs) {
513 trace_calling_frame = os::get_sender_for_C_frame(&trace_calling_frame);
514 }
515
516 // Safely create a frame and call frame::describe.
517 intptr_t *dump_sp = trace_calling_frame.sender_sp();
518
519 frame dump_frame = frame(dump_sp);
520 dump_frame.describe(values, 1);
521
522 values.describe(-1, saved_regs, "raw top of stack");
523
524 tty->print_cr("Stack layout:");
525 values.print(p);
526 }
527
528 if (has_mh && mh->is_oop()) {
529 mh->print();
530 if (java_lang_invoke_MethodHandle::is_instance(mh)) {
531 if (java_lang_invoke_MethodHandle::form_offset_in_bytes() != 0)
532 java_lang_invoke_MethodHandle::form(mh)->print();
533 }
534 }
535 }
536 }
537
538 void MethodHandles::trace_method_handle(MacroAssembler* _masm, const char* adaptername) {
539 if (!TraceMethodHandles) return;
540
541 BLOCK_COMMENT("trace_method_handle {");
542
543 const Register tmp = R11; // Will be preserved.
544 const int nbytes_save = MacroAssembler::num_volatile_regs * 8;
545 __ save_volatile_gprs(R1_SP, -nbytes_save); // except R0
546 __ save_LR_CR(tmp); // save in old frame
547
548 __ mr(R5_ARG3, R1_SP); // saved_sp
|
508
509 // Robust search of trace_calling_frame (independant of inlining).
510 assert(cur_frame.sp() <= saved_regs, "registers not saved on stack ?");
511 frame trace_calling_frame = os::get_sender_for_C_frame(&cur_frame);
512 while (trace_calling_frame.fp() < saved_regs) {
513 trace_calling_frame = os::get_sender_for_C_frame(&trace_calling_frame);
514 }
515
516 // Safely create a frame and call frame::describe.
517 intptr_t *dump_sp = trace_calling_frame.sender_sp();
518
519 frame dump_frame = frame(dump_sp);
520 dump_frame.describe(values, 1);
521
522 values.describe(-1, saved_regs, "raw top of stack");
523
524 tty->print_cr("Stack layout:");
525 values.print(p);
526 }
527
528 if (has_mh && oopDesc::is_oop(mh)) {
529 mh->print();
530 if (java_lang_invoke_MethodHandle::is_instance(mh)) {
531 if (java_lang_invoke_MethodHandle::form_offset_in_bytes() != 0)
532 java_lang_invoke_MethodHandle::form(mh)->print();
533 }
534 }
535 }
536 }
537
538 void MethodHandles::trace_method_handle(MacroAssembler* _masm, const char* adaptername) {
539 if (!TraceMethodHandles) return;
540
541 BLOCK_COMMENT("trace_method_handle {");
542
543 const Register tmp = R11; // Will be preserved.
544 const int nbytes_save = MacroAssembler::num_volatile_regs * 8;
545 __ save_volatile_gprs(R1_SP, -nbytes_save); // except R0
546 __ save_LR_CR(tmp); // save in old frame
547
548 __ mr(R5_ARG3, R1_SP); // saved_sp
|