1409 // Whenever JVMTI is interp_only_mode, method entry/exit events are sent to
1410 // track stack depth. If it is possible to enter interp_only_mode we add
1411 // the code to check if the event should be sent.
1412 if (JvmtiExport::can_post_interpreter_events()) {
1413 Label L;
1414 ldrw(r3, Address(rthread, JavaThread::interp_only_mode_offset()));
1415 cbzw(r3, L);
1416 call_VM(noreg, CAST_FROM_FN_PTR(address,
1417 InterpreterRuntime::post_method_entry));
1418 bind(L);
1419 }
1420
1421 {
1422 SkipIfEqual skip(this, &DTraceMethodProbes, false);
1423 get_method(c_rarg1);
1424 call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry),
1425 rthread, c_rarg1);
1426 }
1427
1428 // RedefineClasses() tracing support for obsolete method entry
1429 if (log_is_enabled(Trace, redefine, class, obsolete)) {
1430 get_method(c_rarg1);
1431 call_VM_leaf(
1432 CAST_FROM_FN_PTR(address, SharedRuntime::rc_trace_method_entry),
1433 rthread, c_rarg1);
1434 }
1435
1436 }
1437
1438
1439 void InterpreterMacroAssembler::notify_method_exit(
1440 TosState state, NotifyMethodExitMode mode) {
1441 // Whenever JVMTI is interp_only_mode, method entry/exit events are sent to
1442 // track stack depth. If it is possible to enter interp_only_mode we add
1443 // the code to check if the event should be sent.
1444 if (mode == NotifyJVMTI && JvmtiExport::can_post_interpreter_events()) {
1445 Label L;
1446 // Note: frame::interpreter_frame_result has a dependency on how the
1447 // method result is saved across the call to post_method_exit. If this
1448 // is changed then the interpreter_frame_result implementation will
1449 // need to be updated too.
|
1409 // Whenever JVMTI is interp_only_mode, method entry/exit events are sent to
1410 // track stack depth. If it is possible to enter interp_only_mode we add
1411 // the code to check if the event should be sent.
1412 if (JvmtiExport::can_post_interpreter_events()) {
1413 Label L;
1414 ldrw(r3, Address(rthread, JavaThread::interp_only_mode_offset()));
1415 cbzw(r3, L);
1416 call_VM(noreg, CAST_FROM_FN_PTR(address,
1417 InterpreterRuntime::post_method_entry));
1418 bind(L);
1419 }
1420
1421 {
1422 SkipIfEqual skip(this, &DTraceMethodProbes, false);
1423 get_method(c_rarg1);
1424 call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry),
1425 rthread, c_rarg1);
1426 }
1427
1428 // RedefineClasses() tracing support for obsolete method entry
1429 if (log_is_enabled(Trace, redefine, class, obsolete) ||
1430 log_is_enabled(Trace, interpreter, bytecode)) {
1431 get_method(c_rarg1);
1432 call_VM_leaf(
1433 CAST_FROM_FN_PTR(address, SharedRuntime::rc_trace_method_entry),
1434 rthread, c_rarg1);
1435 }
1436
1437 }
1438
1439
1440 void InterpreterMacroAssembler::notify_method_exit(
1441 TosState state, NotifyMethodExitMode mode) {
1442 // Whenever JVMTI is interp_only_mode, method entry/exit events are sent to
1443 // track stack depth. If it is possible to enter interp_only_mode we add
1444 // the code to check if the event should be sent.
1445 if (mode == NotifyJVMTI && JvmtiExport::can_post_interpreter_events()) {
1446 Label L;
1447 // Note: frame::interpreter_frame_result has a dependency on how the
1448 // method result is saved across the call to post_method_exit. If this
1449 // is changed then the interpreter_frame_result implementation will
1450 // need to be updated too.
|