Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package java-25-openj9 for openSUSE:Factory checked in at 2026-08-09 21:33:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/java-25-openj9 (Old) and /work/SRC/openSUSE:Factory/.java-25-openj9.new.16738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "java-25-openj9" Sun Aug 9 21:33:59 2026 rev:8 rq:1370070 version:25.0.4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/java-25-openj9/java-25-openj9.changes 2026-06-05 14:59:34.934524946 +0200 +++ /work/SRC/openSUSE:Factory/.java-25-openj9.new.16738/java-25-openj9.changes 2026-08-09 21:36:10.159937732 +0200 @@ -1,0 +2,35 @@ +Thu Aug 6 07:41:31 UTC 2026 - Bernhard Wiedemann <[email protected]> + +- Add patches for reproducible builds: + * reproducible-nls.patch + * reproducible-tracemerge-order.patch + +------------------------------------------------------------------- +Thu Aug 6 05:55:19 UTC 2026 - Fridrich Strba <[email protected]> + +- Update to OpenJDK 25.0.4 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 c53b6b93f422b77b3395a3464d5578b706e9a618.zip e4aaece3226fa3b588146d3ef3f52caa7afc3330.zip New: ---- 2e3166f7afc61f577ccaa63b85444b63b82491f7.zip 396c827fb365c53b26586f55ec09d4727b37d9be.zip b1848b62387259cc05b3705c1b6bc740dfd84134.zip omr-gcc16.patch openj9-gcc16.patch reproducible-nls.patch reproducible-tracemerge-order.patch ----------(New B)---------- 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 ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ java-25-openj9.spec ++++++ --- /var/tmp/diff_new_pack.yFkht5/_old 2026-08-09 21:36:12.624021635 +0200 +++ /var/tmp/diff_new_pack.yFkht5/_new 2026-08-09 21:36:12.628021771 +0200 @@ -35,18 +35,18 @@ # Standard JPackage naming and versioning defines. %global featurever 25 %global interimver 0 -%global updatever 3 -%global buildver 9 +%global updatever 4 +%global buildver 7 %global root_repository https://github.com/ibmruntimes/openj9-openjdk-jdk%{featurever}/archive -%global root_revision e4aaece3226fa3b588146d3ef3f52caa7afc3330 -%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 b1848b62387259cc05b3705c1b6bc740dfd84134 +%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 @@ -123,6 +123,9 @@ Patch4: openj9-openssl.patch # Fix: implicit-pointer-decl Patch5: implicit-pointer-decl.patch +# Fixes for build with gcc 16 +Patch6: omr-gcc16.patch +Patch7: openj9-gcc16.patch # Patch10: system-pcsclite.patch # @@ -132,6 +135,10 @@ # Patch31: reproducible-version.patch # +Patch32: reproducible-nls.patch +# +Patch33: reproducible-tracemerge-order.patch +# # OpenJDK specific patches # Patch300: disable-doclint-by-default.patch @@ -372,6 +379,8 @@ %patch -P 3 -p1 %patch -P 4 -p1 %patch -P 5 -p1 +%patch -P 6 -p1 +%patch -P 7 -p1 %if %{with_system_pcsc} %patch -P 10 -p1 @@ -381,6 +390,8 @@ %patch -P 30 -p1 %patch -P 31 -p1 +%patch -P 32 -p1 +%patch -P 33 -p1 %patch -P 300 -p1 @@ -408,8 +419,8 @@ # min cmake version - [email protected] export CMAKE_POLICY_VERSION_MINIMUM=3.5 -EXTRA_CFLAGS="-Wno-error -Wno-maybe-uninitialized -std=gnu99 -fno-delete-null-pointer-checks -fno-lifetime-dse" -EXTRA_CPP_FLAGS="-Wno-error -Wno-maybe-uninitialized -fno-delete-null-pointer-checks -fno-lifetime-dse" +EXTRA_CFLAGS="-Wno-error -Wno-maybe-uninitialized -std=gnu99 -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-strict-aliasing" +EXTRA_CPP_FLAGS="-Wno-error -Wno-maybe-uninitialized -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-strict-aliasing" %ifarch ppc64le EXTRA_CFLAGS="$EXTRA_CFLAGS -fno-strict-aliasing" @@ -422,17 +433,24 @@ 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)}" \ --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-libjpeg=system \ --with-giflib=system \ --with-libpng=system \ @@ -440,15 +458,7 @@ --with-lcms=system \ --with-freetype=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 -> 2e3166f7afc61f577ccaa63b85444b63b82491f7.zip ++++++ /work/SRC/openSUSE:Factory/java-25-openj9/6426f03fa087b257a7e58f363ef61526c896fea3.zip /work/SRC/openSUSE:Factory/.java-25-openj9.new.16738/2e3166f7afc61f577ccaa63b85444b63b82491f7.zip differ: char 11, line 2 ++++++ 6426f03fa087b257a7e58f363ef61526c896fea3.zip -> 396c827fb365c53b26586f55ec09d4727b37d9be.zip ++++++ /work/SRC/openSUSE:Factory/java-25-openj9/6426f03fa087b257a7e58f363ef61526c896fea3.zip /work/SRC/openSUSE:Factory/.java-25-openj9.new.16738/396c827fb365c53b26586f55ec09d4727b37d9be.zip differ: char 11, line 2 ++++++ 6426f03fa087b257a7e58f363ef61526c896fea3.zip -> b1848b62387259cc05b3705c1b6bc740dfd84134.zip ++++++ /work/SRC/openSUSE:Factory/java-25-openj9/6426f03fa087b257a7e58f363ef61526c896fea3.zip /work/SRC/openSUSE:Factory/.java-25-openj9.new.16738/b1848b62387259cc05b3705c1b6bc740dfd84134.zip differ: char 11, line 2 ++++++ 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.yFkht5/_old 2026-08-09 21:36:12.860029671 +0200 +++ /var/tmp/diff_new_pack.yFkht5/_new 2026-08-09 21:36:12.868029943 +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; }
