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