changeset 2968:9c238b325a8f

Bump aarch32 to jdk8u272-b04-aarch32-20200821. Upstream changes: - JDK-8006205: [TESTBUG] NEED_TEST: please JTREGIFY test/compiler/7177917/Test7177917.java - JDK-8023697: failed class resolution reports different class name in detail message for the first and subsequent times - JDK-8035493: JVMTI PopFrame capability must instruct compilers not to prune locals - JDK-8046274: Removing dependency on jakarta-regexp - JDK-8048933: -XX:+TraceExceptions output should include the message - JDK-8061616: HotspotDiagnosticMXBean.getVMOption() throws IllegalArgumentException for flags of type double - JDK-8076475: Misuses of strncpy/strncat - JDK-8146612: C2: Precedence edges specification violated - JDK-8148754: C2 loop unrolling fails due to unexpected graph shape - JDK-8148854: Class names "SomeClass" and "LSomeClass;" treated by JVM as an equivalent - JDK-8150986: serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java failing because expects HPROF JAVA PROFILE 1.0.1 file format - JDK-8153583: Make OutputAnalyzer.reportDiagnosticSummary public - JDK-8167300: Scheduling failures during gcm should be fatal - JDK-8173300: [TESTBUG]compiler/tiered/NonTieredLevelsTest.java fails with compiler.whitebox.SimpleTestCaseHelper(int) must be compiled - JDK-8177334: Update xmldsig implementation to Apache Santuario 2.1.1 - JDK-8196969: JTreg Failure: serviceability/sa/ClhsdbJstack.java causes NPE - JDK-8211714: Need to update vm_version.cpp to recognise VS2017 minor versions - JDK-8214862: assert(proj != __null) at compile.cpp:3251 - JDK-8216283: Allow shorter method sampling interval than 10 ms - JDK-8217647: JFR: recordings on 32-bit systems unreadable - JDK-8219566: JFR did not collect call stacks when MaxJavaStackTraceDepth is set to zero - JDK-8220293: Deadlock in JFR string pool - JDK-8230303: JDB hangs when running monitor command - JDK-8230597: Update GIFlib library to the 5.2.1 - JDK-8230711: ConnectionGraph::unique_java_object(Node* N) return NULL if n is not in the CG - JDK-8231779: crash HeapWord*ParallelScavengeHeap::failed_mem_allocate - JDK-8233197: Invert JvmtiExport::post_vm_initialized() and Jfr:on_vm_start() start-up order for correct option parsing - JDK-8234617: C1: Incorrect result of field load due to missing narrowing conversion - JDK-8235243: handle VS2017 15.9 and VS2019 in abstract_vm_version - JDK-8235325: build failure on Linux after 8235243 - JDK-8237951: CTW: C2 compilation fails with "malformed control flow" - JDK-8239852: java/util/concurrent tests fail with -XX:+VerifyGraphEdges: assert(!VerifyGraphEdges) failed: verification should have failed - JDK-8240295: hs_err elapsed time in seconds is not accurate enough - JDK-8240576: JVM crashes after transformation in C2 IdealLoopTree::merge_many_backedges - JDK-8243489: Thread CPU Load event may contain wrong data for CPU time under certain conditions - JDK-8244407: JVM crashes after transformation in C2 IdealLoopTree::split_fall_in - JDK-8244548: JDK 8u: sun.misc.Version.jdkUpdateVersion() returns wrong result - JDK-8244777: ClassLoaderStats VM Op uses constant hash value - JDK-8245167: Top package in method profiling shows null in JMC - JDK-8246310: Clean commented-out code about ModuleEntry andPackageEntry in JFR - JDK-8246703: [TESTBUG] Add test for JDK-8233197 - JDK-8248643: Remove extra leading space in JDK-8240295 8u backport - JDK-8248851: CMS: Missing memory fences between free chunk check and klass read - JDK-8250875: Incorrect parameter type for update_number in JDK_Version::jdk_update ChangeLog: 2020-10-21 Andrew John Hughes <gnu_andrew@member.fsf.org> Bump aarch32 to jdk8u272-b04-aarch32-20200821. * NEWS: Updated. * hotspot.map.in: Bump aarch32 to jdk8u272-b04-aarch32-20200821. * patches/hotspot/aarch32/8076475-pr3696.patch: Replace with symlinks to Shenandoah versions now both are again based on the same upstream 8u version.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Thu, 22 Oct 2020 03:44:34 +0100
parents 7e0780d57319
children 3b6a1e8f4e00
files ChangeLog NEWS hotspot.map.in patches/hotspot/aarch32/8076475-pr3696.patch
diffstat 4 files changed, 56 insertions(+), 262 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Oct 21 19:16:00 2020 +0100
+++ b/ChangeLog	Thu Oct 22 03:44:34 2020 +0100
@@ -1,3 +1,13 @@
+2020-10-21  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+
+	Bump aarch32 to jdk8u272-b04-aarch32-20200821.
+	* NEWS: Updated.
+	* hotspot.map.in: Bump aarch32 to
+	jdk8u272-b04-aarch32-20200821.
+	* patches/hotspot/aarch32/8076475-pr3696.patch:
+	Replace with symlinks to Shenandoah versions now
+	both are again based on the same upstream 8u version.
+
 2020-10-20  Andrew John Hughes  <gnu_andrew@member.fsf.org>
 
 	Bump shenandoah to aarch64-shenandoah-jdk8u272-b04.
--- a/NEWS	Wed Oct 21 19:16:00 2020 +0100
+++ b/NEWS	Thu Oct 22 03:44:34 2020 +0100
@@ -312,7 +312,51 @@
   - JDK-8199712, PR3797: [AArch64] Flight Recorder
   - JDK-8215961, PR3797: jdk/jfr/event/os/TestCPUInformation.java fails on AArch64
 * AArch32 port
+  - JDK-8006205: [TESTBUG] NEED_TEST: please JTREGIFY test/compiler/7177917/Test7177917.java
+  - JDK-8023697: failed class resolution reports different class name in detail message for the first and subsequent times
+  - JDK-8035493: JVMTI PopFrame capability must instruct compilers not to prune locals
+  - JDK-8046274: Removing dependency on jakarta-regexp
+  - JDK-8048933: -XX:+TraceExceptions output should include the message
+  - JDK-8061616: HotspotDiagnosticMXBean.getVMOption() throws IllegalArgumentException for flags of type double
+  - JDK-8076475: Misuses of strncpy/strncat
+  - JDK-8146612: C2: Precedence edges specification violated
+  - JDK-8148754: C2 loop unrolling fails due to unexpected graph shape
+  - JDK-8148854: Class names "SomeClass" and "LSomeClass;" treated by JVM as an equivalent
+  - JDK-8150986: serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java failing because expects HPROF JAVA PROFILE 1.0.1 file format
   - JDK-8152358, PR3800: code and comment cleanups found during the hunt for 8077392
+  - JDK-8153583: Make OutputAnalyzer.reportDiagnosticSummary public
+  - JDK-8167300: Scheduling failures during gcm should be fatal
+  - JDK-8173300: [TESTBUG]compiler/tiered/NonTieredLevelsTest.java fails with compiler.whitebox.SimpleTestCaseHelper(int) must be compiled
+  - JDK-8177334: Update xmldsig implementation to Apache Santuario 2.1.1
+  - JDK-8196969: JTreg Failure: serviceability/sa/ClhsdbJstack.java causes NPE
+  - JDK-8211714: Need to update vm_version.cpp to recognise VS2017 minor versions
+  - JDK-8214862: assert(proj != __null) at compile.cpp:3251
+  - JDK-8216283: Allow shorter method sampling interval than 10 ms
+  - JDK-8217647: JFR: recordings on 32-bit systems unreadable
+  - JDK-8219566: JFR did not collect call stacks when MaxJavaStackTraceDepth is set to zero
+  - JDK-8220293: Deadlock in JFR string pool
+  - JDK-8230303: JDB hangs when running monitor command
+  - JDK-8230597: Update GIFlib library to the 5.2.1
+  - JDK-8230711: ConnectionGraph::unique_java_object(Node* N) return NULL if n is not in the CG
+  - JDK-8231779: crash HeapWord*ParallelScavengeHeap::failed_mem_allocate
+  - JDK-8233197: Invert JvmtiExport::post_vm_initialized() and Jfr:on_vm_start() start-up order for correct option parsing
+  - JDK-8234617: C1: Incorrect result of field load due to missing narrowing conversion
+  - JDK-8235243: handle VS2017 15.9 and VS2019 in abstract_vm_version
+  - JDK-8235325: build failure on Linux after 8235243
+  - JDK-8237951: CTW: C2 compilation fails with "malformed control flow"
+  - JDK-8239852: java/util/concurrent tests fail with -XX:+VerifyGraphEdges: assert(!VerifyGraphEdges) failed: verification should have failed
+  - JDK-8240295: hs_err elapsed time in seconds is not accurate enough
+  - JDK-8240576: JVM crashes after transformation in C2 IdealLoopTree::merge_many_backedges
+  - JDK-8243489: Thread CPU Load event may contain wrong data for CPU time under certain conditions
+  - JDK-8244407: JVM crashes after transformation in C2 IdealLoopTree::split_fall_in
+  - JDK-8244548: JDK 8u: sun.misc.Version.jdkUpdateVersion() returns wrong result
+  - JDK-8244777: ClassLoaderStats VM Op uses constant hash value
+  - JDK-8245167: Top package in method profiling shows null in JMC
+  - JDK-8246310: Clean commented-out code about ModuleEntry andPackageEntry in JFR
+  - JDK-8246703: [TESTBUG] Add test for JDK-8233197
+  - JDK-8248643: Remove extra leading space in JDK-8240295 8u backport
+  - JDK-8248851: CMS: Missing memory fences between free chunk check and klass read
+  - JDK-8250875: Incorrect parameter type for update_number in JDK_Version::jdk_update
   - PR3798: Fix format-overflow error on GCC 10, caused by passing NULL to a '%s' directive
 
 New in release 3.16.0 (2020-05-02):
--- a/hotspot.map.in	Wed Oct 21 19:16:00 2020 +0100
+++ b/hotspot.map.in	Thu Oct 22 03:44:34 2020 +0100
@@ -1,4 +1,4 @@
 # version type(drop/hg) url changeset sha256sum
 default drop https://icedtea.classpath.org/download/drops/icedtea8/@ICEDTEA_RELEASE@ 88961de57e43 5aa5045f0489e67e525b0ea88debee9e2a7db89291c2dfb0a52b7d23492b1b99
 shenandoah drop https://icedtea.classpath.org/download/drops/icedtea8/@ICEDTEA_RELEASE@ f9a4ff26a4bd 12a4c7c306d6ba24cc9a197b3625b25661214d5ac167ec0dba972823d5035fd2
-aarch32 drop https://icedtea.classpath.org/download/drops/icedtea8/@ICEDTEA_RELEASE@ 104a5c7f735e 642ece375346300cf11dce79dfb9ac3d5ac470bc68246ccf6fdcde7a495dc73b
+aarch32 drop https://icedtea.classpath.org/download/drops/icedtea8/@ICEDTEA_RELEASE@ f700065950de 4f24a61e3422be5cb406bdcf3391a89f50f3f097f444bebf79b2057f80f14e6d
--- a/patches/hotspot/aarch32/8076475-pr3696.patch	Wed Oct 21 19:16:00 2020 +0100
+++ b/patches/hotspot/aarch32/8076475-pr3696.patch	Thu Oct 22 03:44:34 2020 +0100
@@ -1,261 +1,1 @@
-# HG changeset patch
-# User stuefe
-# Date 1549941248 0
-#      Tue Feb 12 03:14:08 2019 +0000
-# Node ID 9bbf02572dc114e85829673a7cdaffa482115f42
-# Parent  cfb34db6589e222d34e5b736b99ed4f69c261c4f
-8076475, PR3696: Misuses of strncpy/strncat
-Summary: Various small fixes around strncpy and strncat
-Reviewed-by: dsamersoff, coleenp
-
-diff -Nru openjdk.orig/hotspot/agent/src/os/bsd/libproc_impl.c openjdk/hotspot/agent/src/os/bsd/libproc_impl.c
---- openjdk.orig/hotspot/agent/src/os/bsd/libproc_impl.c	2019-04-05 19:21:24.000000000 +0100
-+++ openjdk/hotspot/agent/src/os/bsd/libproc_impl.c	2019-04-16 16:05:31.441511929 +0100
-@@ -215,7 +215,12 @@
-     return NULL;
-   }
- 
--  strncpy(newlib->name, libname, sizeof(newlib->name));
-+  if (strlen(libname) >= sizeof(newlib->name)) {
-+    print_debug("libname %s too long\n", libname);
-+    return NULL;
-+  }
-+  strcpy(newlib->name, libname);
-+
-   newlib->base = base;
- 
-   if (fd == -1) {
-diff -Nru openjdk.orig/hotspot/agent/src/os/linux/libproc_impl.c openjdk/hotspot/agent/src/os/linux/libproc_impl.c
---- openjdk.orig/hotspot/agent/src/os/linux/libproc_impl.c	2019-04-05 19:21:24.000000000 +0100
-+++ openjdk/hotspot/agent/src/os/linux/libproc_impl.c	2019-04-16 16:05:31.441511929 +0100
-@@ -162,7 +162,12 @@
-       return NULL;
-    }
- 
--   strncpy(newlib->name, libname, sizeof(newlib->name));
-+   if (strlen(libname) >= sizeof(newlib->name)) {
-+     print_debug("libname %s too long\n", libname);
-+     return NULL;
-+   }
-+   strcpy(newlib->name, libname);
-+
-    newlib->base = base;
- 
-    if (fd == -1) {
-diff -Nru openjdk.orig/hotspot/src/os/bsd/dtrace/libjvm_db.c openjdk/hotspot/src/os/bsd/dtrace/libjvm_db.c
---- openjdk.orig/hotspot/src/os/bsd/dtrace/libjvm_db.c	2019-04-05 19:21:24.000000000 +0100
-+++ openjdk/hotspot/src/os/bsd/dtrace/libjvm_db.c	2019-04-16 16:05:31.441511929 +0100
-@@ -543,13 +543,14 @@
-   CHECK_FAIL(err);
- 
-   result[0] = '\0';
--  strncat(result, klassString, size);
--  size -= strlen(klassString);
--  strncat(result, ".", size);
--  size -= 1;
--  strncat(result, nameString, size);
--  size -= strlen(nameString);
--  strncat(result, signatureString, size);
-+  if (snprintf(result, size,
-+    "%s.%s%s",
-+    klassString,
-+    nameString,
-+    signatureString) >= size) {
-+    // truncation
-+    goto fail;
-+  }
- 
-   if (nameString != NULL) free(nameString);
-   if (klassString != NULL) free(klassString);
-@@ -1056,9 +1057,9 @@
-       CHECK_FAIL(err);
-   }
-   if (deoptimized) {
--    strncat(result + 1, " [deoptimized frame]; ", size-1);
-+    strncat(result, " [deoptimized frame]; ", size - strlen(result) - 1);
-   } else {
--    strncat(result + 1, " [compiled] ", size-1);
-+    strncat(result, " [compiled] ", size - strlen(result) - 1);
-   }
-   if (debug)
-       fprintf(stderr, "name_for_nmethod: END: method name: %s, vf_cnt: %d\n\n",
-diff -Nru openjdk.orig/hotspot/src/os/bsd/vm/decoder_machO.cpp openjdk/hotspot/src/os/bsd/vm/decoder_machO.cpp
---- openjdk.orig/hotspot/src/os/bsd/vm/decoder_machO.cpp	2019-04-05 19:21:24.000000000 +0100
-+++ openjdk/hotspot/src/os/bsd/vm/decoder_machO.cpp	2019-04-16 16:05:31.441511929 +0100
-@@ -97,6 +97,7 @@
-   char * symname = mach_find_in_stringtable((char*) ((uintptr_t)mach_base + stroff), strsize, found_strx);
-   if (symname) {
-       strncpy(buf, symname, buflen);
-+      buf[buflen - 1] = '\0';
-       return true;
-   }
-   DEBUG_ONLY(tty->print_cr("no string or null string found."));
-diff -Nru openjdk.orig/hotspot/src/os/solaris/dtrace/libjvm_db.c openjdk/hotspot/src/os/solaris/dtrace/libjvm_db.c
---- openjdk.orig/hotspot/src/os/solaris/dtrace/libjvm_db.c	2019-04-05 19:21:24.000000000 +0100
-+++ openjdk/hotspot/src/os/solaris/dtrace/libjvm_db.c	2019-04-16 16:05:31.441511929 +0100
-@@ -543,13 +543,14 @@
-   CHECK_FAIL(err);
- 
-   result[0] = '\0';
--  strncat(result, klassString, size);
--  size -= strlen(klassString);
--  strncat(result, ".", size);
--  size -= 1;
--  strncat(result, nameString, size);
--  size -= strlen(nameString);
--  strncat(result, signatureString, size);
-+  if (snprintf(result, size,
-+    "%s.%s%s",
-+    klassString,
-+    nameString,
-+    signatureString) >= size) {
-+    // truncation
-+    goto fail;
-+  }
- 
-   if (nameString != NULL) free(nameString);
-   if (klassString != NULL) free(klassString);
-@@ -1056,9 +1057,9 @@
-       CHECK_FAIL(err);
-   }
-   if (deoptimized) {
--    strncat(result + 1, " [deoptimized frame]; ", size-1);
-+    strncat(result, " [deoptimized frame]; ", size - strlen(result) - 1);
-   } else {
--    strncat(result + 1, " [compiled] ", size-1);
-+    strncat(result, " [compiled] ", size - strlen(result) - 1);
-   }
-   if (debug)
-       fprintf(stderr, "name_for_nmethod: END: method name: %s, vf_cnt: %d\n\n",
-diff -Nru openjdk.orig/hotspot/src/share/tools/hsdis/hsdis.c openjdk/hotspot/src/share/tools/hsdis/hsdis.c
---- openjdk.orig/hotspot/src/share/tools/hsdis/hsdis.c	2019-04-05 19:21:24.000000000 +0100
-+++ openjdk/hotspot/src/share/tools/hsdis/hsdis.c	2019-04-16 16:05:31.445511866 +0100
-@@ -438,6 +438,7 @@
-     }
-     p = q;
-   }
-+  *iop = '\0';
- }
- 
- static void print_help(struct hsdis_app_data* app_data,
-diff -Nru openjdk.orig/hotspot/src/share/vm/compiler/compileBroker.hpp openjdk/hotspot/src/share/vm/compiler/compileBroker.hpp
---- openjdk.orig/hotspot/src/share/vm/compiler/compileBroker.hpp	2019-04-05 19:21:24.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/compiler/compileBroker.hpp	2019-04-16 16:05:31.445511866 +0100
-@@ -173,7 +173,8 @@
-     // these methods should be called in a thread safe context
- 
-     void set_current_method(const char* method) {
--      strncpy(_current_method, method, (size_t)cmname_buffer_length);
-+      strncpy(_current_method, method, (size_t)cmname_buffer_length-1);
-+      _current_method[cmname_buffer_length-1] = '\0';
-       if (UsePerfData) _perf_current_method->set_value(method);
-     }
- 
-diff -Nru openjdk.orig/hotspot/src/share/vm/compiler/compilerOracle.cpp openjdk/hotspot/src/share/vm/compiler/compilerOracle.cpp
---- openjdk.orig/hotspot/src/share/vm/compiler/compilerOracle.cpp	2019-04-16 16:03:42.787215846 +0100
-+++ openjdk/hotspot/src/share/vm/compiler/compilerOracle.cpp	2019-04-16 16:05:31.445511866 +0100
-@@ -647,9 +647,7 @@
-       // so read integer and fraction part of double value separately.
-       if (sscanf(line, "%*[ \t]%255[0-9]%*[ /\t]%255[0-9]%n", buffer[0], buffer[1], &bytes_read) == 2) {
-         char value[512] = "";
--        strncat(value, buffer[0], 255);
--        strcat(value, ".");
--        strncat(value, buffer[1], 255);
-+        jio_snprintf(value, sizeof(value), "%s.%s", buffer[0], buffer[1]);
-         total_bytes_read += bytes_read;
-         return add_option_string(c_name, c_match, m_name, m_match, signature, flag, atof(value));
-       } else {
-diff -Nru openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp openjdk/hotspot/src/share/vm/compiler/disassembler.cpp
---- openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp	2019-04-05 19:21:24.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/compiler/disassembler.cpp	2019-04-16 16:05:31.445511866 +0100
-@@ -298,6 +298,7 @@
-         strlen((const char*)arg) > sizeof(buffer) - 1) {
-       // Only print this when the mach changes
-       strncpy(buffer, (const char*)arg, sizeof(buffer) - 1);
-+      buffer[sizeof(buffer) - 1] = '\0';
-       output()->print_cr("[Disassembling for mach='%s']", arg);
-     }
-   } else if (match(event, "format bytes-per-line")) {
-diff -Nru openjdk.orig/hotspot/src/share/vm/runtime/arguments.cpp openjdk/hotspot/src/share/vm/runtime/arguments.cpp
---- openjdk.orig/hotspot/src/share/vm/runtime/arguments.cpp	2019-04-16 16:03:42.763216221 +0100
-+++ openjdk/hotspot/src/share/vm/runtime/arguments.cpp	2019-04-16 16:05:31.445511866 +0100
-@@ -3629,8 +3629,7 @@
-       src ++;
-     }
- 
--    char* copy = AllocateHeap(strlen(src) + 1, mtInternal);
--    strncpy(copy, src, strlen(src) + 1);
-+    char* copy = os::strdup_check_oom(src, mtInternal);
- 
-     // trim all trailing empty paths
-     for (char* tail = copy + strlen(copy) - 1; tail >= copy && *tail == separator; tail--) {
-@@ -4013,18 +4012,14 @@
-     if (end != NULL) *end = '\0';
-     size_t jvm_path_len = strlen(jvm_path);
-     size_t file_sep_len = strlen(os::file_separator());
--    shared_archive_path = NEW_C_HEAP_ARRAY(char, jvm_path_len +
--        file_sep_len + 20, mtInternal);
-+    const size_t len = jvm_path_len + file_sep_len + 20;
-+    shared_archive_path = NEW_C_HEAP_ARRAY(char, len, mtInternal);
-     if (shared_archive_path != NULL) {
--      strncpy(shared_archive_path, jvm_path, jvm_path_len + 1);
--      strncat(shared_archive_path, os::file_separator(), file_sep_len);
--      strncat(shared_archive_path, "classes.jsa", 11);
-+      jio_snprintf(shared_archive_path, len, "%s%sclasses.jsa",
-+        jvm_path, os::file_separator());
-     }
-   } else {
--    shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(SharedArchiveFile) + 1, mtInternal);
--    if (shared_archive_path != NULL) {
--      strncpy(shared_archive_path, SharedArchiveFile, strlen(SharedArchiveFile) + 1);
--    }
-+    shared_archive_path = os::strdup_check_oom(SharedArchiveFile, mtInternal);
-   }
-   return shared_archive_path;
- }
-diff -Nru openjdk.orig/hotspot/src/share/vm/utilities/ostream.cpp openjdk/hotspot/src/share/vm/utilities/ostream.cpp
---- openjdk.orig/hotspot/src/share/vm/utilities/ostream.cpp	2019-04-05 19:21:24.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/utilities/ostream.cpp	2019-04-16 16:06:46.896328647 +0100
-@@ -342,15 +342,19 @@
-       assert(rm == NULL || Thread::current()->current_resource_mark() == rm,
-              "stringStream is re-allocated with a different ResourceMark");
-       buffer = NEW_RESOURCE_ARRAY(char, end);
--      strncpy(buffer, oldbuf, buffer_pos);
-+      if (buffer_pos > 0) {
-+        memcpy(buffer, oldbuf, buffer_pos);
-+      }
-       buffer_length = end;
-     }
-   }
-   // invariant: buffer is always null-terminated
-   guarantee(buffer_pos + write_len + 1 <= buffer_length, "stringStream oob");
--  buffer[buffer_pos + write_len] = 0;
--  strncpy(buffer + buffer_pos, s, write_len);
--  buffer_pos += write_len;
-+  if (write_len > 0) {
-+    buffer[buffer_pos + write_len] = 0;
-+    memcpy(buffer + buffer_pos, s, write_len);
-+    buffer_pos += write_len;
-+  }
- 
-   // Note that the following does not depend on write_len.
-   // This means that position and count get updated
-diff -Nru openjdk.orig/hotspot/src/share/vm/utilities/vmError.cpp openjdk/hotspot/src/share/vm/utilities/vmError.cpp
---- openjdk.orig/hotspot/src/share/vm/utilities/vmError.cpp	2019-04-16 16:03:40.295254924 +0100
-+++ openjdk/hotspot/src/share/vm/utilities/vmError.cpp	2019-04-16 16:05:31.445511866 +0100
-@@ -451,14 +451,7 @@
- #else
-          const char *file = _filename;
- #endif
--         size_t len = strlen(file);
--         size_t buflen = sizeof(buf);
--
--         strncpy(buf, file, buflen);
--         if (len + 10 < buflen) {
--           sprintf(buf + len, ":%d", _lineno);
--         }
--         st->print(" (%s)", buf);
-+         st->print(" (%s:%d)", file, _lineno);
-        } else {
-          st->print(" (0x%x)", _id);
-        }
+../shenandoah/8076475-pr3696.patch
\ No newline at end of file