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
|