1 /* |
1 /* |
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
628 |
628 |
629 #ifdef ASSERT |
629 #ifdef ASSERT |
630 // Captures code and signature used to generate this adapter when |
630 // Captures code and signature used to generate this adapter when |
631 // verifing adapter equivalence. |
631 // verifing adapter equivalence. |
632 unsigned char* _saved_code; |
632 unsigned char* _saved_code; |
633 int _code_length; |
633 int _saved_code_length; |
634 BasicType* _saved_sig; |
|
635 int _total_args_passed; |
|
636 #endif |
634 #endif |
637 |
635 |
638 void init(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) { |
636 void init(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) { |
639 _fingerprint = fingerprint; |
637 _fingerprint = fingerprint; |
640 _i2c_entry = i2c_entry; |
638 _i2c_entry = i2c_entry; |
641 _c2i_entry = c2i_entry; |
639 _c2i_entry = c2i_entry; |
642 _c2i_unverified_entry = c2i_unverified_entry; |
640 _c2i_unverified_entry = c2i_unverified_entry; |
643 #ifdef ASSERT |
641 #ifdef ASSERT |
644 _saved_code = NULL; |
642 _saved_code = NULL; |
645 _code_length = 0; |
643 _saved_code_length = 0; |
646 _saved_sig = NULL; |
|
647 _total_args_passed = 0; |
|
648 #endif |
644 #endif |
649 } |
645 } |
650 |
646 |
651 void deallocate(); |
647 void deallocate(); |
652 |
648 |
655 |
651 |
656 public: |
652 public: |
657 address get_i2c_entry() const { return _i2c_entry; } |
653 address get_i2c_entry() const { return _i2c_entry; } |
658 address get_c2i_entry() const { return _c2i_entry; } |
654 address get_c2i_entry() const { return _c2i_entry; } |
659 address get_c2i_unverified_entry() const { return _c2i_unverified_entry; } |
655 address get_c2i_unverified_entry() const { return _c2i_unverified_entry; } |
660 |
|
661 address base_address(); |
656 address base_address(); |
662 void relocate(address new_base); |
657 void relocate(address new_base); |
663 |
658 |
664 AdapterFingerPrint* fingerprint() const { return _fingerprint; } |
659 AdapterFingerPrint* fingerprint() const { return _fingerprint; } |
665 |
660 |
667 return (AdapterHandlerEntry*)BasicHashtableEntry<mtCode>::next(); |
662 return (AdapterHandlerEntry*)BasicHashtableEntry<mtCode>::next(); |
668 } |
663 } |
669 |
664 |
670 #ifdef ASSERT |
665 #ifdef ASSERT |
671 // Used to verify that code generated for shared adapters is equivalent |
666 // Used to verify that code generated for shared adapters is equivalent |
672 void save_code(unsigned char* code, int length, int total_args_passed, BasicType* sig_bt); |
667 void save_code (unsigned char* code, int length); |
673 bool compare_code(unsigned char* code, int length, int total_args_passed, BasicType* sig_bt); |
668 bool compare_code(unsigned char* code, int length); |
674 #endif |
669 #endif |
675 |
670 |
676 //virtual void print_on(outputStream* st) const; DO NOT USE |
671 //virtual void print_on(outputStream* st) const; DO NOT USE |
677 void print_adapter_on(outputStream* st) const; |
672 void print_adapter_on(outputStream* st) const; |
678 }; |
673 }; |
687 |
682 |
688 public: |
683 public: |
689 |
684 |
690 static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, |
685 static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, |
691 address i2c_entry, address c2i_entry, address c2i_unverified_entry); |
686 address i2c_entry, address c2i_entry, address c2i_unverified_entry); |
692 static nmethod* create_native_wrapper(methodHandle method, int compile_id); |
687 static void create_native_wrapper(methodHandle method); |
693 static AdapterHandlerEntry* get_adapter(methodHandle method); |
688 static AdapterHandlerEntry* get_adapter(methodHandle method); |
694 |
689 |
695 #ifdef HAVE_DTRACE_H |
690 #ifdef HAVE_DTRACE_H |
696 static nmethod* create_dtrace_nmethod (methodHandle method); |
691 static nmethod* create_dtrace_nmethod (methodHandle method); |
697 #endif // HAVE_DTRACE_H |
692 #endif // HAVE_DTRACE_H |