From 29e183488a96a4c169f89eab9410e0a91a903476 Mon Sep 17 00:00:00 2001 Date: Tue, 22 Oct 2019 19:18:39 +0000 Subject: [PATCH] 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 d8926cd87d..58fc267f99 100644 --- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp @@ -3234,6 +3234,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 2cf827dcf0..168fe4d3b1 100644 --- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp +++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp @@ -790,6 +790,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 1e590780b7..7ee4e317d4 100644 --- a/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp @@ -3243,7 +3243,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.12.3