634 private: |
634 private: |
635 AdapterFingerPrint* _fingerprint; |
635 AdapterFingerPrint* _fingerprint; |
636 address _i2c_entry; |
636 address _i2c_entry; |
637 address _c2i_entry; |
637 address _c2i_entry; |
638 address _c2i_unverified_entry; |
638 address _c2i_unverified_entry; |
|
639 address _c2i_no_clinit_check_entry; |
639 |
640 |
640 #ifdef ASSERT |
641 #ifdef ASSERT |
641 // Captures code and signature used to generate this adapter when |
642 // Captures code and signature used to generate this adapter when |
642 // verifying adapter equivalence. |
643 // verifying adapter equivalence. |
643 unsigned char* _saved_code; |
644 unsigned char* _saved_code; |
644 int _saved_code_length; |
645 int _saved_code_length; |
645 #endif |
646 #endif |
646 |
647 |
647 void init(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) { |
648 void init(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry, address c2i_no_clinit_check_entry) { |
648 _fingerprint = fingerprint; |
649 _fingerprint = fingerprint; |
649 _i2c_entry = i2c_entry; |
650 _i2c_entry = i2c_entry; |
650 _c2i_entry = c2i_entry; |
651 _c2i_entry = c2i_entry; |
651 _c2i_unverified_entry = c2i_unverified_entry; |
652 _c2i_unverified_entry = c2i_unverified_entry; |
|
653 _c2i_no_clinit_check_entry = c2i_no_clinit_check_entry; |
652 #ifdef ASSERT |
654 #ifdef ASSERT |
653 _saved_code = NULL; |
655 _saved_code = NULL; |
654 _saved_code_length = 0; |
656 _saved_code_length = 0; |
655 #endif |
657 #endif |
656 } |
658 } |
659 |
661 |
660 // should never be used |
662 // should never be used |
661 AdapterHandlerEntry(); |
663 AdapterHandlerEntry(); |
662 |
664 |
663 public: |
665 public: |
664 address get_i2c_entry() const { return _i2c_entry; } |
666 address get_i2c_entry() const { return _i2c_entry; } |
665 address get_c2i_entry() const { return _c2i_entry; } |
667 address get_c2i_entry() const { return _c2i_entry; } |
666 address get_c2i_unverified_entry() const { return _c2i_unverified_entry; } |
668 address get_c2i_unverified_entry() const { return _c2i_unverified_entry; } |
|
669 address get_c2i_no_clinit_check_entry() const { return _c2i_no_clinit_check_entry; } |
|
670 |
667 address base_address(); |
671 address base_address(); |
668 void relocate(address new_base); |
672 void relocate(address new_base); |
669 |
673 |
670 AdapterFingerPrint* fingerprint() const { return _fingerprint; } |
674 AdapterFingerPrint* fingerprint() const { return _fingerprint; } |
671 |
675 |
707 static AdapterHandlerEntry* get_adapter0(const methodHandle& method); |
711 static AdapterHandlerEntry* get_adapter0(const methodHandle& method); |
708 |
712 |
709 public: |
713 public: |
710 |
714 |
711 static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, |
715 static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, |
712 address i2c_entry, address c2i_entry, address c2i_unverified_entry); |
716 address i2c_entry, |
|
717 address c2i_entry, |
|
718 address c2i_unverified_entry, |
|
719 address c2i_no_clinit_check_entry = NULL); |
713 static void create_native_wrapper(const methodHandle& method); |
720 static void create_native_wrapper(const methodHandle& method); |
714 static AdapterHandlerEntry* get_adapter(const methodHandle& method); |
721 static AdapterHandlerEntry* get_adapter(const methodHandle& method); |
715 |
722 |
716 static void print_handler(const CodeBlob* b) { print_handler_on(tty, b); } |
723 static void print_handler(const CodeBlob* b) { print_handler_on(tty, b); } |
717 static void print_handler_on(outputStream* st, const CodeBlob* b); |
724 static void print_handler_on(outputStream* st, const CodeBlob* b); |