823 __ blr(); // return |
823 __ blr(); // return |
824 |
824 |
825 return start; |
825 return start; |
826 } |
826 } |
827 |
827 |
828 // The following routine generates a subroutine to throw an asynchronous |
|
829 // UnknownError when an unsafe access gets a fault that could not be |
|
830 // reasonably prevented by the programmer. (Example: SIGBUS/OBJERR.) |
|
831 // |
|
832 address generate_handler_for_unsafe_access() { |
|
833 StubCodeMark mark(this, "StubRoutines", "handler_for_unsafe_access"); |
|
834 address start = __ function_entry(); |
|
835 __ unimplemented("StubRoutines::handler_for_unsafe_access", 93); |
|
836 return start; |
|
837 } |
|
838 |
|
839 #if !defined(PRODUCT) |
828 #if !defined(PRODUCT) |
840 // Wrapper which calls oopDesc::is_oop_or_null() |
829 // Wrapper which calls oopDesc::is_oop_or_null() |
841 // Only called by MacroAssembler::verify_oop |
830 // Only called by MacroAssembler::verify_oop |
842 static void verify_oop_helper(const char* message, oop o) { |
831 static void verify_oop_helper(const char* message, oop o) { |
843 if (!o->is_oop_or_null()) { |
832 if (!o->is_oop_or_null()) { |
3109 StubRoutines::_throw_AbstractMethodError_entry = generate_throw_exception("AbstractMethodError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_AbstractMethodError), false); |
3098 StubRoutines::_throw_AbstractMethodError_entry = generate_throw_exception("AbstractMethodError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_AbstractMethodError), false); |
3110 // Handle IncompatibleClassChangeError in itable stubs. |
3099 // Handle IncompatibleClassChangeError in itable stubs. |
3111 StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError), false); |
3100 StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError), false); |
3112 StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call), false); |
3101 StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call), false); |
3113 |
3102 |
3114 StubRoutines::_handler_for_unsafe_access_entry = generate_handler_for_unsafe_access(); |
|
3115 |
|
3116 // support for verify_oop (must happen after universe_init) |
3103 // support for verify_oop (must happen after universe_init) |
3117 StubRoutines::_verify_oop_subroutine_entry = generate_verify_oop(); |
3104 StubRoutines::_verify_oop_subroutine_entry = generate_verify_oop(); |
3118 |
3105 |
3119 // arraycopy stubs used by compilers |
3106 // arraycopy stubs used by compilers |
3120 generate_arraycopy_stubs(); |
3107 generate_arraycopy_stubs(); |