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
|