< prev index next >

src/hotspot/share/code/aotCodeCache.cpp

Print this page

 198   return _max_aot_code_size;
 199 }
 200 
 201 // It is called from AOTMetaspace::initialize_shared_spaces()
 202 // which is called from universe_init().
 203 // At this point all AOT class linking seetings are finilized
 204 // and AOT cache is open so we can map AOT code region.
 205 void AOTCodeCache::initialize() {
 206 #if defined(ZERO) || !(defined(AMD64) || defined(AARCH64))
 207   log_info(aot, codecache, init)("AOT Code Cache is not supported on this platform.");
 208   disable_caching();
 209   return;
 210 #else
 211   if (FLAG_IS_DEFAULT(AOTCache)) {
 212     log_info(aot, codecache, init)("AOT Code Cache is not used: AOTCache is not specified.");
 213     disable_caching();
 214     return; // AOTCache must be specified to dump and use AOT code
 215   }
 216 
 217   if (VerifyOops) {
 218     // Disable AOT stubs caching when VerifyOops flag is on.
 219     // Verify oops code generated a lot of C strings which overflow
 220     // AOT C string table (which has fixed size).
 221     // AOT C string table will be reworked later to handle such cases.
 222     //
 223     // Note: AOT adapters are not affected - they don't have oop operations.
 224     log_info(aot, codecache, init)("AOT Stubs Caching is not supported with VerifyOops.");
 225     FLAG_SET_ERGO(AOTStubCaching, false);




 226   }
 227 
 228   bool is_dumping = false;
 229   bool is_using   = false;
 230   if (CDSConfig::is_dumping_final_static_archive() && CDSConfig::is_dumping_aot_linked_classes()) {
 231     is_dumping = true;
 232     enable_caching();
 233     is_dumping = is_caching_enabled();
 234   } else if (CDSConfig::is_using_archive() && CDSConfig::is_using_aot_linked_classes()) {
 235     enable_caching();
 236     is_using = is_caching_enabled();
 237   } else {
 238     log_info(aot, codecache, init)("AOT Code Cache is not used: AOT Class Linking is not used.");
 239     disable_caching();
 240     return; // nothing to do
 241   }
 242   if (!(is_dumping || is_using)) {
 243     disable_caching();
 244     return; // AOT code caching disabled on command line
 245   }

1916 
1917   initializing_extrs = true;
1918   _extrs_addr = NEW_C_HEAP_ARRAY(address, _extrs_max, mtCode);
1919 
1920   _extrs_length = 0;
1921 
1922   {
1923     // Required by initial stubs
1924     ADD_EXTERNAL_ADDRESS(SharedRuntime::exception_handler_for_return_address); // used by forward_exception
1925     ADD_EXTERNAL_ADDRESS(CompressedOops::base_addr()); // used by call_stub
1926     ADD_EXTERNAL_ADDRESS(Thread::current); // used by call_stub
1927     ADD_EXTERNAL_ADDRESS(SharedRuntime::throw_StackOverflowError);
1928     ADD_EXTERNAL_ADDRESS(SharedRuntime::throw_delayed_StackOverflowError);
1929   }
1930 
1931   // Record addresses of VM runtime methods
1932   ADD_EXTERNAL_ADDRESS(SharedRuntime::fixup_callers_callsite);
1933   ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method);
1934   ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method_abstract);
1935   ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method_ic_miss);

1936 #if defined(AARCH64) && !defined(ZERO)
1937   ADD_EXTERNAL_ADDRESS(JavaThread::aarch64_get_thread_helper);
1938   ADD_EXTERNAL_ADDRESS(BarrierSetAssembler::patching_epoch_addr());
1939 #endif
1940 
1941 #ifndef PRODUCT
1942   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jbyte_array_copy_ctr); // used by arraycopy stub on arm32 and x86_64
1943   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jshort_array_copy_ctr); // used by arraycopy stub
1944   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jint_array_copy_ctr); // used by arraycopy stub
1945   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jlong_array_copy_ctr); // used by arraycopy stub
1946   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_oop_array_copy_ctr); // used by arraycopy stub
1947   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_checkcast_array_copy_ctr); // used by arraycopy stub
1948   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_unsafe_array_copy_ctr); // used by arraycopy stub
1949   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_generic_array_copy_ctr); // used by arraycopy stub
1950   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_unsafe_set_memory_ctr); // used by arraycopy stub
1951 #endif /* PRODUCT */
1952 
1953   ADD_EXTERNAL_ADDRESS(SharedRuntime::enable_stack_reserved_zone);
1954 
1955 #if defined(AMD64) && !defined(ZERO)

2034     ADD_EXTERNAL_ADDRESS(Runtime1::counter_overflow);
2035     ADD_EXTERNAL_ADDRESS(Runtime1::new_type_array);
2036     ADD_EXTERNAL_ADDRESS(Runtime1::new_object_array);
2037     ADD_EXTERNAL_ADDRESS(Runtime1::new_multi_array);
2038     ADD_EXTERNAL_ADDRESS(Runtime1::throw_range_check_exception);
2039     ADD_EXTERNAL_ADDRESS(Runtime1::throw_index_exception);
2040     ADD_EXTERNAL_ADDRESS(Runtime1::throw_div0_exception);
2041     ADD_EXTERNAL_ADDRESS(Runtime1::throw_null_pointer_exception);
2042     ADD_EXTERNAL_ADDRESS(Runtime1::throw_array_store_exception);
2043     ADD_EXTERNAL_ADDRESS(Runtime1::throw_class_cast_exception);
2044     ADD_EXTERNAL_ADDRESS(Runtime1::throw_incompatible_class_change_error);
2045     ADD_EXTERNAL_ADDRESS(Runtime1::monitorenter);
2046     ADD_EXTERNAL_ADDRESS(Runtime1::monitorexit);
2047     ADD_EXTERNAL_ADDRESS(Runtime1::deoptimize);
2048     ADD_EXTERNAL_ADDRESS(Runtime1::access_field_patching);
2049     ADD_EXTERNAL_ADDRESS(Runtime1::move_klass_patching);
2050     ADD_EXTERNAL_ADDRESS(Runtime1::move_mirror_patching);
2051     ADD_EXTERNAL_ADDRESS(Runtime1::move_appendix_patching);
2052     ADD_EXTERNAL_ADDRESS(Runtime1::predicate_failed_trap);
2053     ADD_EXTERNAL_ADDRESS(Runtime1::unimplemented_entry);








2054     // already added
2055     // ADD_EXTERNAL_ADDRESS(Thread::current);
2056     ADD_EXTERNAL_ADDRESS(CompressedKlassPointers::base_addr());
2057   }
2058 #endif
2059 
2060 #ifdef COMPILER2
2061   {
2062     // Required by C2 blobs
2063     ADD_EXTERNAL_ADDRESS(Deoptimization::uncommon_trap);
2064     ADD_EXTERNAL_ADDRESS(OptoRuntime::handle_exception_C);
2065     ADD_EXTERNAL_ADDRESS(OptoRuntime::new_instance_C);
2066     ADD_EXTERNAL_ADDRESS(OptoRuntime::new_array_C);
2067     ADD_EXTERNAL_ADDRESS(OptoRuntime::new_array_nozero_C);
2068     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray2_C);
2069     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray3_C);
2070     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray4_C);
2071     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray5_C);
2072     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarrayN_C);
2073     ADD_EXTERNAL_ADDRESS(OptoRuntime::complete_monitor_locking_C);
2074     ADD_EXTERNAL_ADDRESS(OptoRuntime::monitor_notify_C);
2075     ADD_EXTERNAL_ADDRESS(OptoRuntime::monitor_notifyAll_C);
2076     ADD_EXTERNAL_ADDRESS(OptoRuntime::rethrow_C);
2077     ADD_EXTERNAL_ADDRESS(OptoRuntime::slow_arraycopy_C);
2078     ADD_EXTERNAL_ADDRESS(OptoRuntime::register_finalizer_C);


2079     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_first_transition_C);
2080     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_final_transition_C);
2081     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_transition_C);
2082     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_transition_C);
2083     // already added for
2084 #if defined(AARCH64) && ! defined(PRODUCT)
2085     ADD_EXTERNAL_ADDRESS(JavaThread::verify_cross_modify_fence_failure);
2086 #endif // AARCH64 && !PRODUCT
2087   }
2088 #endif // COMPILER2
2089 
2090 #if INCLUDE_G1GC
2091   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_field_pre_entry);
2092   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_narrow_oop_entry); // used by arraycopy stubs
2093   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_oop_entry); // used by arraycopy stubs
2094   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_post_entry); // used by arraycopy stubs
2095   ADD_EXTERNAL_ADDRESS(BarrierSetNMethod::nmethod_stub_entry_barrier); // used by method_entry_barrier
2096 
2097 #endif
2098 #if INCLUDE_SHENANDOAHGC

 198   return _max_aot_code_size;
 199 }
 200 
 201 // It is called from AOTMetaspace::initialize_shared_spaces()
 202 // which is called from universe_init().
 203 // At this point all AOT class linking seetings are finilized
 204 // and AOT cache is open so we can map AOT code region.
 205 void AOTCodeCache::initialize() {
 206 #if defined(ZERO) || !(defined(AMD64) || defined(AARCH64))
 207   log_info(aot, codecache, init)("AOT Code Cache is not supported on this platform.");
 208   disable_caching();
 209   return;
 210 #else
 211   if (FLAG_IS_DEFAULT(AOTCache)) {
 212     log_info(aot, codecache, init)("AOT Code Cache is not used: AOTCache is not specified.");
 213     disable_caching();
 214     return; // AOTCache must be specified to dump and use AOT code
 215   }
 216 
 217   if (VerifyOops) {
 218     // Disable AOT stub caching when VerifyOops flag is on.
 219     // Verify oops code generated a lot of C strings which overflow
 220     // AOT C string table (which has fixed size).
 221     // AOT C string table will be reworked later to handle such cases.
 222     log_info(aot, codecache, init)("AOT Stub Caching is not supported with VerifyOops.");


 223     FLAG_SET_ERGO(AOTStubCaching, false);
 224     if (InlineTypePassFieldsAsArgs) {
 225       log_info(aot, codecache, init)("AOT Adapter Caching is not supported with VerifyOops + InlineTypePassFieldsAsArgs.");
 226       FLAG_SET_ERGO(AOTAdapterCaching, false);
 227     }
 228   }
 229 
 230   bool is_dumping = false;
 231   bool is_using   = false;
 232   if (CDSConfig::is_dumping_final_static_archive() && CDSConfig::is_dumping_aot_linked_classes()) {
 233     is_dumping = true;
 234     enable_caching();
 235     is_dumping = is_caching_enabled();
 236   } else if (CDSConfig::is_using_archive() && CDSConfig::is_using_aot_linked_classes()) {
 237     enable_caching();
 238     is_using = is_caching_enabled();
 239   } else {
 240     log_info(aot, codecache, init)("AOT Code Cache is not used: AOT Class Linking is not used.");
 241     disable_caching();
 242     return; // nothing to do
 243   }
 244   if (!(is_dumping || is_using)) {
 245     disable_caching();
 246     return; // AOT code caching disabled on command line
 247   }

1918 
1919   initializing_extrs = true;
1920   _extrs_addr = NEW_C_HEAP_ARRAY(address, _extrs_max, mtCode);
1921 
1922   _extrs_length = 0;
1923 
1924   {
1925     // Required by initial stubs
1926     ADD_EXTERNAL_ADDRESS(SharedRuntime::exception_handler_for_return_address); // used by forward_exception
1927     ADD_EXTERNAL_ADDRESS(CompressedOops::base_addr()); // used by call_stub
1928     ADD_EXTERNAL_ADDRESS(Thread::current); // used by call_stub
1929     ADD_EXTERNAL_ADDRESS(SharedRuntime::throw_StackOverflowError);
1930     ADD_EXTERNAL_ADDRESS(SharedRuntime::throw_delayed_StackOverflowError);
1931   }
1932 
1933   // Record addresses of VM runtime methods
1934   ADD_EXTERNAL_ADDRESS(SharedRuntime::fixup_callers_callsite);
1935   ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method);
1936   ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method_abstract);
1937   ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method_ic_miss);
1938   ADD_EXTERNAL_ADDRESS(SharedRuntime::allocate_inline_types);
1939 #if defined(AARCH64) && !defined(ZERO)
1940   ADD_EXTERNAL_ADDRESS(JavaThread::aarch64_get_thread_helper);
1941   ADD_EXTERNAL_ADDRESS(BarrierSetAssembler::patching_epoch_addr());
1942 #endif
1943 
1944 #ifndef PRODUCT
1945   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jbyte_array_copy_ctr); // used by arraycopy stub on arm32 and x86_64
1946   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jshort_array_copy_ctr); // used by arraycopy stub
1947   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jint_array_copy_ctr); // used by arraycopy stub
1948   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jlong_array_copy_ctr); // used by arraycopy stub
1949   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_oop_array_copy_ctr); // used by arraycopy stub
1950   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_checkcast_array_copy_ctr); // used by arraycopy stub
1951   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_unsafe_array_copy_ctr); // used by arraycopy stub
1952   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_generic_array_copy_ctr); // used by arraycopy stub
1953   ADD_EXTERNAL_ADDRESS(&SharedRuntime::_unsafe_set_memory_ctr); // used by arraycopy stub
1954 #endif /* PRODUCT */
1955 
1956   ADD_EXTERNAL_ADDRESS(SharedRuntime::enable_stack_reserved_zone);
1957 
1958 #if defined(AMD64) && !defined(ZERO)

2037     ADD_EXTERNAL_ADDRESS(Runtime1::counter_overflow);
2038     ADD_EXTERNAL_ADDRESS(Runtime1::new_type_array);
2039     ADD_EXTERNAL_ADDRESS(Runtime1::new_object_array);
2040     ADD_EXTERNAL_ADDRESS(Runtime1::new_multi_array);
2041     ADD_EXTERNAL_ADDRESS(Runtime1::throw_range_check_exception);
2042     ADD_EXTERNAL_ADDRESS(Runtime1::throw_index_exception);
2043     ADD_EXTERNAL_ADDRESS(Runtime1::throw_div0_exception);
2044     ADD_EXTERNAL_ADDRESS(Runtime1::throw_null_pointer_exception);
2045     ADD_EXTERNAL_ADDRESS(Runtime1::throw_array_store_exception);
2046     ADD_EXTERNAL_ADDRESS(Runtime1::throw_class_cast_exception);
2047     ADD_EXTERNAL_ADDRESS(Runtime1::throw_incompatible_class_change_error);
2048     ADD_EXTERNAL_ADDRESS(Runtime1::monitorenter);
2049     ADD_EXTERNAL_ADDRESS(Runtime1::monitorexit);
2050     ADD_EXTERNAL_ADDRESS(Runtime1::deoptimize);
2051     ADD_EXTERNAL_ADDRESS(Runtime1::access_field_patching);
2052     ADD_EXTERNAL_ADDRESS(Runtime1::move_klass_patching);
2053     ADD_EXTERNAL_ADDRESS(Runtime1::move_mirror_patching);
2054     ADD_EXTERNAL_ADDRESS(Runtime1::move_appendix_patching);
2055     ADD_EXTERNAL_ADDRESS(Runtime1::predicate_failed_trap);
2056     ADD_EXTERNAL_ADDRESS(Runtime1::unimplemented_entry);
2057     ADD_EXTERNAL_ADDRESS(Runtime1::new_null_free_array);
2058     ADD_EXTERNAL_ADDRESS(Runtime1::load_flat_array);
2059     ADD_EXTERNAL_ADDRESS(Runtime1::store_flat_array);
2060     ADD_EXTERNAL_ADDRESS(Runtime1::substitutability_check);
2061     ADD_EXTERNAL_ADDRESS(Runtime1::buffer_inline_args);
2062     ADD_EXTERNAL_ADDRESS(Runtime1::buffer_inline_args_no_receiver);
2063     ADD_EXTERNAL_ADDRESS(Runtime1::throw_identity_exception);
2064     ADD_EXTERNAL_ADDRESS(Runtime1::throw_illegal_monitor_state_exception);
2065     // already added
2066     // ADD_EXTERNAL_ADDRESS(Thread::current);
2067     ADD_EXTERNAL_ADDRESS(CompressedKlassPointers::base_addr());
2068   }
2069 #endif
2070 
2071 #ifdef COMPILER2
2072   {
2073     // Required by C2 blobs
2074     ADD_EXTERNAL_ADDRESS(Deoptimization::uncommon_trap);
2075     ADD_EXTERNAL_ADDRESS(OptoRuntime::handle_exception_C);
2076     ADD_EXTERNAL_ADDRESS(OptoRuntime::new_instance_C);
2077     ADD_EXTERNAL_ADDRESS(OptoRuntime::new_array_C);
2078     ADD_EXTERNAL_ADDRESS(OptoRuntime::new_array_nozero_C);
2079     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray2_C);
2080     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray3_C);
2081     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray4_C);
2082     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray5_C);
2083     ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarrayN_C);
2084     ADD_EXTERNAL_ADDRESS(OptoRuntime::complete_monitor_locking_C);
2085     ADD_EXTERNAL_ADDRESS(OptoRuntime::monitor_notify_C);
2086     ADD_EXTERNAL_ADDRESS(OptoRuntime::monitor_notifyAll_C);
2087     ADD_EXTERNAL_ADDRESS(OptoRuntime::rethrow_C);
2088     ADD_EXTERNAL_ADDRESS(OptoRuntime::slow_arraycopy_C);
2089     ADD_EXTERNAL_ADDRESS(OptoRuntime::register_finalizer_C);
2090     ADD_EXTERNAL_ADDRESS(OptoRuntime::load_unknown_inline_C);
2091     ADD_EXTERNAL_ADDRESS(OptoRuntime::store_unknown_inline_C);
2092     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_first_transition_C);
2093     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_final_transition_C);
2094     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_transition_C);
2095     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_transition_C);
2096     // already added for
2097 #if defined(AARCH64) && ! defined(PRODUCT)
2098     ADD_EXTERNAL_ADDRESS(JavaThread::verify_cross_modify_fence_failure);
2099 #endif // AARCH64 && !PRODUCT
2100   }
2101 #endif // COMPILER2
2102 
2103 #if INCLUDE_G1GC
2104   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_field_pre_entry);
2105   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_narrow_oop_entry); // used by arraycopy stubs
2106   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_oop_entry); // used by arraycopy stubs
2107   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_post_entry); // used by arraycopy stubs
2108   ADD_EXTERNAL_ADDRESS(BarrierSetNMethod::nmethod_stub_entry_barrier); // used by method_entry_barrier
2109 
2110 #endif
2111 #if INCLUDE_SHENANDOAHGC
< prev index next >