8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_RUNTIME_SHAREDRUNTIME_HPP
26 #define SHARE_RUNTIME_SHAREDRUNTIME_HPP
27
28 #include "classfile/compactHashtable.hpp"
29 #include "code/codeBlob.hpp"
30 #include "code/vmreg.hpp"
31 #include "interpreter/linkResolver.hpp"
32 #include "memory/allStatic.hpp"
33 #include "memory/metaspaceClosure.hpp"
34 #include "memory/resourceArea.hpp"
35 #include "runtime/stubInfo.hpp"
36 #include "utilities/macros.hpp"
37
38 class AdapterHandlerEntry;
39 class AdapterFingerPrint;
40 class vframeStream;
41
42 // Runtime is the base class for various runtime interfaces
43 // (InterpreterRuntime, CompilerRuntime, etc.). It provides
44 // shared functionality such as exception forwarding (C++ to
45 // Java exceptions), locking/unlocking mechanisms, statistical
46 // information, etc.
47
48 class SharedRuntime: AllStatic {
49 private:
50 // Declare shared stub fields
51 #define SHARED_STUB_FIELD_DECLARE(name, type) \
52 static type* BLOB_FIELD_NAME(name);
53 SHARED_STUBS_DO(SHARED_STUB_FIELD_DECLARE)
54 #undef SHARED_STUB_FIELD_DECLARE
55
56 #ifdef ASSERT
57 static bool is_resolve_id(StubId id) {
58 return (id == StubId::shared_wrong_method_id ||
59 id == StubId::shared_wrong_method_abstract_id ||
60 id == StubId::shared_ic_miss_id ||
358 // on top of the stack.
359 // The caller (or one of its callers) must use a ResourceMark
360 // in order to correctly free the result.
361 //
362 static char* generate_class_cast_message(JavaThread* thr, Klass* caster_klass);
363
364 // Fill in the "X cannot be cast to a Y" message for ClassCastException
365 //
366 // @param caster_klass the class of the object we are casting
367 // @param target_klass the target klass attempt
368 // @return the dynamically allocated exception message (must be freed
369 // by the caller using a resource mark)
370 //
371 // This version does not require access the frame, so it can be called
372 // from interpreted code
373 // The caller (or one of it's callers) must use a ResourceMark
374 // in order to correctly free the result.
375 //
376 static char* generate_class_cast_message(Klass* caster_klass, Klass* target_klass, Symbol* target_klass_name = nullptr);
377
378 // Resolves a call site- may patch in the destination of the call into the
379 // compiled code.
380 static methodHandle resolve_helper(bool is_virtual, bool is_optimized, TRAPS);
381
382 private:
383 // deopt blob
384 static void generate_deopt_blob(void);
385
386 static bool handle_ic_miss_helper_internal(Handle receiver, nmethod* caller_nm, const frame& caller_frame,
387 methodHandle callee_method, Bytecodes::Code bc, CallInfo& call_info,
388 bool& needs_ic_stub_refill, TRAPS);
389
390 public:
391 static DeoptimizationBlob* deopt_blob(void) { return _deopt_blob; }
392
393 // Resets a call-site in compiled code so it will get resolved again.
394 static methodHandle reresolve_call_site(TRAPS);
395
396 // In the code prolog, if the klass comparison fails, the inline cache
397 // misses and the call site is patched to megamorphic
398 static methodHandle handle_ic_miss_helper(TRAPS);
399
400 // Find the method that called us.
401 static methodHandle find_callee_method(TRAPS);
402
403 static void monitor_enter_helper(oopDesc* obj, BasicLock* lock, JavaThread* thread);
404
405 static void monitor_exit_helper(oopDesc* obj, BasicLock* lock, JavaThread* current);
406
407 // Issue UL warning for unlocked JNI monitor on virtual thread termination
408 static void log_jni_monitor_still_held();
409
410 private:
411 static Handle find_callee_info(Bytecodes::Code& bc, CallInfo& callinfo, TRAPS);
412 static Handle find_callee_info_helper(vframeStream& vfst, Bytecodes::Code& bc, CallInfo& callinfo, TRAPS);
413
414 static Method* extract_attached_method(vframeStream& vfst);
415
416 #if defined(X86) && defined(COMPILER1)
417 // For Object.hashCode, System.identityHashCode try to pull hashCode from object header if available.
418 static void inline_check_hashcode_from_object_header(MacroAssembler* masm, const methodHandle& method, Register obj_reg, Register result);
419 #endif // X86 && COMPILER1
420
421 public:
422
423 // Read the array of BasicTypes from a Java signature, and compute where
424 // compiled Java code would like to put the results. Values in reg_lo and
425 // reg_hi refer to 4-byte quantities. Values less than SharedInfo::stack0 are
426 // registers, those above refer to 4-byte stack slots. All stack slots are
427 // based off of the window top. SharedInfo::stack0 refers to the first usable
428 // slot in the bottom of the frame. SharedInfo::stack0+1 refers to the memory word
429 // 4-bytes higher.
430 // return value is the maximum number of VMReg stack slots the convention will use.
431 static int java_calling_convention(const BasicType* sig_bt, VMRegPair* regs, int total_args_passed);
432
433 static void check_member_name_argument_is_last_argument(const methodHandle& method,
434 const BasicType* sig_bt,
435 const VMRegPair* regs) NOT_DEBUG_RETURN;
436
437 // Ditto except for calling C
438 //
439 // C argument in register AND stack slot.
440 // Some architectures require that an argument must be passed in a register
441 // AND in a stack slot. These architectures provide a second VMRegPair array
442 // to be filled by the c_calling_convention method. On other architectures,
443 // null is being passed as the second VMRegPair array, so arguments are either
444 // passed in a register OR in a stack slot.
445 static int c_calling_convention(const BasicType *sig_bt, VMRegPair *regs, int total_args_passed);
446
447 static int vector_calling_convention(VMRegPair *regs,
448 uint num_bits,
449 uint total_args_passed);
450
451 // Generate I2C and C2I adapters. These adapters are simple argument marshalling
458 // by the time we reach the blob there is compiled code available. This allows
459 // the blob to pass the incoming stack pointer (the sender sp) in a known
460 // location for the interpreter to record. This is used by the frame code
461 // to correct the sender code to match up with the stack pointer when the
462 // thread left the compiled code. In addition it allows the interpreter
463 // to remove the space the c2i adapter allocated to do its argument conversion.
464
465 // Although a c2i blob will always run interpreted even if compiled code is
466 // present if we see that compiled code is present the compiled call site
467 // will be patched/re-resolved so that later calls will run compiled.
468
469 // Additionally a c2i blob need to have a unverified entry because it can be reached
470 // in situations where the call site is an inlined cache site and may go megamorphic.
471
472 // A i2c adapter is simpler than the c2i adapter. This is because it is assumed
473 // that the interpreter before it does any call dispatch will record the current
474 // stack pointer in the interpreter frame. On return it will restore the stack
475 // pointer as needed. This means the i2c adapter code doesn't need any special
476 // handshaking path with compiled code to keep the stack walking correct.
477
478 static void generate_i2c2i_adapters(MacroAssembler *_masm,
479 int total_args_passed,
480 int max_arg,
481 const BasicType *sig_bt,
482 const VMRegPair *regs,
483 AdapterHandlerEntry* handler);
484
485 static void gen_i2c_adapter(MacroAssembler *_masm,
486 int total_args_passed,
487 int comp_args_on_stack,
488 const BasicType *sig_bt,
489 const VMRegPair *regs);
490
491 // OSR support
492
493 // OSR_migration_begin will extract the jvm state from an interpreter
494 // frame (locals, monitors) and store the data in a piece of C heap
495 // storage. This then allows the interpreter frame to be removed from the
496 // stack and the OSR nmethod to be called. That method is called with a
497 // pointer to the C heap storage. This pointer is the return value from
498 // OSR_migration_begin.
499
500 static intptr_t* OSR_migration_begin(JavaThread *thread);
501
502 // OSR_migration_end is a trivial routine. It is called after the compiled
503 // method has extracted the jvm state from the C heap that OSR_migration_begin
504 // created. It's entire job is to simply free this storage.
505 static void OSR_migration_end(intptr_t* buf);
506
507 // Convert a sig into a calling convention register layout
508 // and find interesting things about it.
541 //
542 // The wrapper may contain special-case code if the given method
543 // is a compiled method handle adapter, such as _invokeBasic, _linkToVirtual, etc.
544 static nmethod* generate_native_wrapper(MacroAssembler* masm,
545 const methodHandle& method,
546 int compile_id,
547 BasicType* sig_bt,
548 VMRegPair* regs,
549 BasicType ret_type);
550
551 // A compiled caller has just called the interpreter, but compiled code
552 // exists. Patch the caller so he no longer calls into the interpreter.
553 static void fixup_callers_callsite(Method* moop, address ret_pc);
554 static bool should_fixup_call_destination(address destination, address entry_point, address caller_pc, Method* moop, CodeBlob* cb);
555
556 // Slow-path Locking and Unlocking
557 static void complete_monitor_locking_C(oopDesc* obj, BasicLock* lock, JavaThread* current);
558 static void complete_monitor_unlocking_C(oopDesc* obj, BasicLock* lock, JavaThread* current);
559
560 // Resolving of calls
561 static address get_resolved_entry (JavaThread* current, methodHandle callee_method);
562 static address resolve_static_call_C (JavaThread* current);
563 static address resolve_virtual_call_C (JavaThread* current);
564 static address resolve_opt_virtual_call_C(JavaThread* current);
565
566 // arraycopy, the non-leaf version. (See StubRoutines for all the leaf calls.)
567 static void slow_arraycopy_C(oopDesc* src, jint src_pos,
568 oopDesc* dest, jint dest_pos,
569 jint length, JavaThread* thread);
570
571 // handle ic miss with caller being compiled code
572 // wrong method handling (inline cache misses)
573 static address handle_wrong_method(JavaThread* current);
574 static address handle_wrong_method_abstract(JavaThread* current);
575 static address handle_wrong_method_ic_miss(JavaThread* current);
576
577 static address handle_unsafe_access(JavaThread* thread, address next_pc);
578
579 #ifndef PRODUCT
580
581 // Collect and print inline cache miss statistics
582 private:
583 enum { maxICmiss_count = 100 };
584 static int _ICmiss_index; // length of IC miss histogram
585 static int _ICmiss_count[maxICmiss_count]; // miss counts
586 static address _ICmiss_at[maxICmiss_count]; // miss addresses
587 static void trace_ic_miss(address at);
588
589 public:
590 static uint _ic_miss_ctr; // total # of IC misses
591 static uint _wrong_method_ctr;
592 static uint _resolve_static_ctr;
593 static uint _resolve_virtual_ctr;
594 static uint _resolve_opt_virtual_ctr;
595 static uint _implicit_null_throws;
596 static uint _implicit_div0_throws;
597
598 static uint _jbyte_array_copy_ctr; // Slow-path byte array copy
664 //
665 // The C2I flavor takes a stock compiled call setup plus the target method in
666 // Rmethod, marshals the arguments for an interpreted call and jumps to
667 // Rmethod->_i2i_entry. On entry, the interpreted frame has not yet been
668 // setup. Compiled frames are fixed-size and the args are likely not in the
669 // right place. Hence all the args will likely be copied into the
670 // interpreter's frame, forcing that frame to grow. The compiled frame's
671 // outgoing stack args will be dead after the copy.
672 //
673 // Native wrappers, like adapters, marshal arguments. Unlike adapters they
674 // also perform an official frame push & pop. They have a call to the native
675 // routine in their middles and end in a return (instead of ending in a jump).
676 // The native wrappers are stored in real nmethods instead of the BufferBlobs
677 // used by the adapters. The code generation happens here because it's very
678 // similar to what the adapters have to do.
679
680 class AdapterHandlerEntry : public MetaspaceObj {
681 friend class AdapterHandlerLibrary;
682
683 public:
684 static const int ENTRIES_COUNT = 4;
685
686 private:
687 AdapterFingerPrint* _fingerprint;
688 address _i2c_entry;
689 address _c2i_entry;
690 address _c2i_unverified_entry;
691 address _c2i_no_clinit_check_entry;
692 bool _linked;
693
694 static const char *_entry_names[];
695
696 #ifdef ASSERT
697 // Captures code and signature used to generate this adapter when
698 // verifying adapter equivalence.
699 unsigned char* _saved_code;
700 int _saved_code_length;
701 #endif
702
703 AdapterHandlerEntry(AdapterFingerPrint* fingerprint) :
704 _fingerprint(fingerprint),
705 _i2c_entry(nullptr),
706 _c2i_entry(nullptr),
707 _c2i_unverified_entry(nullptr),
708 _c2i_no_clinit_check_entry(nullptr),
709 _linked(false)
710 #ifdef ASSERT
711 , _saved_code(nullptr),
712 _saved_code_length(0)
713 #endif
714 { }
715
716 ~AdapterHandlerEntry();
717
718 // Allocate on CHeap instead of metaspace (see JDK-8331086).
719 // Dummy argument is used to avoid C++ warning about using
720 // deleted opearator MetaspaceObj::delete().
721 void* operator new(size_t size, size_t dummy) throw() {
722 assert(size == BytesPerWord * heap_word_size(sizeof(AdapterHandlerEntry)), "should match");
723 void* p = AllocateHeap(size, mtCode);
724 memset(p, 0, size);
725 return p;
726 }
727
728 public:
729 static AdapterHandlerEntry* allocate(AdapterFingerPrint* fingerprint) {
730 return new(0) AdapterHandlerEntry(fingerprint);
731 }
732
733 static void deallocate(AdapterHandlerEntry *handler) {
734 handler->~AdapterHandlerEntry();
735 }
736
737 void set_entry_points(address i2c_entry, address c2i_entry, address c2i_unverified_entry, address c2i_no_clinit_check_entry, bool linked = true) {
738 _i2c_entry = i2c_entry;
739 _c2i_entry = c2i_entry;
740 _c2i_unverified_entry = c2i_unverified_entry;
741 _c2i_no_clinit_check_entry = c2i_no_clinit_check_entry;
742 _linked = linked;
743 }
744
745 address get_i2c_entry() const { return _i2c_entry; }
746 address get_c2i_entry() const { return _c2i_entry; }
747 address get_c2i_unverified_entry() const { return _c2i_unverified_entry; }
748 address get_c2i_no_clinit_check_entry() const { return _c2i_no_clinit_check_entry; }
749
750 static const char* entry_name(int i) {
751 assert(i >=0 && i < ENTRIES_COUNT, "entry id out of range");
752 return _entry_names[i];
753 }
754
755 bool is_linked() const { return _linked; }
756 address base_address();
757 void relocate(address new_base);
758
759 AdapterFingerPrint* fingerprint() const { return _fingerprint; }
760
761 #ifdef ASSERT
762 // Used to verify that code generated for shared adapters is equivalent
763 void save_code (unsigned char* code, int length);
764 bool compare_code(AdapterHandlerEntry* other);
765 #endif
766
767 //virtual void print_on(outputStream* st) const; DO NOT USE
768 void print_adapter_on(outputStream* st) const;
769
770 void metaspace_pointers_do(MetaspaceClosure* it);
771 int size() const {return (int)heap_word_size(sizeof(AdapterHandlerEntry)); }
772 MetaspaceObj::Type type() const { return AdapterHandlerEntryType; }
773
774 void remove_unshareable_info() NOT_CDS_RETURN;
775 void link() NOT_CDS_RETURN;
776 };
777
778 #if INCLUDE_CDS
779 class ArchivedAdapterTable;
780 #endif // INCLUDE_CDS
781
782 class AdapterHandlerLibrary: public AllStatic {
783 friend class SharedRuntime;
784 private:
785 static BufferBlob* _buffer; // the temporary code buffer in CodeCache
786 static AdapterHandlerEntry* _abstract_method_handler;
787 static AdapterHandlerEntry* _no_arg_handler;
788 static AdapterHandlerEntry* _int_arg_handler;
789 static AdapterHandlerEntry* _obj_arg_handler;
790 static AdapterHandlerEntry* _obj_int_arg_handler;
791 static AdapterHandlerEntry* _obj_obj_arg_handler;
792 #if INCLUDE_CDS
793 static ArchivedAdapterTable _aot_adapter_handler_table;
794 #endif // INCLUDE_CDS
795
796 static BufferBlob* buffer_blob();
797 static void initialize();
798 static AdapterHandlerEntry* get_simple_adapter(const methodHandle& method);
799 static AdapterBlob* lookup_aot_cache(AdapterHandlerEntry* handler);
800 static AdapterHandlerEntry* create_adapter(AdapterBlob*& new_adapter,
801 int total_args_passed,
802 BasicType* sig_bt,
803 bool is_transient = false);
804 static void create_abstract_method_handler();
805 static void lookup_simple_adapters() NOT_CDS_RETURN;
806 #ifndef PRODUCT
807 static void print_adapter_handler_info(outputStream* st, AdapterHandlerEntry* handler, AdapterBlob* adapter_blob);
808 #endif // PRODUCT
809 public:
810
811 static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint);
812 static void create_native_wrapper(const methodHandle& method);
813 static AdapterHandlerEntry* get_adapter(const methodHandle& method);
814 static AdapterHandlerEntry* lookup(int total_args_passed, BasicType* sig_bt);
815 static bool generate_adapter_code(AdapterBlob*& adapter_blob,
816 AdapterHandlerEntry* handler,
817 int total_args_passed,
818 BasicType* sig_bt,
819 bool is_transient);
820
821 #ifdef ASSERT
822 static void verify_adapter_sharing(int total_args_passed, BasicType* sig_bt, AdapterHandlerEntry* cached);
823 #endif // ASSERT
824
825 static void print_handler(const CodeBlob* b) { print_handler_on(tty, b); }
826 static void print_handler_on(outputStream* st, const CodeBlob* b);
827 static bool contains(const CodeBlob* b);
828 static const char* name(AdapterFingerPrint* fingerprint);
829 static uint32_t id(AdapterFingerPrint* fingerprint);
830 #ifndef PRODUCT
831 static void print_statistics();
832 #endif // PRODUCT
833
834 static bool is_abstract_method_adapter(AdapterHandlerEntry* adapter);
835
836 static AdapterBlob* link_aot_adapter_handler(AdapterHandlerEntry* handler) NOT_CDS_RETURN_(nullptr);
837 static void dump_aot_adapter_table() NOT_CDS_RETURN;
838 static void serialize_shared_table_header(SerializeClosure* soc) NOT_CDS_RETURN;
839 static void link_aot_adapters() NOT_CDS_RETURN;
840 };
841
842 #endif // SHARE_RUNTIME_SHAREDRUNTIME_HPP
|
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_RUNTIME_SHAREDRUNTIME_HPP
26 #define SHARE_RUNTIME_SHAREDRUNTIME_HPP
27
28 #include "asm/codeBuffer.hpp"
29 #include "classfile/compactHashtable.hpp"
30 #include "code/codeBlob.hpp"
31 #include "code/vmreg.hpp"
32 #include "interpreter/linkResolver.hpp"
33 #include "memory/allStatic.hpp"
34 #include "memory/metaspaceClosure.hpp"
35 #include "memory/resourceArea.hpp"
36 #include "runtime/signature.hpp"
37 #include "runtime/stubInfo.hpp"
38 #include "utilities/macros.hpp"
39
40 class AdapterHandlerEntry;
41 class AdapterFingerPrint;
42 class vframeStream;
43 class SigEntry;
44
45 // Runtime is the base class for various runtime interfaces
46 // (InterpreterRuntime, CompilerRuntime, etc.). It provides
47 // shared functionality such as exception forwarding (C++ to
48 // Java exceptions), locking/unlocking mechanisms, statistical
49 // information, etc.
50
51 class SharedRuntime: AllStatic {
52 private:
53 // Declare shared stub fields
54 #define SHARED_STUB_FIELD_DECLARE(name, type) \
55 static type* BLOB_FIELD_NAME(name);
56 SHARED_STUBS_DO(SHARED_STUB_FIELD_DECLARE)
57 #undef SHARED_STUB_FIELD_DECLARE
58
59 #ifdef ASSERT
60 static bool is_resolve_id(StubId id) {
61 return (id == StubId::shared_wrong_method_id ||
62 id == StubId::shared_wrong_method_abstract_id ||
63 id == StubId::shared_ic_miss_id ||
361 // on top of the stack.
362 // The caller (or one of its callers) must use a ResourceMark
363 // in order to correctly free the result.
364 //
365 static char* generate_class_cast_message(JavaThread* thr, Klass* caster_klass);
366
367 // Fill in the "X cannot be cast to a Y" message for ClassCastException
368 //
369 // @param caster_klass the class of the object we are casting
370 // @param target_klass the target klass attempt
371 // @return the dynamically allocated exception message (must be freed
372 // by the caller using a resource mark)
373 //
374 // This version does not require access the frame, so it can be called
375 // from interpreted code
376 // The caller (or one of it's callers) must use a ResourceMark
377 // in order to correctly free the result.
378 //
379 static char* generate_class_cast_message(Klass* caster_klass, Klass* target_klass, Symbol* target_klass_name = nullptr);
380
381 static char* generate_identity_exception_message(JavaThread* thr, Klass* klass);
382
383 // Resolves a call site- may patch in the destination of the call into the
384 // compiled code.
385 static methodHandle resolve_helper(bool is_virtual, bool is_optimized, bool& caller_is_c1, TRAPS);
386
387 private:
388 // deopt blob
389 static void generate_deopt_blob(void);
390
391 static bool handle_ic_miss_helper_internal(Handle receiver, nmethod* caller_nm, const frame& caller_frame,
392 methodHandle callee_method, Bytecodes::Code bc, CallInfo& call_info,
393 bool& needs_ic_stub_refill, bool& is_optimized, bool caller_is_c1, TRAPS);
394
395 public:
396 static DeoptimizationBlob* deopt_blob(void) { return _deopt_blob; }
397
398 // Resets a call-site in compiled code so it will get resolved again.
399 static methodHandle reresolve_call_site(bool& is_static_call, bool& is_optimized, bool& caller_is_c1, TRAPS);
400
401 // In the code prolog, if the klass comparison fails, the inline cache
402 // misses and the call site is patched to megamorphic
403 static methodHandle handle_ic_miss_helper(bool& is_optimized, bool& caller_is_c1, TRAPS);
404
405 // Find the method that called us.
406 static methodHandle find_callee_method(bool is_optimized, bool& caller_is_c1, TRAPS);
407
408 static void monitor_enter_helper(oopDesc* obj, BasicLock* lock, JavaThread* thread);
409
410 static void monitor_exit_helper(oopDesc* obj, BasicLock* lock, JavaThread* current);
411
412 // Issue UL warning for unlocked JNI monitor on virtual thread termination
413 static void log_jni_monitor_still_held();
414
415 private:
416 static Handle find_callee_info(Bytecodes::Code& bc, CallInfo& callinfo, TRAPS);
417 static Handle find_callee_info_helper(vframeStream& vfst, Bytecodes::Code& bc, CallInfo& callinfo, TRAPS);
418
419 static Method* extract_attached_method(vframeStream& vfst);
420
421 #if defined(X86) && defined(COMPILER1)
422 // For Object.hashCode, System.identityHashCode try to pull hashCode from object header if available.
423 static void inline_check_hashcode_from_object_header(MacroAssembler* masm, const methodHandle& method, Register obj_reg, Register result);
424 #endif // X86 && COMPILER1
425
426 public:
427
428 // Read the array of BasicTypes from a Java signature, and compute where
429 // compiled Java code would like to put the results. Values in reg_lo and
430 // reg_hi refer to 4-byte quantities. Values less than SharedInfo::stack0 are
431 // registers, those above refer to 4-byte stack slots. All stack slots are
432 // based off of the window top. SharedInfo::stack0 refers to the first usable
433 // slot in the bottom of the frame. SharedInfo::stack0+1 refers to the memory word
434 // 4-bytes higher.
435 // return value is the maximum number of VMReg stack slots the convention will use.
436 static int java_calling_convention(const BasicType* sig_bt, VMRegPair* regs, int total_args_passed);
437 static int java_calling_convention(const GrowableArray<SigEntry>* sig, VMRegPair* regs) {
438 BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType, sig->length());
439 int total_args_passed = SigEntry::fill_sig_bt(sig, sig_bt);
440 return java_calling_convention(sig_bt, regs, total_args_passed);
441 }
442 static int java_return_convention(const BasicType* sig_bt, VMRegPair* regs, int total_args_passed);
443 static const uint java_return_convention_max_int;
444 static const uint java_return_convention_max_float;
445
446 static void check_member_name_argument_is_last_argument(const methodHandle& method,
447 const BasicType* sig_bt,
448 const VMRegPair* regs) NOT_DEBUG_RETURN;
449
450 // Ditto except for calling C
451 //
452 // C argument in register AND stack slot.
453 // Some architectures require that an argument must be passed in a register
454 // AND in a stack slot. These architectures provide a second VMRegPair array
455 // to be filled by the c_calling_convention method. On other architectures,
456 // null is being passed as the second VMRegPair array, so arguments are either
457 // passed in a register OR in a stack slot.
458 static int c_calling_convention(const BasicType *sig_bt, VMRegPair *regs, int total_args_passed);
459
460 static int vector_calling_convention(VMRegPair *regs,
461 uint num_bits,
462 uint total_args_passed);
463
464 // Generate I2C and C2I adapters. These adapters are simple argument marshalling
471 // by the time we reach the blob there is compiled code available. This allows
472 // the blob to pass the incoming stack pointer (the sender sp) in a known
473 // location for the interpreter to record. This is used by the frame code
474 // to correct the sender code to match up with the stack pointer when the
475 // thread left the compiled code. In addition it allows the interpreter
476 // to remove the space the c2i adapter allocated to do its argument conversion.
477
478 // Although a c2i blob will always run interpreted even if compiled code is
479 // present if we see that compiled code is present the compiled call site
480 // will be patched/re-resolved so that later calls will run compiled.
481
482 // Additionally a c2i blob need to have a unverified entry because it can be reached
483 // in situations where the call site is an inlined cache site and may go megamorphic.
484
485 // A i2c adapter is simpler than the c2i adapter. This is because it is assumed
486 // that the interpreter before it does any call dispatch will record the current
487 // stack pointer in the interpreter frame. On return it will restore the stack
488 // pointer as needed. This means the i2c adapter code doesn't need any special
489 // handshaking path with compiled code to keep the stack walking correct.
490
491 static void generate_i2c2i_adapters(MacroAssembler* _masm,
492 int total_args_passed,
493 const GrowableArray<SigEntry>* sig,
494 const VMRegPair* regs,
495 const GrowableArray<SigEntry>* sig_cc,
496 const VMRegPair* regs_cc,
497 const GrowableArray<SigEntry>* sig_cc_ro,
498 const VMRegPair* regs_cc_ro,
499 AdapterHandlerEntry* handler,
500 AdapterBlob*& new_adapter,
501 bool allocate_code_blob);
502
503 static void gen_i2c_adapter(MacroAssembler *_masm,
504 int comp_args_on_stack,
505 const GrowableArray<SigEntry>* sig,
506 const VMRegPair *regs);
507
508 // OSR support
509
510 // OSR_migration_begin will extract the jvm state from an interpreter
511 // frame (locals, monitors) and store the data in a piece of C heap
512 // storage. This then allows the interpreter frame to be removed from the
513 // stack and the OSR nmethod to be called. That method is called with a
514 // pointer to the C heap storage. This pointer is the return value from
515 // OSR_migration_begin.
516
517 static intptr_t* OSR_migration_begin(JavaThread *thread);
518
519 // OSR_migration_end is a trivial routine. It is called after the compiled
520 // method has extracted the jvm state from the C heap that OSR_migration_begin
521 // created. It's entire job is to simply free this storage.
522 static void OSR_migration_end(intptr_t* buf);
523
524 // Convert a sig into a calling convention register layout
525 // and find interesting things about it.
558 //
559 // The wrapper may contain special-case code if the given method
560 // is a compiled method handle adapter, such as _invokeBasic, _linkToVirtual, etc.
561 static nmethod* generate_native_wrapper(MacroAssembler* masm,
562 const methodHandle& method,
563 int compile_id,
564 BasicType* sig_bt,
565 VMRegPair* regs,
566 BasicType ret_type);
567
568 // A compiled caller has just called the interpreter, but compiled code
569 // exists. Patch the caller so he no longer calls into the interpreter.
570 static void fixup_callers_callsite(Method* moop, address ret_pc);
571 static bool should_fixup_call_destination(address destination, address entry_point, address caller_pc, Method* moop, CodeBlob* cb);
572
573 // Slow-path Locking and Unlocking
574 static void complete_monitor_locking_C(oopDesc* obj, BasicLock* lock, JavaThread* current);
575 static void complete_monitor_unlocking_C(oopDesc* obj, BasicLock* lock, JavaThread* current);
576
577 // Resolving of calls
578 static address get_resolved_entry (JavaThread* current, methodHandle callee_method,
579 bool is_static_call, bool is_optimized, bool caller_is_c1);
580 static address resolve_static_call_C (JavaThread* current);
581 static address resolve_virtual_call_C (JavaThread* current);
582 static address resolve_opt_virtual_call_C(JavaThread* current);
583
584 static void load_inline_type_fields_in_regs(JavaThread* current, oopDesc* res);
585 static void store_inline_type_fields_to_buf(JavaThread* current, intptr_t res);
586
587 // arraycopy, the non-leaf version. (See StubRoutines for all the leaf calls.)
588 static void slow_arraycopy_C(oopDesc* src, jint src_pos,
589 oopDesc* dest, jint dest_pos,
590 jint length, JavaThread* thread);
591
592 // handle ic miss with caller being compiled code
593 // wrong method handling (inline cache misses)
594 static address handle_wrong_method(JavaThread* current);
595 static address handle_wrong_method_abstract(JavaThread* current);
596 static address handle_wrong_method_ic_miss(JavaThread* current);
597 static void allocate_inline_types(JavaThread* current, Method* callee, bool allocate_receiver);
598 static oop allocate_inline_types_impl(JavaThread* current, methodHandle callee, bool allocate_receiver, TRAPS);
599
600 static address handle_unsafe_access(JavaThread* thread, address next_pc);
601
602 static BufferedInlineTypeBlob* generate_buffered_inline_type_adapter(const InlineKlass* vk);
603 #ifndef PRODUCT
604
605 // Collect and print inline cache miss statistics
606 private:
607 enum { maxICmiss_count = 100 };
608 static int _ICmiss_index; // length of IC miss histogram
609 static int _ICmiss_count[maxICmiss_count]; // miss counts
610 static address _ICmiss_at[maxICmiss_count]; // miss addresses
611 static void trace_ic_miss(address at);
612
613 public:
614 static uint _ic_miss_ctr; // total # of IC misses
615 static uint _wrong_method_ctr;
616 static uint _resolve_static_ctr;
617 static uint _resolve_virtual_ctr;
618 static uint _resolve_opt_virtual_ctr;
619 static uint _implicit_null_throws;
620 static uint _implicit_div0_throws;
621
622 static uint _jbyte_array_copy_ctr; // Slow-path byte array copy
688 //
689 // The C2I flavor takes a stock compiled call setup plus the target method in
690 // Rmethod, marshals the arguments for an interpreted call and jumps to
691 // Rmethod->_i2i_entry. On entry, the interpreted frame has not yet been
692 // setup. Compiled frames are fixed-size and the args are likely not in the
693 // right place. Hence all the args will likely be copied into the
694 // interpreter's frame, forcing that frame to grow. The compiled frame's
695 // outgoing stack args will be dead after the copy.
696 //
697 // Native wrappers, like adapters, marshal arguments. Unlike adapters they
698 // also perform an official frame push & pop. They have a call to the native
699 // routine in their middles and end in a return (instead of ending in a jump).
700 // The native wrappers are stored in real nmethods instead of the BufferBlobs
701 // used by the adapters. The code generation happens here because it's very
702 // similar to what the adapters have to do.
703
704 class AdapterHandlerEntry : public MetaspaceObj {
705 friend class AdapterHandlerLibrary;
706
707 public:
708 static const int ENTRIES_COUNT = 7;
709
710 private:
711 AdapterFingerPrint* _fingerprint;
712 address _i2c_entry;
713 address _c2i_entry;
714 address _c2i_inline_entry;
715 address _c2i_inline_ro_entry;
716 address _c2i_unverified_entry;
717 address _c2i_unverified_inline_entry;
718 address _c2i_no_clinit_check_entry;
719 bool _linked;
720
721 static const char *_entry_names[];
722
723 // Support for scalarized inline type calling convention
724 const GrowableArray<SigEntry>* _sig_cc;
725
726 #ifdef ASSERT
727 // Captures code and signature used to generate this adapter when
728 // verifying adapter equivalence.
729 unsigned char* _saved_code;
730 int _saved_code_length;
731 #endif
732
733 AdapterHandlerEntry(AdapterFingerPrint* fingerprint) :
734 _fingerprint(fingerprint),
735 _i2c_entry(nullptr),
736 _c2i_entry(nullptr),
737 _c2i_inline_entry(nullptr),
738 _c2i_inline_ro_entry(nullptr),
739 _c2i_unverified_entry(nullptr),
740 _c2i_unverified_inline_entry(nullptr),
741 _c2i_no_clinit_check_entry(nullptr),
742 _linked(false),
743 _sig_cc(nullptr)
744 #ifdef ASSERT
745 , _saved_code(nullptr),
746 _saved_code_length(0)
747 #endif
748 { }
749
750 ~AdapterHandlerEntry();
751
752 // Allocate on CHeap instead of metaspace (see JDK-8331086).
753 // Dummy argument is used to avoid C++ warning about using
754 // deleted opearator MetaspaceObj::delete().
755 void* operator new(size_t size, size_t dummy) throw() {
756 assert(size == BytesPerWord * heap_word_size(sizeof(AdapterHandlerEntry)), "should match");
757 void* p = AllocateHeap(size, mtCode);
758 memset(p, 0, size);
759 return p;
760 }
761
762 public:
763 static AdapterHandlerEntry* allocate(AdapterFingerPrint* fingerprint) {
764 return new(0) AdapterHandlerEntry(fingerprint);
765 }
766
767 static void deallocate(AdapterHandlerEntry *handler) {
768 handler->~AdapterHandlerEntry();
769 }
770
771 void set_entry_points(address i2c_entry, address c2i_entry, address c2i_inline_entry, address c2i_inline_ro_entry,
772 address c2i_unverified_entry, address c2i_unverified_inline_entry,
773 address c2i_no_clinit_check_entry = nullptr,
774 bool linked = true) {
775 _i2c_entry = i2c_entry;
776 _c2i_entry = c2i_entry;
777 _c2i_inline_entry = c2i_inline_entry;
778 _c2i_inline_ro_entry = c2i_inline_ro_entry;
779 _c2i_unverified_entry = c2i_unverified_entry;
780 _c2i_unverified_inline_entry = c2i_unverified_inline_entry;
781 _c2i_no_clinit_check_entry = c2i_no_clinit_check_entry;
782 _linked = linked;
783 }
784
785 address get_i2c_entry() const { return _i2c_entry; }
786 address get_c2i_entry() const { return _c2i_entry; }
787 address get_c2i_inline_entry() const { return _c2i_inline_entry; }
788 address get_c2i_inline_ro_entry() const { return _c2i_inline_ro_entry; }
789 address get_c2i_unverified_entry() const { return _c2i_unverified_entry; }
790 address get_c2i_unverified_inline_entry() const { return _c2i_unverified_inline_entry; }
791 address get_c2i_no_clinit_check_entry() const { return _c2i_no_clinit_check_entry; }
792
793 static const char* entry_name(int i) {
794 assert(i >=0 && i < ENTRIES_COUNT, "entry id out of range");
795 return _entry_names[i];
796 }
797
798 bool is_linked() const { return _linked; }
799 address base_address();
800 void relocate(address new_base);
801
802 // Support for scalarized inline type calling convention
803 void set_sig_cc(const GrowableArray<SigEntry>* sig) { _sig_cc = sig; }
804 const GrowableArray<SigEntry>* get_sig_cc() const { return _sig_cc; }
805
806 AdapterFingerPrint* fingerprint() const { return _fingerprint; }
807
808 #ifdef ASSERT
809 // Used to verify that code generated for shared adapters is equivalent
810 void save_code (unsigned char* code, int length);
811 bool compare_code(AdapterHandlerEntry* other);
812 #endif
813
814 //virtual void print_on(outputStream* st) const; DO NOT USE
815 void print_adapter_on(outputStream* st) const;
816
817 void metaspace_pointers_do(MetaspaceClosure* it);
818 int size() const {return (int)heap_word_size(sizeof(AdapterHandlerEntry)); }
819 MetaspaceObj::Type type() const { return AdapterHandlerEntryType; }
820
821 void remove_unshareable_info() NOT_CDS_RETURN;
822 void link() NOT_CDS_RETURN;
823 };
824
825 #if INCLUDE_CDS
826 class ArchivedAdapterTable;
827 #endif // INCLUDE_CDS
828
829 class CompiledEntrySignature;
830
831 class AdapterHandlerLibrary: public AllStatic {
832 friend class SharedRuntime;
833 private:
834 static BufferBlob* _buffer; // the temporary code buffer in CodeCache
835 static AdapterHandlerEntry* _abstract_method_handler;
836 static AdapterHandlerEntry* _no_arg_handler;
837 static AdapterHandlerEntry* _int_arg_handler;
838 static AdapterHandlerEntry* _obj_arg_handler;
839 static AdapterHandlerEntry* _obj_int_arg_handler;
840 static AdapterHandlerEntry* _obj_obj_arg_handler;
841 #if INCLUDE_CDS
842 static ArchivedAdapterTable _aot_adapter_handler_table;
843 #endif // INCLUDE_CDS
844
845 static BufferBlob* buffer_blob();
846 static void initialize();
847 static AdapterHandlerEntry* get_simple_adapter(const methodHandle& method);
848 static AdapterBlob* lookup_aot_cache(AdapterHandlerEntry* handler);
849 static AdapterHandlerEntry* create_adapter(AdapterBlob*& new_adapter,
850 CompiledEntrySignature& ces,
851 bool allocate_code_blob,
852 bool is_transient = false);
853 static void create_abstract_method_handler();
854 static void lookup_simple_adapters() NOT_CDS_RETURN;
855 #ifndef PRODUCT
856 static void print_adapter_handler_info(outputStream* st, AdapterHandlerEntry* handler, AdapterBlob* adapter_blob);
857 #endif // PRODUCT
858 public:
859
860 static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint);
861 static void create_native_wrapper(const methodHandle& method);
862 static AdapterHandlerEntry* get_adapter(const methodHandle& method);
863 static AdapterHandlerEntry* lookup(const GrowableArray<SigEntry>* sig, bool has_ro_adapter = false);
864 static bool generate_adapter_code(AdapterBlob*& adapter_blob,
865 AdapterHandlerEntry* handler,
866 CompiledEntrySignature& ces,
867 bool allocate_code_blob,
868 bool is_transient);
869
870 #ifdef ASSERT
871 static void verify_adapter_sharing(CompiledEntrySignature& ces, AdapterHandlerEntry* cached_entry);
872 #endif // ASSERT
873
874 static void print_handler(const CodeBlob* b) { print_handler_on(tty, b); }
875 static void print_handler_on(outputStream* st, const CodeBlob* b);
876 static bool contains(const CodeBlob* b);
877 static const char* name(AdapterFingerPrint* fingerprint);
878 static uint32_t id(AdapterFingerPrint* fingerprint);
879 #ifndef PRODUCT
880 static void print_statistics();
881 #endif // PRODUCT
882
883 static bool is_abstract_method_adapter(AdapterHandlerEntry* adapter);
884
885 static AdapterBlob* link_aot_adapter_handler(AdapterHandlerEntry* handler) NOT_CDS_RETURN_(nullptr);
886 static void dump_aot_adapter_table() NOT_CDS_RETURN;
887 static void serialize_shared_table_header(SerializeClosure* soc) NOT_CDS_RETURN;
888 static void link_aot_adapters() NOT_CDS_RETURN;
889 };
890
891 // Utility class for computing the calling convention of the 3 types
892 // of compiled method entries:
893 // Method::_from_compiled_entry - sig_cc
894 // Method::_from_compiled_inline_ro_entry - sig_cc_ro
895 // Method::_from_compiled_inline_entry - sig
896 class CompiledEntrySignature : public StackObj {
897 Method* _method;
898 int _num_inline_args;
899 bool _has_inline_recv;
900 GrowableArray<SigEntry>* _sig;
901 GrowableArray<SigEntry>* _sig_cc;
902 GrowableArray<SigEntry>* _sig_cc_ro;
903 VMRegPair* _regs;
904 VMRegPair* _regs_cc;
905 VMRegPair* _regs_cc_ro;
906
907 int _args_on_stack;
908 int _args_on_stack_cc;
909 int _args_on_stack_cc_ro;
910
911 bool _c1_needs_stack_repair;
912 bool _c2_needs_stack_repair;
913
914 GrowableArray<Method*>* _supers;
915
916 public:
917 Method* method() const { return _method; }
918
919 // Used by Method::_from_compiled_inline_entry
920 GrowableArray<SigEntry>* sig() const { return _sig; }
921
922 // Used by Method::_from_compiled_entry
923 GrowableArray<SigEntry>* sig_cc() const { return _sig_cc; }
924
925 // Used by Method::_from_compiled_inline_ro_entry
926 GrowableArray<SigEntry>* sig_cc_ro() const { return _sig_cc_ro; }
927
928 VMRegPair* regs() const { return _regs; }
929 VMRegPair* regs_cc() const { return _regs_cc; }
930 VMRegPair* regs_cc_ro() const { return _regs_cc_ro; }
931
932 int args_on_stack() const { return _args_on_stack; }
933 int args_on_stack_cc() const { return _args_on_stack_cc; }
934 int args_on_stack_cc_ro() const { return _args_on_stack_cc_ro; }
935
936 int num_inline_args() const { return _num_inline_args; }
937 bool has_inline_recv() const { return _has_inline_recv; }
938
939 bool has_scalarized_args() const { return _sig != _sig_cc; }
940 bool c1_needs_stack_repair() const { return _c1_needs_stack_repair; }
941 bool c2_needs_stack_repair() const { return _c2_needs_stack_repair; }
942 CodeOffsets::Entries c1_inline_ro_entry_type() const;
943
944 GrowableArray<Method*>* get_supers();
945
946 CompiledEntrySignature(Method* method = nullptr);
947 void compute_calling_conventions(bool init = true);
948 void initialize_from_fingerprint(AdapterFingerPrint* fingerprint);
949 };
950
951 #endif // SHARE_RUNTIME_SHAREDRUNTIME_HPP
|