From 93ebb198b76423b0b3a0abc41eccc93952003c93 Mon Sep 17 00:00:00 2001 From: kuenking111 Date: Tue, 16 May 2023 10:40:40 +0800 Subject: [PATCH] I73E43:CDS SignedJar.java test fails due to archived Reference object --- ...ls_due__to_archived_Reference_object.patch | 97 +++++++++++++++++++ openjdk-17.spec | 11 ++- 2 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 8284336_CDS_SignedJar_java_test_fails_due__to_archived_Reference_object.patch diff --git a/8284336_CDS_SignedJar_java_test_fails_due__to_archived_Reference_object.patch b/8284336_CDS_SignedJar_java_test_fails_due__to_archived_Reference_object.patch new file mode 100644 index 0000000..9a458d9 --- /dev/null +++ b/8284336_CDS_SignedJar_java_test_fails_due__to_archived_Reference_object.patch @@ -0,0 +1,97 @@ +diff --git a/src/hotspot/share/cds/heapShared.cpp b/src/hotspot/share/cds/heapShared.cpp +index fd3d199f8..722c7e82e 100644 +--- a/src/hotspot/share/cds/heapShared.cpp ++++ b/src/hotspot/share/cds/heapShared.cpp +@@ -171,6 +171,23 @@ void HeapShared::reset_archived_object_states(TRAPS) { + reset_states(SystemDictionary::java_platform_loader(), CHECK); + log_debug(cds)("Resetting system loader"); + reset_states(SystemDictionary::java_system_loader(), CHECK); ++ ++ // Clean up jdk.internal.loader.ClassLoaders::bootLoader(), which is not ++ // directly used for class loading, but rather is used by the core library ++ // to keep track of resources, etc, loaded by the null class loader. ++ // ++ // Note, this object is non-null, and is not the same as ++ // ClassLoaderData::the_null_class_loader_data()->class_loader(), ++ // which is null. ++ log_debug(cds)("Resetting boot loader"); ++ JavaValue result(T_OBJECT); ++ JavaCalls::call_static(&result, ++ vmClasses::jdk_internal_loader_ClassLoaders_klass(), ++ vmSymbols::bootLoader_name(), ++ vmSymbols::void_BuiltinClassLoader_signature(), ++ CHECK); ++ Handle boot_loader(THREAD, result.get_oop()); ++ reset_states(boot_loader(), CHECK); + } + + HeapShared::ArchivedObjectCache* HeapShared::_archived_object_cache = NULL; +diff --git a/src/hotspot/share/classfile/javaClasses.cpp b/src/hotspot/share/classfile/javaClasses.cpp +index 793beb479..b21ab6eb6 100644 +--- a/src/hotspot/share/classfile/javaClasses.cpp ++++ b/src/hotspot/share/classfile/javaClasses.cpp +@@ -5086,7 +5086,10 @@ bool JavaClasses::is_supported_for_archiving(oop obj) { + // constant pool entries, so excluding them shouldn't affect the archiving of static fields. + klass == vmClasses::ResolvedMethodName_klass() || + klass == vmClasses::MemberName_klass() || +- klass == vmClasses::Context_klass()) { ++ klass == vmClasses::Context_klass() || ++ // It's problematic to archive Reference objects. One of the reasons is that ++ // Reference::discovered may pull in unwanted objects (see JDK-8284336) ++ klass->is_subclass_of(vmClasses::Reference_klass())) { + return false; + } + +diff --git a/src/hotspot/share/classfile/vmSymbols.hpp b/src/hotspot/share/classfile/vmSymbols.hpp +index 79a6991b1..47f1f4119 100644 +--- a/src/hotspot/share/classfile/vmSymbols.hpp ++++ b/src/hotspot/share/classfile/vmSymbols.hpp +@@ -401,6 +401,7 @@ + template(deadChild_name, "deadChild") \ + template(getFromClass_name, "getFromClass") \ + template(dispatch_name, "dispatch") \ ++ template(bootLoader_name, "bootLoader") \ + template(getPlatformClassLoader_name, "getPlatformClassLoader") \ + template(getSystemClassLoader_name, "getSystemClassLoader") \ + template(fillInStackTrace_name, "fillInStackTrace") \ +@@ -558,6 +559,7 @@ + template(int_int_void_signature, "(II)V") \ + template(long_long_void_signature, "(JJ)V") \ + template(void_classloader_signature, "()Ljava/lang/ClassLoader;") \ ++ template(void_BuiltinClassLoader_signature, "()Ljdk/internal/loader/BuiltinClassLoader;") \ + template(void_object_signature, "()Ljava/lang/Object;") \ + template(void_class_signature, "()Ljava/lang/Class;") \ + template(void_class_array_signature, "()[Ljava/lang/Class;") \ +diff --git a/src/java.base/share/classes/java/lang/ClassLoader.java b/src/java.base/share/classes/java/lang/ClassLoader.java +index 7ad0f6191..a1c5096d9 100644 +--- a/src/java.base/share/classes/java/lang/ClassLoader.java ++++ b/src/java.base/share/classes/java/lang/ClassLoader.java +@@ -2701,7 +2701,9 @@ public abstract class ClassLoader { + * Called by the VM, during -Xshare:dump + */ + private void resetArchivedStates() { +- parallelLockMap.clear(); ++ if (parallelLockMap != null) { ++ parallelLockMap.clear(); ++ } + packages.clear(); + package2certs.clear(); + classes.clear(); +diff --git a/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java b/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java +index cd7406ac5..1f7df7900 100644 +--- a/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java ++++ b/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 2015, 2022, 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 +@@ -1083,5 +1083,6 @@ public class BuiltinClassLoader + // Called from VM only, during -Xshare:dump + private void resetArchivedStates() { + ucp = null; ++ resourceCache = null; + } + } diff --git a/openjdk-17.spec b/openjdk-17.spec index e6bd712..86387d3 100644 --- a/openjdk-17.spec +++ b/openjdk-17.spec @@ -885,7 +885,7 @@ Provides: java-src%{?1} = %{epoch}:%{version}-%{release} Name: java-%{javaver}-%{origin} Version: %{newjavaver}.%{buildver} -Release: 1 +Release: 2 # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons # and this change was brought into RHEL-4. java-1.5.0-ibm packages @@ -980,6 +980,9 @@ Patch23: Apply-TBI-barrier-patch-to-C1.patch # 17.0.6 Patch24: 8275509-ModuleDescriptor.hashCode-isn-t-reproducible.patch +# 17.0.7 +Patch25: 8284336_CDS_SignedJar_java_test_fails_due__to_archived_Reference_object.patch + BuildRequires: autoconf BuildRequires: automake BuildRequires: alsa-lib-devel @@ -1218,6 +1221,7 @@ pushd %{top_level_dir_name} %patch22 -p1 %patch23 -p1 %patch24 -p1 +%patch25 -p1 popd # openjdk # Extract systemtap tapsets @@ -1767,6 +1771,9 @@ cjc.mainProgram(arg) %changelog +* Tue May 16 2023 kuenking111 - 1:17.0.7.7-0.2 +- add 8284336_CDS_SignedJar_java_test_fails_due__to_archived_Reference_object.patch + * Fri May 12 2023 misaka00251 - 1:17.0.7.7-0.1 - Remove jdk17.0.6-ga source package @@ -1778,7 +1785,7 @@ cjc.mainProgram(arg) - modified Apply-TBI-to-ZGC-of-JDK17.patch - add jdk17.0.7-ga -* Thu Mar 27 2023 crash888 - 1:17.0.6.9-0.2 +* Mon Mar 27 2023 crash888 - 1:17.0.6.9-0.2 - add libstdc++-static and del --with-static++lib=dynamic * Thu Mar 23 2023 crash888 - 1:17.0.6.9-0.1 -- Gitee