< prev index next >

src/hotspot/share/code/aotCodeCache.cpp

Print this page

 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
< prev index next >