diff --git a/8175887-pr3415.patch b/8175887-pr3415.patch deleted file mode 100644 index 6460f60..0000000 --- a/8175887-pr3415.patch +++ /dev/null @@ -1,168 +0,0 @@ -# HG changeset patch -# User shade -# Date 1488979372 -3600 -# Wed Mar 08 14:22:52 2017 +0100 -# Node ID 654b7fcb4932d48063f5f1fba0c8994db5e02976 -# Parent 1faf7c17089922f6f72b580253725f2ecb6ba2f8 -8175887, PR3415: C1 value numbering handling of Unsafe.get*Volatile is incorrect -Reviewed-by: vlivanov - -diff --git a/src/share/vm/c1/c1_ValueMap.hpp b/src/share/vm/c1/c1_ValueMap.hpp ---- openjdk/hotspot/src/share/vm/c1/c1_ValueMap.hpp -+++ openjdk/hotspot/src/share/vm/c1/c1_ValueMap.hpp -@@ -158,6 +158,12 @@ - void do_UnsafePutRaw (UnsafePutRaw* x) { kill_memory(); } - void do_UnsafePutObject(UnsafePutObject* x) { kill_memory(); } - void do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) { kill_memory(); } -+ void do_UnsafeGetRaw (UnsafeGetRaw* x) { /* nothing to do */ } -+ void do_UnsafeGetObject(UnsafeGetObject* x) { -+ if (x->is_volatile()) { // the JMM requires this -+ kill_memory(); -+ } -+ } - void do_Intrinsic (Intrinsic* x) { if (!x->preserves_state()) kill_memory(); } - - void do_Phi (Phi* x) { /* nothing to do */ } -@@ -198,8 +204,6 @@ - void do_OsrEntry (OsrEntry* x) { /* nothing to do */ } - void do_ExceptionObject(ExceptionObject* x) { /* nothing to do */ } - void do_RoundFP (RoundFP* x) { /* nothing to do */ } -- void do_UnsafeGetRaw (UnsafeGetRaw* x) { /* nothing to do */ } -- void do_UnsafeGetObject(UnsafeGetObject* x) { /* nothing to do */ } - void do_UnsafePrefetchRead (UnsafePrefetchRead* x) { /* nothing to do */ } - void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) { /* nothing to do */ } - void do_ProfileCall (ProfileCall* x) { /* nothing to do */ } -diff --git a/test/compiler/c1/UnsafeVolatileGuardTest.java b/test/compiler/c1/UnsafeVolatileGuardTest.java -new file mode 100644 ---- /dev/null -+++ openjdk/hotspot/test/compiler/c1/UnsafeVolatileGuardTest.java -@@ -0,0 +1,72 @@ -+/* -+ * Copyright (c) 2017, Red Hat Inc. 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 -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+ * or visit www.oracle.com if you need additional information or have any -+ * questions. -+ */ -+ -+import java.lang.reflect.Field; -+ -+/** -+ * @test -+ * @bug 8175887 -+ * @summary C1 value numbering handling of Unsafe.get*Volatile is incorrect -+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:TieredStopAtLevel=1 UnsafeVolatileGuardTest -+ */ -+public class UnsafeVolatileGuardTest { -+ volatile static private int a; -+ static private int b; -+ -+ static final sun.misc.Unsafe UNSAFE; -+ -+ static final Object BASE; -+ static final long OFFSET; -+ -+ static { -+ try { -+ Field uf = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); -+ uf.setAccessible(true); -+ UNSAFE = (sun.misc.Unsafe)uf.get(null); -+ -+ Field f = UnsafeVolatileGuardTest.class.getDeclaredField("a"); -+ BASE = UNSAFE.staticFieldBase(f); -+ OFFSET = UNSAFE.staticFieldOffset(f); -+ } catch (Exception e) { -+ throw new RuntimeException(e); -+ } -+ } -+ -+ static void test() { -+ int tt = b; // makes the JVM CSE the value of b -+ -+ while (UNSAFE.getIntVolatile(BASE, OFFSET) == 0) {} // burn -+ if (b == 0) { -+ System.err.println("wrong value of b"); -+ System.exit(1); // fail hard to report the error -+ } -+ } -+ -+ public static void main(String [] args) throws Exception { -+ for (int i = 0; i < 10; i++) { -+ new Thread(UnsafeVolatileGuardTest::test).start(); -+ } -+ b = 1; -+ a = 1; -+ } -+} -diff --git a/test/compiler/c1/VolatileGuardTest.java b/test/compiler/c1/VolatileGuardTest.java -new file mode 100644 ---- /dev/null -+++ openjdk/hotspot/test/compiler/c1/VolatileGuardTest.java -@@ -0,0 +1,52 @@ -+/* -+ * Copyright (c) 2017, Red Hat Inc. 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 -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+ * or visit www.oracle.com if you need additional information or have any -+ * questions. -+ */ -+ -+/** -+ * @test -+ * @bug 8175887 -+ * @summary C1 doesn't respect the JMM with volatile field loads -+ * -+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:TieredStopAtLevel=1 VolatileGuardTest -+ */ -+public class VolatileGuardTest { -+ volatile static private int a; -+ static private int b; -+ -+ static void test() { -+ int tt = b; // makes the JVM CSE the value of b -+ -+ while (a == 0) {} // burn -+ if (b == 0) { -+ System.err.println("wrong value of b"); -+ System.exit(1); // fail hard to report the error -+ } -+ } -+ -+ public static void main(String [] args) throws Exception { -+ for (int i = 0; i < 10; i++) { -+ new Thread(VolatileGuardTest::test).start(); -+ } -+ b = 1; -+ a = 1; -+ } -+} diff --git a/java-1.8.0-openjdk.spec b/java-1.8.0-openjdk.spec index 50cc625..99981a7 100644 --- a/java-1.8.0-openjdk.spec +++ b/java-1.8.0-openjdk.spec @@ -1075,10 +1075,6 @@ Patch526: 6260348-pr3066.patch # 8061305, PR3335, RH1423421: Javadoc crashes when method name ends with "Property" Patch538: 8061305-pr3335-rh1423421.patch -# Patches upstream and appearing in 8u152 -# 8175887, PR3415: C1 value numbering handling of Unsafe.get*Volatile is incorrect -Patch554: 8175887-pr3415.patch - # Patches upstream and appearing in 8u162 # 8181055, PR3394, RH1448880: PPC64: "mbind: Invalid argument" still seen after 8175813 Patch551: 8181055-pr3394-rh1448880.patch @@ -1511,12 +1507,6 @@ sh %{SOURCE12} %patch534 %endif -# 8175887 was added to the Shenandoah HotSpot ahead of time -%if %{use_shenandoah_hotspot} -%else -%patch554 -%endif - %patch1000 # Extract systemtap tapsets @@ -2142,6 +2132,7 @@ require "copy_jdk_configs.lua" - removed patch532 8162384-pr3122-rh1358661.patch - removed patch535 8153711-pr3313-rh1284948.patch - removed patch561 8075484-pr3473-rh1490713.patch +- removed patch554 8175887-pr3415.patch * Mon Nov 13 2017 jvanek - 1:1.8.0.151-1.b12 - added ownership of etc dirs