Projects
openEuler:24.03:SP1:Everything
openjdk-1.8.0
_service:tar_scm:Reduce-the-probability-of-the-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:Reduce-the-probability-of-the-crash-related-to-ciObj.patch of Package openjdk-1.8.0
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: <interpreter>: 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
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2