688 char* message = SharedRuntime::generate_class_cast_message( 689 thread, object->klass()); 690 SharedRuntime::throw_and_post_jvmti_exception( 691 thread, vmSymbols::java_lang_ClassCastException(), message); 692 JRT_END 693 694 695 JRT_ENTRY(void, Runtime1::throw_incompatible_class_change_error(JavaThread* thread)) 696 NOT_PRODUCT(_throw_incompatible_class_change_error_count++;) 697 ResourceMark rm(thread); 698 SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_IncompatibleClassChangeError()); 699 JRT_END 700 701 702 JRT_ENTRY_NO_ASYNC(void, Runtime1::monitorenter(JavaThread* thread, oopDesc* obj, BasicObjectLock* lock)) 703 NOT_PRODUCT(_monitorenter_slowcase_cnt++;) 704 if (PrintBiasedLockingStatistics) { 705 Atomic::inc(BiasedLocking::slow_path_entry_count_addr()); 706 } 707 Handle h_obj(thread, obj); 708 assert(obj == lock->obj(), "must match"); 709 ObjectSynchronizer::enter(h_obj, lock->lock(), THREAD); 710 JRT_END 711 712 713 JRT_LEAF(void, Runtime1::monitorexit(JavaThread* thread, BasicObjectLock* lock)) 714 NOT_PRODUCT(_monitorexit_slowcase_cnt++;) 715 assert(thread == JavaThread::current(), "threads must correspond"); 716 assert(thread->last_Java_sp(), "last_Java_sp must be set"); 717 // monitorexit is non-blocking (leaf routine) => no exceptions can be thrown 718 EXCEPTION_MARK; 719 720 oop obj = lock->obj(); 721 assert(oopDesc::is_oop(obj), "must be NULL or an object"); 722 ObjectSynchronizer::exit(obj, lock->lock(), THREAD); 723 JRT_END 724 725 // Cf. OptoRuntime::deoptimize_caller_frame 726 JRT_ENTRY(void, Runtime1::deoptimize(JavaThread* thread, jint trap_request)) 727 // Called from within the owner thread, so no need for safepoint | 688 char* message = SharedRuntime::generate_class_cast_message( 689 thread, object->klass()); 690 SharedRuntime::throw_and_post_jvmti_exception( 691 thread, vmSymbols::java_lang_ClassCastException(), message); 692 JRT_END 693 694 695 JRT_ENTRY(void, Runtime1::throw_incompatible_class_change_error(JavaThread* thread)) 696 NOT_PRODUCT(_throw_incompatible_class_change_error_count++;) 697 ResourceMark rm(thread); 698 SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_IncompatibleClassChangeError()); 699 JRT_END 700 701 702 JRT_ENTRY_NO_ASYNC(void, Runtime1::monitorenter(JavaThread* thread, oopDesc* obj, BasicObjectLock* lock)) 703 NOT_PRODUCT(_monitorenter_slowcase_cnt++;) 704 if (PrintBiasedLockingStatistics) { 705 Atomic::inc(BiasedLocking::slow_path_entry_count_addr()); 706 } 707 Handle h_obj(thread, obj); 708 if (!UseFastLocking) { 709 lock->set_obj(obj); 710 } 711 assert(obj == lock->obj(), "must match"); 712 ObjectSynchronizer::enter(h_obj, lock->lock(), THREAD); 713 JRT_END 714 715 716 JRT_LEAF(void, Runtime1::monitorexit(JavaThread* thread, BasicObjectLock* lock)) 717 NOT_PRODUCT(_monitorexit_slowcase_cnt++;) 718 assert(thread == JavaThread::current(), "threads must correspond"); 719 assert(thread->last_Java_sp(), "last_Java_sp must be set"); 720 // monitorexit is non-blocking (leaf routine) => no exceptions can be thrown 721 EXCEPTION_MARK; 722 723 oop obj = lock->obj(); 724 assert(oopDesc::is_oop(obj), "must be NULL or an object"); 725 ObjectSynchronizer::exit(obj, lock->lock(), THREAD); 726 JRT_END 727 728 // Cf. OptoRuntime::deoptimize_caller_frame 729 JRT_ENTRY(void, Runtime1::deoptimize(JavaThread* thread, jint trap_request)) 730 // Called from within the owner thread, so no need for safepoint |