608 // routine in their middles and end in a return (instead of ending in a jump). |
608 // routine in their middles and end in a return (instead of ending in a jump). |
609 // The native wrappers are stored in real nmethods instead of the BufferBlobs |
609 // The native wrappers are stored in real nmethods instead of the BufferBlobs |
610 // used by the adapters. The code generation happens here because it's very |
610 // used by the adapters. The code generation happens here because it's very |
611 // similar to what the adapters have to do. |
611 // similar to what the adapters have to do. |
612 |
612 |
613 class AdapterHandlerEntry : public BasicHashtableEntry { |
613 class AdapterHandlerEntry : public BasicHashtableEntry<mtCode> { |
614 friend class AdapterHandlerTable; |
614 friend class AdapterHandlerTable; |
615 |
615 |
616 private: |
616 private: |
617 AdapterFingerPrint* _fingerprint; |
617 AdapterFingerPrint* _fingerprint; |
618 address _i2c_entry; |
618 address _i2c_entry; |
654 void relocate(address new_base); |
654 void relocate(address new_base); |
655 |
655 |
656 AdapterFingerPrint* fingerprint() { return _fingerprint; } |
656 AdapterFingerPrint* fingerprint() { return _fingerprint; } |
657 |
657 |
658 AdapterHandlerEntry* next() { |
658 AdapterHandlerEntry* next() { |
659 return (AdapterHandlerEntry*)BasicHashtableEntry::next(); |
659 return (AdapterHandlerEntry*)BasicHashtableEntry<mtCode>::next(); |
660 } |
660 } |
661 |
661 |
662 #ifdef ASSERT |
662 #ifdef ASSERT |
663 // Used to verify that code generated for shared adapters is equivalent |
663 // Used to verify that code generated for shared adapters is equivalent |
664 void save_code(unsigned char* code, int length, int total_args_passed, BasicType* sig_bt); |
664 void save_code(unsigned char* code, int length, int total_args_passed, BasicType* sig_bt); |