< prev index next >

src/hotspot/share/code/aotCodeCache.cpp

Print this page

 199   return _max_aot_code_size;
 200 }
 201 
 202 // It is called from AOTMetaspace::initialize_shared_spaces()
 203 // which is called from universe_init().
 204 // At this point all AOT class linking seetings are finilized
 205 // and AOT cache is open so we can map AOT code region.
 206 void AOTCodeCache::initialize() {
 207 #if defined(ZERO) || !(defined(AMD64) || defined(AARCH64))
 208   log_info(aot, codecache, init)("AOT Code Cache is not supported on this platform.");
 209   disable_caching();
 210   return;
 211 #else
 212   if (FLAG_IS_DEFAULT(AOTCache)) {
 213     log_info(aot, codecache, init)("AOT Code Cache is not used: AOTCache is not specified.");
 214     disable_caching();
 215     return; // AOTCache must be specified to dump and use AOT code
 216   }
 217 
 218   if (VerifyOops) {
 219     // Disable AOT stubs caching when VerifyOops flag is on.
 220     // Verify oops code generated a lot of C strings which overflow
 221     // AOT C string table (which has fixed size).
 222     // AOT C string table will be reworked later to handle such cases.
 223     //
 224     // Note: AOT adapters are not affected - they don't have oop operations.
 225     log_info(aot, codecache, init)("AOT Stubs Caching is not supported with VerifyOops.");
 226     FLAG_SET_ERGO(AOTStubCaching, false);




 227   }
 228 
 229   bool is_dumping = false;
 230   bool is_using   = false;
 231   if (CDSConfig::is_dumping_final_static_archive() && CDSConfig::is_dumping_aot_linked_classes()) {
 232     is_dumping = true;
 233     enable_caching();
 234     is_dumping = is_caching_enabled();
 235   } else if (CDSConfig::is_using_archive() && CDSConfig::is_using_aot_linked_classes()) {
 236     enable_caching();
 237     is_using = is_caching_enabled();
 238   } else {
 239     log_info(aot, codecache, init)("AOT Code Cache is not used: AOT Class Linking is not used.");
 240     disable_caching();
 241     return; // nothing to do
 242   }
 243   if (!(is_dumping || is_using)) {
 244     disable_caching();
 245     return; // AOT code caching disabled on command line
 246   }

1856   offset += sizeof(uint);
1857   for (uint i = 0; i < count; i++) {
1858     int string_id = *(uint *)addr(offset);
1859     offset += sizeof(int);
1860     const char* str = (const char*)_cache->address_for_C_string(string_id);
1861     dbg_strings.insert(str);
1862   }
1863   set_read_position(offset);
1864 }
1865 #endif // PRODUCT
1866 
1867 //======================= AOTCodeAddressTable ===============
1868 
1869 // address table ids for generated routine entry adresses, external
1870 // addresses and C string addresses are partitioned into positive
1871 // integer ranges defined by the following positive base and max
1872 // values i.e. [_extrs_base, _extrs_base + _extrs_max -1],
1873 // [_stubs_base, _stubs_base + _stubs_max -1], [_c_str_base,
1874 // _c_str_base + _c_str_max -1],
1875 
1876 #define _extrs_max 380
1877 #define _stubs_max static_cast<int>(EntryId::NUM_ENTRYIDS)
1878 
1879 #define _extrs_base 0
1880 #define _stubs_base (_extrs_base + _extrs_max)
1881 #define _all_max    (_stubs_base + _stubs_max)
1882 
1883 // setter for external addresses and string addresses inserts new
1884 // addresses in the order they are encountered them which must remain
1885 // the same across an assembly run and subsequent production run
1886 
1887 #define ADD_EXTERNAL_ADDRESS(addr)                               \
1888   {                                                              \
1889     hash_address((address) addr, _extrs_base + _extrs_length);   \
1890     _extrs_addr[_extrs_length++] = (address) (addr);             \
1891     assert(_extrs_length <= _extrs_max, "increase size");        \
1892   }
1893 
1894 // insert into to the address hash table the index of an external
1895 // address or a stub address in the list of external or stub
1896 // addresses, respectively, keyed by the relevant address

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

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

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








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


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

 199   return _max_aot_code_size;
 200 }
 201 
 202 // It is called from AOTMetaspace::initialize_shared_spaces()
 203 // which is called from universe_init().
 204 // At this point all AOT class linking seetings are finilized
 205 // and AOT cache is open so we can map AOT code region.
 206 void AOTCodeCache::initialize() {
 207 #if defined(ZERO) || !(defined(AMD64) || defined(AARCH64))
 208   log_info(aot, codecache, init)("AOT Code Cache is not supported on this platform.");
 209   disable_caching();
 210   return;
 211 #else
 212   if (FLAG_IS_DEFAULT(AOTCache)) {
 213     log_info(aot, codecache, init)("AOT Code Cache is not used: AOTCache is not specified.");
 214     disable_caching();
 215     return; // AOTCache must be specified to dump and use AOT code
 216   }
 217 
 218   if (VerifyOops) {
 219     // Disable AOT stub caching when VerifyOops flag is on.
 220     // Verify oops code generated a lot of C strings which overflow
 221     // AOT C string table (which has fixed size).
 222     // AOT C string table will be reworked later to handle such cases.
 223     log_info(aot, codecache, init)("AOT Stub Caching is not supported with VerifyOops.");


 224     FLAG_SET_ERGO(AOTStubCaching, false);
 225     if (InlineTypePassFieldsAsArgs) {
 226       log_info(aot, codecache, init)("AOT Adapter Caching is not supported with VerifyOops + InlineTypePassFieldsAsArgs.");
 227       FLAG_SET_ERGO(AOTAdapterCaching, false);
 228     }
 229   }
 230 
 231   bool is_dumping = false;
 232   bool is_using   = false;
 233   if (CDSConfig::is_dumping_final_static_archive() && CDSConfig::is_dumping_aot_linked_classes()) {
 234     is_dumping = true;
 235     enable_caching();
 236     is_dumping = is_caching_enabled();
 237   } else if (CDSConfig::is_using_archive() && CDSConfig::is_using_aot_linked_classes()) {
 238     enable_caching();
 239     is_using = is_caching_enabled();
 240   } else {
 241     log_info(aot, codecache, init)("AOT Code Cache is not used: AOT Class Linking is not used.");
 242     disable_caching();
 243     return; // nothing to do
 244   }
 245   if (!(is_dumping || is_using)) {
 246     disable_caching();
 247     return; // AOT code caching disabled on command line
 248   }

1858   offset += sizeof(uint);
1859   for (uint i = 0; i < count; i++) {
1860     int string_id = *(uint *)addr(offset);
1861     offset += sizeof(int);
1862     const char* str = (const char*)_cache->address_for_C_string(string_id);
1863     dbg_strings.insert(str);
1864   }
1865   set_read_position(offset);
1866 }
1867 #endif // PRODUCT
1868 
1869 //======================= AOTCodeAddressTable ===============
1870 
1871 // address table ids for generated routine entry adresses, external
1872 // addresses and C string addresses are partitioned into positive
1873 // integer ranges defined by the following positive base and max
1874 // values i.e. [_extrs_base, _extrs_base + _extrs_max -1],
1875 // [_stubs_base, _stubs_base + _stubs_max -1], [_c_str_base,
1876 // _c_str_base + _c_str_max -1],
1877 
1878 #define _extrs_max 500
1879 #define _stubs_max static_cast<int>(EntryId::NUM_ENTRYIDS)
1880 
1881 #define _extrs_base 0
1882 #define _stubs_base (_extrs_base + _extrs_max)
1883 #define _all_max    (_stubs_base + _stubs_max)
1884 
1885 // setter for external addresses and string addresses inserts new
1886 // addresses in the order they are encountered them which must remain
1887 // the same across an assembly run and subsequent production run
1888 
1889 #define ADD_EXTERNAL_ADDRESS(addr)                               \
1890   {                                                              \
1891     hash_address((address) addr, _extrs_base + _extrs_length);   \
1892     _extrs_addr[_extrs_length++] = (address) (addr);             \
1893     assert(_extrs_length <= _extrs_max, "increase size");        \
1894   }
1895 
1896 // insert into to the address hash table the index of an external
1897 // address or a stub address in the list of external or stub
1898 // addresses, respectively, keyed by the relevant address

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

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