From b0eb81f7e030ceaa908f9dc492e70562a4f40a7c Mon Sep 17 00:00:00 2001 Date: Fri, 22 Jan 2021 15:18:14 +0800 Subject: Reduce the probability of the crash related to ciObjectFactory::create_new_metadata Summary: : add load acquire barriers when profiling klass LLT: Bug url: --- hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp | 10 ++++++++++ hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp | 1 + hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp index 70ab1bcb8..f4ce39661 100644 --- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp @@ -3177,6 +3177,16 @@ void MacroAssembler::load_klass(Register dst, Register src) { } } +void MacroAssembler::load_klass_acquire(Register dst, Register src) { + lea(dst, Address(src, oopDesc::klass_offset_in_bytes())); + if (UseCompressedClassPointers) { + ldarw(dst, dst); + decode_klass_not_null(dst); + } else { + ldar(dst, dst); + } +} + void MacroAssembler::cmp_klass(Register oop, Register trial_klass, Register tmp) { if (UseCompressedClassPointers) { ldrw(tmp, Address(oop, oopDesc::klass_offset_in_bytes())); diff --git a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp index 0b083c834..02216f1b1 100644 --- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp +++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp @@ -788,6 +788,7 @@ public: // oop manipulations void load_klass(Register dst, Register src); + void load_klass_acquire(Register dst, Register src); void store_klass(Register dst, Register src); void cmp_klass(Register oop, Register trial_klass, Register tmp); diff --git a/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp index a0446cd4d..65e56661b 100644 --- a/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp @@ -3250,7 +3250,7 @@ void TemplateTable::invokevirtual_helper(Register index, // get receiver klass __ null_check(recv, oopDesc::klass_offset_in_bytes()); - __ load_klass(r0, recv); + __ load_klass_acquire(r0, recv); // profile this call __ profile_virtual_call(r0, rlocals, r3); -- 2.19.0