Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package java-17-openj9 for openSUSE:Factory 
checked in at 2026-08-09 21:34:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/java-17-openj9 (Old)
 and      /work/SRC/openSUSE:Factory/.java-17-openj9.new.16738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "java-17-openj9"

Sun Aug  9 21:34:13 2026 rev:29 rq:1370086 version:17.0.20.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/java-17-openj9/java-17-openj9.changes    
2026-06-05 14:59:06.033329709 +0200
+++ /work/SRC/openSUSE:Factory/.java-17-openj9.new.16738/java-17-openj9.changes 
2026-08-09 21:36:22.224348530 +0200
@@ -1,0 +2,36 @@
+Thu Aug  6 12:59:48 UTC 2026 - Bernhard Wiedemann <[email protected]>
+
+- Add patches for reproducible builds:
+  * reproducible-nls.patch
+  * reproducible-tracemerge-order.patch
+  * java-40y.patch
+
+-------------------------------------------------------------------
+Thu Aug  6 05:54:52 UTC 2026 - Fridrich Strba <[email protected]>
+
+- Update to OpenJDK 17.0.20 with OpenJ9 0.60.0 virtual
+  machine
+- Including Oracle July 2026 CPU changes
+  * CVE-2026-46968 (bsc#1272224), CVE-2026-46917 (bsc#1272223),
+    CVE-2026-47010 (bsc#1272225), CVE-2026-47021 (bsc#1272227),
+    CVE-2026-47027 (bsc#1272228), CVE-2026-60147 (bsc#1272237),
+    CVE-2026-47059 (bsc#1272235), CVE-2026-47063 (bsc#1272236),
+    CVE-2026-41254 (bsc#1264994)
+- OpenJ9 specific security fixes
+  * CVE-2026-16439 (bsc#1272250)
+  * CVE-2026-16441 (bsc#1272248)
+  * OpenJ9 changes, see
+    https://www.eclipse.org/openj9/docs/version0.60/
+- Modified patch:
+  * openj9-openssl.patch
+    + rebase
+- Added patches:
+  * omr-gcc16.patch
+    + remove inlining annotation that compiler cannot honour
+      and that is fatal with gcc16
+  * openj9-gcc16.patch
+    + add memory barrier between zeroing a memory by memset and
+      constructing an object into it, since gcc16 was optimizing
+      out the zeroing and OpenJ9 VM heavily relies on it
+
+-------------------------------------------------------------------

Old:
----
  6426f03fa087b257a7e58f363ef61526c896fea3.zip
  99da4a533c1e55cf380c5f720cbe3e5957d9898b.zip
  c53b6b93f422b77b3395a3464d5578b706e9a618.zip

New:
----
  16ed2938c6e109d33decb5b780b467c76ee7f23f.zip
  2e3166f7afc61f577ccaa63b85444b63b82491f7.zip
  396c827fb365c53b26586f55ec09d4727b37d9be.zip
  java-40y.patch
  omr-gcc16.patch
  openj9-gcc16.patch
  reproducible-nls.patch
  reproducible-tracemerge-order.patch

----------(New B)----------
  New:  * reproducible-tracemerge-order.patch
  * java-40y.patch
  New:- Added patches:
  * omr-gcc16.patch
    + remove inlining annotation that compiler cannot honour
  New:      and that is fatal with gcc16
  * openj9-gcc16.patch
    + add memory barrier between zeroing a memory by memset and
  New:- Add patches for reproducible builds:
  * reproducible-nls.patch
  * reproducible-tracemerge-order.patch
  New:  * reproducible-nls.patch
  * reproducible-tracemerge-order.patch
  * java-40y.patch
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ java-17-openj9.spec ++++++
--- /var/tmp/diff_new_pack.qt3V5T/_old  2026-08-09 21:36:26.972510206 +0200
+++ /var/tmp/diff_new_pack.qt3V5T/_new  2026-08-09 21:36:26.992510887 +0200
@@ -35,18 +35,18 @@
 # Standard JPackage naming and versioning defines.
 %global featurever      17
 %global interimver      0
-%global updatever       19
-%global buildver        10
+%global updatever       20
+%global buildver        8
 %global root_repository 
https://github.com/ibmruntimes/openj9-openjdk-jdk17/archive
-%global root_revision   99da4a533c1e55cf380c5f720cbe3e5957d9898b
-%global root_branch     v0.59.0-release
-%global omr_repository  https://github.com/eclipse/openj9-omr/archive
-%global omr_revision    6426f03fa087b257a7e58f363ef61526c896fea3
-%global omr_branch      v0.59.0-release
-%global openj9_repository https://github.com/eclipse/openj9/archive
-%global openj9_revision c53b6b93f422b77b3395a3464d5578b706e9a618
-%global openj9_branch   v0.59.0-release
-%global openj9_tag      openj9-0.59.0
+%global root_revision   16ed2938c6e109d33decb5b780b467c76ee7f23f
+%global root_branch     v0.60.0-release
+%global omr_repository  https://github.com/eclipse-openj9/openj9-omr/archive
+%global omr_revision    2e3166f7afc61f577ccaa63b85444b63b82491f7
+%global omr_branch      v0.60.0-release
+%global openj9_repository https://github.com/eclipse-openj9/openj9/archive
+%global openj9_revision 396c827fb365c53b26586f55ec09d4727b37d9be
+%global openj9_branch   v0.60.0-release
+%global openj9_tag      openj9-0.60.0
 %if 0%{?suse_version} > 1500
 %bcond_without libalternatives
 %else
@@ -127,6 +127,9 @@
 Patch5:         implicit-pointer-decl.patch
 #
 Patch6:         reproducible-version.patch
+# Fixes for build with gcc 16
+Patch7:         omr-gcc16.patch
+Patch8:         openj9-gcc16.patch
 #
 Patch10:        system-pcsclite.patch
 #
@@ -134,6 +137,12 @@
 #
 Patch30:        aarch64.patch
 #
+Patch32:        reproducible-nls.patch
+#
+Patch33:        reproducible-tracemerge-order.patch
+#
+Patch34:        java-40y.patch
+#
 # OpenJDK specific patches
 #
 Patch300:       disable-doclint-by-default.patch
@@ -374,6 +383,8 @@
 %patch -P 4 -p1
 %patch -P 5 -p1
 %patch -P 6 -p1
+%patch -P 7 -p1
+%patch -P 8 -p1
 
 %if %{with_system_pcsc}
 %patch -P 10 -p1
@@ -382,6 +393,9 @@
 %patch -P 20 -p1
 
 %patch -P 30 -p1
+%patch -P 32 -p1
+%patch -P 33 -p1
+%patch -P 34 -p1
 
 %patch -P 300 -p1
 
@@ -423,32 +437,32 @@
     CC=gcc-%{with_gcc} \
     NM=gcc-nm-%{with_gcc} \
 %endif
+%if %{with_system_pcsc}
+    --with-pcsclite=system \
+%endif
+%if %{with_system_harfbuzz}
+    --with-harfbuzz=system \
+%endif
     --with-extra-cflags="$EXTRA_CFLAGS" \
     --with-extra-cxxflags="$EXTRA_CPP_FLAGS" \
     --with-version-pre="" \
     --with-version-opt="suse-0%{?suse_version}-%{_arch}" \
+    --with-debug-level=%{debugbuild} \
+    --with-conf-name=%{debugbuild} \
+    --with-source-date="${SOURCE_DATE_EPOCH:-$(date +%%s)}" \
+    --enable-reproducible-build \
     --disable-warnings-as-errors \
     --disable-warnings-as-errors-omr \
     --disable-warnings-as-errors-openj9 \
     --disable-keep-packaged-modules \
     --enable-jfr \
-    --with-debug-level=%{debugbuild} \
-    --with-conf-name=%{debugbuild} \
     --with-zlib=system \
     --with-libjpeg=system \
     --with-giflib=system \
     --with-libpng=system \
     --with-lcms=system \
        --with-openssl=system \
-%if %{with_system_pcsc}
-    --with-pcsclite=system \
-%endif
-%if %{with_system_harfbuzz}
-    --with-harfbuzz=system \
-%endif
     --with-stdc++lib=dynamic \
-    --with-extra-cxxflags="$EXTRA_CPP_FLAGS" \
-    --with-extra-cflags="$EXTRA_CFLAGS" \
     --disable-javac-server \
     --enable-demos
 

++++++ 6426f03fa087b257a7e58f363ef61526c896fea3.zip -> 
16ed2938c6e109d33decb5b780b467c76ee7f23f.zip ++++++
/work/SRC/openSUSE:Factory/java-17-openj9/6426f03fa087b257a7e58f363ef61526c896fea3.zip
 
/work/SRC/openSUSE:Factory/.java-17-openj9.new.16738/16ed2938c6e109d33decb5b780b467c76ee7f23f.zip
 differ: char 11, line 2

++++++ 6426f03fa087b257a7e58f363ef61526c896fea3.zip -> 
2e3166f7afc61f577ccaa63b85444b63b82491f7.zip ++++++
/work/SRC/openSUSE:Factory/java-17-openj9/6426f03fa087b257a7e58f363ef61526c896fea3.zip
 
/work/SRC/openSUSE:Factory/.java-17-openj9.new.16738/2e3166f7afc61f577ccaa63b85444b63b82491f7.zip
 differ: char 11, line 2

++++++ 6426f03fa087b257a7e58f363ef61526c896fea3.zip -> 
396c827fb365c53b26586f55ec09d4727b37d9be.zip ++++++
/work/SRC/openSUSE:Factory/java-17-openj9/6426f03fa087b257a7e58f363ef61526c896fea3.zip
 
/work/SRC/openSUSE:Factory/.java-17-openj9.new.16738/396c827fb365c53b26586f55ec09d4727b37d9be.zip
 differ: char 11, line 2

++++++ java-40y.patch ++++++
# Widen the currency cut-over sanity check from 10 to 40 years
#
# GenerateCurrencyData rejects any special-case cut-over time that is more
# than 10 years away from the current time. That guard is about catching
# typos in CurrencyData.properties, but it also makes the build fail when it
# is run with a clock far from the data's epoch - which is what happens when
# testing reproducibility with a shifted clock, and will happen anyway as
# the data ages.
#
# Same change as java-40y.patch carries for java-17-openjdk.
#

diff --git 
a/openjdk/jdk/make/src/classes/build/tools/generatecurrencydata/GenerateCurrencyData.java
 
b/openjdk/jdk/make/src/classes/build/tools/generatecurrencydata/GenerateCurrencyData.java
index d599d9744fd..b544701fe66 100644
--- 
./make/jdk/src/classes/build/tools/generatecurrencydata/GenerateCurrencyData.java
+++ 
./make/jdk/src/classes/build/tools/generatecurrencydata/GenerateCurrencyData.java
@@ -283,8 +283,8 @@ public class GenerateCurrencyData {
             checkCurrencyCode(newCurrency);
             String timeString = currencyInfo.substring(4, length - 4);
             long time = format.parse(timeString).getTime();
-            if (Math.abs(time - System.currentTimeMillis()) > ((long) 10) * 
365 * 24 * 60 * 60 * 1000) {
-                throw new RuntimeException("time is more than 10 years from 
present: " + time);
+            if (Math.abs(time - System.currentTimeMillis()) > ((long) 40) * 
365 * 24 * 60 * 60 * 1000) {
+                throw new RuntimeException("time is more than 40 years from 
present: " + time);
             }
             specialCaseCutOverTimes[specialCaseCount] = time;
             specialCaseOldCurrencies[specialCaseCount] = oldCurrency;

++++++ omr-gcc16.patch ++++++
--- a/omr/gc/base/MemorySubSpaceGenerational.hpp
+++ b/omr/gc/base/MemorySubSpaceGenerational.hpp
@@ -107,7 +107,7 @@ class MM_MemorySubSpaceGenerational : public 
MM_MemorySubSpace
 
        virtual uintptr_t releaseFreeMemoryPages(MM_EnvironmentBase* env, 
uintptr_t memoryType);
 
-       virtual MMINLINE uintptr_t getContractionSize() const { return 
_memorySubSpaceOld->getContractionSize(); }
+       virtual uintptr_t getContractionSize() const { return 
_memorySubSpaceOld->getContractionSize(); }
 
        /**
         * Create a MemorySubSpaceGenerational object.

++++++ openj9-gcc16.patch ++++++
--- a/openj9/runtime/compiler/control/CompilationThread.cpp
+++ b/openj9/runtime/compiler/control/CompilationThread.cpp
@@ -778,6 +778,7 @@ bool TR::CompilationInfo::createCompilationInfo(J9JITConfig 
*jitConfig)
         /* Note: there are embedded objects in TR::CompilationInfo that rely 
on the fact
            that we do memset this object to 0 */
         memset(alloc, 0, sizeof(TR::CompilationInfo));
+        __asm__("" : : : "memory");
         _compilationRuntime = new (alloc) TR::CompilationInfo(jitConfig);
         jitConfig->compilationRuntime = (void *)_compilationRuntime;
 #ifdef DEBUG

++++++ openj9-openssl.patch ++++++
--- /var/tmp/diff_new_pack.qt3V5T/_old  2026-08-09 21:36:28.116549161 +0200
+++ /var/tmp/diff_new_pack.qt3V5T/_new  2026-08-09 21:36:28.124549434 +0200
@@ -8,7 +8,7 @@
 +#define SSL_R_UNEXPECTED_EOF_WHILE_READING 294
 +#endif
 +
- static bool
- handleOpenSSLConnectionError(int connfd, SSL *&ssl, BIO *&bio, const char 
*errMsg, int ret, TR::CompilationInfo *compInfo)
-    {
+ static bool handleOpenSSLConnectionError(int connfd, SSL *&ssl, BIO *&bio, 
const char *errMsg, int ret,
+     TR::CompilationInfo *compInfo)
+ {
 

++++++ reproducible-nls.patch ++++++
diff --git a/openj9/sourcetools/j9nls/com/ibm/oti/NLSTool/J9NLS.java 
b/openj9/sourcetools/j9nls/com/ibm/oti/NLSTool/J9NLS.java
index 25aa5c221..2fea566e0 100644
--- a/openj9/sourcetools/j9nls/com/ibm/oti/NLSTool/J9NLS.java
+++ b/openj9/sourcetools/j9nls/com/ibm/oti/NLSTool/J9NLS.java
@@ -22,6 +22,7 @@
 package com.ibm.oti.NLSTool;
 
 import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -291,8 +292,8 @@ public class J9NLS implements NLSConstants {
                        } else {
                                        String fileName = 
getNameWithLocale(outFileName, locale);
                                        if 
(propertiesDifferentFromCopyOnDisk(fileName)) {
-                                               out = new 
FileOutputStream(fileName);   
-                                               outputProperties.store(out, 
null);
+                                               out = new 
FileOutputStream(fileName);
+                                               storeOutputProperties(out);
                                                out.flush();
                                                dp("** Generated " + fileName + 
"\n");
                                                totalPropertiesFilesCreated++;
@@ -308,6 +309,22 @@ public class J9NLS implements NLSConstants {
                }
        }
 
+       /**
+        * Writes the generated properties, dropping the leading comment line in
+        * which Properties.store() records the current time: it would make the
+        * generated files differ between otherwise identical builds.
+        *
+        * @param out
+        * @throws IOException
+        */
+       private void storeOutputProperties(OutputStream out) throws IOException 
{
+               ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+               outputProperties.store(buffer, null);
+               /* Properties.store(OutputStream, String) writes ISO 8859-1. */
+               String stored = buffer.toString("ISO-8859-1");
+               out.write(stored.substring(stored.indexOf('\n') + 
1).getBytes("ISO-8859-1"));
+       }
+
        private MsgInfo createMsgInfo(String macro, String key, String msg, 
Properties nlsProperties) {
                MsgInfo msgInfo = new MsgInfo();
                msgInfo.setMacro(macro);

++++++ reproducible-tracemerge-order.patch ++++++
diff --git a/omr/tools/tracegen/FileUtils.cpp b/omr/tools/tracegen/FileUtils.cpp
index 7db9723f8..b015970fb 100644
--- a/omr/tools/tracegen/FileUtils.cpp
+++ b/omr/tools/tracegen/FileUtils.cpp
@@ -120,44 +120,106 @@ FileUtils::getMtime(const char *filePath)
        return statbuf.st_mtime;
 }
 
+/*
+ * Compare two directory entry names. strcmp() is used rather than strcoll()
+ * so that the ordering is a plain byte comparison, and hence does not depend
+ * on the locale the build happens to run in.
+ */
+static int
+compareEntryNames(const void *left, const void *right)
+{
+       return strcmp(*(const char *const *)left, *(const char *const *)right);
+}
+
+static void
+freeEntryNames(char ***entries, size_t entryCount)
+{
+       if (NULL != *entries) {
+               size_t index = 0;
+               for (index = 0; index < entryCount; index += 1) {
+                       Port::omrmem_free((void **)&(*entries)[index]);
+               }
+               Port::omrmem_free((void **)entries);
+       }
+}
+
 RCType
 FileUtils::visitDirectory(J9TDFOptions *options, const char *dirName, const 
char *fileExtFilter, void *targetObject, VisitFileCallBack callback)
 {
        char *resultBuffer = NULL;
        RCType rc = RC_OK;
        intptr_t handle = PORT_INVALID_FIND_FILE_HANDLE;
+       char **entries = NULL;
+       size_t entryCount = 0;
+       size_t entryCapacity = 0;
+       size_t index = 0;
 
        rc = Port::omrfile_findfirst(dirName, &resultBuffer, &handle);
        if (RC_OK != rc) {
                printError("Failed to open directory %s\n", dirName);
-               goto failed;
+               /* findfirst leaves no handle open when it fails, so there is 
nothing to close. */
+               return RC_FAILED;
        }
 
+       /*
+        * Collect the entries before visiting any of them. The order in which 
the
+        * filesystem reports directory entries is not stable, and that order 
used
+        * to reach the merged trace data, so otherwise identical builds 
produced
+        * different output.
+        */
        while (RC_FAILED != rc) {
-               char *nextEntry = NULL;
-               size_t nextEntrySize = 0;
                /* skip current and parent dir */
                if ((0 == strcmp(resultBuffer, ".")) || (0 == 
strcmp(resultBuffer, ".."))) {
-                       goto next;
+                       Port::omrmem_free((void **)&resultBuffer);
+               } else {
+                       if (entryCount == entryCapacity) {
+                               size_t newCapacity = (0 == entryCapacity) ? 16 
: (entryCapacity * 2);
+                               char **newEntries = (char 
**)Port::omrmem_calloc(newCapacity, sizeof(char *));
+                               if (NULL == newEntries) {
+                                       goto failed;
+                               }
+                               if (NULL != entries) {
+                                       memcpy(newEntries, entries, entryCount 
* sizeof(char *));
+                                       Port::omrmem_free((void **)&entries);
+                               }
+                               entries = newEntries;
+                               entryCapacity = newCapacity;
+                       }
+                       /* the array takes ownership of the name allocated by 
findfirst/findnext */
+                       entries[entryCount] = resultBuffer;
+                       entryCount += 1;
+                       resultBuffer = NULL;
                }
+               rc = Port::omrfile_findnext(handle, &resultBuffer);
+       }
+       Port::omrfile_findclose(handle);
+       handle = PORT_INVALID_FIND_FILE_HANDLE;
+
+       if (0 != entryCount) {
+               qsort(entries, entryCount, sizeof(char *), compareEntryNames);
+       }
+
+       for (index = 0; index < entryCount; index += 1) {
+               const char *entryName = entries[index];
+               size_t nextEntrySize = strlen(dirName) + strlen(PATH_SEP) + 
strlen(entryName) + 1;
+               char *nextEntry = (char *)Port::omrmem_calloc(1, nextEntrySize);
+               struct J9FileStat buf;
 
-               nextEntrySize = strlen(dirName) + 1 /* PATH_SEP */ + 
strlen(resultBuffer) + 1;
-               nextEntry = (char *)Port::omrmem_calloc(1, nextEntrySize);
                if (NULL == nextEntry) {
                        goto failed;
                }
-               snprintf(nextEntry, nextEntrySize, "%s" PATH_SEP "%s", dirName, 
resultBuffer);
+               snprintf(nextEntry, nextEntrySize, "%s" PATH_SEP "%s", dirName, 
entryName);
 
-               struct J9FileStat buf;
                if (RC_OK != Port::omrfile_stat(nextEntry, 0, &buf)) {
                        if (options->statErrorsAreFatal) {
                                printError("stat failed %s\n", nextEntry);
+                               Port::omrmem_free((void **)&nextEntry);
                                goto failed;
                        }
                } else if (buf.isDir) {
                        visitDirectory(options, nextEntry, fileExtFilter, 
targetObject, callback);
                } else {
-                       const char *ext = FileUtils::getFileExt(resultBuffer);
+                       const char *ext = FileUtils::getFileExt(entryName);
                        if (NULL != ext) {
                                if (0 == strcmp(ext, fileExtFilter)) {
                                        callback(targetObject, options, 
nextEntry);
@@ -165,17 +227,17 @@ FileUtils::visitDirectory(J9TDFOptions *options, const 
char *dirName, const char
                        }
                }
                Port::omrmem_free((void **)&nextEntry);
-next:
-               Port::omrmem_free((void **)&resultBuffer);
-               rc = Port::omrfile_findnext(handle, &resultBuffer);
        }
-       Port::omrfile_findclose(handle);
 
+       freeEntryNames(&entries, entryCount);
        return RC_OK;
 
 failed:
-       Port::omrfile_findclose(handle);
+       if (PORT_INVALID_FIND_FILE_HANDLE != handle) {
+               Port::omrfile_findclose(handle);
+       }
        Port::omrmem_free((void **)&resultBuffer);
+       freeEntryNames(&entries, entryCount);
        return RC_FAILED;
 }
 

Reply via email to