188 return _max_aot_code_size;
189 }
190
191 // It is called from AOTMetaspace::initialize_shared_spaces()
192 // which is called from universe_init().
193 // At this point all AOT class linking seetings are finilized
194 // and AOT cache is open so we can map AOT code region.
195 void AOTCodeCache::initialize() {
196 #if defined(ZERO) || !(defined(AMD64) || defined(AARCH64))
197 log_info(aot, codecache, init)("AOT Code Cache is not supported on this platform.");
198 disable_caching();
199 return;
200 #else
201 if (FLAG_IS_DEFAULT(AOTCache)) {
202 log_info(aot, codecache, init)("AOT Code Cache is not used: AOTCache is not specified.");
203 disable_caching();
204 return; // AOTCache must be specified to dump and use AOT code
205 }
206
207 if (VerifyOops) {
208 // Disable AOT stubs caching when VerifyOops flag is on.
209 // Verify oops code generated a lot of C strings which overflow
210 // AOT C string table (which has fixed size).
211 // AOT C string table will be reworked later to handle such cases.
212 //
213 // Note: AOT adapters are not affected - they don't have oop operations.
214 log_info(aot, codecache, init)("AOT Stubs Caching is not supported with VerifyOops.");
215 FLAG_SET_ERGO(AOTStubCaching, false);
216 }
217
218 bool is_dumping = false;
219 bool is_using = false;
220 if (CDSConfig::is_dumping_final_static_archive() && CDSConfig::is_dumping_aot_linked_classes()) {
221 is_dumping = true;
222 enable_caching();
223 is_dumping = is_caching_enabled();
224 } else if (CDSConfig::is_using_archive() && CDSConfig::is_using_aot_linked_classes()) {
225 enable_caching();
226 is_using = is_caching_enabled();
227 } else {
228 log_info(aot, codecache, init)("AOT Code Cache is not used: AOT Class Linking is not used.");
229 disable_caching();
230 return; // nothing to do
231 }
232 if (!(is_dumping || is_using)) {
233 disable_caching();
234 return; // AOT code caching disabled on command line
235 }
1912
1913 initializing_extrs = true;
1914 _extrs_addr = NEW_C_HEAP_ARRAY(address, _extrs_max, mtCode);
1915
1916 _extrs_length = 0;
1917
1918 {
1919 // Required by initial stubs
1920 ADD_EXTERNAL_ADDRESS(SharedRuntime::exception_handler_for_return_address); // used by forward_exception
1921 ADD_EXTERNAL_ADDRESS(CompressedOops::base_addr()); // used by call_stub
1922 ADD_EXTERNAL_ADDRESS(Thread::current); // used by call_stub
1923 ADD_EXTERNAL_ADDRESS(SharedRuntime::throw_StackOverflowError);
1924 ADD_EXTERNAL_ADDRESS(SharedRuntime::throw_delayed_StackOverflowError);
1925 }
1926
1927 // Record addresses of VM runtime methods
1928 ADD_EXTERNAL_ADDRESS(SharedRuntime::fixup_callers_callsite);
1929 ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method);
1930 ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method_abstract);
1931 ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method_ic_miss);
1932 #if defined(AARCH64) && !defined(ZERO)
1933 ADD_EXTERNAL_ADDRESS(JavaThread::aarch64_get_thread_helper);
1934 ADD_EXTERNAL_ADDRESS(BarrierSetAssembler::patching_epoch_addr());
1935 #endif
1936
1937 #ifndef PRODUCT
1938 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jbyte_array_copy_ctr); // used by arraycopy stub on arm32 and x86_64
1939 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jshort_array_copy_ctr); // used by arraycopy stub
1940 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jint_array_copy_ctr); // used by arraycopy stub
1941 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jlong_array_copy_ctr); // used by arraycopy stub
1942 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_oop_array_copy_ctr); // used by arraycopy stub
1943 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_checkcast_array_copy_ctr); // used by arraycopy stub
1944 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_unsafe_array_copy_ctr); // used by arraycopy stub
1945 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_generic_array_copy_ctr); // used by arraycopy stub
1946 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_unsafe_set_memory_ctr); // used by arraycopy stub
1947 #endif /* PRODUCT */
1948
1949 ADD_EXTERNAL_ADDRESS(SharedRuntime::enable_stack_reserved_zone);
1950
1951 #if defined(AMD64) && !defined(ZERO)
2030 ADD_EXTERNAL_ADDRESS(Runtime1::counter_overflow);
2031 ADD_EXTERNAL_ADDRESS(Runtime1::new_type_array);
2032 ADD_EXTERNAL_ADDRESS(Runtime1::new_object_array);
2033 ADD_EXTERNAL_ADDRESS(Runtime1::new_multi_array);
2034 ADD_EXTERNAL_ADDRESS(Runtime1::throw_range_check_exception);
2035 ADD_EXTERNAL_ADDRESS(Runtime1::throw_index_exception);
2036 ADD_EXTERNAL_ADDRESS(Runtime1::throw_div0_exception);
2037 ADD_EXTERNAL_ADDRESS(Runtime1::throw_null_pointer_exception);
2038 ADD_EXTERNAL_ADDRESS(Runtime1::throw_array_store_exception);
2039 ADD_EXTERNAL_ADDRESS(Runtime1::throw_class_cast_exception);
2040 ADD_EXTERNAL_ADDRESS(Runtime1::throw_incompatible_class_change_error);
2041 ADD_EXTERNAL_ADDRESS(Runtime1::monitorenter);
2042 ADD_EXTERNAL_ADDRESS(Runtime1::monitorexit);
2043 ADD_EXTERNAL_ADDRESS(Runtime1::deoptimize);
2044 ADD_EXTERNAL_ADDRESS(Runtime1::access_field_patching);
2045 ADD_EXTERNAL_ADDRESS(Runtime1::move_klass_patching);
2046 ADD_EXTERNAL_ADDRESS(Runtime1::move_mirror_patching);
2047 ADD_EXTERNAL_ADDRESS(Runtime1::move_appendix_patching);
2048 ADD_EXTERNAL_ADDRESS(Runtime1::predicate_failed_trap);
2049 ADD_EXTERNAL_ADDRESS(Runtime1::unimplemented_entry);
2050 // already added
2051 // ADD_EXTERNAL_ADDRESS(Thread::current);
2052 ADD_EXTERNAL_ADDRESS(CompressedKlassPointers::base_addr());
2053 }
2054 #endif
2055
2056 #ifdef COMPILER2
2057 {
2058 // Required by C2 blobs
2059 ADD_EXTERNAL_ADDRESS(Deoptimization::uncommon_trap);
2060 ADD_EXTERNAL_ADDRESS(OptoRuntime::handle_exception_C);
2061 ADD_EXTERNAL_ADDRESS(OptoRuntime::new_instance_C);
2062 ADD_EXTERNAL_ADDRESS(OptoRuntime::new_array_C);
2063 ADD_EXTERNAL_ADDRESS(OptoRuntime::new_array_nozero_C);
2064 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray2_C);
2065 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray3_C);
2066 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray4_C);
2067 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray5_C);
2068 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarrayN_C);
2069 ADD_EXTERNAL_ADDRESS(OptoRuntime::complete_monitor_locking_C);
2070 ADD_EXTERNAL_ADDRESS(OptoRuntime::monitor_notify_C);
2071 ADD_EXTERNAL_ADDRESS(OptoRuntime::monitor_notifyAll_C);
2072 ADD_EXTERNAL_ADDRESS(OptoRuntime::rethrow_C);
2073 ADD_EXTERNAL_ADDRESS(OptoRuntime::slow_arraycopy_C);
2074 ADD_EXTERNAL_ADDRESS(OptoRuntime::register_finalizer_C);
2075 ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_first_transition_C);
2076 ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_final_transition_C);
2077 ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_transition_C);
2078 ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_transition_C);
2079 // already added for
2080 #if defined(AARCH64) && ! defined(PRODUCT)
2081 ADD_EXTERNAL_ADDRESS(JavaThread::verify_cross_modify_fence_failure);
2082 #endif // AARCH64 && !PRODUCT
2083 }
2084 #endif // COMPILER2
2085
2086 #if INCLUDE_G1GC
2087 ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_field_pre_entry);
2088 ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_narrow_oop_entry); // used by arraycopy stubs
2089 ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_oop_entry); // used by arraycopy stubs
2090 ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_post_entry); // used by arraycopy stubs
2091 ADD_EXTERNAL_ADDRESS(BarrierSetNMethod::nmethod_stub_entry_barrier); // used by method_entry_barrier
2092
2093 #endif
2094 #if INCLUDE_SHENANDOAHGC
|
188 return _max_aot_code_size;
189 }
190
191 // It is called from AOTMetaspace::initialize_shared_spaces()
192 // which is called from universe_init().
193 // At this point all AOT class linking seetings are finilized
194 // and AOT cache is open so we can map AOT code region.
195 void AOTCodeCache::initialize() {
196 #if defined(ZERO) || !(defined(AMD64) || defined(AARCH64))
197 log_info(aot, codecache, init)("AOT Code Cache is not supported on this platform.");
198 disable_caching();
199 return;
200 #else
201 if (FLAG_IS_DEFAULT(AOTCache)) {
202 log_info(aot, codecache, init)("AOT Code Cache is not used: AOTCache is not specified.");
203 disable_caching();
204 return; // AOTCache must be specified to dump and use AOT code
205 }
206
207 if (VerifyOops) {
208 // Disable AOT stub caching when VerifyOops flag is on.
209 // Verify oops code generated a lot of C strings which overflow
210 // AOT C string table (which has fixed size).
211 // AOT C string table will be reworked later to handle such cases.
212 log_info(aot, codecache, init)("AOT Stub Caching is not supported with VerifyOops.");
213 FLAG_SET_ERGO(AOTStubCaching, false);
214 if (InlineTypePassFieldsAsArgs) {
215 log_info(aot, codecache, init)("AOT Adapter Caching is not supported with VerifyOops + InlineTypePassFieldsAsArgs.");
216 FLAG_SET_ERGO(AOTAdapterCaching, false);
217 }
218 }
219
220 bool is_dumping = false;
221 bool is_using = false;
222 if (CDSConfig::is_dumping_final_static_archive() && CDSConfig::is_dumping_aot_linked_classes()) {
223 is_dumping = true;
224 enable_caching();
225 is_dumping = is_caching_enabled();
226 } else if (CDSConfig::is_using_archive() && CDSConfig::is_using_aot_linked_classes()) {
227 enable_caching();
228 is_using = is_caching_enabled();
229 } else {
230 log_info(aot, codecache, init)("AOT Code Cache is not used: AOT Class Linking is not used.");
231 disable_caching();
232 return; // nothing to do
233 }
234 if (!(is_dumping || is_using)) {
235 disable_caching();
236 return; // AOT code caching disabled on command line
237 }
1914
1915 initializing_extrs = true;
1916 _extrs_addr = NEW_C_HEAP_ARRAY(address, _extrs_max, mtCode);
1917
1918 _extrs_length = 0;
1919
1920 {
1921 // Required by initial stubs
1922 ADD_EXTERNAL_ADDRESS(SharedRuntime::exception_handler_for_return_address); // used by forward_exception
1923 ADD_EXTERNAL_ADDRESS(CompressedOops::base_addr()); // used by call_stub
1924 ADD_EXTERNAL_ADDRESS(Thread::current); // used by call_stub
1925 ADD_EXTERNAL_ADDRESS(SharedRuntime::throw_StackOverflowError);
1926 ADD_EXTERNAL_ADDRESS(SharedRuntime::throw_delayed_StackOverflowError);
1927 }
1928
1929 // Record addresses of VM runtime methods
1930 ADD_EXTERNAL_ADDRESS(SharedRuntime::fixup_callers_callsite);
1931 ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method);
1932 ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method_abstract);
1933 ADD_EXTERNAL_ADDRESS(SharedRuntime::handle_wrong_method_ic_miss);
1934 ADD_EXTERNAL_ADDRESS(SharedRuntime::allocate_inline_types);
1935 #if defined(AARCH64) && !defined(ZERO)
1936 ADD_EXTERNAL_ADDRESS(JavaThread::aarch64_get_thread_helper);
1937 ADD_EXTERNAL_ADDRESS(BarrierSetAssembler::patching_epoch_addr());
1938 #endif
1939
1940 #ifndef PRODUCT
1941 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jbyte_array_copy_ctr); // used by arraycopy stub on arm32 and x86_64
1942 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jshort_array_copy_ctr); // used by arraycopy stub
1943 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jint_array_copy_ctr); // used by arraycopy stub
1944 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_jlong_array_copy_ctr); // used by arraycopy stub
1945 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_oop_array_copy_ctr); // used by arraycopy stub
1946 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_checkcast_array_copy_ctr); // used by arraycopy stub
1947 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_unsafe_array_copy_ctr); // used by arraycopy stub
1948 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_generic_array_copy_ctr); // used by arraycopy stub
1949 ADD_EXTERNAL_ADDRESS(&SharedRuntime::_unsafe_set_memory_ctr); // used by arraycopy stub
1950 #endif /* PRODUCT */
1951
1952 ADD_EXTERNAL_ADDRESS(SharedRuntime::enable_stack_reserved_zone);
1953
1954 #if defined(AMD64) && !defined(ZERO)
2033 ADD_EXTERNAL_ADDRESS(Runtime1::counter_overflow);
2034 ADD_EXTERNAL_ADDRESS(Runtime1::new_type_array);
2035 ADD_EXTERNAL_ADDRESS(Runtime1::new_object_array);
2036 ADD_EXTERNAL_ADDRESS(Runtime1::new_multi_array);
2037 ADD_EXTERNAL_ADDRESS(Runtime1::throw_range_check_exception);
2038 ADD_EXTERNAL_ADDRESS(Runtime1::throw_index_exception);
2039 ADD_EXTERNAL_ADDRESS(Runtime1::throw_div0_exception);
2040 ADD_EXTERNAL_ADDRESS(Runtime1::throw_null_pointer_exception);
2041 ADD_EXTERNAL_ADDRESS(Runtime1::throw_array_store_exception);
2042 ADD_EXTERNAL_ADDRESS(Runtime1::throw_class_cast_exception);
2043 ADD_EXTERNAL_ADDRESS(Runtime1::throw_incompatible_class_change_error);
2044 ADD_EXTERNAL_ADDRESS(Runtime1::monitorenter);
2045 ADD_EXTERNAL_ADDRESS(Runtime1::monitorexit);
2046 ADD_EXTERNAL_ADDRESS(Runtime1::deoptimize);
2047 ADD_EXTERNAL_ADDRESS(Runtime1::access_field_patching);
2048 ADD_EXTERNAL_ADDRESS(Runtime1::move_klass_patching);
2049 ADD_EXTERNAL_ADDRESS(Runtime1::move_mirror_patching);
2050 ADD_EXTERNAL_ADDRESS(Runtime1::move_appendix_patching);
2051 ADD_EXTERNAL_ADDRESS(Runtime1::predicate_failed_trap);
2052 ADD_EXTERNAL_ADDRESS(Runtime1::unimplemented_entry);
2053 ADD_EXTERNAL_ADDRESS(Runtime1::new_null_free_array);
2054 ADD_EXTERNAL_ADDRESS(Runtime1::load_flat_array);
2055 ADD_EXTERNAL_ADDRESS(Runtime1::store_flat_array);
2056 ADD_EXTERNAL_ADDRESS(Runtime1::substitutability_check);
2057 ADD_EXTERNAL_ADDRESS(Runtime1::buffer_inline_args);
2058 ADD_EXTERNAL_ADDRESS(Runtime1::buffer_inline_args_no_receiver);
2059 ADD_EXTERNAL_ADDRESS(Runtime1::throw_identity_exception);
2060 ADD_EXTERNAL_ADDRESS(Runtime1::throw_illegal_monitor_state_exception);
2061 // already added
2062 // ADD_EXTERNAL_ADDRESS(Thread::current);
2063 ADD_EXTERNAL_ADDRESS(CompressedKlassPointers::base_addr());
2064 }
2065 #endif
2066
2067 #ifdef COMPILER2
2068 {
2069 // Required by C2 blobs
2070 ADD_EXTERNAL_ADDRESS(Deoptimization::uncommon_trap);
2071 ADD_EXTERNAL_ADDRESS(OptoRuntime::handle_exception_C);
2072 ADD_EXTERNAL_ADDRESS(OptoRuntime::new_instance_C);
2073 ADD_EXTERNAL_ADDRESS(OptoRuntime::new_array_C);
2074 ADD_EXTERNAL_ADDRESS(OptoRuntime::new_array_nozero_C);
2075 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray2_C);
2076 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray3_C);
2077 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray4_C);
2078 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarray5_C);
2079 ADD_EXTERNAL_ADDRESS(OptoRuntime::multianewarrayN_C);
2080 ADD_EXTERNAL_ADDRESS(OptoRuntime::complete_monitor_locking_C);
2081 ADD_EXTERNAL_ADDRESS(OptoRuntime::monitor_notify_C);
2082 ADD_EXTERNAL_ADDRESS(OptoRuntime::monitor_notifyAll_C);
2083 ADD_EXTERNAL_ADDRESS(OptoRuntime::rethrow_C);
2084 ADD_EXTERNAL_ADDRESS(OptoRuntime::slow_arraycopy_C);
2085 ADD_EXTERNAL_ADDRESS(OptoRuntime::register_finalizer_C);
2086 ADD_EXTERNAL_ADDRESS(OptoRuntime::load_unknown_inline_C);
2087 ADD_EXTERNAL_ADDRESS(OptoRuntime::store_unknown_inline_C);
2088 ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_first_transition_C);
2089 ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_final_transition_C);
2090 ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_start_transition_C);
2091 ADD_EXTERNAL_ADDRESS(OptoRuntime::vthread_end_transition_C);
2092 // already added for
2093 #if defined(AARCH64) && ! defined(PRODUCT)
2094 ADD_EXTERNAL_ADDRESS(JavaThread::verify_cross_modify_fence_failure);
2095 #endif // AARCH64 && !PRODUCT
2096 }
2097 #endif // COMPILER2
2098
2099 #if INCLUDE_G1GC
2100 ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_field_pre_entry);
2101 ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_narrow_oop_entry); // used by arraycopy stubs
2102 ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_pre_oop_entry); // used by arraycopy stubs
2103 ADD_EXTERNAL_ADDRESS(G1BarrierSetRuntime::write_ref_array_post_entry); // used by arraycopy stubs
2104 ADD_EXTERNAL_ADDRESS(BarrierSetNMethod::nmethod_stub_entry_barrier); // used by method_entry_barrier
2105
2106 #endif
2107 #if INCLUDE_SHENANDOAHGC
|