From 344955ace51b8ced29a4dac15ae14f3129004fc4 Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Wed, 2 Apr 2025 06:16:13 -0700 Subject: [PATCH 01/10] Graal Shenandoah support --- .../share/gc/shenandoah/shenandoahHeap.cpp | 6 ++++ .../share/gc/shenandoah/shenandoahRuntime.cpp | 2 ++ .../share/gc/shenandoah/shenandoahRuntime.hpp | 3 ++ src/hotspot/share/jvmci/jvmciCompilerToVM.hpp | 4 +++ .../share/jvmci/jvmciCompilerToVMInit.cpp | 16 +++++++++++ src/hotspot/share/jvmci/jvmci_globals.cpp | 2 +- src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 28 +++++++++++++++++++ 7 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp index ad09aecbe68e5..dd2829af863aa 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -106,6 +106,9 @@ #include "utilities/globalDefinitions.hpp" #include "utilities/events.hpp" #include "utilities/powerOfTwo.hpp" +#if INCLUDE_JVMCI +#include "jvmci/jvmci.hpp" +#endif class ShenandoahPretouchHeapTask : public WorkerTask { private: @@ -2206,6 +2209,9 @@ void ShenandoahHeap::stw_unload_classes(bool full_gc) { ShenandoahGCWorkerPhase worker_phase(phase); bool unloading_occurred = SystemDictionary::do_unloading(gc_timer()); + // Clean JVMCI metadata handles. + JVMCI_ONLY(JVMCI::do_unloading(unloading_occurred)); + uint num_workers = _workers->active_workers(); ShenandoahClassUnloadingTask unlink_task(phase, num_workers, unloading_occurred); _workers->run_task(&unlink_task); diff --git a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp index 2984debd9f861..365cbb28c660e 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp @@ -39,6 +39,7 @@ JRT_LEAF(void, ShenandoahRuntime::arraycopy_barrier_narrow_oop(narrowOop* src, n JRT_END JRT_LEAF(void, ShenandoahRuntime::write_ref_field_pre(oopDesc * orig, JavaThread * thread)) + //tty->print_cr("ShenandoahRuntime::write_ref_field_pre: " PTR_FORMAT, p2i(orig)); assert(thread == JavaThread::current(), "pre-condition"); assert(orig != nullptr, "should be optimized out"); shenandoah_assert_correct(nullptr, orig); @@ -49,6 +50,7 @@ JRT_LEAF(void, ShenandoahRuntime::write_ref_field_pre(oopDesc * orig, JavaThread JRT_END JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_strong(oopDesc* src, oop* load_addr)) + //tty->print_cr("LRB-strong on oop: " PTR_FORMAT ", load_addr: " PTR_FORMAT, p2i(src), p2i(load_addr)); return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator(src, load_addr); JRT_END diff --git a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp index 4ad8fc997ea76..815816055351c 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp @@ -37,6 +37,9 @@ class ShenandoahRuntime : public AllStatic { static void arraycopy_barrier_narrow_oop(narrowOop* src, narrowOop* dst, size_t length); static void write_ref_field_pre(oopDesc* orig, JavaThread* thread); + static void pre_barrier(JavaThread* thread, oopDesc* orig) { + write_ref_field_pre(orig, thread); + } static oopDesc* load_reference_barrier_strong(oopDesc* src, oop* load_addr); static oopDesc* load_reference_barrier_strong_narrow(oopDesc* src, narrowOop* load_addr); diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp b/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp index b44b4bb911625..f9643c6394e5d 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp @@ -111,6 +111,10 @@ class CompilerToVM { #if INCLUDE_ZGC static int sizeof_ZStoreBarrierEntry; #endif +#if INCLUDE_SHENANDOAHGC + static address shenandoah_in_cset_fast_test_addr; + static int shenandoah_region_size_bytes_shift; +#endif #ifdef X86 static int L1_line_size; diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp index a729e34a2796b..fb37761834ebf 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp @@ -52,6 +52,10 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" #include "utilities/resourceHash.hpp" +#if INCLUDE_SHENANDOAHGC +#include "gc/shenandoah/shenandoahHeap.hpp" +#include "gc/shenandoah/shenandoahHeapRegion.hpp" +#endif int CompilerToVM::Data::oopDesc_klass_offset_in_bytes; int CompilerToVM::Data::arrayOopDesc_length_offset_in_bytes; @@ -86,6 +90,11 @@ address CompilerToVM::Data::ZPointerVectorLoadBadMask_address; address CompilerToVM::Data::ZPointerVectorStoreBadMask_address; address CompilerToVM::Data::ZPointerVectorStoreGoodMask_address; +#if INCLUDE_SHENANDOAHGC +address CompilerToVM::Data::shenandoah_in_cset_fast_test_addr; +int CompilerToVM::Data::shenandoah_region_size_bytes_shift; +#endif + bool CompilerToVM::Data::continuations_enabled; #ifdef AARCH64 @@ -233,6 +242,13 @@ void CompilerToVM::Data::initialize(JVMCI_TRAPS) { cardtable_shift = 0; } +#if INCLUDE_SHENANDOAHGC + if (UseShenandoahGC) { + shenandoah_in_cset_fast_test_addr = ShenandoahHeap::in_cset_fast_test_addr(); + shenandoah_region_size_bytes_shift = ShenandoahHeapRegion::region_size_bytes_shift_jint(); + } +#endif + #ifdef X86 L1_line_size = VM_Version::L1_line_size(); #endif diff --git a/src/hotspot/share/jvmci/jvmci_globals.cpp b/src/hotspot/share/jvmci/jvmci_globals.cpp index dfc7e6b597046..c4dc7556f1596 100644 --- a/src/hotspot/share/jvmci/jvmci_globals.cpp +++ b/src/hotspot/share/jvmci/jvmci_globals.cpp @@ -228,7 +228,7 @@ bool JVMCIGlobals::enable_jvmci_product_mode(JVMFlagOrigin origin, bool use_graa } bool JVMCIGlobals::gc_supports_jvmci() { - return UseSerialGC || UseParallelGC || UseG1GC || UseZGC || UseEpsilonGC; + return UseSerialGC || UseParallelGC || UseG1GC || UseZGC || UseShenandoahGC || UseEpsilonGC; } void JVMCIGlobals::check_jvmci_supported_gc() { diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index 3cbb1512cd06a..7a4ea520822d8 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -53,6 +53,12 @@ #include "gc/z/zBarrierSetRuntime.hpp" #include "gc/z/zThreadLocalData.hpp" #endif +#if INCLUDE_SHENANDOAHGC +#include "gc/shenandoah/shenandoahHeap.hpp" +#include "gc/shenandoah/shenandoahHeapRegion.hpp" +#include "gc/shenandoah/shenandoahThreadLocalData.hpp" +#include "gc/shenandoah/shenandoahRuntime.hpp" +#endif #define VM_STRUCTS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field) \ static_field(CompilerToVM::Data, oopDesc_klass_offset_in_bytes, int) \ @@ -129,6 +135,8 @@ static_field(CompilerToVM::Data, sizeof_arrayOopDesc, int) \ static_field(CompilerToVM::Data, sizeof_BasicLock, int) \ ZGC_ONLY(static_field(CompilerToVM::Data, sizeof_ZStoreBarrierEntry, int)) \ + SHENANDOAHGC_ONLY(static_field(CompilerToVM::Data, shenandoah_in_cset_fast_test_addr, address)) \ + SHENANDOAHGC_ONLY(static_field(CompilerToVM::Data, shenandoah_region_size_bytes_shift,int)) \ \ static_field(CompilerToVM::Data, dsin, address) \ static_field(CompilerToVM::Data, dcos, address) \ @@ -888,6 +896,13 @@ declare_function(JVMCIRuntime::load_and_clear_exception) \ G1GC_ONLY(declare_function(JVMCIRuntime::write_barrier_pre)) \ G1GC_ONLY(declare_function(JVMCIRuntime::write_barrier_post)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_strong)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_strong_narrow)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_weak)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_weak_narrow)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_phantom)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_phantom_narrow)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::pre_barrier)) \ declare_function(JVMCIRuntime::validate_object) \ \ declare_function(JVMCIRuntime::test_deoptimize_call_int) @@ -934,6 +949,14 @@ #endif // INCLUDE_ZGC +#if INCLUDE_SHENANDOAHGC + +#define VM_INT_CONSTANTS_JVMCI_SHENANDOAH(declare_constant, declare_constant_with_value, declare_preprocessor_constant) \ + declare_constant_with_value("ShenandoahThreadLocalData::gc_state_offset", in_bytes(ShenandoahThreadLocalData::gc_state_offset())) \ + declare_constant_with_value("ShenandoahThreadLocalData::satb_mark_queue_index_offset", in_bytes(ShenandoahThreadLocalData::satb_mark_queue_index_offset())) \ + declare_constant_with_value("ShenandoahThreadLocalData::satb_mark_queue_buffer_offset", in_bytes(ShenandoahThreadLocalData::satb_mark_queue_buffer_offset())) \ + +#endif #ifdef LINUX @@ -1056,6 +1079,11 @@ VMIntConstantEntry JVMCIVMStructs::localHotSpotVMIntConstants[] = { GENERATE_VM_INT_CONSTANT_WITH_VALUE_ENTRY, GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) #endif +#if INCLUDE_SHENANDOAHGC + VM_INT_CONSTANTS_JVMCI_SHENANDOAH(GENERATE_VM_INT_CONSTANT_ENTRY, + GENERATE_VM_INT_CONSTANT_WITH_VALUE_ENTRY, + GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) +#endif #ifdef VM_INT_CPU_FEATURE_CONSTANTS VM_INT_CPU_FEATURE_CONSTANTS #endif From 956bbecd75e5663daf056e9e2bc879f25f6b5241 Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Wed, 9 Apr 2025 14:37:10 +0200 Subject: [PATCH 02/10] Revert "8321373: Build should use LC_ALL=C.UTF-8" This reverts commit d395ac287900f2c22739751e39831dea8a189b5c. --- make/autoconf/basic.m4 | 16 ---------------- make/autoconf/basic_tools.m4 | 3 +-- make/autoconf/spec.gmk.template | 6 +++--- .../build/tools/classlist/HelloClasslist.java | 5 +---- 4 files changed, 5 insertions(+), 25 deletions(-) diff --git a/make/autoconf/basic.m4 b/make/autoconf/basic.m4 index de3613e1cc25b..2fc1133c81ef2 100644 --- a/make/autoconf/basic.m4 +++ b/make/autoconf/basic.m4 @@ -132,22 +132,6 @@ AC_DEFUN_ONCE([BASIC_SETUP_BUILD_ENV], ] ) AC_SUBST(BUILD_ENV) - - if test "x$LOCALE" != x; then - # Check if we actually have C.UTF-8; if so, use it - if $LOCALE -a | $GREP -q -E "^C\.(utf8|UTF-8)$"; then - LOCALE_USED=C.UTF-8 - else - AC_MSG_WARN([C.UTF-8 locale not found, using C locale]) - LOCALE_USED=C - fi - else - AC_MSG_WARN([locale command not not found, using C locale]) - LOCALE_USED=C - fi - - export LC_ALL=$LOCALE_USED - AC_SUBST(LOCALE_USED) ]) ################################################################################ diff --git a/make/autoconf/basic_tools.m4 b/make/autoconf/basic_tools.m4 index eceb0ae6cc44f..a51edc29e9837 100644 --- a/make/autoconf/basic_tools.m4 +++ b/make/autoconf/basic_tools.m4 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -54,7 +54,6 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], UTIL_REQUIRE_SPECIAL(SED, [AC_PROG_SED]) # Tools only needed on some platforms - UTIL_LOOKUP_PROGS(LOCALE, locale) UTIL_LOOKUP_PROGS(PATHTOOL, cygpath wslpath) UTIL_LOOKUP_PROGS(CMD, cmd.exe, $PATH:/cygdrive/c/windows/system32:/mnt/c/windows/system32:/c/windows/system32) ]) diff --git a/make/autoconf/spec.gmk.template b/make/autoconf/spec.gmk.template index 92ee1c9328719..ffda674432b61 100644 --- a/make/autoconf/spec.gmk.template +++ b/make/autoconf/spec.gmk.template @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -56,8 +56,8 @@ COMMA := , # What make to use for main processing, after bootstrapping top-level Makefile. MAKE := @MAKE@ -# Make sure all shell commands are executed with a proper locale -export LC_ALL := @LOCALE_USED@ +# Make sure all shell commands are executed with the C locale +export LC_ALL := C # Make sure we override any local CLASSPATH variable export CLASSPATH := @CLASSPATH@ diff --git a/make/jdk/src/classes/build/tools/classlist/HelloClasslist.java b/make/jdk/src/classes/build/tools/classlist/HelloClasslist.java index 1b930ca752777..51fb3eb8d57d2 100644 --- a/make/jdk/src/classes/build/tools/classlist/HelloClasslist.java +++ b/make/jdk/src/classes/build/tools/classlist/HelloClasslist.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,6 @@ import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.net.InetAddress; -import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.time.LocalDateTime; import java.time.ZoneId; @@ -133,8 +132,6 @@ public static void main(String ... args) throws Throwable { String oldDate = String.format("%s%n", DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.ROOT) .format(new Date())); - StandardCharsets.US_ASCII.encode(""); - StandardCharsets.UTF_8.encode(""); // A selection of trivial and common reflection operations var instance = HelloClasslist.class.getConstructor().newInstance(); From 0bcdb7dc2c85e1757de66ed16f9053ac0ee908aa Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Thu, 17 Apr 2025 15:23:35 +0200 Subject: [PATCH 03/10] Support for Shenandoah card-table barriers in JVMCI --- src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp | 2 ++ src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp index fb37761834ebf..b1905402b01ae 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp @@ -236,6 +236,8 @@ void CompilerToVM::Data::initialize(JVMCI_TRAPS) { assert(base != nullptr, "unexpected byte_map_base"); cardtable_start_address = base; cardtable_shift = CardTable::card_shift(); + } else if (bs->is_a(BarrierSet::ShenandoahBarrierSet)) { + cardtable_shift = CardTable::card_shift(); } else { // No card mark barriers cardtable_start_address = nullptr; diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index 7a4ea520822d8..02266ae8c01a0 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -955,6 +955,7 @@ declare_constant_with_value("ShenandoahThreadLocalData::gc_state_offset", in_bytes(ShenandoahThreadLocalData::gc_state_offset())) \ declare_constant_with_value("ShenandoahThreadLocalData::satb_mark_queue_index_offset", in_bytes(ShenandoahThreadLocalData::satb_mark_queue_index_offset())) \ declare_constant_with_value("ShenandoahThreadLocalData::satb_mark_queue_buffer_offset", in_bytes(ShenandoahThreadLocalData::satb_mark_queue_buffer_offset())) \ + declare_constant_with_value("ShenandoahThreadLocalData::card_table_offset", in_bytes(ShenandoahThreadLocalData::card_table_offset())) \ #endif From f54cb48373a81cf4a5e06b1abc3b2806a22135ba Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Fri, 2 May 2025 12:45:09 +0200 Subject: [PATCH 04/10] Revert unrelated changes --- make/autoconf/basic.m4 | 16 ++++++++++++++++ make/autoconf/basic_tools.m4 | 1 + make/autoconf/spec.gmk.template | 6 +++--- .../build/tools/classlist/HelloClasslist.java | 3 +++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/make/autoconf/basic.m4 b/make/autoconf/basic.m4 index be5132f856ec4..767d1add36330 100644 --- a/make/autoconf/basic.m4 +++ b/make/autoconf/basic.m4 @@ -135,6 +135,22 @@ AC_DEFUN_ONCE([BASIC_SETUP_BUILD_ENV], AC_SUBST(BUILD_ENV) ]) +if test "x$LOCALE" != x; then + # Check if we actually have C.UTF-8; if so, use it + if $LOCALE -a | $GREP -q -E "^C\.(utf8|UTF-8)$"; then + LOCALE_USED=C.UTF-8 + else + AC_MSG_WARN([C.UTF-8 locale not found, using C locale]) + LOCALE_USED=C + fi + else + AC_MSG_WARN([locale command not not found, using C locale]) + LOCALE_USED=C + fi + export LC_ALL=$LOCALE_USED + AC_SUBST(LOCALE_USED) +]) + ################################################################################ # Evaluates platform specific overrides for devkit variables. # $1: Name of variable diff --git a/make/autoconf/basic_tools.m4 b/make/autoconf/basic_tools.m4 index 904a330b0c320..5815c55c962ab 100644 --- a/make/autoconf/basic_tools.m4 +++ b/make/autoconf/basic_tools.m4 @@ -54,6 +54,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], UTIL_REQUIRE_SPECIAL(SED, [AC_PROG_SED]) # Tools only needed on some platforms + UTIL_LOOKUP_PROGS(LOCALE, locale) UTIL_LOOKUP_PROGS(PATHTOOL, cygpath wslpath) UTIL_LOOKUP_PROGS(CMD, cmd.exe, $PATH:/cygdrive/c/windows/system32:/mnt/c/windows/system32:/c/windows/system32) UTIL_LOOKUP_PROGS(LSB_RELEASE, lsb_release) diff --git a/make/autoconf/spec.gmk.template b/make/autoconf/spec.gmk.template index 44241f689d321..ebaa487b40a18 100644 --- a/make/autoconf/spec.gmk.template +++ b/make/autoconf/spec.gmk.template @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -56,8 +56,8 @@ COMMA := , # What make to use for main processing, after bootstrapping top-level Makefile. MAKE := @MAKE@ -# Make sure all shell commands are executed with the C locale -export LC_ALL := C +# Make sure all shell commands are executed with a proper locale +export LC_ALL := @LOCALE_USED@ # Make sure we override any local CLASSPATH variable export CLASSPATH := @CLASSPATH@ diff --git a/make/jdk/src/classes/build/tools/classlist/HelloClasslist.java b/make/jdk/src/classes/build/tools/classlist/HelloClasslist.java index 6883fc2fc2b0d..9434889e0bbed 100644 --- a/make/jdk/src/classes/build/tools/classlist/HelloClasslist.java +++ b/make/jdk/src/classes/build/tools/classlist/HelloClasslist.java @@ -37,6 +37,7 @@ import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.net.InetAddress; +import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.time.LocalDateTime; import java.time.ZoneId; @@ -135,6 +136,8 @@ public static void main(String ... args) throws Throwable { String oldDate = String.format("%s%n", DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.ROOT) .format(new Date())); + StandardCharsets.US_ASCII.encode(""); + StandardCharsets.UTF_8.encode(""); // A selection of trivial and common reflection operations var instance = HelloClasslist.class.getConstructor().newInstance(); From 1543e8f3ec7b53a31e2d54aa6dba4e15ca81b4ce Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Fri, 2 May 2025 12:46:14 +0200 Subject: [PATCH 05/10] Revert unrelated changes --- make/autoconf/basic.m4 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/make/autoconf/basic.m4 b/make/autoconf/basic.m4 index 767d1add36330..6daba35547bd6 100644 --- a/make/autoconf/basic.m4 +++ b/make/autoconf/basic.m4 @@ -133,9 +133,8 @@ AC_DEFUN_ONCE([BASIC_SETUP_BUILD_ENV], ] ) AC_SUBST(BUILD_ENV) -]) -if test "x$LOCALE" != x; then + if test "x$LOCALE" != x; then # Check if we actually have C.UTF-8; if so, use it if $LOCALE -a | $GREP -q -E "^C\.(utf8|UTF-8)$"; then LOCALE_USED=C.UTF-8 @@ -147,6 +146,7 @@ if test "x$LOCALE" != x; then AC_MSG_WARN([locale command not not found, using C locale]) LOCALE_USED=C fi + export LC_ALL=$LOCALE_USED AC_SUBST(LOCALE_USED) ]) From 25a8a6f36e95f8e96ecabc90250464a556c2e449 Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Fri, 2 May 2025 13:29:40 +0200 Subject: [PATCH 06/10] Remove unnecessary stuff --- src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp | 2 -- src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp index 3a17c36cf65dc..d2a5f71bca608 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp @@ -39,7 +39,6 @@ JRT_LEAF(void, ShenandoahRuntime::arraycopy_barrier_narrow_oop(narrowOop* src, n JRT_END JRT_LEAF(void, ShenandoahRuntime::write_ref_field_pre(oopDesc * orig, JavaThread * thread)) - //tty->print_cr("ShenandoahRuntime::write_ref_field_pre: " PTR_FORMAT, p2i(orig)); assert(thread == JavaThread::current(), "pre-condition"); assert(orig != nullptr, "should be optimized out"); shenandoah_assert_correct(nullptr, orig); @@ -50,7 +49,6 @@ JRT_LEAF(void, ShenandoahRuntime::write_ref_field_pre(oopDesc * orig, JavaThread JRT_END JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_strong(oopDesc* src, oop* load_addr)) - //tty->print_cr("LRB-strong on oop: " PTR_FORMAT ", load_addr: " PTR_FORMAT, p2i(src), p2i(load_addr)); return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator(src, load_addr); JRT_END diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index 8cd1017fbf5f3..fe679c931e4ae 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -54,8 +54,6 @@ #include "gc/z/zThreadLocalData.hpp" #endif #if INCLUDE_SHENANDOAHGC -#include "gc/shenandoah/shenandoahHeap.hpp" -#include "gc/shenandoah/shenandoahHeapRegion.hpp" #include "gc/shenandoah/shenandoahThreadLocalData.hpp" #include "gc/shenandoah/shenandoahRuntime.hpp" #endif From 6487a9f76382345ffb90bf80666892339fc3d19a Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Fri, 2 May 2025 16:13:39 +0200 Subject: [PATCH 07/10] Fix ordering of includes --- src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index fe679c931e4ae..f45ae71789fe9 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -54,8 +54,8 @@ #include "gc/z/zThreadLocalData.hpp" #endif #if INCLUDE_SHENANDOAHGC -#include "gc/shenandoah/shenandoahThreadLocalData.hpp" #include "gc/shenandoah/shenandoahRuntime.hpp" +#include "gc/shenandoah/shenandoahThreadLocalData.hpp" #endif #define VM_STRUCTS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field) \ From c95313a9e7baa3875ee416f0b5753d14d4bb551d Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Mon, 5 May 2025 17:50:43 +0200 Subject: [PATCH 08/10] Initialize cardtable_start_address to nullptr --- src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp index b1905402b01ae..c1c21a1043fc8 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp @@ -237,6 +237,7 @@ void CompilerToVM::Data::initialize(JVMCI_TRAPS) { cardtable_start_address = base; cardtable_shift = CardTable::card_shift(); } else if (bs->is_a(BarrierSet::ShenandoahBarrierSet)) { + cardtable_start_address = nullptr; cardtable_shift = CardTable::card_shift(); } else { // No card mark barriers From 44344585557e887b784a565b90090beeca8377c4 Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Mon, 5 May 2025 18:53:07 +0200 Subject: [PATCH 09/10] Align backslashes --- src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index f45ae71789fe9..b2e2b48202c76 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -133,7 +133,7 @@ static_field(CompilerToVM::Data, sizeof_arrayOopDesc, int) \ static_field(CompilerToVM::Data, sizeof_BasicLock, int) \ ZGC_ONLY(static_field(CompilerToVM::Data, sizeof_ZStoreBarrierEntry, int)) \ - SHENANDOAHGC_ONLY(static_field(CompilerToVM::Data, shenandoah_in_cset_fast_test_addr, address)) \ + SHENANDOAHGC_ONLY(static_field(CompilerToVM::Data, shenandoah_in_cset_fast_test_addr, address)) \ SHENANDOAHGC_ONLY(static_field(CompilerToVM::Data, shenandoah_region_size_bytes_shift,int)) \ \ static_field(CompilerToVM::Data, dsin, address) \ @@ -901,13 +901,13 @@ declare_function(JVMCIRuntime::load_and_clear_exception) \ G1GC_ONLY(declare_function(JVMCIRuntime::write_barrier_pre)) \ G1GC_ONLY(declare_function(JVMCIRuntime::write_barrier_post)) \ - SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_strong)) \ - SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_strong_narrow)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_strong)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_strong_narrow)) \ SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_weak)) \ SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_weak_narrow)) \ - SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_phantom)) \ - SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_phantom_narrow)) \ - SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::pre_barrier)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_phantom)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_phantom_narrow)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::pre_barrier)) \ declare_function(JVMCIRuntime::validate_object) \ \ declare_function(JVMCIRuntime::test_deoptimize_call_int) From 41084f3ef49c5c96c7ad4a04693d3eba4c445cb8 Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Mon, 5 May 2025 22:22:19 +0200 Subject: [PATCH 10/10] Simplify pre-barrier runtime entry --- src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp | 4 ++++ src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp | 4 +--- src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp index d2a5f71bca608..97ba5012efa5f 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp @@ -48,6 +48,10 @@ JRT_LEAF(void, ShenandoahRuntime::write_ref_field_pre(oopDesc * orig, JavaThread ShenandoahBarrierSet::satb_mark_queue_set().enqueue_known_active(queue, orig); JRT_END +void ShenandoahRuntime::write_barrier_pre(oopDesc* orig) { + write_ref_field_pre(orig, JavaThread::current()); +} + JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_strong(oopDesc* src, oop* load_addr)) return ShenandoahBarrierSet::barrier_set()->load_reference_barrier_mutator(src, load_addr); JRT_END diff --git a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp index 815816055351c..0ed8959d95ecb 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp @@ -37,9 +37,7 @@ class ShenandoahRuntime : public AllStatic { static void arraycopy_barrier_narrow_oop(narrowOop* src, narrowOop* dst, size_t length); static void write_ref_field_pre(oopDesc* orig, JavaThread* thread); - static void pre_barrier(JavaThread* thread, oopDesc* orig) { - write_ref_field_pre(orig, thread); - } + static void write_barrier_pre(oopDesc* orig); static oopDesc* load_reference_barrier_strong(oopDesc* src, oop* load_addr); static oopDesc* load_reference_barrier_strong_narrow(oopDesc* src, narrowOop* load_addr); diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index b2e2b48202c76..dfc15368cf657 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -907,7 +907,7 @@ SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_weak_narrow)) \ SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_phantom)) \ SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::load_reference_barrier_phantom_narrow)) \ - SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::pre_barrier)) \ + SHENANDOAHGC_ONLY(declare_function(ShenandoahRuntime::write_barrier_pre)) \ declare_function(JVMCIRuntime::validate_object) \ \ declare_function(JVMCIRuntime::test_deoptimize_call_int)