diff --git a/.gitignore b/.gitignore index 70f7217..5d0305e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ /aarch32-port-jdk8u-jdk8u121-b13-aarch32-170210.tar.xz /aarch32-port-jdk8u-jdk8u131-b12-aarch32-170420.tar.xz /systemtap-tapset-3.4.0pre01.tar.xz +/aarch32-port-jdk8u-jdk8u141-b15-aarch32-170721.tar.xz diff --git a/8144566-pr3352.patch b/8144566-pr3352.patch deleted file mode 100644 index 9a2a294..0000000 --- a/8144566-pr3352.patch +++ /dev/null @@ -1,911 +0,0 @@ -# HG changeset patch -# User rpatil -# Date 1474623897 -19800 -# Fri Sep 23 15:14:57 2016 +0530 -# Node ID fb617df8fbac42e962219e45cbd29b15b5ecdc63 -# Parent d41592af9af3790fe5eee30ce686d85cff09c942 -8144566, PR3352: Custom HostnameVerifier disables SNI extension -Reviewed-by: coffeys - -diff --git a/src/share/classes/sun/security/ssl/SSLSocketImpl.java b/src/share/classes/sun/security/ssl/SSLSocketImpl.java ---- openjdk/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java -+++ openjdk/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1996, 2016, 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 -@@ -220,6 +220,11 @@ - Collections.emptyList(); - Collection sniMatchers = - Collections.emptyList(); -+ // Is the serverNames set to empty with SSLParameters.setServerNames()? -+ private boolean noSniExtension = false; -+ -+ // Is the sniMatchers set to empty with SSLParameters.setSNIMatchers()? -+ private boolean noSniMatcher = false; - - /* - * READ ME * READ ME * READ ME * READ ME * READ ME * READ ME * -@@ -666,6 +671,11 @@ - } - - super.connect(endpoint, timeout); -+ -+ if (host == null || host.length() == 0) { -+ useImplicitHost(false); -+ } -+ - doneConnect(); - } - -@@ -2158,41 +2168,61 @@ - output.r.setVersion(protocolVersion); - } - -+ // -+ // ONLY used by ClientHandshaker for the server hostname during handshaking -+ // - synchronized String getHost() { - // Note that the host may be null or empty for localhost. - if (host == null || host.length() == 0) { -- if (!trustNameService) { -- // If the local name service is not trustworthy, reverse host -- // name resolution should not be performed for endpoint -- // identification. Use the application original specified -- // hostname or IP address instead. -- host = getOriginalHostname(getInetAddress()); -- } else { -- host = getInetAddress().getHostName(); -- } -+ useImplicitHost(true); - } - - return host; - } - - /* -- * Get the original application specified hostname. -+ * Try to set and use the implicit specified hostname - */ -- private static String getOriginalHostname(InetAddress inetAddress) { -- /* -- * Get the original hostname via sun.misc.SharedSecrets. -- */ -+ private synchronized void useImplicitHost(boolean noSniUpdate) { -+ -+ // Note: If the local name service is not trustworthy, reverse -+ // host name resolution should not be performed for endpoint -+ // identification. Use the application original specified -+ // hostname or IP address instead. -+ -+ // Get the original hostname via jdk.internal.misc.SharedSecrets -+ InetAddress inetAddress = getInetAddress(); -+ if (inetAddress == null) { // not connected -+ return; -+ } -+ - JavaNetAccess jna = SharedSecrets.getJavaNetAccess(); - String originalHostname = jna.getOriginalHostName(inetAddress); -+ if ((originalHostname != null) && -+ (originalHostname.length() != 0)) { - -- /* -- * If no application specified hostname, use the IP address. -- */ -- if (originalHostname == null || originalHostname.length() == 0) { -- originalHostname = inetAddress.getHostAddress(); -+ host = originalHostname; -+ if (!noSniUpdate && serverNames.isEmpty() && !noSniExtension) { -+ serverNames = -+ Utilities.addToSNIServerNameList(serverNames, host); -+ -+ if (!roleIsServer && -+ (handshaker != null) && !handshaker.started()) { -+ handshaker.setSNIServerNames(serverNames); -+ } -+ } -+ -+ return; - } - -- return originalHostname; -+ // No explicitly specified hostname, no server name indication. -+ if (!trustNameService) { -+ // The local name service is not trustworthy, use IP address. -+ host = inetAddress.getHostAddress(); -+ } else { -+ // Use the underlying reverse host name resolution service. -+ host = getInetAddress().getHostName(); -+ } - } - - -@@ -2205,6 +2235,10 @@ - this.host = host; - this.serverNames = - Utilities.addToSNIServerNameList(this.serverNames, this.host); -+ -+ if (!roleIsServer && (handshaker != null) && !handshaker.started()) { -+ handshaker.setSNIServerNames(serverNames); -+ } - } - - /** -@@ -2571,8 +2605,21 @@ - // the super implementation does not handle the following parameters - params.setEndpointIdentificationAlgorithm(identificationProtocol); - params.setAlgorithmConstraints(algorithmConstraints); -- params.setSNIMatchers(sniMatchers); -- params.setServerNames(serverNames); -+ -+ if (sniMatchers.isEmpty() && !noSniMatcher) { -+ // 'null' indicates none has been set -+ params.setSNIMatchers(null); -+ } else { -+ params.setSNIMatchers(sniMatchers); -+ } -+ -+ if (serverNames.isEmpty() && !noSniExtension) { -+ // 'null' indicates none has been set -+ params.setServerNames(null); -+ } else { -+ params.setServerNames(serverNames); -+ } -+ - params.setUseCipherSuitesOrder(preferLocalCipherSuites); - - return params; -@@ -2592,11 +2639,13 @@ - - List sniNames = params.getServerNames(); - if (sniNames != null) { -+ noSniExtension = sniNames.isEmpty(); - serverNames = sniNames; - } - - Collection matchers = params.getSNIMatchers(); - if (matchers != null) { -+ noSniMatcher = matchers.isEmpty(); - sniMatchers = matchers; - } - -diff --git a/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java b/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java -new file mode 100644 ---- /dev/null -+++ openjdk/jdk/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java -@@ -0,0 +1,337 @@ -+/* -+ * Copyright (c) 2016, 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 -+ * 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. -+ */ -+ -+// -+// SunJSSE does not support dynamic system properties, no way to re-use -+// system properties in samevm/agentvm mode. -+// -+ -+/** -+ * @test -+ * @bug 8144566 -+ * @summary Custom HostnameVerifier disables SNI extension -+ * @run main/othervm BestEffortOnLazyConnected -+ */ -+ -+import java.io.*; -+import java.nio.*; -+import java.nio.channels.*; -+import java.util.*; -+import java.net.*; -+import javax.net.ssl.*; -+ -+public class BestEffortOnLazyConnected { -+ -+ /* -+ * ============================================================= -+ * Set the various variables needed for the tests, then -+ * specify what tests to run on each side. -+ */ -+ -+ /* -+ * Should we run the client or server in a separate thread? -+ * Both sides can throw exceptions, but do you have a preference -+ * as to which side should be the main thread. -+ */ -+ private static final boolean separateServerThread = true; -+ -+ /* -+ * Where do we find the keystores? -+ */ -+ private static final String pathToStores = "../../../../sun/security/ssl/etc"; -+ private static final String keyStoreFile = "keystore"; -+ private static final String trustStoreFile = "truststore"; -+ private static final String passwd = "passphrase"; -+ -+ /* -+ * Is the server ready to serve? -+ */ -+ private static volatile boolean serverReady = false; -+ -+ /* -+ * Turn on SSL debugging? -+ */ -+ private static final boolean debug = false; -+ -+ /* -+ * the fully qualified domain name of localhost -+ */ -+ private static String hostname = null; -+ -+ /* -+ * If the client or server is doing some kind of object creation -+ * that the other side depends on, and that thread prematurely -+ * exits, you may experience a hang. The test harness will -+ * terminate all hung threads after its timeout has expired, -+ * currently 3 minutes by default, but you might try to be -+ * smart about it.... -+ */ -+ -+ /* -+ * Define the server side of the test. -+ * -+ * If the server prematurely exits, serverReady will be set to true -+ * to avoid infinite hangs. -+ */ -+ private void doServerSide() throws Exception { -+ SSLServerSocketFactory sslssf = -+ (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); -+ try (SSLServerSocket sslServerSocket = -+ (SSLServerSocket) sslssf.createServerSocket(serverPort)) { -+ -+ serverPort = sslServerSocket.getLocalPort(); -+ -+ /* -+ * Signal Client, we're ready for his connect. -+ */ -+ serverReady = true; -+ -+ try (SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept()) { -+ InputStream sslIS = sslSocket.getInputStream(); -+ OutputStream sslOS = sslSocket.getOutputStream(); -+ -+ sslIS.read(); -+ sslOS.write(85); -+ sslOS.flush(); -+ -+ ExtendedSSLSession session = -+ (ExtendedSSLSession)sslSocket.getSession(); -+ if (session.getRequestedServerNames().isEmpty()) { -+ throw new Exception("No expected Server Name Indication"); -+ } -+ } -+ } -+ } -+ -+ /* -+ * Define the client side of the test. -+ * -+ * If the server prematurely exits, serverReady will be set to true -+ * to avoid infinite hangs. -+ */ -+ private void doClientSide() throws Exception { -+ -+ /* -+ * Wait for server to get started. -+ */ -+ while (!serverReady) { -+ Thread.sleep(50); -+ } -+ -+ SSLSocketFactory sslsf = -+ (SSLSocketFactory) SSLSocketFactory.getDefault(); -+ -+ try (SSLSocket sslSocket = (SSLSocket)sslsf.createSocket()) { -+ -+ sslSocket.connect(new InetSocketAddress(hostname, serverPort), 0); -+ -+ InputStream sslIS = sslSocket.getInputStream(); -+ OutputStream sslOS = sslSocket.getOutputStream(); -+ -+ sslOS.write(280); -+ sslOS.flush(); -+ sslIS.read(); -+ } -+ } -+ -+ -+ /* -+ * ============================================================= -+ * The remainder is just support stuff -+ */ -+ -+ // use any free port by default -+ private volatile int serverPort = 0; -+ -+ private volatile Exception serverException = null; -+ private volatile Exception clientException = null; -+ -+ public static void main(String[] args) throws Exception { -+ String keyFilename = -+ System.getProperty("test.src", ".") + "/" + pathToStores + -+ "/" + keyStoreFile; -+ String trustFilename = -+ System.getProperty("test.src", ".") + "/" + pathToStores + -+ "/" + trustStoreFile; -+ -+ System.setProperty("javax.net.ssl.keyStore", keyFilename); -+ System.setProperty("javax.net.ssl.keyStorePassword", passwd); -+ System.setProperty("javax.net.ssl.trustStore", trustFilename); -+ System.setProperty("javax.net.ssl.trustStorePassword", passwd); -+ -+ if (debug) { -+ System.setProperty("javax.net.debug", "all"); -+ } -+ -+ try { -+ hostname = InetAddress.getLocalHost().getCanonicalHostName(); -+ } catch (UnknownHostException uhe) { -+ System.out.println( -+ "Ignore the test as the local hostname cannot be determined"); -+ -+ return; -+ } -+ -+ System.out.println( -+ "The fully qualified domain name of the local host is " + -+ hostname); -+ // Ignore the test if the hostname does not sound like a domain name. -+ if ((hostname == null) || hostname.isEmpty() || -+ hostname.startsWith("localhost") || -+ Character.isDigit(hostname.charAt(hostname.length() - 1))) { -+ -+ System.out.println("Ignore the test as the local hostname " + -+ "cannot be determined as fully qualified domain name"); -+ -+ return; -+ } -+ -+ /* -+ * Start the tests. -+ */ -+ new BestEffortOnLazyConnected(); -+ } -+ -+ private Thread clientThread = null; -+ private Thread serverThread = null; -+ -+ /* -+ * Primary constructor, used to drive remainder of the test. -+ * -+ * Fork off the other side, then do your work. -+ */ -+ BestEffortOnLazyConnected() throws Exception { -+ try { -+ if (separateServerThread) { -+ startServer(true); -+ startClient(false); -+ } else { -+ startClient(true); -+ startServer(false); -+ } -+ } catch (Exception e) { -+ // swallow for now. Show later -+ } -+ -+ /* -+ * Wait for other side to close down. -+ */ -+ if (separateServerThread) { -+ serverThread.join(); -+ } else { -+ clientThread.join(); -+ } -+ -+ /* -+ * When we get here, the test is pretty much over. -+ * Which side threw the error? -+ */ -+ Exception local; -+ Exception remote; -+ String whichRemote; -+ -+ if (separateServerThread) { -+ remote = serverException; -+ local = clientException; -+ whichRemote = "server"; -+ } else { -+ remote = clientException; -+ local = serverException; -+ whichRemote = "client"; -+ } -+ -+ /* -+ * If both failed, return the curthread's exception, but also -+ * print the remote side Exception -+ */ -+ if ((local != null) && (remote != null)) { -+ System.out.println(whichRemote + " also threw:"); -+ remote.printStackTrace(); -+ System.out.println(); -+ throw local; -+ } -+ -+ if (remote != null) { -+ throw remote; -+ } -+ -+ if (local != null) { -+ throw local; -+ } -+ } -+ -+ private void startServer(boolean newThread) throws Exception { -+ if (newThread) { -+ serverThread = new Thread() { -+ public void run() { -+ try { -+ doServerSide(); -+ } catch (Exception e) { -+ /* -+ * Our server thread just died. -+ * -+ * Release the client, if not active already... -+ */ -+ System.err.println("Server died..."); -+ serverReady = true; -+ serverException = e; -+ } -+ } -+ }; -+ serverThread.start(); -+ } else { -+ try { -+ doServerSide(); -+ } catch (Exception e) { -+ serverException = e; -+ } finally { -+ serverReady = true; -+ } -+ } -+ } -+ -+ private void startClient(boolean newThread) throws Exception { -+ if (newThread) { -+ clientThread = new Thread() { -+ public void run() { -+ try { -+ doClientSide(); -+ } catch (Exception e) { -+ /* -+ * Our client thread just died. -+ */ -+ System.err.println("Client died..."); -+ clientException = e; -+ } -+ } -+ }; -+ clientThread.start(); -+ } else { -+ try { -+ doClientSide(); -+ } catch (Exception e) { -+ clientException = e; -+ } -+ } -+ } -+} -diff --git a/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java b/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java -new file mode 100644 ---- /dev/null -+++ openjdk/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java -@@ -0,0 +1,390 @@ -+/* -+ * Copyright (c) 2016, 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 -+ * 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. -+ */ -+ -+// -+// SunJSSE does not support dynamic system properties, no way to re-use -+// system properties in samevm/agentvm mode. -+// -+ -+/* -+ * @test -+ * @bug 8144566 -+ * @summary Custom HostnameVerifier disables SNI extension -+ * @run main/othervm ImpactOnSNI -+ */ -+ -+import java.io.*; -+import java.net.*; -+import javax.net.ssl.*; -+ -+public class ImpactOnSNI { -+ -+ /* -+ * ============================================================= -+ * Set the various variables needed for the tests, then -+ * specify what tests to run on each side. -+ */ -+ -+ /* -+ * Should we run the client or server in a separate thread? -+ * Both sides can throw exceptions, but do you have a preference -+ * as to which side should be the main thread. -+ */ -+ private static final boolean separateServerThread = true; -+ -+ /* -+ * Where do we find the keystores? -+ */ -+ private static final String pathToStores = -+ "../../../../../../sun/security/ssl/etc"; -+ private static final String keyStoreFile = "keystore"; -+ private static final String trustStoreFile = "truststore"; -+ private static final String passwd = "passphrase"; -+ -+ /* -+ * Is the server ready to serve? -+ */ -+ private static volatile boolean serverReady = false; -+ -+ /* -+ * Is the connection ready to close? -+ */ -+ private static volatile boolean closeReady = false; -+ -+ /* -+ * Turn on SSL debugging? -+ */ -+ private static final boolean debug = false; -+ -+ /* -+ * Message posted -+ */ -+ private static final String postMsg = "HTTP post on a https server"; -+ -+ /* -+ * the fully qualified domain name of localhost -+ */ -+ private static String hostname = null; -+ -+ /* -+ * If the client or server is doing some kind of object creation -+ * that the other side depends on, and that thread prematurely -+ * exits, you may experience a hang. The test harness will -+ * terminate all hung threads after its timeout has expired, -+ * currently 3 minutes by default, but you might try to be -+ * smart about it.... -+ */ -+ -+ /* -+ * Define the server side of the test. -+ * -+ * If the server prematurely exits, serverReady will be set to true -+ * to avoid infinite hangs. -+ */ -+ private void doServerSide() throws Exception { -+ SSLServerSocketFactory sslssf = -+ (SSLServerSocketFactory)SSLServerSocketFactory.getDefault(); -+ try (SSLServerSocket sslServerSocket = -+ (SSLServerSocket)sslssf.createServerSocket(serverPort)) { -+ -+ serverPort = sslServerSocket.getLocalPort(); -+ -+ /* -+ * Signal Client, we're ready for his connect. -+ */ -+ serverReady = true; -+ -+ /* -+ * Accept connections -+ */ -+ try (SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept()) { -+ InputStream sslIS = sslSocket.getInputStream(); -+ OutputStream sslOS = sslSocket.getOutputStream(); -+ BufferedReader br = -+ new BufferedReader(new InputStreamReader(sslIS)); -+ PrintStream ps = new PrintStream(sslOS); -+ -+ // process HTTP POST request from client -+ System.out.println("status line: " + br.readLine()); -+ String msg = null; -+ while ((msg = br.readLine()) != null && msg.length() > 0); -+ -+ msg = br.readLine(); -+ if (msg.equals(postMsg)) { -+ ps.println("HTTP/1.1 200 OK\n\n"); -+ } else { -+ ps.println("HTTP/1.1 500 Not OK\n\n"); -+ } -+ ps.flush(); -+ -+ ExtendedSSLSession session = -+ (ExtendedSSLSession)sslSocket.getSession(); -+ if (session.getRequestedServerNames().isEmpty()) { -+ throw new Exception("No expected Server Name Indication"); -+ } -+ -+ // close the socket -+ while (!closeReady) { -+ Thread.sleep(50); -+ } -+ } -+ } -+ } -+ -+ /* -+ * Define the client side of the test. -+ * -+ * If the server prematurely exits, serverReady will be set to true -+ * to avoid infinite hangs. -+ */ -+ private void doClientSide() throws Exception { -+ /* -+ * Wait for server to get started. -+ */ -+ while (!serverReady) { -+ Thread.sleep(50); -+ } -+ -+ // Send HTTP POST request to server -+ URL url = new URL("https://" + hostname + ":" + serverPort); -+ -+ HttpsURLConnection.setDefaultHostnameVerifier(new NameVerifier()); -+ HttpsURLConnection http = (HttpsURLConnection)url.openConnection(); -+ http.setDoOutput(true); -+ -+ http.setRequestMethod("POST"); -+ PrintStream ps = new PrintStream(http.getOutputStream()); -+ try { -+ ps.println(postMsg); -+ ps.flush(); -+ if (http.getResponseCode() != 200) { -+ throw new RuntimeException("test Failed"); -+ } -+ } finally { -+ ps.close(); -+ http.disconnect(); -+ closeReady = true; -+ } -+ } -+ -+ private static class NameVerifier implements HostnameVerifier { -+ public boolean verify(String hostname, SSLSession session) { -+ return true; -+ } -+ } -+ -+ /* -+ * ============================================================= -+ * The remainder is just support stuff -+ */ -+ -+ // use any free port by default -+ private volatile int serverPort = 0; -+ -+ private volatile Exception serverException = null; -+ private volatile Exception clientException = null; -+ -+ public static void main(String[] args) throws Exception { -+ String keyFilename = -+ System.getProperty("test.src", "./") + "/" + pathToStores + -+ "/" + keyStoreFile; -+ String trustFilename = -+ System.getProperty("test.src", "./") + "/" + pathToStores + -+ "/" + trustStoreFile; -+ -+ System.setProperty("javax.net.ssl.keyStore", keyFilename); -+ System.setProperty("javax.net.ssl.keyStorePassword", passwd); -+ System.setProperty("javax.net.ssl.trustStore", trustFilename); -+ System.setProperty("javax.net.ssl.trustStorePassword", passwd); -+ -+ if (debug) { -+ System.setProperty("javax.net.debug", "all"); -+ } -+ -+ try { -+ hostname = InetAddress.getLocalHost().getCanonicalHostName(); -+ } catch (UnknownHostException uhe) { -+ System.out.println( -+ "Ignore the test as the local hostname cannot be determined"); -+ -+ return; -+ } -+ -+ System.out.println( -+ "The fully qualified domain name of the local host is " + -+ hostname); -+ // Ignore the test if the hostname does not sound like a domain name. -+ if ((hostname == null) || hostname.isEmpty() || -+ hostname.startsWith("localhost") || -+ Character.isDigit(hostname.charAt(hostname.length() - 1))) { -+ -+ System.out.println("Ignore the test as the local hostname " + -+ "cannot be determined as fully qualified domain name"); -+ -+ return; -+ } -+ -+ /* -+ * Start the tests. -+ */ -+ new ImpactOnSNI(); -+ } -+ -+ private Thread clientThread = null; -+ private Thread serverThread = null; -+ -+ /* -+ * Primary constructor, used to drive remainder of the test. -+ * -+ * Fork off the other side, then do your work. -+ */ -+ ImpactOnSNI() throws Exception { -+ Exception startException = null; -+ try { -+ if (separateServerThread) { -+ startServer(true); -+ startClient(false); -+ } else { -+ startClient(true); -+ startServer(false); -+ } -+ } catch (Exception e) { -+ startException = e; -+ } -+ -+ /* -+ * Wait for other side to close down. -+ */ -+ if (separateServerThread) { -+ if (serverThread != null) { -+ serverThread.join(); -+ } -+ } else { -+ if (clientThread != null) { -+ clientThread.join(); -+ } -+ } -+ -+ /* -+ * When we get here, the test is pretty much over. -+ * Which side threw the error? -+ */ -+ Exception local; -+ Exception remote; -+ -+ if (separateServerThread) { -+ remote = serverException; -+ local = clientException; -+ } else { -+ remote = clientException; -+ local = serverException; -+ } -+ -+ Exception exception = null; -+ -+ /* -+ * Check various exception conditions. -+ */ -+ if ((local != null) && (remote != null)) { -+ // If both failed, return the curthread's exception. -+ local.initCause(remote); -+ exception = local; -+ } else if (local != null) { -+ exception = local; -+ } else if (remote != null) { -+ exception = remote; -+ } else if (startException != null) { -+ exception = startException; -+ } -+ -+ /* -+ * If there was an exception *AND* a startException, -+ * output it. -+ */ -+ if (exception != null) { -+ if (exception != startException && startException != null) { -+ exception.addSuppressed(startException); -+ } -+ throw exception; -+ } -+ -+ // Fall-through: no exception to throw! -+ } -+ -+ private void startServer(boolean newThread) throws Exception { -+ if (newThread) { -+ serverThread = new Thread() { -+ @Override -+ public void run() { -+ try { -+ doServerSide(); -+ } catch (Exception e) { -+ /* -+ * Our server thread just died. -+ * -+ * Release the client, if not active already... -+ */ -+ System.err.println("Server died..."); -+ serverReady = true; -+ serverException = e; -+ } -+ } -+ }; -+ serverThread.start(); -+ } else { -+ try { -+ doServerSide(); -+ } catch (Exception e) { -+ serverException = e; -+ } finally { -+ serverReady = true; -+ } -+ } -+ } -+ -+ private void startClient(boolean newThread) throws Exception { -+ if (newThread) { -+ clientThread = new Thread() { -+ @Override -+ public void run() { -+ try { -+ doClientSide(); -+ } catch (Exception e) { -+ /* -+ * Our client thread just died. -+ */ -+ System.err.println("Client died..."); -+ clientException = e; -+ } -+ } -+ }; -+ clientThread.start(); -+ } else { -+ try { -+ doClientSide(); -+ } catch (Exception e) { -+ clientException = e; -+ } -+ } -+ } -+} diff --git a/8155049-pr3352.patch b/8155049-pr3352.patch deleted file mode 100644 index 68cf02f..0000000 --- a/8155049-pr3352.patch +++ /dev/null @@ -1,41 +0,0 @@ -# HG changeset patch -# User rhalade -# Date 1463420211 25200 -# Mon May 16 10:36:51 2016 -0700 -# Node ID c0e856f2dacdf5eb5cdea380da32ba210aee9579 -# Parent fb617df8fbac42e962219e45cbd29b15b5ecdc63 -8155049, PR3352: New tests from 8144566 fail with "No expected Server Name Indication" -Reviewed-by: xuelei - -diff --git a/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java b/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java ---- openjdk/jdk/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java -+++ openjdk/jdk/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java -@@ -34,9 +34,6 @@ - */ - - import java.io.*; --import java.nio.*; --import java.nio.channels.*; --import java.util.*; - import java.net.*; - import javax.net.ssl.*; - -@@ -197,6 +194,7 @@ - hostname); - // Ignore the test if the hostname does not sound like a domain name. - if ((hostname == null) || hostname.isEmpty() || -+ !hostname.contains(".") || hostname.endsWith(".") || - hostname.startsWith("localhost") || - Character.isDigit(hostname.charAt(hostname.length() - 1))) { - -diff --git a/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java b/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java ---- openjdk/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java -+++ openjdk/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java -@@ -235,6 +235,7 @@ - hostname); - // Ignore the test if the hostname does not sound like a domain name. - if ((hostname == null) || hostname.isEmpty() || -+ !hostname.contains(".") || hostname.endsWith(".") || - hostname.startsWith("localhost") || - Character.isDigit(hostname.charAt(hostname.length() - 1))) { - diff --git a/8165231-rh1437545.patch b/8165231-rh1437545.patch deleted file mode 100644 index e0d5be7..0000000 --- a/8165231-rh1437545.patch +++ /dev/null @@ -1,48 +0,0 @@ -# HG changeset patch -# User horii -# Date 1473905514 14400 -# Wed Sep 14 22:11:54 2016 -0400 -# Node ID 8d16f74380a78eb76cb33183a64440316393903e -# Parent be698ac288484ab140715ee29ed9335e6ea8a33b -8165231: java.nio.Bits.unaligned() doesn't return true on ppc -Reviewed-by: simonis, coffeys - -diff --git a/src/share/classes/java/nio/Bits.java b/src/share/classes/java/nio/Bits.java ---- openjdk/jdk/src/share/classes/java/nio/Bits.java -+++ openjdk/jdk/src/share/classes/java/nio/Bits.java -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2000, 2016, 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 -@@ -614,7 +614,8 @@ - String arch = AccessController.doPrivileged( - new sun.security.action.GetPropertyAction("os.arch")); - unaligned = arch.equals("i386") || arch.equals("x86") -- || arch.equals("amd64") || arch.equals("x86_64"); -+ || arch.equals("amd64") || arch.equals("x86_64") -+ || arch.equals("ppc64") || arch.equals("ppc64le"); - unalignedKnown = true; - return unaligned; - } -diff --git a/src/share/classes/sun/security/provider/ByteArrayAccess.java b/src/share/classes/sun/security/provider/ByteArrayAccess.java ---- openjdk/jdk/src/share/classes/sun/security/provider/ByteArrayAccess.java -+++ openjdk/jdk/src/share/classes/sun/security/provider/ByteArrayAccess.java -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2006, 2016, 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 -@@ -94,7 +94,7 @@ - String arch = java.security.AccessController.doPrivileged - (new sun.security.action.GetPropertyAction("os.arch", "")); - return arch.equals("i386") || arch.equals("x86") || arch.equals("amd64") -- || arch.equals("x86_64"); -+ || arch.equals("x86_64") || arch.equals("ppc64") || arch.equals("ppc64le"); - } - - /** diff --git a/8174164-pr3334-rh1417266.patch b/8174164-pr3334-rh1417266.patch deleted file mode 100644 index 494883f..0000000 --- a/8174164-pr3334-rh1417266.patch +++ /dev/null @@ -1,79 +0,0 @@ -# HG changeset patch -# User roland -# Date 1487208397 28800 -# Wed Feb 15 17:26:37 2017 -0800 -# Node ID a9cbaff50d3d7e3a1d2dbdc0121c470142b87270 -# Parent 15922b2f31db4857ec84efdf533c41b19e68030b -8174164, PR3334, RH1417266: SafePointNode::_replaced_nodes breaks with irreducible loops -Reviewed-by: kvn - -diff --git a/src/share/vm/opto/callnode.hpp b/src/share/vm/opto/callnode.hpp ---- openjdk/hotspot/src/share/vm/opto/callnode.hpp -+++ openjdk/hotspot/src/share/vm/opto/callnode.hpp -@@ -449,8 +449,8 @@ - void delete_replaced_nodes() { - _replaced_nodes.reset(); - } -- void apply_replaced_nodes() { -- _replaced_nodes.apply(this); -+ void apply_replaced_nodes(uint idx) { -+ _replaced_nodes.apply(this, idx); - } - void merge_replaced_nodes_with(SafePointNode* sfpt) { - _replaced_nodes.merge_with(sfpt->_replaced_nodes); -diff --git a/src/share/vm/opto/parse1.cpp b/src/share/vm/opto/parse1.cpp ---- openjdk/hotspot/src/share/vm/opto/parse1.cpp -+++ openjdk/hotspot/src/share/vm/opto/parse1.cpp -@@ -1048,7 +1048,7 @@ - kit.make_dtrace_method_exit(method()); - } - if (_replaced_nodes_for_exceptions) { -- kit.map()->apply_replaced_nodes(); -+ kit.map()->apply_replaced_nodes(_new_idx); - } - // Done with exception-path processing. - ex_map = kit.make_exception_state(ex_oop); -@@ -1069,7 +1069,7 @@ - _exits.add_exception_state(ex_map); - } - } -- _exits.map()->apply_replaced_nodes(); -+ _exits.map()->apply_replaced_nodes(_new_idx); - } - - //-----------------------------create_entry_map------------------------------- -diff --git a/src/share/vm/opto/replacednodes.cpp b/src/share/vm/opto/replacednodes.cpp ---- openjdk/hotspot/src/share/vm/opto/replacednodes.cpp -+++ openjdk/hotspot/src/share/vm/opto/replacednodes.cpp -@@ -91,13 +91,17 @@ - } - - // Perfom node replacement (used when returning to caller) --void ReplacedNodes::apply(Node* n) { -+void ReplacedNodes::apply(Node* n, uint idx) { - if (is_empty()) { - return; - } - for (int i = 0; i < _replaced_nodes->length(); i++) { - ReplacedNode replaced = _replaced_nodes->at(i); -- n->replace_edge(replaced.initial(), replaced.improved()); -+ // Only apply if improved node was created in a callee to avoid -+ // issues with irreducible loops in the caller -+ if (replaced.improved()->_idx >= idx) { -+ n->replace_edge(replaced.initial(), replaced.improved()); -+ } - } - } - -diff --git a/src/share/vm/opto/replacednodes.hpp b/src/share/vm/opto/replacednodes.hpp ---- openjdk/hotspot/src/share/vm/opto/replacednodes.hpp -+++ openjdk/hotspot/src/share/vm/opto/replacednodes.hpp -@@ -71,7 +71,7 @@ - void record(Node* initial, Node* improved); - void transfer_from(const ReplacedNodes& other, uint idx); - void reset(); -- void apply(Node* n); -+ void apply(Node* n, uint idx); - void merge_with(const ReplacedNodes& other); - bool is_empty() const; - void dump(outputStream *st) const; diff --git a/8174729-pr3336-rh1420518.patch b/8174729-pr3336-rh1420518.patch deleted file mode 100644 index 3d67850..0000000 --- a/8174729-pr3336-rh1420518.patch +++ /dev/null @@ -1,122 +0,0 @@ -# HG changeset patch -# User adinn -# Date 1487931564 0 -# Fri Feb 24 10:19:24 2017 +0000 -# Node ID d41592af9af3790fe5eee30ce686d85cff09c942 -# Parent 1ac9b0f1bf17fc5935bfa8250550eabc2ffb6785 -8174729, PR3336, RH1420518: Race Condition in java.lang.reflect.WeakCache -Summary: Race can occur between Proxy.getProxyClass and Proxy.isProxyClass -Reviewed-by: mchung - -diff --git a/src/share/classes/java/lang/reflect/WeakCache.java b/src/share/classes/java/lang/reflect/WeakCache.java ---- openjdk/jdk/src/share/classes/java/lang/reflect/WeakCache.java -+++ openjdk/jdk/src/share/classes/java/lang/reflect/WeakCache.java -@@ -239,11 +239,11 @@ - // wrap value with CacheValue (WeakReference) - CacheValue cacheValue = new CacheValue<>(value); - -+ // put into reverseMap -+ reverseMap.put(cacheValue, Boolean.TRUE); -+ - // try replacing us with CacheValue (this should always succeed) -- if (valuesMap.replace(subKey, this, cacheValue)) { -- // put also in reverseMap -- reverseMap.put(cacheValue, Boolean.TRUE); -- } else { -+ if (!valuesMap.replace(subKey, this, cacheValue)) { - throw new AssertionError("Should not reach here"); - } - -diff --git a/test/java/lang/reflect/Proxy/ProxyRace.java b/test/java/lang/reflect/Proxy/ProxyRace.java -new file mode 100644 ---- /dev/null -+++ openjdk/jdk/test/java/lang/reflect/Proxy/ProxyRace.java -@@ -0,0 +1,88 @@ -+/* -+ * Copyright (c) 2017, 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 -+ * 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.Proxy; -+import java.util.concurrent.ExecutorService; -+import java.util.concurrent.Executors; -+import java.util.concurrent.Phaser; -+import java.util.concurrent.TimeUnit; -+import java.util.concurrent.atomic.AtomicInteger; -+ -+/** -+ * @test -+ * @bug 8174729 -+ * @summary Proxy.getProxyClass() / Proxy.isProxyClass() race detector -+ * @run main ProxyRace -+ * @author plevart -+ */ -+ -+public class ProxyRace { -+ -+ static final int threads = 8; -+ -+ static volatile ClassLoader classLoader; -+ static volatile boolean terminate; -+ static final AtomicInteger racesDetected = new AtomicInteger(); -+ -+ public static void main(String[] args) throws Exception { -+ -+ Phaser phaser = new Phaser(threads) { -+ @Override -+ protected boolean onAdvance(int phase, int registeredParties) { -+ // install new ClassLoader on each advance -+ classLoader = new CL(); -+ return terminate; -+ } -+ }; -+ -+ ExecutorService exe = Executors.newFixedThreadPool(threads); -+ -+ for (int i = 0; i < threads; i++) { -+ exe.execute(() -> { -+ while (phaser.arriveAndAwaitAdvance() >= 0) { -+ Class proxyClass = Proxy.getProxyClass(classLoader, Runnable.class); -+ if (!Proxy.isProxyClass(proxyClass)) { -+ racesDetected.incrementAndGet(); -+ } -+ } -+ }); -+ } -+ -+ Thread.sleep(5000L); -+ -+ terminate = true; -+ exe.shutdown(); -+ exe.awaitTermination(5L, TimeUnit.SECONDS); -+ -+ System.out.println(racesDetected.get() + " races detected"); -+ if (racesDetected.get() != 0) { -+ throw new RuntimeException(racesDetected.get() + " races detected"); -+ } -+ } -+ -+ static class CL extends ClassLoader { -+ public CL() { -+ super(ClassLoader.getSystemClassLoader()); -+ } -+ } -+} diff --git a/8175097-pr3334-rh1417266.patch b/8175097-pr3334-rh1417266.patch deleted file mode 100644 index e80dd11..0000000 --- a/8175097-pr3334-rh1417266.patch +++ /dev/null @@ -1,100 +0,0 @@ -# HG changeset patch -# User roland -# Date 1487286884 28800 -# Thu Feb 16 15:14:44 2017 -0800 -# Node ID 1b4eb44fbfcd0fceb485d89d91eb893d99f5864b -# Parent a9cbaff50d3d7e3a1d2dbdc0121c470142b87270 -8175097, PR3334, RH1417266: [TESTBUG] 8174164 fix missed the test -Reviewed-by: kvn - -diff --git a/test/compiler/c2/TestReplacedNodesOSR.java b/test/compiler/c2/TestReplacedNodesOSR.java -new file mode 100644 ---- /dev/null -+++ openjdk/hotspot/test/compiler/c2/TestReplacedNodesOSR.java -@@ -0,0 +1,86 @@ -+/* -+ * 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 8174164 -+ * @summary SafePointNode::_replaced_nodes breaks with irreducible loops -+ * @run main/othervm -XX:-BackgroundCompilation TestReplacedNodesOSR -+ * -+ */ -+ -+public class TestReplacedNodesOSR { -+ -+ static Object dummy; -+ -+ static interface I { -+ } -+ -+ static class A implements I { -+ } -+ -+ static final class MyException extends Exception { -+ } -+ -+ static final A obj = new A(); -+ static I static_field() { return obj; } -+ -+ // When OSR compiled, this method has an irreducible loop -+ static void test(int v, MyException e) { -+ int i = 0; -+ for (;;) { -+ if (i == 1000) { -+ break; -+ } -+ try { -+ if ((i%2) == 0) { -+ int j = 0; -+ for (;;) { -+ j++; -+ if (i+j != v) { -+ if (j == 1000) { -+ break; -+ } -+ } else { -+ A a = (A)static_field(); -+ // replaced node recorded here -+ throw e; -+ } -+ } -+ } -+ } catch(MyException ex) { -+ } -+ i++; -+ // replaced node applied on return of the method -+ // replaced node used here -+ dummy = static_field(); -+ } -+ } -+ -+ -+ static public void main(String[] args) { -+ for (int i = 0; i < 1000; i++) { -+ test(1100, new MyException()); -+ } -+ } -+} diff --git a/8175887-pr3415.patch b/8175887-pr3415.patch new file mode 100644 index 0000000..6460f60 --- /dev/null +++ b/8175887-pr3415.patch @@ -0,0 +1,168 @@ +# 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/8179084-pr3409-rh1455694.patch b/8179084-pr3409-rh1455694.patch new file mode 100644 index 0000000..dbc2120 --- /dev/null +++ b/8179084-pr3409-rh1455694.patch @@ -0,0 +1,135 @@ +# HG changeset patch +# User dholmes +# Date 1493428477 14400 +# Fri Apr 28 21:14:37 2017 -0400 +# Node ID 2fee74c5547889d9698a2636e0a5170f9e66fb9c +# Parent 13a04e8df5a3af73794146b930b32556c7cbc5b0 +8179084, PR3409, RH1455694: HotSpot VM fails to start when AggressiveHeap is set +Reviewed-by: kbarrett, stefank + +diff --git a/src/share/vm/runtime/arguments.cpp b/src/share/vm/runtime/arguments.cpp +--- openjdk/hotspot/src/share/vm/runtime/arguments.cpp ++++ openjdk/hotspot/src/share/vm/runtime/arguments.cpp +@@ -3193,8 +3193,6 @@ + + // Enable parallel GC and adaptive generation sizing + FLAG_SET_CMDLINE(bool, UseParallelGC, true); +- FLAG_SET_DEFAULT(ParallelGCThreads, +- Abstract_VM_Version::parallel_worker_threads()); + + // Encourage steady state memory management + FLAG_SET_CMDLINE(uintx, ThresholdTolerance, 100); +diff --git a/test/TEST.groups b/test/TEST.groups +--- openjdk/hotspot/test/TEST.groups ++++ openjdk/hotspot/test/TEST.groups +@@ -1,5 +1,5 @@ + # +-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. ++# Copyright (c) 2013, 2017, 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 +@@ -164,6 +164,7 @@ + gc/TestGCLogRotationViaJcmd.java \ + gc/g1/TestHumongousAllocInitialMark.java \ + gc/g1/TestHumongousShrinkHeap.java \ ++ gc/arguments/TestAggressiveHeap.java \ + gc/arguments/TestG1HeapRegionSize.java \ + gc/metaspace/TestMetaspaceMemoryPool.java \ + gc/arguments/TestDynMinHeapFreeRatio.java \ +diff --git a/test/gc/arguments/TestAggressiveHeap.java b/test/gc/arguments/TestAggressiveHeap.java +new file mode 100644 +--- /dev/null ++++ openjdk/hotspot/test/gc/arguments/TestAggressiveHeap.java +@@ -0,0 +1,91 @@ ++/* ++ * Copyright (c) 2017, 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 ++ * 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 TestAggressiveHeap ++ * @key gc ++ * @bug 8179084 ++ * @summary Test argument processing for -XX:+AggressiveHeap. ++ * @library /testlibrary ++ * @run driver TestAggressiveHeap ++ */ ++ ++import java.lang.management.ManagementFactory; ++import javax.management.MBeanServer; ++import javax.management.ObjectName; ++ ++import com.oracle.java.testlibrary.OutputAnalyzer; ++import com.oracle.java.testlibrary.ProcessTools; ++ ++public class TestAggressiveHeap { ++ ++ public static void main(String args[]) throws Exception { ++ if (canUseAggressiveHeapOption()) { ++ testFlag(); ++ } ++ } ++ ++ // Note: Not a normal boolean flag; -XX:-AggressiveHeap is invalid. ++ private static final String option = "-XX:+AggressiveHeap"; ++ ++ // Option requires at least 256M, else error during option processing. ++ private static final long minMemory = 256 * 1024 * 1024; ++ ++ // bool UseParallelGC := true {product} ++ private static final String parallelGCPattern = ++ " *bool +UseParallelGC *:= *true +\\{product\\}"; ++ ++ private static void testFlag() throws Exception { ++ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( ++ option, "-XX:+PrintFlagsFinal", "-version"); ++ ++ OutputAnalyzer output = new OutputAnalyzer(pb.start()); ++ ++ output.shouldHaveExitValue(0); ++ ++ String value = output.firstMatch(parallelGCPattern); ++ if (value == null) { ++ throw new RuntimeException( ++ option + " didn't set UseParallelGC"); ++ } ++ } ++ ++ private static boolean haveRequiredMemory() throws Exception { ++ MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ++ ObjectName os = new ObjectName("java.lang", "type", "OperatingSystem"); ++ Object attr = server.getAttribute(os, "TotalPhysicalMemorySize"); ++ String value = attr.toString(); ++ long memory = Long.parseLong(value); ++ return memory >= minMemory; ++ } ++ ++ private static boolean canUseAggressiveHeapOption() throws Exception { ++ if (!haveRequiredMemory()) { ++ System.out.println( ++ "Skipping test of " + option + " : insufficient memory"); ++ return false; ++ } ++ return true; ++ } ++} ++ diff --git a/8181419-pr3413-rh1463144.patch b/8181419-pr3413-rh1463144.patch new file mode 100644 index 0000000..c2c7fc6 --- /dev/null +++ b/8181419-pr3413-rh1463144.patch @@ -0,0 +1,92 @@ +# HG changeset patch +# User stuefe +# Date 1497865921 -7200 +# Mon Jun 19 11:52:01 2017 +0200 +# Node ID ca0c7b2783e0102468218589a062e7ac4736aae2 +# Parent 148a7d6c463ad1726bad8a9e8d5df191314d704b +8181419, PR3413, RH1463144: Race in jdwp invoker handling may lead to crashes or invalid results +Reviewed-by: sspitsyn, sgehwolf, clanger + +diff --git a/src/share/back/invoker.c b/src/share/back/invoker.c +--- openjdk/jdk/src/share/back/invoker.c ++++ openjdk/jdk/src/share/back/invoker.c +@@ -212,30 +212,6 @@ + } + + /* +- * Delete saved global references - if any - for: +- * - a potentially thrown Exception +- * - a returned refernce/array value +- * See invoker_doInvoke() and invoke* methods where global references +- * are being saved. +- */ +-static void +-deletePotentiallySavedGlobalRefs(JNIEnv *env, InvokeRequest *request) +-{ +- /* Delete potentially saved return value */ +- if ((request->invokeType == INVOKE_CONSTRUCTOR) || +- (returnTypeTag(request->methodSignature) == JDWP_TAG(OBJECT)) || +- (returnTypeTag(request->methodSignature) == JDWP_TAG(ARRAY))) { +- if (request->returnValue.l != NULL) { +- tossGlobalRef(env, &(request->returnValue.l)); +- } +- } +- /* Delete potentially saved exception */ +- if (request->exception != NULL) { +- tossGlobalRef(env, &(request->exception)); +- } +-} +- +-/* + * Delete global argument references from the request which got put there before a + * invoke request was carried out. See fillInvokeRequest(). + */ +@@ -744,6 +720,7 @@ + jint id; + InvokeRequest *request; + jboolean detached; ++ jboolean mustReleaseReturnValue = JNI_FALSE; + + JDI_ASSERT(thread); + +@@ -787,6 +764,13 @@ + id = request->id; + exc = request->exception; + returnValue = request->returnValue; ++ ++ /* Release return value and exception references, but delay the release ++ * until after the return packet was sent. */ ++ mustReleaseReturnValue = request->invokeType == INVOKE_CONSTRUCTOR || ++ returnTypeTag(request->methodSignature) == JDWP_TAG(OBJECT) || ++ returnTypeTag(request->methodSignature) == JDWP_TAG(ARRAY); ++ + } + + /* +@@ -801,6 +785,12 @@ + */ + deleteGlobalArgumentRefs(env, request); + ++ /* From now on, do not access the request structure anymore ++ * for this request id, because once we give up the invokerLock it may ++ * be immediately reused by a new invoke request. ++ */ ++ request = NULL; ++ + /* + * Give up the lock before I/O operation + */ +@@ -821,7 +811,12 @@ + */ + eventHandler_lock(); // for proper lock order + debugMonitorEnter(invokerLock); +- deletePotentiallySavedGlobalRefs(env, request); ++ if (mustReleaseReturnValue && returnValue.l != NULL) { ++ tossGlobalRef(env, &returnValue.l); ++ } ++ if (exc != NULL) { ++ tossGlobalRef(env, &exc); ++ } + debugMonitorExit(invokerLock); + eventHandler_unlock(); + } diff --git a/enableCommentedOutSystemNss.patch b/enableCommentedOutSystemNss.patch new file mode 100644 index 0000000..febd87e --- /dev/null +++ b/enableCommentedOutSystemNss.patch @@ -0,0 +1,11 @@ +diff -r 5b86f66575b7 src/share/lib/security/java.security-linux +--- openjdk/jdk/src/share/lib/security/java.security-linux Tue May 16 13:29:05 2017 -0700 ++++ openjdk/jdk/src/share/lib/security/java.security-linux Tue Jun 06 14:05:12 2017 +0200 +@@ -74,6 +74,7 @@ + security.provider.7=com.sun.security.sasl.Provider + security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI + security.provider.9=sun.security.smartcardio.SunPCSC ++#security.provider.10=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/nss.cfg + + # + # Sun Provider SecureRandom seed source. diff --git a/java-1.8.0-openjdk-aarch32.spec b/java-1.8.0-openjdk-aarch32.spec index f51abc0..1bfa11f 100644 --- a/java-1.8.0-openjdk-aarch32.spec +++ b/java-1.8.0-openjdk-aarch32.spec @@ -173,13 +173,33 @@ %global archinstall %{_arch} %endif - %ifarch %{jit_arches} %global with_systemtap 0 %else %global with_systemtap 0 %endif +%ifarch %{ix86} x86_64 +#no fx on f24 +%global with_openjfx_binding 0 +%global openjfx_path %{_jvmdir}/openjfx +# links src directories +%global jfx_jre_libs_dir %{openjfx_path}/rt/lib +%global jfx_jre_native_dir %{jfx_jre_libs_dir}/%{archinstall} +%global jfx_sdk_libs_dir %{openjfx_path}/lib +%global jfx_sdk_bins_dir %{openjfx_path}/bin +%global jfx_jre_exts_dir %{jfx_jre_libs_dir}/ext +# links src files +# maybe depend on jfx and generate the lists in build time? Yes, bad idea to inlcude cyclic depndenci, but this list is aweful +%global jfx_jre_libs jfxswt.jar javafx.properties +%global jfx_jre_native libprism_es2.so libprism_common.so libjavafx_font.so libdecora_sse.so libjavafx_font_freetype.so libprism_sw.so libjavafx_font_pango.so libglass.so libjavafx_iio.so +%global jfx_sdk_libs javafx-mx.jar packager.jar ant-javafx.jar +%global jfx_sdk_bins javafxpackager javapackager +%global jfx_jre_exts jfxrt.jar +%else +%global with_openjfx_binding 0 +%endif + # Convert an absolute path to a relative path. Each symbolic link is # specified relative to the directory in which it is installed so that # it will resolve properly within chrooted installations. @@ -192,7 +212,7 @@ # note, following three variables are sedded from update_sources if used correctly. Hardcode them rather there. %global project aarch32-port %global repo jdk8u -%global revision jdk8u131-b12-aarch32-170420 +%global revision jdk8u141-b15-aarch32-170721 # eg # jdk8u60-b27 -> jdk8u60 or # aarch64-jdk8u60-b27 -> aarch64-jdk8u60 (dont forget spec escape % by %%) %global whole_update %(VERSION=%{revision}; echo ${VERSION%%-*}) # eg jdk8u60 -> 60 or aarch64-jdk8u60 -> 60 @@ -539,6 +559,7 @@ exit 0 %{_jvmprivdir}/* %{jvmjardir %%1} %dir %{_jvmdir}/%{jredir %%1}/lib/security +%{_jvmdir}/%{jredir %%1}/lib/security/cacerts %config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/US_export_policy.jar %config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/local_policy.jar %config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/java.policy @@ -756,6 +777,8 @@ Obsoletes: java-1.5.0-gcj-devel%1 Requires: %{name}%1%{?_isa} = %{epoch}:%{version}-%{release} OrderWithRequires: %{name}-headless%1%{?_isa} = %{epoch}:%{version}-%{release} +#Provides: java-%{javaver}-%{origin}-demo = %{epoch}:%{version}-%{release} + Obsoletes: java-1.7.0-openjdk-demo%1 } @@ -773,6 +796,7 @@ Requires(postun): chkconfig >= 1.7 # Standard JPackage javadoc provides. #Provides: java-javadoc%1 = %{epoch}:%{version}-%{release} #Provides: java-%{javaver}-javadoc%1 = %{epoch}:%{version}-%{release} +#Provides: java-%{javaver}-%{origin}-javadoc = %{epoch}:%{version}-%{release} Obsoletes: java-1.7.0-openjdk-javadoc%1 @@ -781,6 +805,10 @@ Obsoletes: java-1.7.0-openjdk-javadoc%1 %global java_src_rpo() %{expand: Requires: %{name}-headless%1%{?_isa} = %{epoch}:%{version}-%{release} +# Standard JPackage javadoc provides. +#Provides: java-src%1 = %{epoch}:%{version}-%{release} +#Provides: java-%{javaver}-src%1 = %{epoch}:%{version}-%{release} +#Provides: java-%{javaver}-%{origin}-src = %{epoch}:%{version}-%{release} Obsoletes: java-1.7.0-openjdk-src%1 } @@ -789,6 +817,8 @@ Requires: java-atk-wrapper%{?_isa} Requires: %{name}%1%{?_isa} = %{epoch}:%{version}-%{release} OrderWithRequires: %{name}-headless%1%{?_isa} = %{epoch}:%{version}-%{release} +#Provides: java-%{javaver}-%{origin}-accessiblity = %{epoch}:%{version}-%{release} + Obsoletes: java-1.7.0-openjdk-accessibility%1 } @@ -812,13 +842,19 @@ Epoch: 1 Summary: OpenJDK Runtime Environment in a preview of the OpenJDK AArch32 project Group: Development/Languages -License: ASL 1.1 and ASL 2.0 and GPL+ and GPLv2 and GPLv2 with exceptions and LGPLv2 and MPLv1.0 and MPLv1.1 and Public Domain and W3C +License: ASL 1.1 and ASL 2.0 and GPL+ and GPLv2 and GPLv2 with exceptions and LGPL+ and LGPLv2 and MPLv1.0 and MPLv1.1 and Public Domain and W3C URL: http://openjdk.java.net/ - -# generated by update_package.sh +# aarch64-port now contains integration forest of both aarch64 and normal jdk +# Source from upstream OpenJDK8 project. To regenerate, use +# VERSION=%%{revision} FILE_NAME_ROOT=%%{project}-%%{repo}-${VERSION} +# REPO_ROOT= generate_source_tarball.sh +# where the source is obtained from http://hg.openjdk.java.net/%%{project}/%%{repo} Source0: %{project}-%{repo}-%{revision}.tar.xz +# Shenandoah HotSpot +#Source1: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u141-b16.tar.xz + # Custom README for -src subpackage Source2: README.src @@ -924,30 +960,24 @@ Patch400: 8154313.patch 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 8u131 -# 6515172, PR3346: Runtime.availableProcessors() ignores Linux taskset command -#Patch542: 6515172-pr3346.patch +# 8181055, PR3394, RH1448880: PPC64: "mbind: Invalid argument" still seen after 8175813 +#Patch551: 8181055-pr3394-rh1448880.patch +# 8181419, PR3413, RH1463144: Race in jdwp invoker handling may lead to crashes or invalid results +Patch553: 8181419-pr3413-rh1463144.patch # Patches upstream and appearing in 8u152 # 8153711, PR3313, RH1284948: [REDO] JDWP: Memory Leak: GlobalRefs never deleted when processing invokeMethod command Patch535: 8153711-pr3313-rh1284948.patch -# 8144566, PR3352: Custom HostnameVerifier disables SNI extension -Patch544: 8144566-pr3352.patch -# 8155049, PR3352: New tests from 8144566 fail with "No expected Server Name Indication" -Patch545: 8155049-pr3352.patch # 8162384, PR3122, RH1358661: Performance regression: bimorphic inlining may be bypassed by type speculation Patch532: 8162384-pr3122-rh1358661.patch -# 8165231, RH1437545: java.nio.Bits.unaligned() doesn't return true on ppc -Patch546: 8165231-rh1437545.patch # 8173941, PR3326: SA does not work if executable is DSO Patch547: 8173941-pr3326.patch -# 8174164, PR3334, RH1417266: SafePointNode::_replaced_nodes breaks with irreducible loops" -Patch537: 8174164-pr3334-rh1417266.patch -# 8174729, PR3336, RH1420518: Race Condition in java.lang.reflect.WeakCache -Patch548: 8174729-pr3336-rh1420518.patch -# 8175097, PR3334, RH1417266: [TESTBUG] 8174164 fix missed the test -Patch549: 8175097-pr3334-rh1417266.patch +# 8175813, PR3394, RH1448880: PPC64: "mbind: Invalid argument" when -XX:+UseNUMA is used +#Patch550: 8175813-pr3394-rh1448880.patch +# 8179084, PR3409, RH1455694: HotSpot VM fails to start when AggressiveHeap is set +Patch552: 8179084-pr3409-rh1455694.patch +# 8175887, PR3415: C1 value numbering handling of Unsafe.get*Volatile is incorrect +Patch554: 8175887-pr3415.patch # Patches ineligible for 8u # 8043805: Allow using a system-installed libjpeg @@ -966,6 +996,7 @@ Patch533: rh1367357.patch Patch539: pr2888.patch # Non-OpenJDK fixes +Patch1000: enableCommentedOutSystemNss.patch BuildRequires: autoconf BuildRequires: automake @@ -994,7 +1025,13 @@ BuildRequires: nss-devel BuildRequires: pkgconfig BuildRequires: xorg-x11-proto-devel BuildRequires: zip +# Use OpenJDK 7 where available (on RHEL) to avoid +# having to use the rhel-7.x-java-unsafe-candidate hack +%if 0%{?rhel} +BuildRequires: java-1.7.0-openjdk-devel +%else BuildRequires: java-1.8.0-openjdk-aarch32-devel +%endif # Zero-assembler build requirement. %ifnarch %{jit_arches} BuildRequires: libffi-devel @@ -1016,9 +1053,7 @@ BuildRequires: systemtap-sdt-devel ExclusiveArch: %{arm} %description -A preview release of the upstream OpenJDK AArch32 porting project. In -due time it will be merged with the main java-1.8.0-openjdk package. -This release may get security fixes late. Use carefully. +A preview release of the upstream OpenJDK AArch32 porting project. The OpenJDK runtime environment. %if %{include_debug_build} @@ -1203,6 +1238,43 @@ Summary: OpenJDK accessibility connector %{for_debug} See normal java-%{version}-openjdk-accessibility description. %endif + +%if %{with_openjfx_binding} +%package openjfx +Summary: OpenJDK x OpenJFX connector. This package adds symliks finishing Java FX integration to %{name} +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} +Requires: openjfx%{?_isa} +Provides: javafx = %{epoch}:%{version}-%{release} +%description openjfx +Set of links from OpenJDK (jre) to OpenJFX + +%package openjfx-devel +Summary: OpenJDK x OpenJFX connector for FX developers. This package adds symliks finishing Java FX integration to %{name}-devel +Requires: %{name}-devel%{?_isa} = %{epoch}:%{version}-%{release} +Requires: openjfx-devel%{?_isa} +Provides: javafx-devel = %{epoch}:%{version}-%{release} +%description openjfx-devel +Set of links from OpenJDK (sdk) to OpenJFX + +%if %{include_debug_build} +%package openjfx-debug +Summary: OpenJDK x OpenJFX connector %{for_debug}. his package adds symliks finishing Java FX integration to %{name}-debug +Requires: %{name}-debug%{?_isa} = %{epoch}:%{version}-%{release} +Requires: openjfx%{?_isa} +Provides: javafx-debug = %{epoch}:%{version}-%{release} +%description openjfx-debug +Set of links from OpenJDK-debug (jre) to normal OpenJFX. OpenJFX do not support debug buuilds of itself + +%package openjfx-devel-debug +Summary: OpenJDK x OpenJFX connector for FX developers %{for_debug}. This package adds symliks finishing Java FX integration to %{name}-devel-debug +Requires: %{name}-devel-debug%{?_isa} = %{epoch}:%{version}-%{release} +Requires: openjfx-devel%{?_isa} +Provides: javafx-devel-debug = %{epoch}:%{version}-%{release} +%description openjfx-devel-debug +Set of links from OpenJDK-debug (sdk) to normal OpenJFX. OpenJFX do not support debug buuilds of itself +%endif +%endif + %prep if [ %{include_normal_build} -eq 0 -o %{include_normal_build} -eq 1 ] ; then echo "include_normal_build is %{include_normal_build}" @@ -1233,7 +1305,7 @@ ln -s openjdk jdk8 # On Shenandoah-supported architectures, replace HotSpot with # the Shenandoah version pushd openjdk -tar -xf %{SOURCE999} +tar -xf %{SOURCE1} rm -rf hotspot mv openjdk/hotspot . rm -rf openjdk @@ -1304,15 +1376,13 @@ sh %{SOURCE12} %patch528 %patch532 %patch535 -%patch537 %patch538 -#%patch542 -%patch544 -%patch545 -%patch546 %patch547 -%patch548 -%patch549 +#%patch550 +#%patch551 +%patch552 +%patch553 +%patch554 # RPM-only fixes %patch525 @@ -1324,6 +1394,8 @@ sh %{SOURCE12} %patch534 %endif +%patch1000 + # Extract systemtap tapsets %if %{with_systemtap} tar -x -I xz -f %{SOURCE8} @@ -1561,6 +1633,8 @@ $JAVA_HOME/bin/javap -l java.lang.Object | grep LocalVariableTable $JAVA_HOME/bin/javap -l java.nio.ByteBuffer | grep "Compiled from" $JAVA_HOME/bin/javap -l java.nio.ByteBuffer | grep LineNumberTable $JAVA_HOME/bin/javap -l java.nio.ByteBuffer | grep LocalVariableTable + +#build cycles check done %install @@ -1568,7 +1642,7 @@ STRIP_KEEP_SYMTAB=libjvm* for suffix in %{build_loop} ; do -pushd %{buildoutputdir $suffix}/images/%{j2sdkimage} +pushd %{buildoutputdir $suffix}/images/%{j2sdkimage} #install jsa directories so we can owe them mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/%{archinstall}/server/ @@ -1644,6 +1718,12 @@ popd # Remove empty cacerts database. rm -f $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/security/cacerts + # Install cacerts symlink needed by some apps which hardcode the path. + pushd $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/security + RELATIVE=$(%{abs2rel} %{_sysconfdir}/pki/java \ + %{_jvmdir}/%{jredir $suffix}/lib/security) + ln -sf $RELATIVE/cacerts . + popd # Install extension symlinks. install -d -m 755 $RPM_BUILD_ROOT%{jvmjardir $suffix} @@ -1808,6 +1888,44 @@ find $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}/demo \ echo "" >> accessibility.properties popd +# intentionally after all else, fx links with redirections on its own +%if %{with_openjfx_binding} + FXSDK_FILES=%{name}-openjfx-devel.files"$suffix" + FXJRE_FILES=%{name}-openjfx.files"$suffix" + echo -n "" > $FXJRE_FILES + echo -n "" > $FXSDK_FILES + for file in %{jfx_jre_libs} ; do + srcfile=%{jfx_jre_libs_dir}/$file + targetfile=%{_jvmdir}/%{jredir $suffix}/lib/$file + ln -s $srcfile $RPM_BUILD_ROOT/$targetfile + echo $targetfile >> $FXJRE_FILES + done + for file in %{jfx_jre_native} ; do + srcfile=%{jfx_jre_native_dir}/$file + targetfile=%{_jvmdir}/%{jredir $suffix}/lib/%{archinstall}/$file + ln -s $srcfile $RPM_BUILD_ROOT/$targetfile + echo $targetfile >> $FXJRE_FILES + done + for file in %{jfx_jre_exts} ; do + srcfile=%{jfx_jre_exts_dir}/$file + targetfile=%{_jvmdir}/%{jredir $suffix}/lib/ext/$file + ln -s $srcfile $RPM_BUILD_ROOT/$targetfile + echo $targetfile >> $FXJRE_FILES + done + for file in %{jfx_sdk_libs} ; do + srcfile=%{jfx_sdk_libs_dir}/$file + targetfile=%{_jvmdir}/%{sdkdir $suffix}/lib/$file + ln -s $srcfile $RPM_BUILD_ROOT/$targetfile + echo $targetfile >> $FXSDK_FILES + done + for file in %{jfx_sdk_bins} ; do + srcfile=%{jfx_sdk_bins_dir}/$file + targetfile=%{_jvmdir}/%{sdkdir $suffix}/bin/$file + ln -s $srcfile $RPM_BUILD_ROOT/$targetfile + echo $targetfile >> $FXSDK_FILES + done +%endif + bash %{SOURCE20} $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir $suffix} %{javaver} # https://bugzilla.redhat.com/show_bug.cgi?id=1183793 touch -t 201401010000 $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir $suffix}/lib/security/java.security @@ -1966,6 +2084,12 @@ require "copy_jdk_configs.lua" %files accessibility %{files_accessibility %{nil}} + +%if %{with_openjfx_binding} +%files openjfx -f %{name}-openjfx.files + +%files openjfx-devel -f %{name}-openjfx-devel.files +%endif %endif %if %{include_debug_build} @@ -1992,9 +2116,20 @@ require "copy_jdk_configs.lua" %files accessibility-debug %{files_accessibility %{debug_suffix_unquoted}} + +%if %{with_openjfx_binding} +%files openjfx-debug -f %{name}-openjfx.files-debug + +%files openjfx-devel-debug -f %{name}-openjfx-devel.files-debug +%endif + %endif %changelog +* Mon Jul 24 2017 Alex Kashchenko - 1:1.8.0.141-1.170721 +- update sources to 8u141 +- sync with mainline package + * Sat Apr 29 2017 Alex Kashchenko - 1:1.8.0.131-1.170420 - update sources to 8u131 - sync with mainline package diff --git a/pr1983-jdk.patch b/pr1983-jdk.patch index a0b4e1a..673b8a9 100644 --- a/pr1983-jdk.patch +++ b/pr1983-jdk.patch @@ -6,10 +6,11 @@ # Parent afd392dfaed501ac674a7cc3e37353ce300969c7 PR1983: Support using the system installation of NSS with the SunEC provider Summary: Apply code changes from PR1699 & PR1742 & forward-port Makefile changes to the new build. +Updated 2017/07/04 to accomodate 8175110 -diff -r afd392dfaed5 -r 48c15869ecd5 make/lib/SecurityLibraries.gmk ---- openjdk/jdk/make/lib/SecurityLibraries.gmk Tue Jan 26 22:26:26 2016 +0000 -+++ openjdk/jdk/make/lib/SecurityLibraries.gmk Wed Jan 27 02:54:06 2016 +0000 +diff -r 984a4af2ed4e make/lib/SecurityLibraries.gmk +--- openjdk/jdk/make/lib/SecurityLibraries.gmk ++++ openjdk/jdk/make/lib/SecurityLibraries.gmk @@ -218,8 +218,17 @@ ifeq ($(ENABLE_INTREE_EC), yes) @@ -51,9 +52,9 @@ diff -r afd392dfaed5 -r 48c15869ecd5 make/lib/SecurityLibraries.gmk VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \ RC_FLAGS := $(RC_FLAGS) \ -D "JDK_FNAME=sunec.dll" \ -diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ECC_JNI.cpp ---- openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp Tue Jan 26 22:26:26 2016 +0000 -+++ openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp Wed Jan 27 02:54:06 2016 +0000 +diff -r 984a4af2ed4e src/share/native/sun/security/ec/ECC_JNI.cpp +--- openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp ++++ openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp @@ -24,7 +24,7 @@ */ @@ -76,8 +77,8 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ECC_JNI.cp */ JNIEXPORT jbyteArray JNICALL Java_sun_security_ec_ECDSASignature_signDigest -- (JNIEnv *env, jclass clazz, jbyteArray digest, jbyteArray privateKey, jbyteArray encodedParams, jbyteArray seed) -+ (JNIEnv *env, jclass UNUSED(clazz), jbyteArray digest, jbyteArray privateKey, jbyteArray encodedParams, jbyteArray seed) +- (JNIEnv *env, jclass clazz, jbyteArray digest, jbyteArray privateKey, jbyteArray encodedParams, jbyteArray seed, jint timing) ++ (JNIEnv *env, jclass UNUSED(clazz), jbyteArray digest, jbyteArray privateKey, jbyteArray encodedParams, jbyteArray seed, jint timing) { jbyte* pDigestBuffer = NULL; jint jDigestLength = env->GetArrayLength(digest); @@ -99,12 +100,12 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ECC_JNI.cp { jbyteArray jSecret = NULL; ECParams *ecparams = NULL; -diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Wed Jan 27 02:54:06 2016 +0000 +diff -r 984a4af2ed4e src/share/native/sun/security/ec/ecc_impl.h +--- /dev/null ++++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h @@ -0,0 +1,298 @@ +/* -+ * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + * + * This library is free software; you can redistribute it and/or @@ -139,7 +140,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h + * Dr Vipul Gupta and + * Douglas Stebila , Sun Microsystems Laboratories + * -+ * Last Modified Date from the Original Code: November 2013 ++ * Last Modified Date from the Original Code: May 2017 + *********************************************************************** */ + +#ifndef _ECC_IMPL_H @@ -373,7 +374,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h +#ifdef SYSTEM_NSS +#define EC_DecodeParams(a,b,c) EC_DecodeParams(a,b) +#define EC_NewKey(a,b,c,d,e) EC_NewKeyFromSeed(a,b,c,d) -+#define ECDSA_SignDigest(a,b,c,d,e,f) ECDSA_SignDigestWithSeed(a,b,c,d,e) ++#define ECDSA_SignDigest(a,b,c,d,e,f,g) ECDSA_SignDigestWithSeed(a,b,c,d,e) +#define ECDSA_VerifyDigest(a,b,c,d) ECDSA_VerifyDigest(a,b,c) +#define ECDH_Derive(a,b,c,d,e,f) ECDH_Derive(a,b,c,d,e) +#else @@ -389,7 +390,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h + const unsigned char* random, int randomlen, int); +/* This function has been modified to accept an array of random bytes */ +extern SECStatus ECDSA_SignDigest(ECPrivateKey *, SECItem *, const SECItem *, -+ const unsigned char* random, int randomlen, int); ++ const unsigned char* random, int randomlen, int, int timing); +extern SECStatus ECDSA_VerifyDigest(ECPublicKey *, const SECItem *, + const SECItem *, int); +extern SECStatus ECDH_Derive(SECItem *, ECParams *, SECItem *, boolean_t, @@ -401,12 +402,12 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h +#endif + +#endif /* _ECC_IMPL_H */ -diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/impl/ecc_impl.h ---- openjdk/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h Tue Jan 26 22:26:26 2016 +0000 -+++ /dev/null Thu Jan 01 00:00:00 1970 +0000 +diff -r 984a4af2ed4e src/share/native/sun/security/ec/impl/ecc_impl.h +--- openjdk/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h ++++ /dev/null @@ -1,271 +0,0 @@ -/* -- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. +- * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * This library is free software; you can redistribute it and/or @@ -441,7 +442,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/impl/ecc_i - * Dr Vipul Gupta and - * Douglas Stebila , Sun Microsystems Laboratories - * -- * Last Modified Date from the Original Code: November 2013 +- * Last Modified Date from the Original Code: May 2017 - *********************************************************************** */ - -#ifndef _ECC_IMPL_H @@ -665,7 +666,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/impl/ecc_i - const unsigned char* random, int randomlen, int); -/* This function has been modified to accept an array of random bytes */ -extern SECStatus ECDSA_SignDigest(ECPrivateKey *, SECItem *, const SECItem *, -- const unsigned char* random, int randomlen, int); +- const unsigned char* random, int randomlen, int, int timing); -extern SECStatus ECDSA_VerifyDigest(ECPublicKey *, const SECItem *, - const SECItem *, int); -extern SECStatus ECDH_Derive(SECItem *, ECParams *, SECItem *, boolean_t, @@ -676,9 +677,9 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/impl/ecc_i -#endif - -#endif /* _ECC_IMPL_H */ -diff -r afd392dfaed5 -r 48c15869ecd5 src/solaris/javavm/export/jni_md.h ---- openjdk/jdk/src/solaris/javavm/export/jni_md.h Tue Jan 26 22:26:26 2016 +0000 -+++ openjdk/jdk/src/solaris/javavm/export/jni_md.h Wed Jan 27 02:54:06 2016 +0000 +diff -r 984a4af2ed4e src/solaris/javavm/export/jni_md.h +--- openjdk/jdk/src/solaris/javavm/export/jni_md.h ++++ openjdk/jdk/src/solaris/javavm/export/jni_md.h @@ -36,6 +36,11 @@ #define JNIEXPORT #define JNIIMPORT diff --git a/pr2899.patch b/pr2899.patch index 58fb3c8..ffdefb0 100644 --- a/pr2899.patch +++ b/pr2899.patch @@ -6,18 +6,19 @@ # Parent 8957aff589013e671f02d38023d5ff245ef27e87 PR2899: Don't use WithSeed versions of NSS functions as they don't fully process the seed Contributed-by: Alex Kashchenko +Updated 2017/07/04 to accomodate 8175110 by Andrew Hughes -diff -r 8957aff58901 -r 9dc0eca5fa89 src/share/native/sun/security/ec/ecc_impl.h ---- openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Wed Mar 30 04:48:56 2016 +0100 -+++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Wed Mar 30 05:54:40 2016 +0100 +diff -r e5fdbb82bd49 src/share/native/sun/security/ec/ecc_impl.h +--- openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h ++++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h @@ -267,8 +267,8 @@ #ifdef SYSTEM_NSS #define EC_DecodeParams(a,b,c) EC_DecodeParams(a,b) -#define EC_NewKey(a,b,c,d,e) EC_NewKeyFromSeed(a,b,c,d) --#define ECDSA_SignDigest(a,b,c,d,e,f) ECDSA_SignDigestWithSeed(a,b,c,d,e) +-#define ECDSA_SignDigest(a,b,c,d,e,f,g) ECDSA_SignDigestWithSeed(a,b,c,d,e) +#define EC_NewKey(a,b,c,d,e) EC_NewKey(a,b) -+#define ECDSA_SignDigest(a,b,c,d,e,f) ECDSA_SignDigest(a,b,c) ++#define ECDSA_SignDigest(a,b,c,d,e,f,g) ECDSA_SignDigest(a,b,c) #define ECDSA_VerifyDigest(a,b,c,d) ECDSA_VerifyDigest(a,b,c) #define ECDH_Derive(a,b,c,d,e,f) ECDH_Derive(a,b,c,d,e) #else diff --git a/pr2934.patch b/pr2934.patch index 21e769d..83385da 100644 --- a/pr2934.patch +++ b/pr2934.patch @@ -6,10 +6,11 @@ # Parent 3fa42705acab6d69b6141f47ebba4f85739a338c PR2934: SunEC provider throwing KeyException with current NSS Summary: Initialise the random number generator and feed the seed to it. +Updated 2017/07/04 to accomodate 8175110 -diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ECC_JNI.cpp ---- openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp Wed Apr 20 03:39:11 2016 +0100 -+++ openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp Fri Apr 22 19:17:13 2016 +0100 +diff -r 8aed1e903a4c src/share/native/sun/security/ec/ECC_JNI.cpp +--- openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp ++++ openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp @@ -134,8 +134,17 @@ env->GetByteArrayRegion(seed, 0, jSeedLength, pSeedBuffer); @@ -42,7 +43,7 @@ diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ECC_JNI.cp + != SECSuccess) { +#else if (ECDSA_SignDigest(&privKey, &signature_item, &digest_item, - (unsigned char *) pSeedBuffer, jSeedLength, 0) != SECSuccess) { + (unsigned char *) pSeedBuffer, jSeedLength, 0, timing) != SECSuccess) { +#endif ThrowException(env, KEY_EXCEPTION); goto cleanup; @@ -65,9 +66,9 @@ diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ECC_JNI.cp if (SECOID_Shutdown() != SECSuccess) { ThrowException(env, INTERNAL_ERROR); } -diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ecc_impl.h ---- openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Wed Apr 20 03:39:11 2016 +0100 -+++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Fri Apr 22 19:17:13 2016 +0100 +diff -r 8aed1e903a4c src/share/native/sun/security/ec/ecc_impl.h +--- openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h ++++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h @@ -254,8 +254,10 @@ This function is no longer required because the random bytes are now supplied by the caller. Force a failure. @@ -84,7 +85,7 @@ diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ecc_impl.h #ifdef SYSTEM_NSS #define EC_DecodeParams(a,b,c) EC_DecodeParams(a,b) -#define EC_NewKey(a,b,c,d,e) EC_NewKey(a,b) --#define ECDSA_SignDigest(a,b,c,d,e,f) ECDSA_SignDigest(a,b,c) +-#define ECDSA_SignDigest(a,b,c,d,e,f,g) ECDSA_SignDigest(a,b,c) #define ECDSA_VerifyDigest(a,b,c,d) ECDSA_VerifyDigest(a,b,c) #define ECDH_Derive(a,b,c,d,e,f) ECDH_Derive(a,b,c,d,e) #else diff --git a/sources b/sources index 92a8fc8..3ab8e1c 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (systemtap-tapset-3.4.0pre01.tar.xz) = 4446fa20f88bbce53b583484bf06cb2b476c9372beb898dc2b7739eaa5c98b9979fbd72e12474fb344833d831a19366b82216ee03b452411745e6cd3527faa4e -SHA512 (aarch32-port-jdk8u-jdk8u131-b12-aarch32-170420.tar.xz) = 8cfca4b5f9d58fc22ea9011182dbb58f5614e23281d781c335ed9ae069e0e6587fb82f3b733e3f38e258e802342e679a6177ea59ec45f7bb9253c2b88bfe73e7 +SHA512 (aarch32-port-jdk8u-jdk8u141-b15-aarch32-170721.tar.xz) = 81a3963eb51e33134d10fcd197530ea6589e16a807132cedc563c5a13ccc5ce2d08f0c8510008a7474792ed226d88ef8e29313cd6532e24cc7ec785c4ae4af70