< 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   }

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

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

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








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


2083     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_first_transition_C);
2084     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_final_transition_C);
2085     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_transition_C);
2086     ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_transition_C);
2087     // already added for
2088 #if defined(AARCH64) && ! defined(PRODUCT)
2089     ADD_EXTERNAL_ADDRESS(JavaThread::verify_cross_modify_fence_failure);
2090 #endif // AARCH64 && !PRODUCT
2091   }
2092 #endif // COMPILER2
2093 
2094 #if INCLUDE_G1GC
2095   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_field_pre_entry);
2096   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_narrow_oop_entry); // used by arraycopy stubs
2097   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_oop_entry); // used by arraycopy stubs
2098   ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_post_entry); // used by arraycopy stubs
2099   ADD_EXTERNAL_ADDRESS(BarrierSetNMethod::nmethod_stub_entry_barrier); // used by method_entry_barrier
2100 
2101 #endif
2102 #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   }

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

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