202 static void throw_delayed_StackOverflowError(JavaThread* thread); |
202 static void throw_delayed_StackOverflowError(JavaThread* thread); |
203 static void throw_StackOverflowError_common(JavaThread* thread, bool delayed); |
203 static void throw_StackOverflowError_common(JavaThread* thread, bool delayed); |
204 static address continuation_for_implicit_exception(JavaThread* thread, |
204 static address continuation_for_implicit_exception(JavaThread* thread, |
205 address faulting_pc, |
205 address faulting_pc, |
206 ImplicitExceptionKind exception_kind); |
206 ImplicitExceptionKind exception_kind); |
207 #if INCLUDE_JVMCI |
|
208 static address deoptimize_for_implicit_exception(JavaThread* thread, address pc, CompiledMethod* nm, int deopt_reason); |
|
209 #endif |
|
210 |
207 |
211 // Post-slow-path-allocation, pre-initializing-stores step for |
208 // Post-slow-path-allocation, pre-initializing-stores step for |
212 // implementing e.g. ReduceInitialCardMarks |
209 // implementing e.g. ReduceInitialCardMarks |
213 static void on_slowpath_allocation_exit(JavaThread* thread); |
210 static void on_slowpath_allocation_exit(JavaThread* thread); |
214 |
211 |
486 static nmethod* generate_native_wrapper(MacroAssembler* masm, |
483 static nmethod* generate_native_wrapper(MacroAssembler* masm, |
487 const methodHandle& method, |
484 const methodHandle& method, |
488 int compile_id, |
485 int compile_id, |
489 BasicType* sig_bt, |
486 BasicType* sig_bt, |
490 VMRegPair* regs, |
487 VMRegPair* regs, |
491 BasicType ret_type); |
488 BasicType ret_type, |
|
489 address critical_entry); |
492 |
490 |
493 // Block before entering a JNI critical method |
491 // Block before entering a JNI critical method |
494 static void block_for_jni_critical(JavaThread* thread); |
492 static void block_for_jni_critical(JavaThread* thread); |
495 |
493 |
496 // Pin/Unpin object |
494 // Pin/Unpin object |
637 private: |
635 private: |
638 AdapterFingerPrint* _fingerprint; |
636 AdapterFingerPrint* _fingerprint; |
639 address _i2c_entry; |
637 address _i2c_entry; |
640 address _c2i_entry; |
638 address _c2i_entry; |
641 address _c2i_unverified_entry; |
639 address _c2i_unverified_entry; |
|
640 address _c2i_no_clinit_check_entry; |
642 |
641 |
643 #ifdef ASSERT |
642 #ifdef ASSERT |
644 // Captures code and signature used to generate this adapter when |
643 // Captures code and signature used to generate this adapter when |
645 // verifying adapter equivalence. |
644 // verifying adapter equivalence. |
646 unsigned char* _saved_code; |
645 unsigned char* _saved_code; |
647 int _saved_code_length; |
646 int _saved_code_length; |
648 #endif |
647 #endif |
649 |
648 |
650 void init(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) { |
649 void init(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry, address c2i_no_clinit_check_entry) { |
651 _fingerprint = fingerprint; |
650 _fingerprint = fingerprint; |
652 _i2c_entry = i2c_entry; |
651 _i2c_entry = i2c_entry; |
653 _c2i_entry = c2i_entry; |
652 _c2i_entry = c2i_entry; |
654 _c2i_unverified_entry = c2i_unverified_entry; |
653 _c2i_unverified_entry = c2i_unverified_entry; |
|
654 _c2i_no_clinit_check_entry = c2i_no_clinit_check_entry; |
655 #ifdef ASSERT |
655 #ifdef ASSERT |
656 _saved_code = NULL; |
656 _saved_code = NULL; |
657 _saved_code_length = 0; |
657 _saved_code_length = 0; |
658 #endif |
658 #endif |
659 } |
659 } |
662 |
662 |
663 // should never be used |
663 // should never be used |
664 AdapterHandlerEntry(); |
664 AdapterHandlerEntry(); |
665 |
665 |
666 public: |
666 public: |
667 address get_i2c_entry() const { return _i2c_entry; } |
667 address get_i2c_entry() const { return _i2c_entry; } |
668 address get_c2i_entry() const { return _c2i_entry; } |
668 address get_c2i_entry() const { return _c2i_entry; } |
669 address get_c2i_unverified_entry() const { return _c2i_unverified_entry; } |
669 address get_c2i_unverified_entry() const { return _c2i_unverified_entry; } |
|
670 address get_c2i_no_clinit_check_entry() const { return _c2i_no_clinit_check_entry; } |
|
671 |
670 address base_address(); |
672 address base_address(); |
671 void relocate(address new_base); |
673 void relocate(address new_base); |
672 |
674 |
673 AdapterFingerPrint* fingerprint() const { return _fingerprint; } |
675 AdapterFingerPrint* fingerprint() const { return _fingerprint; } |
674 |
676 |
710 static AdapterHandlerEntry* get_adapter0(const methodHandle& method); |
712 static AdapterHandlerEntry* get_adapter0(const methodHandle& method); |
711 |
713 |
712 public: |
714 public: |
713 |
715 |
714 static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, |
716 static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, |
715 address i2c_entry, address c2i_entry, address c2i_unverified_entry); |
717 address i2c_entry, |
|
718 address c2i_entry, |
|
719 address c2i_unverified_entry, |
|
720 address c2i_no_clinit_check_entry = NULL); |
716 static void create_native_wrapper(const methodHandle& method); |
721 static void create_native_wrapper(const methodHandle& method); |
717 static AdapterHandlerEntry* get_adapter(const methodHandle& method); |
722 static AdapterHandlerEntry* get_adapter(const methodHandle& method); |
718 |
723 |
719 static void print_handler(const CodeBlob* b) { print_handler_on(tty, b); } |
724 static void print_handler(const CodeBlob* b) { print_handler_on(tty, b); } |
720 static void print_handler_on(outputStream* st, const CodeBlob* b); |
725 static void print_handler_on(outputStream* st, const CodeBlob* b); |