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
|