diff a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -1978,10 +1978,12 @@ void nmethod::finalize_relocations() { NoSafepointVerifier nsv; GrowableArray virtual_call_data; + BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); + // Make sure that post call nops fill in nmethod offsets eagerly so // we don't have to race with deoptimization RelocIterator iter(this); while (iter.next()) { if (iter.type() == relocInfo::virtual_call_type) { @@ -1990,10 +1992,13 @@ virtual_call_data.append(value); } else if (iter.type() == relocInfo::post_call_nop_type) { post_call_nop_Relocation* const reloc = iter.post_call_nop_reloc(); address pc = reloc->addr(); install_post_call_nop_displacement(this, pc); + } else if (iter.type() == relocInfo::patchable_barrier_type) { + patchable_barrier_Relocation* const reloc = iter.patchable_barrier_reloc(); + bs_nm->patch_barrier_relocation(reloc); } } if (virtual_call_data.length() > 0) { // We allocate a block of CompiledICData per nmethod so the GC can purge this faster. @@ -3851,10 +3856,16 @@ barrier_Relocation* const reloc = iter.barrier_reloc(); stringStream st; st.print("barrier format=%d", reloc->format()); return st.as_string(); } + case relocInfo::patchable_barrier_type: { + patchable_barrier_Relocation* const reloc = iter.patchable_barrier_reloc(); + stringStream st; + st.print("patchable_barrier metadata=%d", reloc->metadata()); + return st.as_string(); + } case relocInfo::type_mask: return "type_bit_mask"; default: { stringStream st;