diff --git a/.gitignore b/.gitignore
index ce96dbb..3fdee85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
-SOURCES/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u201-b09.tar.xz
+SOURCES/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u212-b04.tar.xz
SOURCES/systemtap_3.2_tapsets_hg-icedtea8-9d464368e06d.tar.xz
diff --git a/.java-1.8.0-openjdk.metadata b/.java-1.8.0-openjdk.metadata
index 7607966..2adc4ec 100644
--- a/.java-1.8.0-openjdk.metadata
+++ b/.java-1.8.0-openjdk.metadata
@@ -1,2 +1,2 @@
-2529357c6d61b884805898b347dad2e4432f6438 SOURCES/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u201-b09.tar.xz
+ca52171b9a47c3efd4714f974ca4e6c27d890c55 SOURCES/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u212-b04.tar.xz
cd8bf91753b9eb1401cfc529e78517105fc66011 SOURCES/systemtap_3.2_tapsets_hg-icedtea8-9d464368e06d.tar.xz
diff --git a/SOURCES/jdk8029661-pr3642-rh1477159-add_tlsv1_2_support_to_pkcs11_provider.patch b/SOURCES/jdk8029661-pr3642-rh1477159-add_tlsv1_2_support_to_pkcs11_provider.patch
deleted file mode 100644
index f7a816a..0000000
--- a/SOURCES/jdk8029661-pr3642-rh1477159-add_tlsv1_2_support_to_pkcs11_provider.patch
+++ /dev/null
@@ -1,2269 +0,0 @@
-# HG changeset patch
-# User mbalao
-# Date 1541016287 10800
-# Wed Oct 31 17:04:47 2018 -0300
-# Node ID fa06cdb4c6f7b5ca148f26d345090d48014fecff
-# Parent 478a4add975beb90696a4ead5f8fcd9c17fc1a83
-8029661, PR3642, RH1477159: Support TLS v1.2 algorithm in SunPKCS11 provider
-Summary: TLS v1.2 algorithms for key and MAC derivation added to SunPKCS11 crypto provider. 8210912 fix is included as part of this changeset.
-Reviewed-by: valeriep
-
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11TlsKeyMaterialGenerator.java openjdk/jdk/src/share/classes/sun/security/pkcs11/P11TlsKeyMaterialGenerator.java
---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11TlsKeyMaterialGenerator.java
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11TlsKeyMaterialGenerator.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2005, 2018, 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
-@@ -95,9 +95,9 @@
- throw new InvalidAlgorithmParameterException("init() failed", e);
- }
- version = (spec.getMajorVersion() << 8) | spec.getMinorVersion();
-- if ((version < 0x0300) && (version > 0x0302)) {
-- throw new InvalidAlgorithmParameterException
-- ("Only SSL 3.0, TLS 1.0, and TLS 1.1 are supported");
-+ if ((version < 0x0300) && (version > 0x0303)) {
-+ throw new InvalidAlgorithmParameterException("Only SSL 3.0," +
-+ " TLS 1.0, TLS 1.1, and TLS 1.2 are supported");
- }
- // we assume the token supports both the CKM_SSL3_* and the CKM_TLS_*
- // mechanisms
-@@ -112,8 +112,11 @@
- throw new IllegalStateException
- ("TlsKeyMaterialGenerator must be initialized");
- }
-- mechanism = (version == 0x0300) ? CKM_SSL3_KEY_AND_MAC_DERIVE
-- : CKM_TLS_KEY_AND_MAC_DERIVE;
-+ if (version == 0x0300) {
-+ mechanism = CKM_SSL3_KEY_AND_MAC_DERIVE;
-+ } else if (version == 0x0301 || version == 0x0302) {
-+ mechanism = CKM_TLS_KEY_AND_MAC_DERIVE;
-+ }
- int macBits = spec.getMacKeyLength() << 3;
- int ivBits = spec.getIvLength() << 3;
-
-@@ -129,8 +132,18 @@
-
- CK_SSL3_RANDOM_DATA random = new CK_SSL3_RANDOM_DATA
- (spec.getClientRandom(), spec.getServerRandom());
-- CK_SSL3_KEY_MAT_PARAMS params = new CK_SSL3_KEY_MAT_PARAMS
-- (macBits, keyBits, ivBits, isExportable, random);
-+ Object params = null;
-+ CK_MECHANISM ckMechanism = null;
-+ if (version < 0x0303) {
-+ params = new CK_SSL3_KEY_MAT_PARAMS
-+ (macBits, keyBits, ivBits, isExportable, random);
-+ ckMechanism = new CK_MECHANISM(mechanism, (CK_SSL3_KEY_MAT_PARAMS)params);
-+ } else if (version == 0x0303) {
-+ params = new CK_TLS12_KEY_MAT_PARAMS
-+ (macBits, keyBits, ivBits, isExportable, random,
-+ Functions.getHashMechId(spec.getPRFHashAlg()));
-+ ckMechanism = new CK_MECHANISM(mechanism, (CK_TLS12_KEY_MAT_PARAMS)params);
-+ }
-
- String cipherAlgorithm = spec.getCipherAlgorithm();
- long keyType = P11SecretKeyFactory.getKeyType(cipherAlgorithm);
-@@ -162,9 +175,14 @@
- (O_GENERATE, CKO_SECRET_KEY, keyType, attributes);
- // the returned keyID is a dummy, ignore
- long keyID = token.p11.C_DeriveKey(session.id(),
-- new CK_MECHANISM(mechanism, params), p11Key.keyID, attributes);
-+ ckMechanism, p11Key.keyID, attributes);
-
-- CK_SSL3_KEY_MAT_OUT out = params.pReturnedKeyMaterial;
-+ CK_SSL3_KEY_MAT_OUT out = null;
-+ if (params instanceof CK_SSL3_KEY_MAT_PARAMS) {
-+ out = ((CK_SSL3_KEY_MAT_PARAMS)params).pReturnedKeyMaterial;
-+ } else if (params instanceof CK_TLS12_KEY_MAT_PARAMS) {
-+ out = ((CK_TLS12_KEY_MAT_PARAMS)params).pReturnedKeyMaterial;
-+ }
- // Note that the MAC keys do not inherit all attributes from the
- // template, but they do inherit the sensitive/extractable/token
- // flags, which is all P11Key cares about.
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11TlsMasterSecretGenerator.java openjdk/jdk/src/share/classes/sun/security/pkcs11/P11TlsMasterSecretGenerator.java
---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11TlsMasterSecretGenerator.java
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11TlsMasterSecretGenerator.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2005, 2018, 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
-@@ -89,9 +89,9 @@
- throw new InvalidAlgorithmParameterException("init() failed", e);
- }
- version = (spec.getMajorVersion() << 8) | spec.getMinorVersion();
-- if ((version < 0x0300) || (version > 0x0302)) {
-- throw new InvalidAlgorithmParameterException
-- ("Only SSL 3.0, TLS 1.0, and TLS 1.1 supported");
-+ if ((version < 0x0300) && (version > 0x0303)) {
-+ throw new InvalidAlgorithmParameterException("Only SSL 3.0," +
-+ " TLS 1.0, TLS 1.1, and TLS 1.2 are supported");
- }
- // We assume the token supports the required mechanism. If it does not,
- // generateKey() will fail and the failover should take care of us.
-@@ -106,10 +106,20 @@
- throw new IllegalStateException
- ("TlsMasterSecretGenerator must be initialized");
- }
-+ final boolean isTlsRsaPremasterSecret =
-+ p11Key.getAlgorithm().equals("TlsRsaPremasterSecret");
-+ if (version == 0x0300) {
-+ mechanism = isTlsRsaPremasterSecret ?
-+ CKM_SSL3_MASTER_KEY_DERIVE : CKM_SSL3_MASTER_KEY_DERIVE_DH;
-+ } else if (version == 0x0301 || version == 0x0302) {
-+ mechanism = isTlsRsaPremasterSecret ?
-+ CKM_TLS_MASTER_KEY_DERIVE : CKM_TLS_MASTER_KEY_DERIVE_DH;
-+ } else if (version == 0x0303) {
-+ mechanism = isTlsRsaPremasterSecret ?
-+ CKM_TLS12_MASTER_KEY_DERIVE : CKM_TLS12_MASTER_KEY_DERIVE_DH;
-+ }
- CK_VERSION ckVersion;
-- if (p11Key.getAlgorithm().equals("TlsRsaPremasterSecret")) {
-- mechanism = (version == 0x0300) ? CKM_SSL3_MASTER_KEY_DERIVE
-- : CKM_TLS_MASTER_KEY_DERIVE;
-+ if (isTlsRsaPremasterSecret) {
- ckVersion = new CK_VERSION(0, 0);
- } else {
- // Note: we use DH for all non-RSA premaster secrets. That includes
-@@ -118,16 +128,23 @@
- // TLS PRF (or the SSL equivalent).
- // The only thing special about RSA master secret calculation is
- // that it extracts the version numbers from the premaster secret.
-- mechanism = (version == 0x0300) ? CKM_SSL3_MASTER_KEY_DERIVE_DH
-- : CKM_TLS_MASTER_KEY_DERIVE_DH;
- ckVersion = null;
- }
- byte[] clientRandom = spec.getClientRandom();
- byte[] serverRandom = spec.getServerRandom();
- CK_SSL3_RANDOM_DATA random =
- new CK_SSL3_RANDOM_DATA(clientRandom, serverRandom);
-- CK_SSL3_MASTER_KEY_DERIVE_PARAMS params =
-- new CK_SSL3_MASTER_KEY_DERIVE_PARAMS(random, ckVersion);
-+ CK_MECHANISM ckMechanism = null;
-+ if (version < 0x0303) {
-+ CK_SSL3_MASTER_KEY_DERIVE_PARAMS params =
-+ new CK_SSL3_MASTER_KEY_DERIVE_PARAMS(random, ckVersion);
-+ ckMechanism = new CK_MECHANISM(mechanism, params);
-+ } else if (version == 0x0303) {
-+ CK_TLS12_MASTER_KEY_DERIVE_PARAMS params =
-+ new CK_TLS12_MASTER_KEY_DERIVE_PARAMS(random, ckVersion,
-+ Functions.getHashMechId(spec.getPRFHashAlg()));
-+ ckMechanism = new CK_MECHANISM(mechanism, params);
-+ }
-
- Session session = null;
- try {
-@@ -135,9 +152,8 @@
- CK_ATTRIBUTE[] attributes = token.getAttributes(O_GENERATE,
- CKO_SECRET_KEY, CKK_GENERIC_SECRET, new CK_ATTRIBUTE[0]);
- long keyID = token.p11.C_DeriveKey(session.id(),
-- new CK_MECHANISM(mechanism, params), p11Key.keyID, attributes);
-+ ckMechanism, p11Key.keyID, attributes);
- int major, minor;
-- ckVersion = params.pVersion;
- if (ckVersion == null) {
- major = -1;
- minor = -1;
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11TlsPrfGenerator.java openjdk/jdk/src/share/classes/sun/security/pkcs11/P11TlsPrfGenerator.java
---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11TlsPrfGenerator.java
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11TlsPrfGenerator.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2005, 2018, 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
-@@ -124,8 +124,46 @@
- if (spec == null) {
- throw new IllegalStateException("TlsPrfGenerator must be initialized");
- }
-+ byte[] seed = spec.getSeed();
-+
-+ // TLS 1.2
-+ if (mechanism == CKM_TLS_MAC) {
-+ SecretKey k = null;
-+ int ulServerOrClient = 0;
-+ if (spec.getLabel().equals("server finished")) {
-+ ulServerOrClient = 1;
-+ }
-+ if (spec.getLabel().equals("client finished")) {
-+ ulServerOrClient = 2;
-+ }
-+
-+ if (ulServerOrClient != 0) {
-+ // Finished message
-+ CK_TLS_MAC_PARAMS params = new CK_TLS_MAC_PARAMS(
-+ Functions.getHashMechId(spec.getPRFHashAlg()),
-+ spec.getOutputLength(), ulServerOrClient);
-+ Session session = null;
-+ try {
-+ session = token.getOpSession();
-+ token.p11.C_SignInit(session.id(),
-+ new CK_MECHANISM(mechanism, params), p11Key.keyID);
-+ token.p11.C_SignUpdate(session.id(), 0, seed, 0, seed.length);
-+ byte[] out = token.p11.C_SignFinal
-+ (session.id(), spec.getOutputLength());
-+ k = new SecretKeySpec(out, "TlsPrf");
-+ } catch (PKCS11Exception e) {
-+ throw new ProviderException("Could not calculate PRF", e);
-+ } finally {
-+ token.releaseSession(session);
-+ }
-+ } else {
-+ throw new ProviderException("Only Finished message authentication code"+
-+ " generation supported for TLS 1.2.");
-+ }
-+ return k;
-+ }
-+
- byte[] label = P11Util.getBytesUTF8(spec.getLabel());
-- byte[] seed = spec.getSeed();
-
- if (mechanism == CKM_NSS_TLS_PRF_GENERAL) {
- Session session = null;
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11TlsRsaPremasterSecretGenerator.java openjdk/jdk/src/share/classes/sun/security/pkcs11/P11TlsRsaPremasterSecretGenerator.java
---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11TlsRsaPremasterSecretGenerator.java
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11TlsRsaPremasterSecretGenerator.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2005, 2018, 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
-@@ -57,6 +57,8 @@
- // mechanism id
- private long mechanism;
-
-+ private int version;
-+
- private TlsRsaPremasterSecretParameterSpec spec;
-
- P11TlsRsaPremasterSecretGenerator(Token token, String algorithm, long mechanism)
-@@ -77,6 +79,11 @@
- throw new InvalidAlgorithmParameterException(MSG);
- }
- this.spec = (TlsRsaPremasterSecretParameterSpec)params;
-+ version = (spec.getMajorVersion() << 8) | spec.getMinorVersion();
-+ if ((version < 0x0300) && (version > 0x0303)) {
-+ throw new InvalidAlgorithmParameterException
-+ ("Only SSL 3.0, TLS 1.0, TLS 1.1, and TLS 1.2 are supported");
-+ }
- }
-
- protected void engineInit(int keysize, SecureRandom random) {
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java
---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2018, 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
-@@ -720,38 +720,28 @@
- s("1.2.840.113549.1.1.13", "OID.1.2.840.113549.1.1.13"),
- m(CKM_SHA512_RSA_PKCS, CKM_RSA_PKCS, CKM_RSA_X_509));
-
-- /*
-- * TLS 1.2 uses a different hash algorithm than 1.0/1.1 for the
-- * PRF calculations. As of 2010, there is no PKCS11-level
-- * support for TLS 1.2 PRF calculations, and no known OS's have
-- * an internal variant we could use. Therefore for TLS 1.2, we
-- * are updating JSSE to request different provider algorithms
-- * (e.g. "SunTls12Prf"), and currently only SunJCE has these
-- * TLS 1.2 algorithms.
-- *
-- * If we reused the names such as "SunTlsPrf", the PKCS11
-- * providers would need be updated to fail correctly when
-- * presented with the wrong version number (via
-- * Provider.Service.supportsParameters()), and we would also
-- * need to add the appropriate supportsParamters() checks into
-- * KeyGenerators (not currently there).
-- *
-- * In the future, if PKCS11 support is added, we will restructure
-- * this.
-- */
- d(KG, "SunTlsRsaPremasterSecret",
- "sun.security.pkcs11.P11TlsRsaPremasterSecretGenerator",
-+ s("SunTls12RsaPremasterSecret"),
- m(CKM_SSL3_PRE_MASTER_KEY_GEN, CKM_TLS_PRE_MASTER_KEY_GEN));
- d(KG, "SunTlsMasterSecret",
- "sun.security.pkcs11.P11TlsMasterSecretGenerator",
- m(CKM_SSL3_MASTER_KEY_DERIVE, CKM_TLS_MASTER_KEY_DERIVE,
- CKM_SSL3_MASTER_KEY_DERIVE_DH,
- CKM_TLS_MASTER_KEY_DERIVE_DH));
-+ d(KG, "SunTls12MasterSecret",
-+ "sun.security.pkcs11.P11TlsMasterSecretGenerator",
-+ m(CKM_TLS12_MASTER_KEY_DERIVE, CKM_TLS12_MASTER_KEY_DERIVE_DH));
- d(KG, "SunTlsKeyMaterial",
- "sun.security.pkcs11.P11TlsKeyMaterialGenerator",
- m(CKM_SSL3_KEY_AND_MAC_DERIVE, CKM_TLS_KEY_AND_MAC_DERIVE));
-+ d(KG, "SunTls12KeyMaterial",
-+ "sun.security.pkcs11.P11TlsKeyMaterialGenerator",
-+ m(CKM_TLS12_KEY_AND_MAC_DERIVE));
- d(KG, "SunTlsPrf", "sun.security.pkcs11.P11TlsPrfGenerator",
- m(CKM_TLS_PRF, CKM_NSS_TLS_PRF_GENERAL));
-+ d(KG, "SunTls12Prf", "sun.security.pkcs11.P11TlsPrfGenerator",
-+ m(CKM_TLS_MAC));
- }
-
- // background thread that periodically checks for token insertion
-@@ -1016,13 +1006,16 @@
- if (algorithm == "SunTlsRsaPremasterSecret") {
- return new P11TlsRsaPremasterSecretGenerator(
- token, algorithm, mechanism);
-- } else if (algorithm == "SunTlsMasterSecret") {
-+ } else if (algorithm == "SunTlsMasterSecret"
-+ || algorithm == "SunTls12MasterSecret") {
- return new P11TlsMasterSecretGenerator(
- token, algorithm, mechanism);
-- } else if (algorithm == "SunTlsKeyMaterial") {
-+ } else if (algorithm == "SunTlsKeyMaterial"
-+ || algorithm == "SunTls12KeyMaterial") {
- return new P11TlsKeyMaterialGenerator(
- token, algorithm, mechanism);
-- } else if (algorithm == "SunTlsPrf") {
-+ } else if (algorithm == "SunTlsPrf"
-+ || algorithm == "SunTls12Prf") {
- return new P11TlsPrfGenerator(token, algorithm, mechanism);
- } else {
- return new P11KeyGenerator(token, algorithm, mechanism);
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM.java openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM.java
---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM.java
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_MECHANISM.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- */
-
- /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
-@@ -112,14 +112,26 @@
- init(mechanism, params);
- }
-
-+ public CK_MECHANISM(long mechanism, CK_TLS12_MASTER_KEY_DERIVE_PARAMS params) {
-+ init(mechanism, params);
-+ }
-+
- public CK_MECHANISM(long mechanism, CK_SSL3_KEY_MAT_PARAMS params) {
- init(mechanism, params);
- }
-
-+ public CK_MECHANISM(long mechanism, CK_TLS12_KEY_MAT_PARAMS params) {
-+ init(mechanism, params);
-+ }
-+
- public CK_MECHANISM(long mechanism, CK_TLS_PRF_PARAMS params) {
- init(mechanism, params);
- }
-
-+ public CK_MECHANISM(long mechanism, CK_TLS_MAC_PARAMS params) {
-+ init(mechanism, params);
-+ }
-+
- public CK_MECHANISM(long mechanism, CK_ECDH1_DERIVE_PARAMS params) {
- init(mechanism, params);
- }
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TLS12_KEY_MAT_PARAMS.java openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TLS12_KEY_MAT_PARAMS.java
-new file mode 100644
---- /dev/null
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TLS12_KEY_MAT_PARAMS.java
-@@ -0,0 +1,151 @@
-+/*
-+ * Copyright (c) 2018, Red Hat, Inc. 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. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * 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.
-+ */
-+
-+package sun.security.pkcs11.wrapper;
-+
-+/**
-+ * CK_TLS12_KEY_MAT_PARAMS from PKCS#11 v2.40.
-+ */
-+public class CK_TLS12_KEY_MAT_PARAMS {
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_ULONG ulMacSizeInBits;
-+ *
-+ */
-+ public long ulMacSizeInBits;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_ULONG ulKeySizeInBits;
-+ *
-+ */
-+ public long ulKeySizeInBits;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_ULONG ulIVSizeInBits;
-+ *
-+ */
-+ public long ulIVSizeInBits;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_BBOOL bIsExport;
-+ *
-+ */
-+ public boolean bIsExport;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_SSL3_RANDOM_DATA RandomInfo;
-+ *
-+ */
-+ public CK_SSL3_RANDOM_DATA RandomInfo;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
-+ *
-+ */
-+ public CK_SSL3_KEY_MAT_OUT pReturnedKeyMaterial;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_MECHANISM_TYPE prfHashMechanism;
-+ *
-+ */
-+ public long prfHashMechanism;
-+
-+ public CK_TLS12_KEY_MAT_PARAMS(
-+ int macSize, int keySize, int ivSize, boolean export,
-+ CK_SSL3_RANDOM_DATA random, long prfHashMechanism) {
-+ ulMacSizeInBits = macSize;
-+ ulKeySizeInBits = keySize;
-+ ulIVSizeInBits = ivSize;
-+ bIsExport = export;
-+ RandomInfo = random;
-+ pReturnedKeyMaterial = new CK_SSL3_KEY_MAT_OUT();
-+ if (ivSize != 0) {
-+ int n = ivSize >> 3;
-+ pReturnedKeyMaterial.pIVClient = new byte[n];
-+ pReturnedKeyMaterial.pIVServer = new byte[n];
-+ }
-+ this.prfHashMechanism = prfHashMechanism;
-+ }
-+
-+ /**
-+ * Returns the string representation of CK_TLS12_KEY_MAT_PARAMS.
-+ *
-+ * @return the string representation of CK_TLS12_KEY_MAT_PARAMS
-+ */
-+ public String toString() {
-+ StringBuilder buffer = new StringBuilder();
-+
-+ buffer.append(Constants.INDENT);
-+ buffer.append("ulMacSizeInBits: ");
-+ buffer.append(ulMacSizeInBits);
-+ buffer.append(Constants.NEWLINE);
-+
-+ buffer.append(Constants.INDENT);
-+ buffer.append("ulKeySizeInBits: ");
-+ buffer.append(ulKeySizeInBits);
-+ buffer.append(Constants.NEWLINE);
-+
-+ buffer.append(Constants.INDENT);
-+ buffer.append("ulIVSizeInBits: ");
-+ buffer.append(ulIVSizeInBits);
-+ buffer.append(Constants.NEWLINE);
-+
-+ buffer.append(Constants.INDENT);
-+ buffer.append("bIsExport: ");
-+ buffer.append(bIsExport);
-+ buffer.append(Constants.NEWLINE);
-+
-+ buffer.append(Constants.INDENT);
-+ buffer.append("RandomInfo: ");
-+ buffer.append(RandomInfo);
-+ buffer.append(Constants.NEWLINE);
-+
-+ buffer.append(Constants.INDENT);
-+ buffer.append("pReturnedKeyMaterial: ");
-+ buffer.append(pReturnedKeyMaterial);
-+ buffer.append(Constants.NEWLINE);
-+
-+ buffer.append(Constants.INDENT);
-+ buffer.append("prfHashMechanism: ");
-+ buffer.append(prfHashMechanism);
-+
-+ return buffer.toString();
-+ }
-+
-+}
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TLS12_MASTER_KEY_DERIVE_PARAMS.java openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TLS12_MASTER_KEY_DERIVE_PARAMS.java
-new file mode 100644
---- /dev/null
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TLS12_MASTER_KEY_DERIVE_PARAMS.java
-@@ -0,0 +1,65 @@
-+/*
-+ * Copyright (c) 2018, Red Hat, Inc. 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. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * 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.
-+ */
-+
-+package sun.security.pkcs11.wrapper;
-+
-+/**
-+ * CK_TLS12_MASTER_KEY_DERIVE_PARAMS from PKCS#11 v2.40.
-+ */
-+public class CK_TLS12_MASTER_KEY_DERIVE_PARAMS {
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_SSL3_RANDOM_DATA RandomInfo;
-+ *
-+ */
-+ public CK_SSL3_RANDOM_DATA RandomInfo;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_VERSION_PTR pVersion;
-+ *
-+ */
-+ public CK_VERSION pVersion;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_MECHANISM_TYPE prfHashMechanism;
-+ *
-+ */
-+ public long prfHashMechanism;
-+
-+ public CK_TLS12_MASTER_KEY_DERIVE_PARAMS(
-+ CK_SSL3_RANDOM_DATA random, CK_VERSION version,
-+ long prfHashMechanism) {
-+ RandomInfo = random;
-+ pVersion = version;
-+ this.prfHashMechanism = prfHashMechanism;
-+ }
-+
-+}
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TLS_MAC_PARAMS.java openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TLS_MAC_PARAMS.java
-new file mode 100644
---- /dev/null
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/CK_TLS_MAC_PARAMS.java
-@@ -0,0 +1,64 @@
-+/*
-+ * Copyright (c) 2018, Red Hat, Inc. 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. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * 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.
-+ */
-+
-+package sun.security.pkcs11.wrapper;
-+
-+/**
-+ * CK_TLS_MAC_PARAMS from PKCS#11 v2.40.
-+ */
-+public class CK_TLS_MAC_PARAMS {
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_MECHANISM_TYPE prfMechanism;
-+ *
-+ */
-+ public long prfMechanism;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_ULONG ulMacLength;
-+ *
-+ */
-+ public long ulMacLength;
-+
-+ /**
-+ * PKCS#11:
-+ *
-+ * CK_ULONG ulServerOrClient;
-+ *
-+ */
-+ public long ulServerOrClient;
-+
-+ public CK_TLS_MAC_PARAMS(long prfMechanism,
-+ long ulMacLength, long ulServerOrClient) {
-+ this.prfMechanism = prfMechanism;
-+ this.ulMacLength = ulMacLength;
-+ this.ulServerOrClient = ulServerOrClient;
-+ }
-+
-+}
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java
---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- */
-
- /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
-@@ -73,6 +73,9 @@
- private static final Map mechIds =
- new HashMap();
-
-+ private static final Map hashMechIds =
-+ new HashMap();
-+
- // key types (CKK_*)
- private static final Map keyNames =
- new HashMap();
-@@ -94,7 +97,6 @@
- private static final Map objectClassIds =
- new HashMap();
-
--
- /**
- * For converting numbers to their hex presentation.
- */
-@@ -444,6 +446,10 @@
- return getId(objectClassIds, name);
- }
-
-+ public static long getHashMechId(String name) {
-+ return hashMechIds.get(name);
-+ }
-+
- /**
- * Check the given arrays for equalitiy. This method considers both arrays as
- * equal, if both are null
or both have the same length and
-@@ -589,6 +595,10 @@
- addMapping(objectClassNames, objectClassIds, id, name);
- }
-
-+ private static void addHashMech(long id, String name) {
-+ hashMechIds.put(name, id);
-+ }
-+
- static {
- addMech(CKM_RSA_PKCS_KEY_PAIR_GEN, "CKM_RSA_PKCS_KEY_PAIR_GEN");
- addMech(CKM_RSA_PKCS, "CKM_RSA_PKCS");
-@@ -719,6 +729,10 @@
- addMech(CKM_TLS_PRF, "CKM_TLS_PRF");
- addMech(CKM_SSL3_MD5_MAC, "CKM_SSL3_MD5_MAC");
- addMech(CKM_SSL3_SHA1_MAC, "CKM_SSL3_SHA1_MAC");
-+ addMech(CKM_TLS12_MASTER_KEY_DERIVE, "CKM_TLS12_MASTER_KEY_DERIVE");
-+ addMech(CKM_TLS12_KEY_AND_MAC_DERIVE, "CKM_TLS12_KEY_AND_MAC_DERIVE");
-+ addMech(CKM_TLS12_MASTER_KEY_DERIVE_DH, "CKM_TLS12_MASTER_KEY_DERIVE_DH");
-+ addMech(CKM_TLS_MAC, "CKM_TLS_MAC");
- addMech(CKM_MD5_KEY_DERIVATION, "CKM_MD5_KEY_DERIVATION");
- addMech(CKM_MD2_KEY_DERIVATION, "CKM_MD2_KEY_DERIVATION");
- addMech(CKM_SHA1_KEY_DERIVATION, "CKM_SHA1_KEY_DERIVATION");
-@@ -794,6 +808,12 @@
- addMech(PCKM_SECURERANDOM, "SecureRandom");
- addMech(PCKM_KEYSTORE, "KeyStore");
-
-+ addHashMech(CKM_SHA_1, "SHA-1");
-+ addHashMech(CKM_SHA224, "SHA-224");
-+ addHashMech(CKM_SHA256, "SHA-256");
-+ addHashMech(CKM_SHA384, "SHA-384");
-+ addHashMech(CKM_SHA512, "SHA-512");
-+
- addKeyType(CKK_RSA, "CKK_RSA");
- addKeyType(CKK_DSA, "CKK_DSA");
- addKeyType(CKK_DH, "CKK_DH");
-diff --git openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Constants.java openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Constants.java
---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Constants.java
-+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Constants.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- */
-
- /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
-@@ -625,6 +625,14 @@
- public static final long CKM_PKCS5_PBKD2 = 0x000003B0L;
-
- public static final long CKM_PBA_SHA1_WITH_SHA1_HMAC = 0x000003C0L;
-+
-+ /* CKM_TLS12_MASTER_KEY_DERIVE, CKM_TLS12_KEY_AND_MAC_DERIVE,
-+ * CKM_TLS12_MASTER_KEY_DERIVE_DH and CKM_TLS_MAC are new for v2.40 */
-+ public static final long CKM_TLS12_MASTER_KEY_DERIVE = 0x000003E0L;
-+ public static final long CKM_TLS12_KEY_AND_MAC_DERIVE = 0x000003E1L;
-+ public static final long CKM_TLS12_MASTER_KEY_DERIVE_DH = 0x000003E2L;
-+ public static final long CKM_TLS_MAC = 0x000003E4L;
-+
- public static final long CKM_KEY_WRAP_LYNKS = 0x00000400L;
- public static final long CKM_KEY_WRAP_SET_OAEP = 0x00000401L;
-
-diff --git openjdk.orig/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_convert.c openjdk/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_convert.c
---- openjdk.orig/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_convert.c
-+++ openjdk/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_convert.c
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- */
-
- /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
-@@ -457,67 +457,113 @@
- return ckAttribute ;
- }
-
--/*
-- * converts the Java CK_SSL3_MASTER_KEY_DERIVE_PARAMS object to a
-- * CK_SSL3_MASTER_KEY_DERIVE_PARAMS structure
-- *
-- * @param env - used to call JNI funktions to get the Java classes and objects
-- * @param jParam - the Java CK_SSL3_MASTER_KEY_DERIVE_PARAMS object to convert
-- * @return - the new CK_SSL3_MASTER_KEY_DERIVE_PARAMS structure
-- */
--CK_SSL3_MASTER_KEY_DERIVE_PARAMS jSsl3MasterKeyDeriveParamToCKSsl3MasterKeyDeriveParam(JNIEnv *env, jobject jParam)
--{
-- // XXX don't return structs
-- // XXX prefetch class and field ids
-- jclass jSsl3MasterKeyDeriveParamsClass;
-- CK_SSL3_MASTER_KEY_DERIVE_PARAMS ckParam;
-+void masterKeyDeriveParamToCKMasterKeyDeriveParam(JNIEnv *env, jobject jParam,
-+ jclass masterKeyDeriveParamClass,
-+ CK_VERSION_PTR* cKMasterKeyDeriveParamVersion,
-+ CK_SSL3_RANDOM_DATA* cKMasterKeyDeriveParamRandomInfo) {
- jfieldID fieldID;
- jclass jSsl3RandomDataClass;
- jobject jRandomInfo, jRIClientRandom, jRIServerRandom, jVersion;
-- memset(&ckParam, 0, sizeof(CK_SSL3_MASTER_KEY_DERIVE_PARAMS));
-
- /* get RandomInfo */
-- jSsl3MasterKeyDeriveParamsClass = (*env)->FindClass(env, CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
-- if (jSsl3MasterKeyDeriveParamsClass == NULL) { return ckParam; }
-- fieldID = (*env)->GetFieldID(env, jSsl3MasterKeyDeriveParamsClass, "RandomInfo", "Lsun/security/pkcs11/wrapper/CK_SSL3_RANDOM_DATA;");
-- if (fieldID == NULL) { return ckParam; }
-+ fieldID = (*env)->GetFieldID(env, masterKeyDeriveParamClass, "RandomInfo",
-+ "Lsun/security/pkcs11/wrapper/CK_SSL3_RANDOM_DATA;");
-+ if (fieldID == NULL) { return; }
- jRandomInfo = (*env)->GetObjectField(env, jParam, fieldID);
-
- /* get pClientRandom and ulClientRandomLength out of RandomInfo */
- jSsl3RandomDataClass = (*env)->FindClass(env, CLASS_SSL3_RANDOM_DATA);
-- if (jSsl3RandomDataClass == NULL) { return ckParam; }
-+ if (jSsl3RandomDataClass == NULL) { return; }
- fieldID = (*env)->GetFieldID(env, jSsl3RandomDataClass, "pClientRandom", "[B");
-- if (fieldID == NULL) { return ckParam; }
-+ if (fieldID == NULL) { return; }
- jRIClientRandom = (*env)->GetObjectField(env, jRandomInfo, fieldID);
-
- /* get pServerRandom and ulServerRandomLength out of RandomInfo */
- fieldID = (*env)->GetFieldID(env, jSsl3RandomDataClass, "pServerRandom", "[B");
-- if (fieldID == NULL) { return ckParam; }
-+ if (fieldID == NULL) { return; }
- jRIServerRandom = (*env)->GetObjectField(env, jRandomInfo, fieldID);
-
- /* get pVersion */
-- fieldID = (*env)->GetFieldID(env, jSsl3MasterKeyDeriveParamsClass, "pVersion", "Lsun/security/pkcs11/wrapper/CK_VERSION;");
-- if (fieldID == NULL) { return ckParam; }
-+ fieldID = (*env)->GetFieldID(env, masterKeyDeriveParamClass, "pVersion",
-+ "Lsun/security/pkcs11/wrapper/CK_VERSION;");
-+ if (fieldID == NULL) { return; }
- jVersion = (*env)->GetObjectField(env, jParam, fieldID);
-
- /* populate java values */
-- ckParam.pVersion = jVersionToCKVersionPtr(env, jVersion);
-- if ((*env)->ExceptionCheck(env)) { return ckParam; }
-- jByteArrayToCKByteArray(env, jRIClientRandom, &(ckParam.RandomInfo.pClientRandom), &(ckParam.RandomInfo.ulClientRandomLen));
-+ *cKMasterKeyDeriveParamVersion = jVersionToCKVersionPtr(env, jVersion);
-+ if ((*env)->ExceptionCheck(env)) { return; }
-+ jByteArrayToCKByteArray(env, jRIClientRandom,
-+ &(cKMasterKeyDeriveParamRandomInfo->pClientRandom),
-+ &(cKMasterKeyDeriveParamRandomInfo->ulClientRandomLen));
- if ((*env)->ExceptionCheck(env)) {
-- free(ckParam.pVersion);
-- return ckParam;
-+ free(*cKMasterKeyDeriveParamVersion);
-+ return;
- }
-- jByteArrayToCKByteArray(env, jRIServerRandom, &(ckParam.RandomInfo.pServerRandom), &(ckParam.RandomInfo.ulServerRandomLen));
-+ jByteArrayToCKByteArray(env, jRIServerRandom,
-+ &(cKMasterKeyDeriveParamRandomInfo->pServerRandom),
-+ &(cKMasterKeyDeriveParamRandomInfo->ulServerRandomLen));
- if ((*env)->ExceptionCheck(env)) {
-- free(ckParam.pVersion);
-- free(ckParam.RandomInfo.pClientRandom);
-- return ckParam;
-+ free(*cKMasterKeyDeriveParamVersion);
-+ free(cKMasterKeyDeriveParamRandomInfo->pClientRandom);
-+ return;
- }
--
-- return ckParam ;
- }
-
-+/*
-+ * converts the Java CK_SSL3_MASTER_KEY_DERIVE_PARAMS object to a
-+ * CK_SSL3_MASTER_KEY_DERIVE_PARAMS structure
-+ *
-+ * @param env - used to call JNI functions to get the Java classes and objects
-+ * @param jParam - the Java CK_SSL3_MASTER_KEY_DERIVE_PARAMS object to convert
-+ * @return - the new CK_SSL3_MASTER_KEY_DERIVE_PARAMS structure
-+ */
-+CK_SSL3_MASTER_KEY_DERIVE_PARAMS
-+jSsl3MasterKeyDeriveParamToCKSsl3MasterKeyDeriveParam(JNIEnv *env,
-+ jobject jParam)
-+{
-+ CK_SSL3_MASTER_KEY_DERIVE_PARAMS ckParam;
-+ jclass jSsl3MasterKeyDeriveParamsClass;
-+ memset(&ckParam, 0, sizeof(CK_SSL3_MASTER_KEY_DERIVE_PARAMS));
-+ jSsl3MasterKeyDeriveParamsClass =
-+ (*env)->FindClass(env, CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
-+ if (jSsl3MasterKeyDeriveParamsClass == NULL) { return ckParam; }
-+ masterKeyDeriveParamToCKMasterKeyDeriveParam(env, jParam,
-+ jSsl3MasterKeyDeriveParamsClass,
-+ &ckParam.pVersion, &ckParam.RandomInfo);
-+ return ckParam;
-+}
-+
-+/*
-+ * converts the Java CK_TLS12_MASTER_KEY_DERIVE_PARAMS object to a
-+ * CK_TLS12_MASTER_KEY_DERIVE_PARAMS structure
-+ *
-+ * @param env - used to call JNI functions to get the Java classes and objects
-+ * @param jParam - the Java CK_TLS12_MASTER_KEY_DERIVE_PARAMS object to convert
-+ * @return - the new CK_TLS12_MASTER_KEY_DERIVE_PARAMS structure
-+ */
-+CK_TLS12_MASTER_KEY_DERIVE_PARAMS
-+jTls12MasterKeyDeriveParamToCKTls12MasterKeyDeriveParam(JNIEnv *env,
-+ jobject jParam)
-+{
-+ CK_TLS12_MASTER_KEY_DERIVE_PARAMS ckParam;
-+ jclass jTls12MasterKeyDeriveParamsClass;
-+ jfieldID fieldID;
-+ memset(&ckParam, 0, sizeof(CK_TLS12_MASTER_KEY_DERIVE_PARAMS));
-+ jTls12MasterKeyDeriveParamsClass =
-+ (*env)->FindClass(env, CLASS_TLS12_MASTER_KEY_DERIVE_PARAMS);
-+ if (jTls12MasterKeyDeriveParamsClass == NULL) { return ckParam; }
-+ masterKeyDeriveParamToCKMasterKeyDeriveParam(env, jParam,
-+ jTls12MasterKeyDeriveParamsClass, &ckParam.pVersion,
-+ &ckParam.RandomInfo);
-+ fieldID = (*env)->GetFieldID(env,
-+ jTls12MasterKeyDeriveParamsClass, "prfHashMechanism", "J");
-+ if (fieldID != NULL) {
-+ jlong prfHashMechanism =
-+ (*env)->GetLongField(env, jParam, fieldID);
-+ ckParam.prfHashMechanism = (CK_MECHANISM_TYPE)prfHashMechanism;
-+ }
-+ return ckParam;
-+}
-
- /*
- * converts the Java CK_TLS_PRF_PARAMS object to a CK_TLS_PRF_PARAMS structure
-@@ -576,126 +622,220 @@
- }
-
- /*
-- * converts the Java CK_SSL3_KEY_MAT_PARAMS object to a CK_SSL3_KEY_MAT_PARAMS structure
-- *
-- * @param env - used to call JNI funktions to get the Java classes and objects
-- * @param jParam - the Java CK_SSL3_KEY_MAT_PARAMS object to convert
-- * @return - the new CK_SSL3_KEY_MAT_PARAMS structure
-+ * converts the Java CK_TLS_MAC_PARAMS object to a CK_TLS_MAC_PARAMS structure
- */
--CK_SSL3_KEY_MAT_PARAMS jSsl3KeyMatParamToCKSsl3KeyMatParam(JNIEnv *env, jobject jParam)
-+CK_TLS_MAC_PARAMS jTlsMacParamsToCKTlsMacParam(JNIEnv *env, jobject jParam)
- {
-- // XXX don't return structs
-- // XXX prefetch class and field ids
-- jclass jSsl3KeyMatParamsClass, jSsl3RandomDataClass, jSsl3KeyMatOutClass;
-- CK_SSL3_KEY_MAT_PARAMS ckParam;
-+ jclass jTlsMacParamsClass;
-+ CK_TLS_MAC_PARAMS ckParam;
-+ jfieldID fieldID;
-+ jlong jPrfMechanism, jUlMacLength, jUlServerOrClient;
-+ memset(&ckParam, 0, sizeof(CK_TLS_MAC_PARAMS));
-+
-+ jTlsMacParamsClass = (*env)->FindClass(env, CLASS_TLS_MAC_PARAMS);
-+ if (jTlsMacParamsClass == NULL) { return ckParam; }
-+
-+ /* get prfMechanism */
-+ fieldID = (*env)->GetFieldID(env, jTlsMacParamsClass, "prfMechanism", "J");
-+ if (fieldID == NULL) { return ckParam; }
-+ jPrfMechanism = (*env)->GetLongField(env, jParam, fieldID);
-+
-+ /* get ulMacLength */
-+ fieldID = (*env)->GetFieldID(env, jTlsMacParamsClass, "ulMacLength", "J");
-+ if (fieldID == NULL) { return ckParam; }
-+ jUlMacLength = (*env)->GetLongField(env, jParam, fieldID);
-+
-+ /* get ulServerOrClient */
-+ fieldID = (*env)->GetFieldID(env, jTlsMacParamsClass, "ulServerOrClient", "J");
-+ if (fieldID == NULL) { return ckParam; }
-+ jUlServerOrClient = (*env)->GetLongField(env, jParam, fieldID);
-+
-+ /* populate java values */
-+ ckParam.prfMechanism = jLongToCKULong(jPrfMechanism);
-+ ckParam.ulMacLength = jLongToCKULong(jUlMacLength);
-+ ckParam.ulServerOrClient = jLongToCKULong(jUlServerOrClient);
-+
-+ return ckParam;
-+}
-+
-+void keyMatParamToCKKeyMatParam(JNIEnv *env, jobject jParam,
-+ jclass jKeyMatParamClass,
-+ CK_ULONG* cKKeyMatParamUlMacSizeInBits,
-+ CK_ULONG* cKKeyMatParamUlKeySizeInBits,
-+ CK_ULONG* cKKeyMatParamUlIVSizeInBits,
-+ CK_BBOOL* cKKeyMatParamBIsExport,
-+ CK_SSL3_RANDOM_DATA* cKKeyMatParamRandomInfo,
-+ CK_SSL3_KEY_MAT_OUT_PTR* cKKeyMatParamPReturnedKeyMaterial)
-+{
-+ jclass jSsl3RandomDataClass, jSsl3KeyMatOutClass;
- jfieldID fieldID;
- jlong jMacSizeInBits, jKeySizeInBits, jIVSizeInBits;
- jboolean jIsExport;
- jobject jRandomInfo, jRIClientRandom, jRIServerRandom;
- jobject jReturnedKeyMaterial, jRMIvClient, jRMIvServer;
- CK_ULONG ckTemp;
-- memset(&ckParam, 0, sizeof(CK_SSL3_KEY_MAT_PARAMS));
-
- /* get ulMacSizeInBits */
-- jSsl3KeyMatParamsClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_PARAMS);
-- if (jSsl3KeyMatParamsClass == NULL) { return ckParam; }
-- fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "ulMacSizeInBits", "J");
-- if (fieldID == NULL) { return ckParam; }
-+ fieldID = (*env)->GetFieldID(env, jKeyMatParamClass, "ulMacSizeInBits", "J");
-+ if (fieldID == NULL) { return; }
- jMacSizeInBits = (*env)->GetLongField(env, jParam, fieldID);
-
- /* get ulKeySizeInBits */
-- fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "ulKeySizeInBits", "J");
-- if (fieldID == NULL) { return ckParam; }
-+ fieldID = (*env)->GetFieldID(env, jKeyMatParamClass, "ulKeySizeInBits", "J");
-+ if (fieldID == NULL) { return; }
- jKeySizeInBits = (*env)->GetLongField(env, jParam, fieldID);
-
- /* get ulIVSizeInBits */
-- fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "ulIVSizeInBits", "J");
-- if (fieldID == NULL) { return ckParam; }
-+ fieldID = (*env)->GetFieldID(env, jKeyMatParamClass, "ulIVSizeInBits", "J");
-+ if (fieldID == NULL) { return; }
- jIVSizeInBits = (*env)->GetLongField(env, jParam, fieldID);
-
- /* get bIsExport */
-- fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "bIsExport", "Z");
-- if (fieldID == NULL) { return ckParam; }
-+ fieldID = (*env)->GetFieldID(env, jKeyMatParamClass, "bIsExport", "Z");
-+ if (fieldID == NULL) { return; }
- jIsExport = (*env)->GetBooleanField(env, jParam, fieldID);
-
- /* get RandomInfo */
- jSsl3RandomDataClass = (*env)->FindClass(env, CLASS_SSL3_RANDOM_DATA);
-- if (jSsl3RandomDataClass == NULL) { return ckParam; }
-- fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "RandomInfo", "Lsun/security/pkcs11/wrapper/CK_SSL3_RANDOM_DATA;");
-- if (fieldID == NULL) { return ckParam; }
-+ if (jSsl3RandomDataClass == NULL) { return; }
-+ fieldID = (*env)->GetFieldID(env, jKeyMatParamClass, "RandomInfo",
-+ "Lsun/security/pkcs11/wrapper/CK_SSL3_RANDOM_DATA;");
-+ if (fieldID == NULL) { return; }
- jRandomInfo = (*env)->GetObjectField(env, jParam, fieldID);
-
- /* get pClientRandom and ulClientRandomLength out of RandomInfo */
- fieldID = (*env)->GetFieldID(env, jSsl3RandomDataClass, "pClientRandom", "[B");
-- if (fieldID == NULL) { return ckParam; }
-+ if (fieldID == NULL) { return; }
- jRIClientRandom = (*env)->GetObjectField(env, jRandomInfo, fieldID);
-
- /* get pServerRandom and ulServerRandomLength out of RandomInfo */
- fieldID = (*env)->GetFieldID(env, jSsl3RandomDataClass, "pServerRandom", "[B");
-- if (fieldID == NULL) { return ckParam; }
-+ if (fieldID == NULL) { return; }
- jRIServerRandom = (*env)->GetObjectField(env, jRandomInfo, fieldID);
-
- /* get pReturnedKeyMaterial */
- jSsl3KeyMatOutClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_OUT);
-- if (jSsl3KeyMatOutClass == NULL) { return ckParam; }
-- fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "pReturnedKeyMaterial", "Lsun/security/pkcs11/wrapper/CK_SSL3_KEY_MAT_OUT;");
-- if (fieldID == NULL) { return ckParam; }
-+ if (jSsl3KeyMatOutClass == NULL) { return; }
-+ fieldID = (*env)->GetFieldID(env, jKeyMatParamClass, "pReturnedKeyMaterial",
-+ "Lsun/security/pkcs11/wrapper/CK_SSL3_KEY_MAT_OUT;");
-+ if (fieldID == NULL) { return; }
- jReturnedKeyMaterial = (*env)->GetObjectField(env, jParam, fieldID);
-
- /* get pIVClient out of pReturnedKeyMaterial */
- fieldID = (*env)->GetFieldID(env, jSsl3KeyMatOutClass, "pIVClient", "[B");
-- if (fieldID == NULL) { return ckParam; }
-+ if (fieldID == NULL) { return; }
- jRMIvClient = (*env)->GetObjectField(env, jReturnedKeyMaterial, fieldID);
-
- /* get pIVServer out of pReturnedKeyMaterial */
- fieldID = (*env)->GetFieldID(env, jSsl3KeyMatOutClass, "pIVServer", "[B");
-- if (fieldID == NULL) { return ckParam; }
-+ if (fieldID == NULL) { return; }
- jRMIvServer = (*env)->GetObjectField(env, jReturnedKeyMaterial, fieldID);
-
- /* populate java values */
-- ckParam.ulMacSizeInBits = jLongToCKULong(jMacSizeInBits);
-- ckParam.ulKeySizeInBits = jLongToCKULong(jKeySizeInBits);
-- ckParam.ulIVSizeInBits = jLongToCKULong(jIVSizeInBits);
-- ckParam.bIsExport = jBooleanToCKBBool(jIsExport);
-- jByteArrayToCKByteArray(env, jRIClientRandom, &(ckParam.RandomInfo.pClientRandom), &(ckParam.RandomInfo.ulClientRandomLen));
-- if ((*env)->ExceptionCheck(env)) { return ckParam; }
-- jByteArrayToCKByteArray(env, jRIServerRandom, &(ckParam.RandomInfo.pServerRandom), &(ckParam.RandomInfo.ulServerRandomLen));
-+ *cKKeyMatParamUlMacSizeInBits = jLongToCKULong(jMacSizeInBits);
-+ *cKKeyMatParamUlKeySizeInBits = jLongToCKULong(jKeySizeInBits);
-+ *cKKeyMatParamUlIVSizeInBits = jLongToCKULong(jIVSizeInBits);
-+ *cKKeyMatParamBIsExport = jBooleanToCKBBool(jIsExport);
-+ jByteArrayToCKByteArray(env, jRIClientRandom,
-+ &(cKKeyMatParamRandomInfo->pClientRandom),
-+ &(cKKeyMatParamRandomInfo->ulClientRandomLen));
-+ if ((*env)->ExceptionCheck(env)) { return; }
-+ jByteArrayToCKByteArray(env, jRIServerRandom,
-+ &(cKKeyMatParamRandomInfo->pServerRandom),
-+ &(cKKeyMatParamRandomInfo->ulServerRandomLen));
- if ((*env)->ExceptionCheck(env)) {
-- free(ckParam.RandomInfo.pClientRandom);
-- return ckParam;
-+ free(cKKeyMatParamRandomInfo->pClientRandom);
-+ return;
- }
- /* allocate memory for pRetrunedKeyMaterial */
-- ckParam.pReturnedKeyMaterial = (CK_SSL3_KEY_MAT_OUT_PTR) malloc(sizeof(CK_SSL3_KEY_MAT_OUT));
-- if (ckParam.pReturnedKeyMaterial == NULL) {
-- free(ckParam.RandomInfo.pClientRandom);
-- free(ckParam.RandomInfo.pServerRandom);
-+ *cKKeyMatParamPReturnedKeyMaterial =
-+ (CK_SSL3_KEY_MAT_OUT_PTR)malloc(sizeof(CK_SSL3_KEY_MAT_OUT));
-+ if (*cKKeyMatParamPReturnedKeyMaterial == NULL) {
-+ free(cKKeyMatParamRandomInfo->pClientRandom);
-+ free(cKKeyMatParamRandomInfo->pServerRandom);
- throwOutOfMemoryError(env, 0);
-- return ckParam;
-+ return;
- }
-
- // the handles are output params only, no need to fetch them from Java
-- ckParam.pReturnedKeyMaterial->hClientMacSecret = 0;
-- ckParam.pReturnedKeyMaterial->hServerMacSecret = 0;
-- ckParam.pReturnedKeyMaterial->hClientKey = 0;
-- ckParam.pReturnedKeyMaterial->hServerKey = 0;
-+ (*cKKeyMatParamPReturnedKeyMaterial)->hClientMacSecret = 0;
-+ (*cKKeyMatParamPReturnedKeyMaterial)->hServerMacSecret = 0;
-+ (*cKKeyMatParamPReturnedKeyMaterial)->hClientKey = 0;
-+ (*cKKeyMatParamPReturnedKeyMaterial)->hServerKey = 0;
-
-- jByteArrayToCKByteArray(env, jRMIvClient, &(ckParam.pReturnedKeyMaterial->pIVClient), &ckTemp);
-+ jByteArrayToCKByteArray(env, jRMIvClient,
-+ &((*cKKeyMatParamPReturnedKeyMaterial)->pIVClient), &ckTemp);
- if ((*env)->ExceptionCheck(env)) {
-- free(ckParam.RandomInfo.pClientRandom);
-- free(ckParam.RandomInfo.pServerRandom);
-- free(ckParam.pReturnedKeyMaterial);
-- return ckParam;
-+ free(cKKeyMatParamRandomInfo->pClientRandom);
-+ free(cKKeyMatParamRandomInfo->pServerRandom);
-+ free((*cKKeyMatParamPReturnedKeyMaterial));
-+ return;
- }
-- jByteArrayToCKByteArray(env, jRMIvServer, &(ckParam.pReturnedKeyMaterial->pIVServer), &ckTemp);
-+ jByteArrayToCKByteArray(env, jRMIvServer,
-+ &((*cKKeyMatParamPReturnedKeyMaterial)->pIVServer), &ckTemp);
- if ((*env)->ExceptionCheck(env)) {
-- free(ckParam.RandomInfo.pClientRandom);
-- free(ckParam.RandomInfo.pServerRandom);
-- free(ckParam.pReturnedKeyMaterial->pIVClient);
-- free(ckParam.pReturnedKeyMaterial);
-- return ckParam;
-+ free(cKKeyMatParamRandomInfo->pClientRandom);
-+ free(cKKeyMatParamRandomInfo->pServerRandom);
-+ free((*cKKeyMatParamPReturnedKeyMaterial)->pIVClient);
-+ free((*cKKeyMatParamPReturnedKeyMaterial));
-+ return;
- }
-
-- return ckParam ;
-+ return;
-+}
-+/*
-+ * converts the Java CK_SSL3_KEY_MAT_PARAMS object to a
-+ * CK_SSL3_KEY_MAT_PARAMS structure
-+ *
-+ * @param env - used to call JNI funktions to get the Java classes and objects
-+ * @param jParam - the Java CK_SSL3_KEY_MAT_PARAMS object to convert
-+ * @return - the new CK_SSL3_KEY_MAT_PARAMS structure
-+ */
-+CK_SSL3_KEY_MAT_PARAMS
-+jSsl3KeyMatParamToCKSsl3KeyMatParam(JNIEnv *env, jobject jParam)
-+{
-+ CK_SSL3_KEY_MAT_PARAMS ckParam;
-+ jclass jSsl3KeyMatParamsClass;
-+ memset(&ckParam, 0, sizeof(CK_SSL3_KEY_MAT_PARAMS));
-+ jSsl3KeyMatParamsClass = (*env)->FindClass(env,
-+ CLASS_SSL3_KEY_MAT_PARAMS);
-+ if (jSsl3KeyMatParamsClass == NULL) { return ckParam; }
-+ keyMatParamToCKKeyMatParam(env, jParam, jSsl3KeyMatParamsClass,
-+ &ckParam.ulMacSizeInBits, &ckParam.ulKeySizeInBits,
-+ &ckParam.ulIVSizeInBits, &ckParam.bIsExport,
-+ &ckParam.RandomInfo, &ckParam.pReturnedKeyMaterial);
-+ return ckParam;
-+}
-+
-+/*
-+ * converts the Java CK_TLS12_KEY_MAT_PARAMS object to a
-+ * CK_TLS12_KEY_MAT_PARAMS structure
-+ *
-+ * @param env - used to call JNI functions to get the Java classes and objects
-+ * @param jParam - the Java CK_TLS12_KEY_MAT_PARAMS object to convert
-+ * @return - the new CK_TLS12_KEY_MAT_PARAMS structure
-+ */
-+CK_TLS12_KEY_MAT_PARAMS jTls12KeyMatParamToCKTls12KeyMatParam(JNIEnv *env,
-+ jobject jParam)
-+{
-+ CK_TLS12_KEY_MAT_PARAMS ckParam;
-+ jclass jTls12KeyMatParamsClass;
-+ jfieldID fieldID;
-+ memset(&ckParam, 0, sizeof(CK_TLS12_KEY_MAT_PARAMS));
-+ jTls12KeyMatParamsClass = (*env)->FindClass(env,
-+ CLASS_TLS12_KEY_MAT_PARAMS);
-+ if (jTls12KeyMatParamsClass == NULL) { return ckParam; }
-+ keyMatParamToCKKeyMatParam(env, jParam, jTls12KeyMatParamsClass,
-+ &ckParam.ulMacSizeInBits, &ckParam.ulKeySizeInBits,
-+ &ckParam.ulIVSizeInBits, &ckParam.bIsExport,
-+ &ckParam.RandomInfo, &ckParam.pReturnedKeyMaterial);
-+ fieldID = (*env)->GetFieldID(env, jTls12KeyMatParamsClass,
-+ "prfHashMechanism", "J");
-+ if (fieldID != NULL) {
-+ jlong prfHashMechanism = (*env)->GetLongField(env, jParam, fieldID);
-+ ckParam.prfHashMechanism = (CK_MECHANISM_TYPE)prfHashMechanism;
-+ }
-+ return ckParam;
- }
-
- /*
-@@ -980,8 +1120,11 @@
- void jMechanismParameterToCKMechanismParameterSlow(JNIEnv *env, jobject jParam, CK_VOID_PTR *ckpParamPtr, CK_ULONG *ckpLength)
- {
- /* get all Java mechanism parameter classes */
-- jclass jVersionClass, jSsl3MasterKeyDeriveParamsClass, jSsl3KeyMatParamsClass;
-- jclass jTlsPrfParamsClass, jAesCtrParamsClass, jRsaPkcsOaepParamsClass;
-+ jclass jVersionClass, jSsl3MasterKeyDeriveParamsClass;
-+ jclass jTls12MasterKeyDeriveParamsClass, jSsl3KeyMatParamsClass;
-+ jclass jTls12KeyMatParamsClass;
-+ jclass jTlsPrfParamsClass, jTlsMacParamsClass, jAesCtrParamsClass;
-+ jclass jRsaPkcsOaepParamsClass;
- jclass jPbeParamsClass, jPkcs5Pbkd2ParamsClass, jRsaPkcsPssParamsClass;
- jclass jEcdh1DeriveParamsClass, jEcdh2DeriveParamsClass;
- jclass jX942Dh1DeriveParamsClass, jX942Dh2DeriveParamsClass;
-@@ -1061,6 +1204,62 @@
- return;
- }
-
-+ jTls12KeyMatParamsClass = (*env)->FindClass(env, CLASS_TLS12_KEY_MAT_PARAMS);
-+ if (jTls12KeyMatParamsClass == NULL) { return; }
-+ if ((*env)->IsInstanceOf(env, jParam, jTls12KeyMatParamsClass)) {
-+ /*
-+ * CK_TLS12_KEY_MAT_PARAMS
-+ */
-+ CK_TLS12_KEY_MAT_PARAMS_PTR ckpParam;
-+
-+ ckpParam = (CK_TLS12_KEY_MAT_PARAMS_PTR) malloc(sizeof(CK_TLS12_KEY_MAT_PARAMS));
-+ if (ckpParam == NULL) {
-+ throwOutOfMemoryError(env, 0);
-+ return;
-+ }
-+
-+ /* convert jParameter to CKParameter */
-+ *ckpParam = jTls12KeyMatParamToCKTls12KeyMatParam(env, jParam);
-+ if ((*env)->ExceptionCheck(env)) {
-+ free(ckpParam);
-+ return;
-+ }
-+
-+ /* get length and pointer of parameter */
-+ *ckpLength = sizeof(CK_TLS12_KEY_MAT_PARAMS);
-+ *ckpParamPtr = ckpParam;
-+ return;
-+ }
-+
-+ jTls12MasterKeyDeriveParamsClass =
-+ (*env)->FindClass(env, CLASS_TLS12_MASTER_KEY_DERIVE_PARAMS);
-+ if (jTls12MasterKeyDeriveParamsClass == NULL) { return; }
-+ if ((*env)->IsInstanceOf(env, jParam, jTls12MasterKeyDeriveParamsClass)) {
-+ /*
-+ * CK_TLS12_MASTER_KEY_DERIVE_PARAMS
-+ */
-+ CK_TLS12_MASTER_KEY_DERIVE_PARAMS_PTR ckpParam;
-+
-+ ckpParam = (CK_TLS12_MASTER_KEY_DERIVE_PARAMS_PTR)malloc(
-+ sizeof(CK_TLS12_MASTER_KEY_DERIVE_PARAMS));
-+ if (ckpParam == NULL) {
-+ throwOutOfMemoryError(env, 0);
-+ return;
-+ }
-+
-+ /* convert jParameter to CKParameter */
-+ *ckpParam = jTls12MasterKeyDeriveParamToCKTls12MasterKeyDeriveParam(env, jParam);
-+ if ((*env)->ExceptionCheck(env)) {
-+ free(ckpParam);
-+ return;
-+ }
-+
-+ /* get length and pointer of parameter */
-+ *ckpLength = sizeof(CK_TLS12_MASTER_KEY_DERIVE_PARAMS);
-+ *ckpParamPtr = ckpParam;
-+ return;
-+ }
-+
- jTlsPrfParamsClass = (*env)->FindClass(env, CLASS_TLS_PRF_PARAMS);
- if (jTlsPrfParamsClass == NULL) { return; }
- if ((*env)->IsInstanceOf(env, jParam, jTlsPrfParamsClass)) {
-@@ -1088,6 +1287,30 @@
- return;
- }
-
-+ jTlsMacParamsClass = (*env)->FindClass(env, CLASS_TLS_MAC_PARAMS);
-+ if (jTlsMacParamsClass == NULL) { return; }
-+ if ((*env)->IsInstanceOf(env, jParam, jTlsMacParamsClass)) {
-+ CK_TLS_MAC_PARAMS_PTR ckpParam;
-+
-+ ckpParam = (CK_TLS_MAC_PARAMS_PTR) malloc(sizeof(CK_TLS_MAC_PARAMS));
-+ if (ckpParam == NULL) {
-+ throwOutOfMemoryError(env, 0);
-+ return;
-+ }
-+
-+ /* convert jParameter to CKParameter */
-+ *ckpParam = jTlsMacParamsToCKTlsMacParam(env, jParam);
-+ if ((*env)->ExceptionCheck(env)) {
-+ free(ckpParam);
-+ return;
-+ }
-+
-+ /* get length and pointer of parameter */
-+ *ckpLength = sizeof(CK_TLS_MAC_PARAMS);
-+ *ckpParamPtr = ckpParam;
-+ return;
-+ }
-+
- jAesCtrParamsClass = (*env)->FindClass(env, CLASS_AES_CTR_PARAMS);
- if (jAesCtrParamsClass == NULL) { return; }
- if ((*env)->IsInstanceOf(env, jParam, jAesCtrParamsClass)) {
-diff --git openjdk.orig/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c openjdk/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c
---- openjdk.orig/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c
-+++ openjdk/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- */
-
- /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
-@@ -355,25 +355,38 @@
-
- #ifdef P11_ENABLE_C_DERIVEKEY
-
--void freeMasterKeyDeriveParams(CK_MECHANISM_PTR ckMechanism) {
-+static void freeMasterKeyDeriveParams(CK_SSL3_RANDOM_DATA *RandomInfo, CK_VERSION_PTR pVersion) {
-+ if (RandomInfo->pClientRandom != NULL) {
-+ free(RandomInfo->pClientRandom);
-+ }
-+ if (RandomInfo->pServerRandom != NULL) {
-+ free(RandomInfo->pServerRandom);
-+ }
-+ if (pVersion != NULL) {
-+ free(pVersion);
-+ }
-+}
-+
-+void ssl3FreeMasterKeyDeriveParams(CK_MECHANISM_PTR ckMechanism) {
- CK_SSL3_MASTER_KEY_DERIVE_PARAMS *params = (CK_SSL3_MASTER_KEY_DERIVE_PARAMS *) ckMechanism->pParameter;
- if (params == NULL) {
- return;
- }
-+ freeMasterKeyDeriveParams(&(params->RandomInfo), params->pVersion);
-+}
-
-- if (params->RandomInfo.pClientRandom != NULL) {
-- free(params->RandomInfo.pClientRandom);
-+void tls12FreeMasterKeyDeriveParams(CK_MECHANISM_PTR ckMechanism) {
-+ CK_TLS12_MASTER_KEY_DERIVE_PARAMS *params =
-+ (CK_TLS12_MASTER_KEY_DERIVE_PARAMS *)ckMechanism->pParameter;
-+ if (params == NULL) {
-+ return;
- }
-- if (params->RandomInfo.pServerRandom != NULL) {
-- free(params->RandomInfo.pServerRandom);
-- }
-- if (params->pVersion != NULL) {
-- free(params->pVersion);
-- }
-+ freeMasterKeyDeriveParams(&(params->RandomInfo), params->pVersion);
- }
-
- void freeEcdh1DeriveParams(CK_MECHANISM_PTR ckMechanism) {
-- CK_ECDH1_DERIVE_PARAMS *params = (CK_ECDH1_DERIVE_PARAMS *) ckMechanism->pParameter;
-+ CK_ECDH1_DERIVE_PARAMS *params =
-+ (CK_ECDH1_DERIVE_PARAMS *)ckMechanism->pParameter;
- if (params == NULL) {
- return;
- }
-@@ -498,6 +511,7 @@
- switch (ckMechanism.mechanism) {
- case CKM_SSL3_KEY_AND_MAC_DERIVE:
- case CKM_TLS_KEY_AND_MAC_DERIVE:
-+ case CKM_TLS12_KEY_AND_MAC_DERIVE:
- case CKM_TLS_PRF:
- // these mechanism do not return a key handle via phKey
- // set to NULL in case pedantic implementations check for it
-@@ -519,17 +533,28 @@
- case CKM_SSL3_MASTER_KEY_DERIVE:
- case CKM_TLS_MASTER_KEY_DERIVE:
- /* we must copy back the client version */
-- copyBackClientVersion(env, &ckMechanism, jMechanism);
-- freeMasterKeyDeriveParams(&ckMechanism);
-+ ssl3CopyBackClientVersion(env, &ckMechanism, jMechanism);
-+ ssl3FreeMasterKeyDeriveParams(&ckMechanism);
-+ break;
-+ case CKM_TLS12_MASTER_KEY_DERIVE:
-+ tls12CopyBackClientVersion(env, &ckMechanism, jMechanism);
-+ tls12FreeMasterKeyDeriveParams(&ckMechanism);
- break;
- case CKM_SSL3_MASTER_KEY_DERIVE_DH:
- case CKM_TLS_MASTER_KEY_DERIVE_DH:
-- freeMasterKeyDeriveParams(&ckMechanism);
-+ ssl3FreeMasterKeyDeriveParams(&ckMechanism);
-+ break;
-+ case CKM_TLS12_MASTER_KEY_DERIVE_DH:
-+ tls12FreeMasterKeyDeriveParams(&ckMechanism);
- break;
- case CKM_SSL3_KEY_AND_MAC_DERIVE:
- case CKM_TLS_KEY_AND_MAC_DERIVE:
- /* we must copy back the unwrapped key info to the jMechanism object */
-- copyBackSSLKeyMatParams(env, &ckMechanism, jMechanism);
-+ ssl3CopyBackKeyMatParams(env, &ckMechanism, jMechanism);
-+ break;
-+ case CKM_TLS12_KEY_AND_MAC_DERIVE:
-+ /* we must copy back the unwrapped key info to the jMechanism object */
-+ tls12CopyBackKeyMatParams(env, &ckMechanism, jMechanism);
- break;
- case CKM_TLS_PRF:
- copyBackTLSPrfParams(env, &ckMechanism, jMechanism);
-@@ -550,53 +575,42 @@
- return jKeyHandle ;
- }
-
--/*
-- * Copy back the client version information from the native
-- * structure to the Java object. This is only used for the
-- * CKM_SSL3_MASTER_KEY_DERIVE mechanism when used for deriving a key.
-- *
-- */
--void copyBackClientVersion(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism)
-+static void copyBackClientVersion(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism,
-+ CK_VERSION *ckVersion, const char *class_master_key_derive_params)
- {
-- jclass jMechanismClass, jSSL3MasterKeyDeriveParamsClass, jVersionClass;
-- CK_SSL3_MASTER_KEY_DERIVE_PARAMS *ckSSL3MasterKeyDeriveParams;
-- CK_VERSION *ckVersion;
-- jfieldID fieldID;
-- CK_MECHANISM_TYPE ckMechanismType;
-- jlong jMechanismType;
-- jobject jSSL3MasterKeyDeriveParams;
-- jobject jVersion;
-+ jclass jMasterKeyDeriveParamsClass, jMechanismClass, jVersionClass;
-+ jobject jMasterKeyDeriveParams;
-+ jfieldID fieldID;
-+ CK_MECHANISM_TYPE ckMechanismType;
-+ jlong jMechanismType;
-+ jobject jVersion;
-
-- /* get mechanism */
-- jMechanismClass = (*env)->FindClass(env, CLASS_MECHANISM);
-- if (jMechanismClass == NULL) { return; }
-- fieldID = (*env)->GetFieldID(env, jMechanismClass, "mechanism", "J");
-- if (fieldID == NULL) { return; }
-- jMechanismType = (*env)->GetLongField(env, jMechanism, fieldID);
-- ckMechanismType = jLongToCKULong(jMechanismType);
-- if (ckMechanismType != ckMechanism->mechanism) {
-- /* we do not have maching types, this should not occur */
-- return;
-- }
-+ /* get mechanism */
-+ jMechanismClass = (*env)->FindClass(env, CLASS_MECHANISM);
-+ if (jMechanismClass == NULL) { return; }
-+ fieldID = (*env)->GetFieldID(env, jMechanismClass, "mechanism", "J");
-+ if (fieldID == NULL) { return; }
-+ jMechanismType = (*env)->GetLongField(env, jMechanism, fieldID);
-+ ckMechanismType = jLongToCKULong(jMechanismType);
-+ if (ckMechanismType != ckMechanism->mechanism) {
-+ /* we do not have maching types, this should not occur */
-+ return;
-+ }
-
-- /* get the native CK_SSL3_MASTER_KEY_DERIVE_PARAMS */
-- ckSSL3MasterKeyDeriveParams = (CK_SSL3_MASTER_KEY_DERIVE_PARAMS *) ckMechanism->pParameter;
-- if (ckSSL3MasterKeyDeriveParams != NULL_PTR) {
-- /* get the native CK_VERSION */
-- ckVersion = ckSSL3MasterKeyDeriveParams->pVersion;
- if (ckVersion != NULL_PTR) {
- /* get the Java CK_SSL3_MASTER_KEY_DERIVE_PARAMS (pParameter) */
- fieldID = (*env)->GetFieldID(env, jMechanismClass, "pParameter", "Ljava/lang/Object;");
- if (fieldID == NULL) { return; }
-
-- jSSL3MasterKeyDeriveParams = (*env)->GetObjectField(env, jMechanism, fieldID);
-+ jMasterKeyDeriveParams = (*env)->GetObjectField(env, jMechanism, fieldID);
-
- /* get the Java CK_VERSION */
-- jSSL3MasterKeyDeriveParamsClass = (*env)->FindClass(env, CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
-- if (jSSL3MasterKeyDeriveParamsClass == NULL) { return; }
-- fieldID = (*env)->GetFieldID(env, jSSL3MasterKeyDeriveParamsClass, "pVersion", "L"CLASS_VERSION";");
-+ jMasterKeyDeriveParamsClass = (*env)->FindClass(env, class_master_key_derive_params);
-+ if (jMasterKeyDeriveParamsClass == NULL) { return; }
-+ fieldID = (*env)->GetFieldID(env, jMasterKeyDeriveParamsClass,
-+ "pVersion", "L"CLASS_VERSION";");
- if (fieldID == NULL) { return; }
-- jVersion = (*env)->GetObjectField(env, jSSL3MasterKeyDeriveParams, fieldID);
-+ jVersion = (*env)->GetObjectField(env, jMasterKeyDeriveParams, fieldID);
-
- /* now copy back the version from the native structure to the Java structure */
-
-@@ -612,92 +626,126 @@
- if (fieldID == NULL) { return; }
- (*env)->SetByteField(env, jVersion, fieldID, ckByteToJByte(ckVersion->minor));
- }
-- }
- }
-
-+/*
-+ * Copy back the client version information from the native
-+ * structure to the Java object. This is only used for
-+ * CKM_SSL3_MASTER_KEY_DERIVE and CKM_TLS_MASTER_KEY_DERIVE
-+ * mechanisms when used for deriving a key.
-+ *
-+ */
-+void ssl3CopyBackClientVersion(JNIEnv *env, CK_MECHANISM *ckMechanism,
-+ jobject jMechanism)
-+{
-+ CK_SSL3_MASTER_KEY_DERIVE_PARAMS *ckSSL3MasterKeyDeriveParams;
-+ ckSSL3MasterKeyDeriveParams =
-+ (CK_SSL3_MASTER_KEY_DERIVE_PARAMS *)ckMechanism->pParameter;
-+ if (ckSSL3MasterKeyDeriveParams != NULL_PTR) {
-+ copyBackClientVersion(env, ckMechanism, jMechanism,
-+ ckSSL3MasterKeyDeriveParams->pVersion,
-+ CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
-+ }
-+}
-
- /*
-- * Copy back the derived keys and initialization vectors from the native
-- * structure to the Java object. This is only used for the
-- * CKM_SSL3_KEY_AND_MAC_DERIVE mechanism when used for deriving a key.
-+ * Copy back the client version information from the native
-+ * structure to the Java object. This is only used for
-+ * CKM_TLS12_MASTER_KEY_DERIVE mechanism when used for deriving a key.
- *
- */
--void copyBackSSLKeyMatParams(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism)
-+void tls12CopyBackClientVersion(JNIEnv *env, CK_MECHANISM *ckMechanism,
-+ jobject jMechanism)
- {
-- jclass jMechanismClass, jSSL3KeyMatParamsClass, jSSL3KeyMatOutClass;
-- CK_SSL3_KEY_MAT_PARAMS *ckSSL3KeyMatParam;
-- CK_SSL3_KEY_MAT_OUT *ckSSL3KeyMatOut;
-- jfieldID fieldID;
-- CK_MECHANISM_TYPE ckMechanismType;
-- jlong jMechanismType;
-- CK_BYTE_PTR iv;
-- jobject jSSL3KeyMatParam;
-- jobject jSSL3KeyMatOut;
-- jobject jIV;
-- jint jLength;
-- jbyte* jBytes;
-- int i;
-+ CK_TLS12_MASTER_KEY_DERIVE_PARAMS *ckTLS12MasterKeyDeriveParams;
-+ ckTLS12MasterKeyDeriveParams =
-+ (CK_TLS12_MASTER_KEY_DERIVE_PARAMS *)ckMechanism->pParameter;
-+ if (ckTLS12MasterKeyDeriveParams != NULL_PTR) {
-+ copyBackClientVersion(env, ckMechanism, jMechanism,
-+ ckTLS12MasterKeyDeriveParams->pVersion,
-+ CLASS_TLS12_MASTER_KEY_DERIVE_PARAMS);
-+ }
-+}
-
-- /* get mechanism */
-- jMechanismClass= (*env)->FindClass(env, CLASS_MECHANISM);
-- if (jMechanismClass == NULL) { return; }
-- fieldID = (*env)->GetFieldID(env, jMechanismClass, "mechanism", "J");
-- if (fieldID == NULL) { return; }
-- jMechanismType = (*env)->GetLongField(env, jMechanism, fieldID);
-- ckMechanismType = jLongToCKULong(jMechanismType);
-- if (ckMechanismType != ckMechanism->mechanism) {
-- /* we do not have maching types, this should not occur */
-- return;
-- }
-+static void copyBackKeyMatParams(JNIEnv *env, CK_MECHANISM *ckMechanism,
-+ jobject jMechanism, CK_SSL3_RANDOM_DATA *RandomInfo,
-+ CK_SSL3_KEY_MAT_OUT_PTR ckSSL3KeyMatOut, const char *class_key_mat_params)
-+{
-+ jclass jMechanismClass, jKeyMatParamsClass, jSSL3KeyMatOutClass;
-+ jfieldID fieldID;
-+ CK_MECHANISM_TYPE ckMechanismType;
-+ jlong jMechanismType;
-+ CK_BYTE_PTR iv;
-+ jobject jKeyMatParam;
-+ jobject jSSL3KeyMatOut;
-+ jobject jIV;
-+ jint jLength;
-+ jbyte* jBytes;
-+ int i;
-
-- /* get the native CK_SSL3_KEY_MAT_PARAMS */
-- ckSSL3KeyMatParam = (CK_SSL3_KEY_MAT_PARAMS *) ckMechanism->pParameter;
-- if (ckSSL3KeyMatParam != NULL_PTR) {
-- // free malloc'd data
-- if (ckSSL3KeyMatParam->RandomInfo.pClientRandom != NULL) {
-- free(ckSSL3KeyMatParam->RandomInfo.pClientRandom);
-- }
-- if (ckSSL3KeyMatParam->RandomInfo.pServerRandom != NULL) {
-- free(ckSSL3KeyMatParam->RandomInfo.pServerRandom);
-+ /* get mechanism */
-+ jMechanismClass= (*env)->FindClass(env, CLASS_MECHANISM);
-+ if (jMechanismClass == NULL) { return; }
-+ fieldID = (*env)->GetFieldID(env, jMechanismClass, "mechanism", "J");
-+ if (fieldID == NULL) { return; }
-+ jMechanismType = (*env)->GetLongField(env, jMechanism, fieldID);
-+ ckMechanismType = jLongToCKULong(jMechanismType);
-+ if (ckMechanismType != ckMechanism->mechanism) {
-+ /* we do not have maching types, this should not occur */
-+ return;
- }
-
-- /* get the native CK_SSL3_KEY_MAT_OUT */
-- ckSSL3KeyMatOut = ckSSL3KeyMatParam->pReturnedKeyMaterial;
-+ // free malloc'd data
-+ if (RandomInfo->pClientRandom != NULL) {
-+ free(RandomInfo->pClientRandom);
-+ }
-+ if (RandomInfo->pServerRandom != NULL) {
-+ free(RandomInfo->pServerRandom);
-+ }
-+
- if (ckSSL3KeyMatOut != NULL_PTR) {
-- /* get the Java CK_SSL3_KEY_MAT_PARAMS (pParameter) */
-- fieldID = (*env)->GetFieldID(env, jMechanismClass, "pParameter", "Ljava/lang/Object;");
-+ /* get the Java params object (pParameter) */
-+ fieldID = (*env)->GetFieldID(env, jMechanismClass, "pParameter",
-+ "Ljava/lang/Object;");
- if (fieldID == NULL) { return; }
-- jSSL3KeyMatParam = (*env)->GetObjectField(env, jMechanism, fieldID);
-+ jKeyMatParam = (*env)->GetObjectField(env, jMechanism, fieldID);
-
- /* get the Java CK_SSL3_KEY_MAT_OUT */
-- jSSL3KeyMatParamsClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_PARAMS);
-- if (jSSL3KeyMatParamsClass == NULL) { return; }
-- fieldID = (*env)->GetFieldID(env, jSSL3KeyMatParamsClass, "pReturnedKeyMaterial", "L"CLASS_SSL3_KEY_MAT_OUT";");
-+ jKeyMatParamsClass = (*env)->FindClass(env, class_key_mat_params);
-+ if (jKeyMatParamsClass == NULL) { return; }
-+ fieldID = (*env)->GetFieldID(env, jKeyMatParamsClass,
-+ "pReturnedKeyMaterial", "L"CLASS_SSL3_KEY_MAT_OUT";");
- if (fieldID == NULL) { return; }
-- jSSL3KeyMatOut = (*env)->GetObjectField(env, jSSL3KeyMatParam, fieldID);
-+ jSSL3KeyMatOut = (*env)->GetObjectField(env, jKeyMatParam, fieldID);
-
- /* now copy back all the key handles and the initialization vectors */
- /* copy back client MAC secret handle */
- jSSL3KeyMatOutClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_OUT);
- if (jSSL3KeyMatOutClass == NULL) { return; }
-- fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "hClientMacSecret", "J");
-+ fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass,
-+ "hClientMacSecret", "J");
- if (fieldID == NULL) { return; }
-- (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID, ckULongToJLong(ckSSL3KeyMatOut->hClientMacSecret));
-+ (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID,
-+ ckULongToJLong(ckSSL3KeyMatOut->hClientMacSecret));
-
- /* copy back server MAC secret handle */
-- fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "hServerMacSecret", "J");
-+ fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass,
-+ "hServerMacSecret", "J");
- if (fieldID == NULL) { return; }
-- (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID, ckULongToJLong(ckSSL3KeyMatOut->hServerMacSecret));
-+ (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID,
-+ ckULongToJLong(ckSSL3KeyMatOut->hServerMacSecret));
-
- /* copy back client secret key handle */
- fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "hClientKey", "J");
- if (fieldID == NULL) { return; }
-- (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID, ckULongToJLong(ckSSL3KeyMatOut->hClientKey));
-+ (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID,
-+ ckULongToJLong(ckSSL3KeyMatOut->hClientKey));
-
- /* copy back server secret key handle */
- fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "hServerKey", "J");
- if (fieldID == NULL) { return; }
-- (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID, ckULongToJLong(ckSSL3KeyMatOut->hServerKey));
-+ (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID,
-+ ckULongToJLong(ckSSL3KeyMatOut->hServerKey));
-
- /* copy back the client IV */
- fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "pIVClient", "[B");
-@@ -740,7 +788,45 @@
- free(ckSSL3KeyMatOut->pIVServer);
- free(ckSSL3KeyMatOut);
- }
-- }
-+}
-+
-+/*
-+ * Copy back the derived keys and initialization vectors from the native
-+ * structure to the Java object. This is only used for
-+ * CKM_SSL3_KEY_AND_MAC_DERIVE and CKM_TLS_KEY_AND_MAC_DERIVE mechanisms
-+ * when used for deriving a key.
-+ *
-+ */
-+void ssl3CopyBackKeyMatParams(JNIEnv *env, CK_MECHANISM *ckMechanism,
-+ jobject jMechanism)
-+{
-+ CK_SSL3_KEY_MAT_PARAMS *ckSSL3KeyMatParam;
-+ ckSSL3KeyMatParam = (CK_SSL3_KEY_MAT_PARAMS *)ckMechanism->pParameter;
-+ if (ckSSL3KeyMatParam != NULL_PTR) {
-+ copyBackKeyMatParams(env, ckMechanism, jMechanism,
-+ &(ckSSL3KeyMatParam->RandomInfo),
-+ ckSSL3KeyMatParam->pReturnedKeyMaterial,
-+ CLASS_SSL3_KEY_MAT_PARAMS);
-+ }
-+}
-+
-+/*
-+ * Copy back the derived keys and initialization vectors from the native
-+ * structure to the Java object. This is only used for
-+ * CKM_TLS12_KEY_AND_MAC_DERIVE mechanism when used for deriving a key.
-+ *
-+ */
-+void tls12CopyBackKeyMatParams(JNIEnv *env, CK_MECHANISM *ckMechanism,
-+ jobject jMechanism)
-+{
-+ CK_TLS12_KEY_MAT_PARAMS *ckTLS12KeyMatParam;
-+ ckTLS12KeyMatParam = (CK_TLS12_KEY_MAT_PARAMS *) ckMechanism->pParameter;
-+ if (ckTLS12KeyMatParam != NULL_PTR) {
-+ copyBackKeyMatParams(env, ckMechanism, jMechanism,
-+ &(ckTLS12KeyMatParam->RandomInfo),
-+ ckTLS12KeyMatParam->pReturnedKeyMaterial,
-+ CLASS_TLS12_KEY_MAT_PARAMS);
-+ }
- }
-
- #endif
-diff --git openjdk.orig/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11t.h openjdk/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11t.h
---- openjdk.orig/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11t.h
-+++ openjdk/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11t.h
-@@ -807,6 +807,12 @@
- #define CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE 0x000003D4
- #define CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE 0x000003D5
-
-+/* new for v2.40 */
-+#define CKM_TLS12_MASTER_KEY_DERIVE 0x000003E0
-+#define CKM_TLS12_KEY_AND_MAC_DERIVE 0x000003E1
-+#define CKM_TLS12_MASTER_KEY_DERIVE_DH 0x000003E2
-+#define CKM_TLS_MAC 0x000003E4
-+
- #define CKM_KEY_WRAP_LYNKS 0x00000400
- #define CKM_KEY_WRAP_SET_OAEP 0x00000401
-
-@@ -1682,4 +1688,34 @@
-
- typedef CK_PKCS5_PBKD2_PARAMS CK_PTR CK_PKCS5_PBKD2_PARAMS_PTR;
-
-+/* new for v2.40 */
-+
-+typedef struct CK_TLS12_MASTER_KEY_DERIVE_PARAMS {
-+ CK_SSL3_RANDOM_DATA RandomInfo;
-+ CK_VERSION_PTR pVersion;
-+ CK_MECHANISM_TYPE prfHashMechanism;
-+} CK_TLS12_MASTER_KEY_DERIVE_PARAMS;
-+
-+typedef CK_TLS12_MASTER_KEY_DERIVE_PARAMS CK_PTR CK_TLS12_MASTER_KEY_DERIVE_PARAMS_PTR;
-+
-+typedef struct CK_TLS12_KEY_MAT_PARAMS {
-+ CK_ULONG ulMacSizeInBits;
-+ CK_ULONG ulKeySizeInBits;
-+ CK_ULONG ulIVSizeInBits;
-+ CK_BBOOL bIsExport;
-+ CK_SSL3_RANDOM_DATA RandomInfo;
-+ CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
-+ CK_MECHANISM_TYPE prfHashMechanism;
-+} CK_TLS12_KEY_MAT_PARAMS;
-+
-+typedef CK_TLS12_KEY_MAT_PARAMS CK_PTR CK_TLS12_KEY_MAT_PARAMS_PTR;
-+
-+typedef struct CK_TLS_MAC_PARAMS {
-+ CK_MECHANISM_TYPE prfMechanism;
-+ CK_ULONG ulMacLength;
-+ CK_ULONG ulServerOrClient;
-+} CK_TLS_MAC_PARAMS;
-+
-+typedef CK_TLS_MAC_PARAMS CK_PTR CK_TLS_MAC_PARAMS_PTR;
-+
- #endif
-diff --git openjdk.orig/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h openjdk/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h
---- openjdk.orig/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h
-+++ openjdk/jdk/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
- */
-
- /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
-@@ -268,10 +268,13 @@
- #define CLASS_SSL3_RANDOM_DATA "sun/security/pkcs11/wrapper/CK_SSL3_RANDOM_DATA"
- // CLASS_SSL3_RANDOM_DATA is used by CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS
- #define CLASS_SSL3_KEY_MAT_OUT "sun/security/pkcs11/wrapper/CK_SSL3_KEY_MAT_OUT"
--// CLASS_SSL3_KEY_MAT_OUT is used by CLASS_SSL3_KEY_MAT_PARAMS
-+// CLASS_SSL3_KEY_MAT_OUT is used by CLASS_SSL3_KEY_MAT_PARAMS and CK_TLS12_KEY_MAT_PARAMS
- #define CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS "sun/security/pkcs11/wrapper/CK_SSL3_MASTER_KEY_DERIVE_PARAMS"
-+#define CLASS_TLS12_MASTER_KEY_DERIVE_PARAMS "sun/security/pkcs11/wrapper/CK_TLS12_MASTER_KEY_DERIVE_PARAMS"
- #define CLASS_SSL3_KEY_MAT_PARAMS "sun/security/pkcs11/wrapper/CK_SSL3_KEY_MAT_PARAMS"
-+#define CLASS_TLS12_KEY_MAT_PARAMS "sun/security/pkcs11/wrapper/CK_TLS12_KEY_MAT_PARAMS"
- #define CLASS_TLS_PRF_PARAMS "sun/security/pkcs11/wrapper/CK_TLS_PRF_PARAMS"
-+#define CLASS_TLS_MAC_PARAMS "sun/security/pkcs11/wrapper/CK_TLS_MAC_PARAMS"
- #define CLASS_AES_CTR_PARAMS "sun/security/pkcs11/wrapper/CK_AES_CTR_PARAMS"
-
- /* function to convert a PKCS#11 return value other than CK_OK into a Java Exception
-@@ -361,9 +364,11 @@
- CK_KEY_WRAP_SET_OAEP_PARAMS jKeyWrapSetOaepParamToCKKeyWrapSetOaepParam(JNIEnv *env, jobject jParam);
- void copyBackSetUnwrappedKey(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
- CK_SSL3_MASTER_KEY_DERIVE_PARAMS jSsl3MasterKeyDeriveParamToCKSsl3MasterKeyDeriveParam(JNIEnv *env, jobject jParam);
--void copyBackClientVersion(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
-+void ssl3CopyBackClientVersion(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
-+void tls12CopyBackClientVersion(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
- CK_SSL3_KEY_MAT_PARAMS jSsl3KeyMatParamToCKSsl3KeyMatParam(JNIEnv *env, jobject jParam);
--void copyBackSSLKeyMatParams(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
-+void ssl3CopyBackKeyMatParams(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
-+void tls12CopyBackKeyMatParams(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
- CK_KEY_DERIVATION_STRING_DATA jKeyDerivationStringDataToCKKeyDerivationStringData(JNIEnv *env, jobject jParam);
- CK_RSA_PKCS_PSS_PARAMS jRsaPkcsPssParamToCKRsaPkcsPssParam(JNIEnv *env, jobject jParam);
- CK_ECDH1_DERIVE_PARAMS jEcdh1DeriveParamToCKEcdh1DeriveParam(JNIEnv *env, jobject jParam);
-diff --git openjdk.orig/jdk/test/sun/security/pkcs11/fips/TestTLS12.java openjdk/jdk/test/sun/security/pkcs11/fips/TestTLS12.java
-new file mode 100644
---- /dev/null
-+++ openjdk/jdk/test/sun/security/pkcs11/fips/TestTLS12.java
-@@ -0,0 +1,449 @@
-+/*
-+ * Copyright (c) 2018, Red Hat, Inc. 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
-+ * @bug 8029661
-+ * @summary Test TLS 1.2
-+ * @library ..
-+ * @run main/othervm/timeout=120 TestTLS12
-+ */
-+
-+import java.io.File;
-+import java.io.FileInputStream;
-+import java.io.InputStream;
-+import java.nio.ByteBuffer;
-+
-+import java.security.interfaces.RSAPrivateKey;
-+import java.security.interfaces.RSAPublicKey;
-+import java.security.KeyStore;
-+import java.security.NoSuchAlgorithmException;
-+import java.security.Provider;
-+import java.security.SecureRandom;
-+import java.security.Security;
-+
-+import java.util.Arrays;
-+
-+import javax.crypto.Cipher;
-+import javax.crypto.KeyGenerator;
-+import javax.crypto.SecretKey;
-+import javax.crypto.spec.SecretKeySpec;
-+
-+import javax.net.ssl.KeyManagerFactory;
-+import javax.net.ssl.SSLContext;
-+import javax.net.ssl.SSLEngine;
-+import javax.net.ssl.SSLEngineResult;
-+import javax.net.ssl.SSLEngineResult.HandshakeStatus;
-+import javax.net.ssl.SSLParameters;
-+import javax.net.ssl.SSLSession;
-+import javax.net.ssl.TrustManagerFactory;
-+
-+import sun.security.internal.spec.TlsMasterSecretParameterSpec;
-+import sun.security.internal.spec.TlsPrfParameterSpec;
-+import sun.security.internal.spec.TlsRsaPremasterSecretParameterSpec;
-+
-+public final class TestTLS12 extends SecmodTest {
-+
-+ private static final boolean enableDebug = true;
-+
-+ private static Provider sunPKCS11NSSProvider;
-+ private static Provider sunJCEProvider;
-+ private static com.sun.net.ssl.internal.ssl.Provider jsseProvider;
-+ private static KeyStore ks;
-+ private static KeyStore ts;
-+ private static char[] passphrase = "JAHshj131@@".toCharArray();
-+ private static RSAPrivateKey privateKey;
-+ private static RSAPublicKey publicKey;
-+
-+ public static void main(String[] args) throws Exception {
-+ try {
-+ initialize();
-+ } catch (Exception e) {
-+ System.out.println("Test skipped: failure during" +
-+ " initialization");
-+ return;
-+ }
-+
-+ if (shouldRun()) {
-+ // Test against JCE
-+ testTlsAuthenticationCodeGeneration();
-+
-+ // Self-integrity test (complete TLS 1.2 communication)
-+ new testTLS12SunPKCS11Communication().run();
-+
-+ System.out.println("Test PASS - OK");
-+ } else {
-+ System.out.println("Test skipped: TLS 1.2 mechanisms" +
-+ " not supported by current SunPKCS11 back-end");
-+ }
-+ }
-+
-+ private static boolean shouldRun() {
-+ if (sunPKCS11NSSProvider == null) {
-+ return false;
-+ }
-+ try {
-+ KeyGenerator.getInstance("SunTls12MasterSecret",
-+ sunPKCS11NSSProvider);
-+ KeyGenerator.getInstance(
-+ "SunTls12RsaPremasterSecret", sunPKCS11NSSProvider);
-+ KeyGenerator.getInstance("SunTls12Prf", sunPKCS11NSSProvider);
-+ } catch (NoSuchAlgorithmException e) {
-+ return false;
-+ }
-+ return true;
-+ }
-+
-+ private static void testTlsAuthenticationCodeGeneration()
-+ throws Exception {
-+ // Generate RSA Pre-Master Secret in SunPKCS11 provider
-+ SecretKey rsaPreMasterSecret = null;
-+ @SuppressWarnings("deprecation")
-+ TlsRsaPremasterSecretParameterSpec rsaPreMasterSecretSpec =
-+ new TlsRsaPremasterSecretParameterSpec(0x0303, 0x0303);
-+ {
-+ KeyGenerator rsaPreMasterSecretKG = KeyGenerator.getInstance(
-+ "SunTls12RsaPremasterSecret", sunPKCS11NSSProvider);
-+ rsaPreMasterSecretKG.init(rsaPreMasterSecretSpec, null);
-+ rsaPreMasterSecret = rsaPreMasterSecretKG.generateKey();
-+ }
-+
-+ // Get RSA Pre-Master Secret in plain (from SunPKCS11 provider)
-+ byte[] rsaPlainPreMasterSecret = null;
-+ {
-+ Cipher rsaPreMasterSecretWrapperCipher =
-+ Cipher.getInstance("RSA/ECB/PKCS1Padding",
-+ sunPKCS11NSSProvider);
-+ rsaPreMasterSecretWrapperCipher.init(Cipher.WRAP_MODE, publicKey,
-+ new SecureRandom());
-+ byte[] rsaEncryptedPreMasterSecret =
-+ rsaPreMasterSecretWrapperCipher.wrap(rsaPreMasterSecret);
-+ Cipher rsaPreMasterSecretUnwrapperCipher =
-+ Cipher.getInstance("RSA/ECB/PKCS1Padding", sunJCEProvider);
-+ rsaPreMasterSecretUnwrapperCipher.init(Cipher.UNWRAP_MODE,
-+ privateKey, rsaPreMasterSecretSpec);
-+ rsaPlainPreMasterSecret = rsaPreMasterSecretUnwrapperCipher.unwrap(
-+ rsaEncryptedPreMasterSecret, "TlsRsaPremasterSecret",
-+ Cipher.SECRET_KEY).getEncoded();
-+
-+ if (enableDebug) {
-+ System.out.println("rsaPlainPreMasterSecret:");
-+ for (byte b : rsaPlainPreMasterSecret) {
-+ System.out.printf("%02X, ", b);
-+ }
-+ System.out.println("");
-+ }
-+ }
-+
-+ // Generate Master Secret
-+ SecretKey sunPKCS11MasterSecret = null;
-+ SecretKey jceMasterSecret = null;
-+ {
-+ KeyGenerator sunPKCS11MasterSecretGenerator =
-+ KeyGenerator.getInstance("SunTls12MasterSecret",
-+ sunPKCS11NSSProvider);
-+ KeyGenerator jceMasterSecretGenerator = KeyGenerator.getInstance(
-+ "SunTls12MasterSecret", sunJCEProvider);
-+ @SuppressWarnings("deprecation")
-+ TlsMasterSecretParameterSpec sunPKCS11MasterSecretSpec =
-+ new TlsMasterSecretParameterSpec(rsaPreMasterSecret, 3, 3,
-+ new byte[32], new byte[32], "SHA-256", 32, 64);
-+ @SuppressWarnings("deprecation")
-+ TlsMasterSecretParameterSpec jceMasterSecretSpec =
-+ new TlsMasterSecretParameterSpec(
-+ new SecretKeySpec(rsaPlainPreMasterSecret,
-+ "Generic"), 3, 3, new byte[32],
-+ new byte[32], "SHA-256", 32, 64);
-+ sunPKCS11MasterSecretGenerator.init(sunPKCS11MasterSecretSpec,
-+ null);
-+ jceMasterSecretGenerator.init(jceMasterSecretSpec, null);
-+ sunPKCS11MasterSecret =
-+ sunPKCS11MasterSecretGenerator.generateKey();
-+ jceMasterSecret = jceMasterSecretGenerator.generateKey();
-+ if (enableDebug) {
-+ System.out.println("Master Secret (SunJCE):");
-+ if (jceMasterSecret != null) {
-+ for (byte b : jceMasterSecret.getEncoded()) {
-+ System.out.printf("%02X, ", b);
-+ }
-+ System.out.println("");
-+ }
-+ }
-+ }
-+
-+ // Generate authentication codes
-+ byte[] sunPKCS11AuthenticationCode = null;
-+ byte[] jceAuthenticationCode = null;
-+ {
-+ // Generate SunPKCS11 authentication code
-+ {
-+ @SuppressWarnings("deprecation")
-+ TlsPrfParameterSpec sunPKCS11AuthenticationCodeSpec =
-+ new TlsPrfParameterSpec(sunPKCS11MasterSecret,
-+ "client finished", "a".getBytes(), 12,
-+ "SHA-256", 32, 64);
-+ KeyGenerator sunPKCS11AuthCodeGenerator =
-+ KeyGenerator.getInstance("SunTls12Prf",
-+ sunPKCS11NSSProvider);
-+ sunPKCS11AuthCodeGenerator.init(
-+ sunPKCS11AuthenticationCodeSpec);
-+ sunPKCS11AuthenticationCode =
-+ sunPKCS11AuthCodeGenerator.generateKey().getEncoded();
-+ }
-+
-+ // Generate SunJCE authentication code
-+ {
-+ @SuppressWarnings("deprecation")
-+ TlsPrfParameterSpec jceAuthenticationCodeSpec =
-+ new TlsPrfParameterSpec(jceMasterSecret,
-+ "client finished", "a".getBytes(), 12,
-+ "SHA-256", 32, 64);
-+ KeyGenerator jceAuthCodeGenerator =
-+ KeyGenerator.getInstance("SunTls12Prf",
-+ sunJCEProvider);
-+ jceAuthCodeGenerator.init(jceAuthenticationCodeSpec);
-+ jceAuthenticationCode =
-+ jceAuthCodeGenerator.generateKey().getEncoded();
-+ }
-+
-+ if (enableDebug) {
-+ System.out.println("SunPKCS11 Authentication Code: ");
-+ for (byte b : sunPKCS11AuthenticationCode) {
-+ System.out.printf("%02X, ", b);
-+ }
-+ System.out.println("");
-+ System.out.println("SunJCE Authentication Code: ");
-+ for (byte b : jceAuthenticationCode) {
-+ System.out.printf("%02X, ", b);
-+ }
-+ System.out.println("");
-+ }
-+ }
-+
-+ if (sunPKCS11AuthenticationCode == null ||
-+ jceAuthenticationCode == null ||
-+ sunPKCS11AuthenticationCode.length == 0 ||
-+ jceAuthenticationCode.length == 0 ||
-+ !Arrays.equals(sunPKCS11AuthenticationCode,
-+ jceAuthenticationCode)) {
-+ throw new Exception("Authentication codes from JCE" +
-+ " and SunPKCS11 differ.");
-+ }
-+ }
-+
-+ private static class testTLS12SunPKCS11Communication {
-+ public static void run() throws Exception {
-+ SSLEngine[][] enginesToTest = getSSLEnginesToTest();
-+
-+ for (SSLEngine[] engineToTest : enginesToTest) {
-+
-+ SSLEngine clientSSLEngine = engineToTest[0];
-+ SSLEngine serverSSLEngine = engineToTest[1];
-+
-+ // SSLEngine code based on RedhandshakeFinished.java
-+
-+ boolean dataDone = false;
-+
-+ ByteBuffer clientOut = null;
-+ ByteBuffer clientIn = null;
-+ ByteBuffer serverOut = null;
-+ ByteBuffer serverIn = null;
-+ ByteBuffer cTOs;
-+ ByteBuffer sTOc;
-+
-+ SSLSession session = clientSSLEngine.getSession();
-+ int appBufferMax = session.getApplicationBufferSize();
-+ int netBufferMax = session.getPacketBufferSize();
-+
-+ clientIn = ByteBuffer.allocate(appBufferMax + 50);
-+ serverIn = ByteBuffer.allocate(appBufferMax + 50);
-+
-+ cTOs = ByteBuffer.allocateDirect(netBufferMax);
-+ sTOc = ByteBuffer.allocateDirect(netBufferMax);
-+
-+ clientOut = ByteBuffer.wrap(
-+ "Hi Server, I'm Client".getBytes());
-+ serverOut = ByteBuffer.wrap(
-+ "Hello Client, I'm Server".getBytes());
-+
-+ SSLEngineResult clientResult;
-+ SSLEngineResult serverResult;
-+
-+ while (!dataDone) {
-+ clientResult = clientSSLEngine.wrap(clientOut, cTOs);
-+ runDelegatedTasks(clientResult, clientSSLEngine);
-+ serverResult = serverSSLEngine.wrap(serverOut, sTOc);
-+ runDelegatedTasks(serverResult, serverSSLEngine);
-+ cTOs.flip();
-+ sTOc.flip();
-+
-+ if (enableDebug) {
-+ System.out.println("Client -> Network");
-+ printTlsNetworkPacket("", cTOs);
-+ System.out.println("");
-+ System.out.println("Server -> Network");
-+ printTlsNetworkPacket("", sTOc);
-+ System.out.println("");
-+ }
-+
-+ clientResult = clientSSLEngine.unwrap(sTOc, clientIn);
-+ runDelegatedTasks(clientResult, clientSSLEngine);
-+ serverResult = serverSSLEngine.unwrap(cTOs, serverIn);
-+ runDelegatedTasks(serverResult, serverSSLEngine);
-+
-+ cTOs.compact();
-+ sTOc.compact();
-+
-+ if (!dataDone &&
-+ (clientOut.limit() == serverIn.position()) &&
-+ (serverOut.limit() == clientIn.position())) {
-+ checkTransfer(serverOut, clientIn);
-+ checkTransfer(clientOut, serverIn);
-+ dataDone = true;
-+ }
-+ }
-+ }
-+ }
-+
-+ static void printTlsNetworkPacket(String prefix, ByteBuffer bb) {
-+ ByteBuffer slice = bb.slice();
-+ byte[] buffer = new byte[slice.remaining()];
-+ slice.get(buffer);
-+ for (int i = 0; i < buffer.length; i++) {
-+ System.out.printf("%02X, ", (byte)(buffer[i] & (byte)0xFF));
-+ if (i % 8 == 0 && i % 16 != 0) {
-+ System.out.print(" ");
-+ }
-+ if (i % 16 == 0) {
-+ System.out.println("");
-+ }
-+ }
-+ System.out.flush();
-+ }
-+
-+ private static void checkTransfer(ByteBuffer a, ByteBuffer b)
-+ throws Exception {
-+ a.flip();
-+ b.flip();
-+ if (!a.equals(b)) {
-+ throw new Exception("Data didn't transfer cleanly");
-+ }
-+ a.position(a.limit());
-+ b.position(b.limit());
-+ a.limit(a.capacity());
-+ b.limit(b.capacity());
-+ }
-+
-+ private static void runDelegatedTasks(SSLEngineResult result,
-+ SSLEngine engine) throws Exception {
-+
-+ if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) {
-+ Runnable runnable;
-+ while ((runnable = engine.getDelegatedTask()) != null) {
-+ runnable.run();
-+ }
-+ HandshakeStatus hsStatus = engine.getHandshakeStatus();
-+ if (hsStatus == HandshakeStatus.NEED_TASK) {
-+ throw new Exception(
-+ "handshake shouldn't need additional tasks");
-+ }
-+ }
-+ }
-+
-+ private static SSLEngine[][] getSSLEnginesToTest() throws Exception {
-+ SSLEngine[][] enginesToTest = new SSLEngine[2][2];
-+ String[][] preferredSuites = new String[][]{ new String[] {
-+ "TLS_RSA_WITH_AES_128_CBC_SHA256"
-+ }, new String[] {
-+ "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"
-+ }};
-+ for (int i = 0; i < enginesToTest.length; i++) {
-+ enginesToTest[i][0] = createSSLEngine(true);
-+ enginesToTest[i][1] = createSSLEngine(false);
-+ enginesToTest[i][0].setEnabledCipherSuites(preferredSuites[i]);
-+ enginesToTest[i][1].setEnabledCipherSuites(preferredSuites[i]);
-+ }
-+ return enginesToTest;
-+ }
-+
-+ static private SSLEngine createSSLEngine(boolean client)
-+ throws Exception {
-+ SSLEngine ssle;
-+ KeyManagerFactory kmf = KeyManagerFactory.getInstance("PKIX",
-+ jsseProvider);
-+ kmf.init(ks, passphrase);
-+
-+ TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX",
-+ jsseProvider);
-+ tmf.init(ts);
-+
-+ SSLContext sslCtx = SSLContext.getInstance("TLSv1.2",
-+ jsseProvider);
-+ sslCtx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
-+ ssle = sslCtx.createSSLEngine("localhost", 443);
-+ ssle.setUseClientMode(client);
-+ SSLParameters sslParameters = ssle.getSSLParameters();
-+ ssle.setSSLParameters(sslParameters);
-+
-+ return ssle;
-+ }
-+ }
-+
-+ private static void initialize() throws Exception {
-+ if (initSecmod() == false) {
-+ return;
-+ }
-+ String configName = BASE + SEP + "fips.cfg";
-+ sunPKCS11NSSProvider = getSunPKCS11(configName);
-+ System.out.println("SunPKCS11 provider: " + sunPKCS11NSSProvider);
-+ Security.addProvider(sunPKCS11NSSProvider);
-+
-+ sunJCEProvider = new com.sun.crypto.provider.SunJCE();
-+ Security.addProvider(sunJCEProvider);
-+
-+ Security.removeProvider("SunJSSE");
-+ jsseProvider =new com.sun.net.ssl.internal.ssl.Provider(
-+ sunPKCS11NSSProvider);
-+ Security.addProvider(jsseProvider);
-+ System.out.println(jsseProvider.getInfo());
-+
-+ ks = KeyStore.getInstance("PKCS11", sunPKCS11NSSProvider);
-+ ks.load(null, "test12".toCharArray());
-+ ts = ks;
-+
-+ KeyStore ksPlain = readTestKeyStore();
-+ privateKey = (RSAPrivateKey)ksPlain.getKey("rh_rsa_sha256",
-+ passphrase);
-+ publicKey = (RSAPublicKey)ksPlain.getCertificate(
-+ "rh_rsa_sha256").getPublicKey();
-+ }
-+
-+ private static KeyStore readTestKeyStore() throws Exception {
-+ File file = new File(System.getProperty("test.src", "."), "keystore");
-+ InputStream in = new FileInputStream(file);
-+ KeyStore ks = KeyStore.getInstance("JKS");
-+ ks.load(in, "passphrase".toCharArray());
-+ in.close();
-+ return ks;
-+ }
-+}
-\ No newline at end of file
diff --git a/SOURCES/jdk8044235-src_zip_should_include_all_sources.patch b/SOURCES/jdk8044235-src_zip_should_include_all_sources.patch
deleted file mode 100644
index 1beda6d..0000000
--- a/SOURCES/jdk8044235-src_zip_should_include_all_sources.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-# HG changeset patch
-# User omajid
-# Date 1401638044 14400
-# Sun Jun 01 11:54:04 2014 -0400
-# Node ID fd78f7e83f3f1ce7d363b681b97583138218afcb
-# Parent 8d0af21b5b9789f97b05edacc221a63f851d13b8
-8044235: src.zip should include all sources
-Reviewed-by: andrew, dholmes
-
-diff --git a/make/CreateJars.gmk b/make/CreateJars.gmk
---- openjdk/jdk/make/CreateJars.gmk
-+++ openjdk/jdk/make/CreateJars.gmk
-@@ -584,40 +584,53 @@
-
- ##########################################################################################
-
--SRC_ZIP_INCLUDES = \
-- com/sun/corba \
-- com/sun/image/codec/jpeg \
-- com/sun/imageio \
-- com/sun/java_cup \
-- com/sun/javadoc \
-- com/sun/java/swing \
-- com/sun/jmx \
-- com/sun/naming \
-- com/sun/org/apache \
-- com/sun/security/auth \
-- com/sun/security/jgss \
-- com/sun/source \
-- java \
-- javax/accessibility \
-- javax/annotation \
-- javax/imageio \
-- javax/lang \
-- javax/management \
-- javax/naming \
-- javax/print \
-- javax/rmi \
-- javax/script \
-- javax/security \
-- javax/sound \
-- javax/sql \
-- javax/swing \
-- javax/tools \
-- javax/xml \
-- org/ietf \
-- org/omg \
-- org/w3c/dom \
-- org/xml/sax \
-- #
-+ifdef OPENJDK
-+ SRC_ZIP_INCLUDES = \
-+ com \
-+ java \
-+ javax \
-+ jdk \
-+ org \
-+ sun \
-+ #
-+ SRC_ZIP_EXCLUDES =
-+else
-+ SRC_ZIP_INCLUDES = \
-+ com/sun/corba \
-+ com/sun/image/codec/jpeg \
-+ com/sun/imageio \
-+ com/sun/java_cup \
-+ com/sun/javadoc \
-+ com/sun/java/swing \
-+ com/sun/jmx \
-+ com/sun/naming \
-+ com/sun/org/apache \
-+ com/sun/security/auth \
-+ com/sun/security/jgss \
-+ com/sun/source \
-+ java \
-+ javax/accessibility \
-+ javax/annotation \
-+ javax/imageio \
-+ javax/lang \
-+ javax/management \
-+ javax/naming \
-+ javax/print \
-+ javax/rmi \
-+ javax/script \
-+ javax/security \
-+ javax/sound \
-+ javax/sql \
-+ javax/swing \
-+ javax/tools \
-+ javax/xml \
-+ org/ietf \
-+ org/omg \
-+ org/w3c/dom \
-+ org/xml/sax \
-+ #
-+ SRC_ZIP_EXCLUDES = javax/swing/beaninfo
-+endif
-
- SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes
- SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gensrc
-@@ -648,7 +661,7 @@
- $(eval $(call SetupZipArchive,BUILD_SRC_ZIP, \
- SRC := $(SRC_ZIP_SRCS) $(IMAGES_OUTPUTDIR)/src, \
- INCLUDES := $(SRC_ZIP_INCLUDES) launcher, \
-- EXCLUDES := javax/swing/beaninfo, \
-+ EXCLUDES := $(SRC_ZIP_EXCLUDES), \
- SUFFIXES := .java .c .h, \
- ZIP := $(IMAGES_OUTPUTDIR)/src.zip, \
- EXTRA_DEPS := $(LAUNCHER_ZIP_SRC)))
diff --git a/SOURCES/jdk8073139-pr1758-rh1191652-ppc64_le_says_its_arch_is_ppc64_not_ppc64le_jdk.patch b/SOURCES/jdk8073139-pr1758-rh1191652-ppc64_le_says_its_arch_is_ppc64_not_ppc64le_jdk.patch
deleted file mode 100644
index f79be53..0000000
--- a/SOURCES/jdk8073139-pr1758-rh1191652-ppc64_le_says_its_arch_is_ppc64_not_ppc64le_jdk.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-# HG changeset patch
-# User sgehwolf
-# Date 1537884792 -7200
-# Tue Sep 25 16:13:12 2018 +0200
-# Node ID fd140d7550992267e3f0f08a20b461b2ce9fa740
-# Parent 21056af0d1eabbd04d7a223c01a28320c7010bfe
-8073139: PPC64: User-visible arch directory and os.arch value on ppc64le cause issues with Java tooling
-Reviewed-by: erikj, goetz, dholmes
-
-diff --git openjdk.orig/jdk/make/lib/SoundLibraries.gmk openjdk/jdk/make/lib/SoundLibraries.gmk
---- openjdk/jdk/make/lib/SoundLibraries.gmk Tue Jan 12 21:01:12 2016 +0000
-+++ openjdk/jdk/make/lib/SoundLibraries.gmk Wed Jan 13 00:18:02 2016 +0000
-@@ -140,6 +140,10 @@
- LIBJSOUND_CFLAGS += -DX_ARCH=X_PPC64
- endif
-
-+ ifeq ($(OPENJDK_TARGET_CPU), ppc64le)
-+ LIBJSOUND_CFLAGS += -DX_ARCH=X_PPC64LE
-+ endif
-+
- ifeq ($(OPENJDK_TARGET_CPU), aarch64)
- LIBJSOUND_CFLAGS += -DX_ARCH=X_AARCH64
- endif
-diff -r 1fe56343ecc8 openjdk/jdk/src/share/native/com/sun/media/sound/SoundDefs.h
---- openjdk.orig/jdk/src/share/native/com/sun/media/sound/SoundDefs.h Tue Jan 12 21:01:12 2016 +0000
-+++ openjdk/jdk/src/share/native/com/sun/media/sound/SoundDefs.h Wed Jan 13 00:18:02 2016 +0000
-@@ -44,6 +44,8 @@
- #define X_ARM 7
- #define X_PPC 8
- #define X_AARCH64 9
-+#define X_PPC64 10
-+#define X_PPC64LE 11
-
- // **********************************
- // Make sure you set X_PLATFORM and X_ARCH defines correctly.
-diff --git openjdk.orig/jdk/src/solaris/bin/ppc64le/jvm.cfg openjdk/jdk/src/solaris/bin/ppc64le/jvm.cfg
-new file mode 100644
---- /dev/null
-+++ openjdk/jdk/src/solaris/bin/ppc64le/jvm.cfg
-@@ -0,0 +1,34 @@
-+# Copyright (c) 2011, 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. Oracle designates this
-+# particular file as subject to the "Classpath" exception as provided
-+# by Oracle in the LICENSE file that accompanied this code.
-+#
-+# 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.
-+#
-+# List of JVMs that can be used as an option to java, javac, etc.
-+# Order is important -- first in this list is the default JVM.
-+# NOTE that this both this file and its format are UNSUPPORTED and
-+# WILL GO AWAY in a future release.
-+#
-+# You may also select a JVM in an arbitrary location with the
-+# "-XXaltjvm=" option, but that too is unsupported
-+# and may not be available in a future release.
-+#
-+-server KNOWN
-+-client IGNORE
-diff --git openjdk.orig/test/sun/security/pkcs11/PKCS11Test.java openjdk/test/sun/security/pkcs11/PKCS11Test.java
---- openjdk.orig/jdk/test/sun/security/pkcs11/PKCS11Test.java
-+++ openjdk/jdk/test/sun/security/pkcs11/PKCS11Test.java
-@@ -505,6 +505,8 @@
- osMap.put("Linux-amd64-64", new String[]{
- "/usr/lib/x86_64-linux-gnu/", "/usr/lib/x86_64-linux-gnu/nss/",
- "/usr/lib64/"});
-+ osMap.put("Linux-ppc64-64", new String[]{"/usr/lib64/"});
-+ osMap.put("Linux-ppc64le-64", new String[]{"/usr/lib64/"});
- osMap.put("Windows-x86-32", new String[]{
- PKCS11_BASE + "/nss/lib/windows-i586/".replace('/', SEP)});
- osMap.put("Windows-amd64-64", new String[]{
-diff --git openjdk.orig/jdk/test/tools/launcher/Settings.java openjdk/jdk/test/tools/launcher/Settings.java
---- openjdk.orig/jdk/test/tools/launcher/Settings.java
-+++ openjdk/jdk/test/tools/launcher/Settings.java
-@@ -74,7 +74,7 @@
-
- static void runTestOptionDefault() throws IOException {
- String stackSize = "256"; // in kb
-- if (getArch().equals("ppc64")) {
-+ if (getArch().equals("ppc64") || getArch().equals("ppc64le")) {
- stackSize = "800";
- }
- TestResult tr = null;
diff --git a/SOURCES/jdk8073139-pr1758-rh1191652-ppc64_le_says_its_arch_is_ppc64_not_ppc64le_root.patch b/SOURCES/jdk8073139-pr1758-rh1191652-ppc64_le_says_its_arch_is_ppc64_not_ppc64le_root.patch
deleted file mode 100644
index 67fc620..0000000
--- a/SOURCES/jdk8073139-pr1758-rh1191652-ppc64_le_says_its_arch_is_ppc64_not_ppc64le_root.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-# HG changeset patch
-# User asmundak
-# Date 1537883922 -7200
-# Tue Sep 25 15:58:42 2018 +0200
-# Node ID 2fabe07c0bd8bf21400313f3bb9b8e80fcb31724
-# Parent 91867683f73de3882ef88981a79995beeeb1e980
-8073139: PPC64: User-visible arch directory and os.arch value on ppc64le cause issues with Java tooling
-Reviewed-by: erikj, goetz, dholmes
-Contributed-by: Andrew Hughes , Alexander Smundak
-
-diff --git openjdk.orig///common/autoconf/flags.m4 openjdk///common/autoconf/flags.m4
---- openjdk.orig///common/autoconf/flags.m4
-+++ openjdk///common/autoconf/flags.m4
-@@ -549,6 +549,9 @@
- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN"
- fi
- fi
-+ if test "x$OPENJDK_TARGET_CPU" = xppc64le; then
-+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DABI_ELFv2"
-+ fi
-
- # Setup target OS define. Use OS target name but in upper case.
- OPENJDK_TARGET_OS_UPPERCASE=`$ECHO $OPENJDK_TARGET_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-diff --git openjdk.orig///common/autoconf/jdk-options.m4 openjdk///common/autoconf/jdk-options.m4
---- openjdk.orig///common/autoconf/jdk-options.m4
-+++ openjdk///common/autoconf/jdk-options.m4
-@@ -158,7 +158,7 @@
- if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then
- INCLUDE_SA=false
- fi
-- if test "x$VAR_CPU" = xppc64 ; then
-+ if test "x$VAR_CPU" = xppc64 -o "x$VAR_CPU" = xppc64le ; then
- INCLUDE_SA=false
- fi
- AC_SUBST(INCLUDE_SA)
-diff --git openjdk.orig///common/autoconf/platform.m4 openjdk///common/autoconf/platform.m4
---- openjdk.orig///common/autoconf/platform.m4
-+++ openjdk///common/autoconf/platform.m4
-@@ -67,7 +67,7 @@
- VAR_CPU_ENDIAN=big
- ;;
- powerpc64le)
-- VAR_CPU=ppc64
-+ VAR_CPU=ppc64le
- VAR_CPU_ARCH=ppc
- VAR_CPU_BITS=64
- VAR_CPU_ENDIAN=little
diff --git a/SOURCES/jdk8073139-pr2236-rh1191652--use_ppc64le_as_the_arch_directory_on_that_platform_and_report_it_in_os_arch_aarch64_forest.patch b/SOURCES/jdk8073139-pr2236-rh1191652--use_ppc64le_as_the_arch_directory_on_that_platform_and_report_it_in_os_arch_aarch64_forest.patch
deleted file mode 100644
index a5afea0..0000000
--- a/SOURCES/jdk8073139-pr2236-rh1191652--use_ppc64le_as_the_arch_directory_on_that_platform_and_report_it_in_os_arch_aarch64_forest.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-# HG changeset patch
-# User sgehwolf
-# Date 1537885415 -7200
-# Tue Sep 25 16:23:35 2018 +0200
-# Node ID 5044428520866481f438bfd1375da75adbc89243
-# Parent a3df1579a8647b06559f41d345da7bea162b26e9
-8073139: PPC64: User-visible arch directory and os.arch value on ppc64le cause issues with Java tooling
-Reviewed-by: erikj, goetz, dholmes
-
-diff --git a/make/defs.make b/make/defs.make
---- openjdk/hotspot/make/defs.make
-+++ openjdk/hotspot/make/defs.make
-@@ -285,7 +285,7 @@ ifneq ($(OSNAME),windows)
-
- # Use uname output for SRCARCH, but deal with platform differences. If ARCH
- # is not explicitly listed below, it is treated as x86.
-- SRCARCH ?= $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 ppc ppc64 zero aarch64,$(ARCH)))
-+ SRCARCH ?= $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 ppc ppc64 ppc64le zero aarch64,$(ARCH)))
- ARCH/ = x86
- ARCH/sparc = sparc
- ARCH/sparc64= sparc
-@@ -293,6 +293,7 @@ ifneq ($(OSNAME),windows)
- ARCH/amd64 = x86
- ARCH/x86_64 = x86
- ARCH/ppc64 = ppc
-+ ARCH/ppc64le= ppc
- ARCH/ppc = ppc
- ARCH/zero = zero
- ARCH/aarch64 = aarch64
-@@ -316,7 +317,12 @@
- endif
- endif
-
-- # LIBARCH is 1:1 mapping from BUILDARCH
-+ # LIBARCH is 1:1 mapping from BUILDARCH, except for ARCH=ppc64le
-+ ifeq ($(ARCH),ppc64le)
-+ LIBARCH ?= ppc64le
-+ else
-+ LIBARCH ?= $(LIBARCH/$(BUILDARCH))
-+ endif
- LIBARCH ?= $(LIBARCH/$(BUILDARCH))
- LIBARCH/i486 = i386
- LIBARCH/amd64 = amd64
-diff --git a/src/os/linux/vm/os_linux.cpp b/src/os/linux/vm/os_linux.cpp
---- openjdk/hotspot/src/os/linux/vm/os_linux.cpp
-+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
-@@ -1956,7 +1956,7 @@
- {EM_SPARCV9, EM_SPARCV9, ELFCLASS64, ELFDATA2MSB, (char*)"Sparc v9 64"},
- {EM_PPC, EM_PPC, ELFCLASS32, ELFDATA2MSB, (char*)"Power PC 32"},
- #if defined(VM_LITTLE_ENDIAN)
-- {EM_PPC64, EM_PPC64, ELFCLASS64, ELFDATA2LSB, (char*)"Power PC 64"},
-+ {EM_PPC64, EM_PPC64, ELFCLASS64, ELFDATA2LSB, (char*)"Power PC 64 LE"},
- #else
- {EM_PPC64, EM_PPC64, ELFCLASS64, ELFDATA2MSB, (char*)"Power PC 64"},
- #endif
-diff --git a/src/share/tools/hsdis/Makefile b/src/share/tools/hsdis/Makefile
---- openjdk/hotspot/src/share/tools/hsdis/Makefile
-+++ openjdk/hotspot/src/share/tools/hsdis/Makefile
-@@ -97,6 +97,7 @@
- CFLAGS/sparcv9 += -m64
- CFLAGS/amd64 += -m64
- CFLAGS/ppc64 += -m64
-+CFLAGS/ppc64le += -m64 -DABI_ELFv2
- else
- ARCH=$(ARCH1:amd64=i386)
- CFLAGS/i386 += -m32
-diff --git a/src/share/tools/hsdis/hsdis-demo.c b/src/share/tools/hsdis/hsdis-demo.c
---- openjdk/hotspot/src/share/tools/hsdis/hsdis-demo.c
-+++ openjdk/hotspot/src/share/tools/hsdis/hsdis-demo.c
-@@ -88,7 +88,7 @@
- printf("...And now for something completely different:\n");
- void *start = (void*) &main;
- void *end = (void*) &end_of_file;
--#if defined(__ia64) || defined(__powerpc__)
-+#if defined(__ia64) || (defined(__powerpc__) && !defined(ABI_ELFv2))
- /* On IA64 and PPC function pointers are pointers to function descriptors */
- start = *((void**)start);
- end = *((void**)end);
-diff --git a/src/share/tools/hsdis/hsdis.c b/src/share/tools/hsdis/hsdis.c
---- openjdk/hotspot/src/share/tools/hsdis/hsdis.c
-+++ openjdk/hotspot/src/share/tools/hsdis/hsdis.c
-@@ -461,7 +461,7 @@ static const char* native_arch_name() {
- #ifdef LIBARCH_sparcv9
- res = "sparc:v9b";
- #endif
--#ifdef LIBARCH_ppc64
-+#if defined(LIBARCH_ppc64) || defined(LIBARCH_ppc64le)
- res = "powerpc:common64";
- #endif
- #else
-diff --git a/src/share/vm/runtime/vm_version.cpp b/src/share/vm/runtime/vm_version.cpp
---- openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
-+++ openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
-@@ -187,11 +187,16 @@ const char* Abstract_VM_Version::jre_release_version() {
- #ifndef CPU
- #ifdef ZERO
- #define CPU ZERO_LIBARCH
-+#elif defined(PPC64)
-+#if defined(VM_LITTLE_ENDIAN)
-+#define CPU "ppc64le"
-+#else
-+#define CPU "ppc64"
-+#endif
- #else
- #define CPU IA32_ONLY("x86") \
- IA64_ONLY("ia64") \
- AMD64_ONLY("amd64") \
-- PPC64_ONLY("ppc64") \
- AARCH64_ONLY("aarch64") \
- SPARC_ONLY("sparc")
- #endif // ZERO
-diff --git a/test/test_env.sh b/test/test_env.sh
---- openjdk/hotspot/test/test_env.sh
-+++ openjdk/hotspot/test/test_env.sh
-@@ -185,6 +185,15 @@
- if [ $? = 0 ]
- then
- VM_CPU="ppc"
-+ if [ $VM_BITS = "64" ]
-+ then
-+ VM_CPU="ppc64"
-+ grep "ppc64le" vm_version.out > ${NULL}
-+ if [ $? = 0 ]
-+ then
-+ VM_CPU="ppc64le"
-+ fi
-+ fi
- fi
- grep "ia64" vm_version.out > ${NULL}
- if [ $? = 0 ]
diff --git a/SOURCES/jdk8131048-pr3574-rh1498936-ppc_crc32.patch b/SOURCES/jdk8131048-pr3574-rh1498936-ppc_crc32.patch
deleted file mode 100644
index d7b94e6..0000000
--- a/SOURCES/jdk8131048-pr3574-rh1498936-ppc_crc32.patch
+++ /dev/null
@@ -1,1417 +0,0 @@
-# HG changeset patch
-# User gromero
-# Date 1537823918 14400
-# Mon Sep 24 17:18:38 2018 -0400
-# Node ID 567e95df42f866b890dc3f0670e086d266915112
-# Parent 678bb67e02aedd54e32819a9011962326164274e
-8131048, PR3574, RH1498936: ppc implement CRC32 intrinsic
-Reviewed-by: goetz
-
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/interpreterGenerator_ppc.hpp openjdk/hotspot/src/cpu/ppc/vm/interpreterGenerator_ppc.hpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/interpreterGenerator_ppc.hpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/interpreterGenerator_ppc.hpp
-@@ -33,5 +33,7 @@
- address generate_abstract_entry(void);
- address generate_accessor_entry(void);
- address generate_Reference_get_entry(void);
-+ address generate_CRC32_update_entry();
-+ address generate_CRC32_updateBytes_entry(AbstractInterpreter::MethodKind kind);
-
- #endif // CPU_PPC_VM_INTERPRETERGENERATOR_PPC_HPP
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp openjdk/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp
-@@ -49,6 +49,7 @@
- #else
- #define BLOCK_COMMENT(str) block_comment(str)
- #endif
-+#define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
-
- #ifdef ASSERT
- // On RISC, there's no benefit to verifying instruction boundaries.
-@@ -3022,6 +3023,418 @@
- bind(Ldone_false);
- }
-
-+// Helpers for Intrinsic Emitters
-+//
-+// Revert the byte order of a 32bit value in a register
-+// src: 0x44556677
-+// dst: 0x77665544
-+// Three steps to obtain the result:
-+// 1) Rotate src (as doubleword) left 5 bytes. That puts the leftmost byte of the src word
-+// into the rightmost byte position. Afterwards, everything left of the rightmost byte is cleared.
-+// This value initializes dst.
-+// 2) Rotate src (as word) left 3 bytes. That puts the rightmost byte of the src word into the leftmost
-+// byte position. Furthermore, byte 5 is rotated into byte 6 position where it is supposed to go.
-+// This value is mask inserted into dst with a [0..23] mask of 1s.
-+// 3) Rotate src (as word) left 1 byte. That puts byte 6 into byte 5 position.
-+// This value is mask inserted into dst with a [8..15] mask of 1s.
-+void MacroAssembler::load_reverse_32(Register dst, Register src) {
-+ assert_different_registers(dst, src);
-+
-+ rldicl(dst, src, (4+1)*8, 56); // Rotate byte 4 into position 7 (rightmost), clear all to the left.
-+ rlwimi(dst, src, 3*8, 0, 23); // Insert byte 5 into position 6, 7 into 4, leave pos 7 alone.
-+ rlwimi(dst, src, 1*8, 8, 15); // Insert byte 6 into position 5, leave the rest alone.
-+}
-+
-+// Calculate the column addresses of the crc32 lookup table into distinct registers.
-+// This loop-invariant calculation is moved out of the loop body, reducing the loop
-+// body size from 20 to 16 instructions.
-+// Returns the offset that was used to calculate the address of column tc3.
-+// Due to register shortage, setting tc3 may overwrite table. With the return offset
-+// at hand, the original table address can be easily reconstructed.
-+int MacroAssembler::crc32_table_columns(Register table, Register tc0, Register tc1, Register tc2, Register tc3) {
-+
-+#ifdef VM_LITTLE_ENDIAN
-+ // This is what we implement (the DOLIT4 part):
-+ // ========================================================================= */
-+ // #define DOLIT4 c ^= *buf4++; \
-+ // c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
-+ // crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
-+ // #define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
-+ // ========================================================================= */
-+ const int ix0 = 3*(4*CRC32_COLUMN_SIZE);
-+ const int ix1 = 2*(4*CRC32_COLUMN_SIZE);
-+ const int ix2 = 1*(4*CRC32_COLUMN_SIZE);
-+ const int ix3 = 0*(4*CRC32_COLUMN_SIZE);
-+#else
-+ // This is what we implement (the DOBIG4 part):
-+ // =========================================================================
-+ // #define DOBIG4 c ^= *++buf4; \
-+ // c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
-+ // crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
-+ // #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
-+ // =========================================================================
-+ const int ix0 = 4*(4*CRC32_COLUMN_SIZE);
-+ const int ix1 = 5*(4*CRC32_COLUMN_SIZE);
-+ const int ix2 = 6*(4*CRC32_COLUMN_SIZE);
-+ const int ix3 = 7*(4*CRC32_COLUMN_SIZE);
-+#endif
-+ assert_different_registers(table, tc0, tc1, tc2);
-+ assert(table == tc3, "must be!");
-+
-+ if (ix0 != 0) addi(tc0, table, ix0);
-+ if (ix1 != 0) addi(tc1, table, ix1);
-+ if (ix2 != 0) addi(tc2, table, ix2);
-+ if (ix3 != 0) addi(tc3, table, ix3);
-+
-+ return ix3;
-+}
-+
-+/**
-+ * uint32_t crc;
-+ * timesXtoThe32[crc & 0xFF] ^ (crc >> 8);
-+ */
-+void MacroAssembler::fold_byte_crc32(Register crc, Register val, Register table, Register tmp) {
-+ assert_different_registers(crc, table, tmp);
-+ assert_different_registers(val, table);
-+
-+ if (crc == val) { // Must rotate first to use the unmodified value.
-+ rlwinm(tmp, val, 2, 24-2, 31-2); // Insert (rightmost) byte 7 of val, shifted left by 2, into byte 6..7 of tmp, clear the rest.
-+ // As we use a word (4-byte) instruction, we have to adapt the mask bit positions.
-+ srwi(crc, crc, 8); // Unsigned shift, clear leftmost 8 bits.
-+ } else {
-+ srwi(crc, crc, 8); // Unsigned shift, clear leftmost 8 bits.
-+ rlwinm(tmp, val, 2, 24-2, 31-2); // Insert (rightmost) byte 7 of val, shifted left by 2, into byte 6..7 of tmp, clear the rest.
-+ }
-+ lwzx(tmp, table, tmp);
-+ xorr(crc, crc, tmp);
-+}
-+
-+/**
-+ * uint32_t crc;
-+ * timesXtoThe32[crc & 0xFF] ^ (crc >> 8);
-+ */
-+void MacroAssembler::fold_8bit_crc32(Register crc, Register table, Register tmp) {
-+ fold_byte_crc32(crc, crc, table, tmp);
-+}
-+
-+/**
-+ * Emits code to update CRC-32 with a byte value according to constants in table.
-+ *
-+ * @param [in,out]crc Register containing the crc.
-+ * @param [in]val Register containing the byte to fold into the CRC.
-+ * @param [in]table Register containing the table of crc constants.
-+ *
-+ * uint32_t crc;
-+ * val = crc_table[(val ^ crc) & 0xFF];
-+ * crc = val ^ (crc >> 8);
-+ */
-+void MacroAssembler::update_byte_crc32(Register crc, Register val, Register table) {
-+ BLOCK_COMMENT("update_byte_crc32:");
-+ xorr(val, val, crc);
-+ fold_byte_crc32(crc, val, table, val);
-+}
-+
-+/**
-+ * @param crc register containing existing CRC (32-bit)
-+ * @param buf register pointing to input byte buffer (byte*)
-+ * @param len register containing number of bytes
-+ * @param table register pointing to CRC table
-+ */
-+void MacroAssembler::update_byteLoop_crc32(Register crc, Register buf, Register len, Register table,
-+ Register data, bool loopAlignment, bool invertCRC) {
-+ assert_different_registers(crc, buf, len, table, data);
-+
-+ Label L_mainLoop, L_done;
-+ const int mainLoop_stepping = 1;
-+ const int mainLoop_alignment = loopAlignment ? 32 : 4; // (InputForNewCode > 4 ? InputForNewCode : 32) : 4;
-+
-+ // Process all bytes in a single-byte loop.
-+ cmpdi(CCR0, len, 0); // Anything to do?
-+ mtctr(len);
-+ beq(CCR0, L_done);
-+
-+ if (invertCRC) {
-+ nand(crc, crc, crc); // ~c
-+ }
-+
-+ align(mainLoop_alignment);
-+ BIND(L_mainLoop);
-+ lbz(data, 0, buf); // Byte from buffer, zero-extended.
-+ addi(buf, buf, mainLoop_stepping); // Advance buffer position.
-+ update_byte_crc32(crc, data, table);
-+ bdnz(L_mainLoop); // Iterate.
-+
-+ if (invertCRC) {
-+ nand(crc, crc, crc); // ~c
-+ }
-+
-+ bind(L_done);
-+}
-+
-+/**
-+ * Emits code to update CRC-32 with a 4-byte value according to constants in table
-+ * Implementation according to jdk/src/share/native/java/util/zip/zlib-1.2.8/crc32.c
-+ */
-+// A not on the lookup table address(es):
-+// The lookup table consists of two sets of four columns each.
-+// The columns {0..3} are used for little-endian machines.
-+// The columns {4..7} are used for big-endian machines.
-+// To save the effort of adding the column offset to the table address each time
-+// a table element is looked up, it is possible to pass the pre-calculated
-+// column addresses.
-+// Uses R9..R12 as work register. Must be saved/restored by caller, if necessary.
-+void MacroAssembler::update_1word_crc32(Register crc, Register buf, Register table, int bufDisp, int bufInc,
-+ Register t0, Register t1, Register t2, Register t3,
-+ Register tc0, Register tc1, Register tc2, Register tc3) {
-+ assert_different_registers(crc, t3);
-+
-+ // XOR crc with next four bytes of buffer.
-+ lwz(t3, bufDisp, buf);
-+ if (bufInc != 0) {
-+ addi(buf, buf, bufInc);
-+ }
-+ xorr(t3, t3, crc);
-+
-+ // Chop crc into 4 single-byte pieces, shifted left 2 bits, to form the table indices.
-+ rlwinm(t0, t3, 2, 24-2, 31-2); // ((t1 >> 0) & 0xff) << 2
-+ rlwinm(t1, t3, 32+(2- 8), 24-2, 31-2); // ((t1 >> 8) & 0xff) << 2
-+ rlwinm(t2, t3, 32+(2-16), 24-2, 31-2); // ((t1 >> 16) & 0xff) << 2
-+ rlwinm(t3, t3, 32+(2-24), 24-2, 31-2); // ((t1 >> 24) & 0xff) << 2
-+
-+ // Use the pre-calculated column addresses.
-+ // Load pre-calculated table values.
-+ lwzx(t0, tc0, t0);
-+ lwzx(t1, tc1, t1);
-+ lwzx(t2, tc2, t2);
-+ lwzx(t3, tc3, t3);
-+
-+ // Calculate new crc from table values.
-+ xorr(t0, t0, t1);
-+ xorr(t2, t2, t3);
-+ xorr(crc, t0, t2); // Now crc contains the final checksum value.
-+}
-+
-+/**
-+ * @param crc register containing existing CRC (32-bit)
-+ * @param buf register pointing to input byte buffer (byte*)
-+ * @param len register containing number of bytes
-+ * @param table register pointing to CRC table
-+ *
-+ * Uses R9..R12 as work register. Must be saved/restored by caller!
-+ */
-+void MacroAssembler::kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
-+ Register t0, Register t1, Register t2, Register t3,
-+ Register tc0, Register tc1, Register tc2, Register tc3) {
-+ assert_different_registers(crc, buf, len, table);
-+
-+ Label L_mainLoop, L_tail;
-+ Register tmp = t0;
-+ Register data = t0;
-+ Register tmp2 = t1;
-+ const int mainLoop_stepping = 8;
-+ const int tailLoop_stepping = 1;
-+ const int log_stepping = exact_log2(mainLoop_stepping);
-+ const int mainLoop_alignment = 32; // InputForNewCode > 4 ? InputForNewCode : 32;
-+ const int complexThreshold = 2*mainLoop_stepping;
-+
-+ // Don't test for len <= 0 here. This pathological case should not occur anyway.
-+ // Optimizing for it by adding a test and a branch seems to be a waste of CPU cycles.
-+ // The situation itself is detected and handled correctly by the conditional branches
-+ // following aghi(len, -stepping) and aghi(len, +stepping).
-+ assert(tailLoop_stepping == 1, "check tailLoop_stepping!");
-+
-+ BLOCK_COMMENT("kernel_crc32_2word {");
-+
-+ nand(crc, crc, crc); // ~c
-+
-+ // Check for short ( mainLoop_stepping) {
-+ sub(len, len, tmp2); // Remaining bytes for main loop (>=mainLoop_stepping is guaranteed).
-+ } else {
-+ sub(tmp, len, tmp2); // Remaining bytes for main loop.
-+ cmpdi(CCR0, tmp, mainLoop_stepping);
-+ blt(CCR0, L_tail); // For less than one mainloop_stepping left, do only tail processing
-+ mr(len, tmp); // remaining bytes for main loop (>=mainLoop_stepping is guaranteed).
-+ }
-+ update_byteLoop_crc32(crc, buf, tmp2, table, data, false, false);
-+ }
-+
-+ srdi(tmp2, len, log_stepping); // #iterations for mainLoop
-+ andi(len, len, mainLoop_stepping-1); // remaining bytes for tailLoop
-+ mtctr(tmp2);
-+
-+#ifdef VM_LITTLE_ENDIAN
-+ Register crc_rv = crc;
-+#else
-+ Register crc_rv = tmp; // Load_reverse needs separate registers to work on.
-+ // Occupies tmp, but frees up crc.
-+ load_reverse_32(crc_rv, crc); // Revert byte order because we are dealing with big-endian data.
-+ tmp = crc;
-+#endif
-+
-+ int reconstructTableOffset = crc32_table_columns(table, tc0, tc1, tc2, tc3);
-+
-+ align(mainLoop_alignment); // Octoword-aligned loop address. Shows 2% improvement.
-+ BIND(L_mainLoop);
-+ update_1word_crc32(crc_rv, buf, table, 0, 0, crc_rv, t1, t2, t3, tc0, tc1, tc2, tc3);
-+ update_1word_crc32(crc_rv, buf, table, 4, mainLoop_stepping, crc_rv, t1, t2, t3, tc0, tc1, tc2, tc3);
-+ bdnz(L_mainLoop);
-+
-+#ifndef VM_LITTLE_ENDIAN
-+ load_reverse_32(crc, crc_rv); // Revert byte order because we are dealing with big-endian data.
-+ tmp = crc_rv; // Tmp uses it's original register again.
-+#endif
-+
-+ // Restore original table address for tailLoop.
-+ if (reconstructTableOffset != 0) {
-+ addi(table, table, -reconstructTableOffset);
-+ }
-+
-+ // Process last few ( 4 ? InputForNewCode : 32;
-+ const int complexThreshold = 2*mainLoop_stepping;
-+
-+ // Don't test for len <= 0 here. This pathological case should not occur anyway.
-+ // Optimizing for it by adding a test and a branch seems to be a waste of CPU cycles.
-+ // The situation itself is detected and handled correctly by the conditional branches
-+ // following aghi(len, -stepping) and aghi(len, +stepping).
-+ assert(tailLoop_stepping == 1, "check tailLoop_stepping!");
-+
-+ BLOCK_COMMENT("kernel_crc32_1word {");
-+
-+ nand(crc, crc, crc); // ~c
-+
-+ // Check for short ( mainLoop_stepping) {
-+ sub(len, len, tmp2); // Remaining bytes for main loop (>=mainLoop_stepping is guaranteed).
-+ } else {
-+ sub(tmp, len, tmp2); // Remaining bytes for main loop.
-+ cmpdi(CCR0, tmp, mainLoop_stepping);
-+ blt(CCR0, L_tail); // For less than one mainloop_stepping left, do only tail processing
-+ mr(len, tmp); // remaining bytes for main loop (>=mainLoop_stepping is guaranteed).
-+ }
-+ update_byteLoop_crc32(crc, buf, tmp2, table, data, false, false);
-+ }
-+
-+ srdi(tmp2, len, log_stepping); // #iterations for mainLoop
-+ andi(len, len, mainLoop_stepping-1); // remaining bytes for tailLoop
-+ mtctr(tmp2);
-+
-+#ifdef VM_LITTLE_ENDIAN
-+ Register crc_rv = crc;
-+#else
-+ Register crc_rv = tmp; // Load_reverse needs separate registers to work on.
-+ // Occupies tmp, but frees up crc.
-+ load_reverse_32(crc_rv, crc); // evert byte order because we are dealing with big-endian data.
-+ tmp = crc;
-+#endif
-+
-+ int reconstructTableOffset = crc32_table_columns(table, tc0, tc1, tc2, tc3);
-+
-+ align(mainLoop_alignment); // Octoword-aligned loop address. Shows 2% improvement.
-+ BIND(L_mainLoop);
-+ update_1word_crc32(crc_rv, buf, table, 0, mainLoop_stepping, crc_rv, t1, t2, t3, tc0, tc1, tc2, tc3);
-+ bdnz(L_mainLoop);
-+
-+#ifndef VM_LITTLE_ENDIAN
-+ load_reverse_32(crc, crc_rv); // Revert byte order because we are dealing with big-endian data.
-+ tmp = crc_rv; // Tmp uses it's original register again.
-+#endif
-+
-+ // Restore original table address for tailLoop.
-+ if (reconstructTableOffset != 0) {
-+ addi(table, table, -reconstructTableOffset);
-+ }
-+
-+ // Process last few (
-+
-+// CRC32 Intrinsics.
-+void StubRoutines::ppc64::generate_load_crc_table_addr(MacroAssembler* masm, Register table) {
-+ __ load_const(table, StubRoutines::_crc_table_adr);
-+}
-+
-+// CRC32 Intrinsics.
-+/**
-+ * crc_table[] from jdk/src/share/native/java/util/zip/zlib-1.2.8/crc32.h
-+ */
-+juint StubRoutines::ppc64::_crc_table[CRC32_TABLES][CRC32_COLUMN_SIZE] = {
-+ {
-+ 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
-+ 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
-+ 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
-+ 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
-+ 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
-+ 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
-+ 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
-+ 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
-+ 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
-+ 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
-+ 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
-+ 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
-+ 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
-+ 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
-+ 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
-+ 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
-+ 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
-+ 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
-+ 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
-+ 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
-+ 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
-+ 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
-+ 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
-+ 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
-+ 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
-+ 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
-+ 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
-+ 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
-+ 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
-+ 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
-+ 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
-+ 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
-+ 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
-+ 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
-+ 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
-+ 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
-+ 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
-+ 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
-+ 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
-+ 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
-+ 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
-+ 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
-+ 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
-+ 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
-+ 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
-+ 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
-+ 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
-+ 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
-+ 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
-+ 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
-+ 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
-+ 0x2d02ef8dUL
-+#ifdef CRC32_BYFOUR
-+ },
-+ {
-+ 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
-+ 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
-+ 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
-+ 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
-+ 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
-+ 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
-+ 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
-+ 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
-+ 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
-+ 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
-+ 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
-+ 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
-+ 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
-+ 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
-+ 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
-+ 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
-+ 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
-+ 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
-+ 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
-+ 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
-+ 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
-+ 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
-+ 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
-+ 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
-+ 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
-+ 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
-+ 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
-+ 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
-+ 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
-+ 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
-+ 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
-+ 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
-+ 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
-+ 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
-+ 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
-+ 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
-+ 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
-+ 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
-+ 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
-+ 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
-+ 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
-+ 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
-+ 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
-+ 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
-+ 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
-+ 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
-+ 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
-+ 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
-+ 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
-+ 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
-+ 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
-+ 0x9324fd72UL
-+ },
-+ {
-+ 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
-+ 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
-+ 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
-+ 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
-+ 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
-+ 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
-+ 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
-+ 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
-+ 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
-+ 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
-+ 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
-+ 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
-+ 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
-+ 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
-+ 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
-+ 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
-+ 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
-+ 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
-+ 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
-+ 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
-+ 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
-+ 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
-+ 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
-+ 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
-+ 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
-+ 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
-+ 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
-+ 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
-+ 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
-+ 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
-+ 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
-+ 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
-+ 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
-+ 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
-+ 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
-+ 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
-+ 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
-+ 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
-+ 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
-+ 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
-+ 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
-+ 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
-+ 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
-+ 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
-+ 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
-+ 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
-+ 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
-+ 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
-+ 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
-+ 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
-+ 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
-+ 0xbe9834edUL
-+ },
-+ {
-+ 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
-+ 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
-+ 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
-+ 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
-+ 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
-+ 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
-+ 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
-+ 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
-+ 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
-+ 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
-+ 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
-+ 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
-+ 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
-+ 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
-+ 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
-+ 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
-+ 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
-+ 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
-+ 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
-+ 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
-+ 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
-+ 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
-+ 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
-+ 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
-+ 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
-+ 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
-+ 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
-+ 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
-+ 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
-+ 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
-+ 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
-+ 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
-+ 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
-+ 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
-+ 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
-+ 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
-+ 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
-+ 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
-+ 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
-+ 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
-+ 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
-+ 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
-+ 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
-+ 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
-+ 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
-+ 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
-+ 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
-+ 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
-+ 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
-+ 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
-+ 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
-+ 0xde0506f1UL
-+ },
-+ {
-+ 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
-+ 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
-+ 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
-+ 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
-+ 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
-+ 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
-+ 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
-+ 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
-+ 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
-+ 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
-+ 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
-+ 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
-+ 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
-+ 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
-+ 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
-+ 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
-+ 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
-+ 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
-+ 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
-+ 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
-+ 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
-+ 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
-+ 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
-+ 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
-+ 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
-+ 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
-+ 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
-+ 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
-+ 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
-+ 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
-+ 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
-+ 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
-+ 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
-+ 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
-+ 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
-+ 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
-+ 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
-+ 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
-+ 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
-+ 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
-+ 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
-+ 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
-+ 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
-+ 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
-+ 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
-+ 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
-+ 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
-+ 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
-+ 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
-+ 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
-+ 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
-+ 0x8def022dUL
-+ },
-+ {
-+ 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
-+ 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
-+ 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
-+ 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
-+ 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
-+ 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
-+ 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
-+ 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
-+ 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
-+ 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
-+ 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
-+ 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
-+ 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
-+ 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
-+ 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
-+ 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
-+ 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
-+ 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
-+ 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
-+ 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
-+ 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
-+ 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
-+ 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
-+ 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
-+ 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
-+ 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
-+ 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
-+ 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
-+ 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
-+ 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
-+ 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
-+ 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
-+ 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
-+ 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
-+ 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
-+ 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
-+ 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
-+ 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
-+ 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
-+ 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
-+ 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
-+ 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
-+ 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
-+ 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
-+ 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
-+ 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
-+ 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
-+ 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
-+ 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
-+ 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
-+ 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
-+ 0x72fd2493UL
-+ },
-+ {
-+ 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
-+ 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
-+ 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
-+ 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
-+ 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
-+ 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
-+ 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
-+ 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
-+ 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
-+ 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
-+ 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
-+ 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
-+ 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
-+ 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
-+ 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
-+ 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
-+ 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
-+ 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
-+ 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
-+ 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
-+ 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
-+ 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
-+ 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
-+ 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
-+ 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
-+ 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
-+ 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
-+ 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
-+ 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
-+ 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
-+ 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
-+ 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
-+ 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
-+ 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
-+ 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
-+ 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
-+ 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
-+ 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
-+ 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
-+ 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
-+ 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
-+ 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
-+ 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
-+ 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
-+ 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
-+ 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
-+ 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
-+ 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
-+ 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
-+ 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
-+ 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
-+ 0xed3498beUL
-+ },
-+ {
-+ 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
-+ 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
-+ 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
-+ 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
-+ 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
-+ 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
-+ 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
-+ 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
-+ 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
-+ 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
-+ 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
-+ 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
-+ 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
-+ 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
-+ 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
-+ 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
-+ 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
-+ 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
-+ 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
-+ 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
-+ 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
-+ 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
-+ 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
-+ 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
-+ 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
-+ 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
-+ 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
-+ 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
-+ 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
-+ 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
-+ 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
-+ 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
-+ 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
-+ 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
-+ 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
-+ 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
-+ 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
-+ 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
-+ 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
-+ 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
-+ 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
-+ 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
-+ 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
-+ 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
-+ 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
-+ 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
-+ 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
-+ 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
-+ 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
-+ 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
-+ 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
-+ 0xf10605deUL
-+#endif
-+ }
-+};
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.hpp openjdk/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.hpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.hpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.hpp
-@@ -1,6 +1,6 @@
- /*
-- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
-- * Copyright 2012, 2013 SAP AG. All rights reserved.
-+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2012, 2018 SAP SE. 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
-@@ -30,11 +30,35 @@
- // definition. See stubRoutines.hpp for a description on how to
- // extend it.
-
--static bool returns_to_call_stub(address return_pc) { return return_pc == _call_stub_return_address; }
-+static bool returns_to_call_stub(address return_pc) { return return_pc == _call_stub_return_address; }
-
- enum platform_dependent_constants {
- code_size1 = 20000, // simply increase if too small (assembler will crash if too small)
- code_size2 = 20000 // simply increase if too small (assembler will crash if too small)
- };
-
-+// CRC32 Intrinsics.
-+#define CRC32_COLUMN_SIZE 256
-+#define CRC32_BYFOUR
-+#ifdef CRC32_BYFOUR
-+ #define CRC32_TABLES 8
-+#else
-+ #define CRC32_TABLES 1
-+#endif
-+
-+class ppc64 {
-+ friend class StubGenerator;
-+
-+ private:
-+
-+ // CRC32 Intrinsics.
-+ static juint _crc_table[CRC32_TABLES][CRC32_COLUMN_SIZE];
-+
-+ public:
-+
-+ // CRC32 Intrinsics.
-+ static void generate_load_crc_table_addr(MacroAssembler* masm, Register table);
-+
-+};
-+
- #endif // CPU_PPC_VM_STUBROUTINES_PPC_64_HPP
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp openjdk/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp
-@@ -57,7 +57,7 @@
- #define BLOCK_COMMENT(str) __ block_comment(str)
- #endif
-
--#define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
-+#define BIND(label) __ bind(label); BLOCK_COMMENT(#label ":")
-
- //-----------------------------------------------------------------------------
-
-@@ -783,7 +783,7 @@
- }
- generate_counter_incr(&invocation_counter_overflow, NULL, NULL);
-
-- __ BIND(continue_after_compile);
-+ BIND(continue_after_compile);
- // Reset the _do_not_unlock_if_synchronized flag.
- if (synchronized) {
- __ li(R0, 0);
-@@ -843,7 +843,7 @@
- __ ld(signature_handler_fd, method_(signature_handler));
- __ twi_0(signature_handler_fd); // Order wrt. load of klass mirror and entry point (isync is below).
-
-- __ BIND(call_signature_handler);
-+ BIND(call_signature_handler);
-
- // Before we call the signature handler we push a new frame to
- // protect the interpreter frame volatile registers when we return
-@@ -913,7 +913,7 @@
- __ std(R0/*mirror*/, _ijava_state_neg(oop_tmp), R11_scratch1);
- // R4_ARG2 = &state->_oop_temp;
- __ addi(R4_ARG2, R11_scratch1, _ijava_state_neg(oop_tmp));
-- __ BIND(method_is_not_static);
-+ BIND(method_is_not_static);
- }
-
- // At this point, arguments have been copied off the stack into
-@@ -1126,14 +1126,14 @@
- // interpreter will do the correct thing. If it isn't interpreted
- // (call stub/compiled code) we will change our return and continue.
-
-- __ BIND(exception_return_sync_check);
-+ BIND(exception_return_sync_check);
-
- if (synchronized) {
- // Don't check for exceptions since we're still in the i2n frame. Do that
- // manually afterwards.
- unlock_method(false);
- }
-- __ BIND(exception_return_sync_check_already_unlocked);
-+ BIND(exception_return_sync_check_already_unlocked);
-
- const Register return_pc = R31;
-
-@@ -1327,6 +1327,12 @@
- case Interpreter::java_lang_math_exp : entry_point = ((InterpreterGenerator*) this)->generate_math_entry(kind); break;
- case Interpreter::java_lang_ref_reference_get
- : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break;
-+ case Interpreter::java_util_zip_CRC32_update
-+ : entry_point = ((InterpreterGenerator*)this)->generate_CRC32_update_entry(); break;
-+ case Interpreter::java_util_zip_CRC32_updateBytes
-+ : // fall thru
-+ case Interpreter::java_util_zip_CRC32_updateByteBuffer
-+ : entry_point = ((InterpreterGenerator*)this)->generate_CRC32_updateBytes_entry(kind); break;
- default : ShouldNotReachHere(); break;
- }
-
-@@ -1337,6 +1343,179 @@
- return ((InterpreterGenerator*) this)->generate_normal_entry(synchronized);
- }
-
-+// CRC32 Intrinsics.
-+//
-+// Contract on scratch and work registers.
-+// =======================================
-+//
-+// On ppc, the register set {R2..R12} is available in the interpreter as scratch/work registers.
-+// You should, however, keep in mind that {R3_ARG1..R10_ARG8} is the C-ABI argument register set.
-+// You can't rely on these registers across calls.
-+//
-+// The generators for CRC32_update and for CRC32_updateBytes use the
-+// scratch/work register set internally, passing the work registers
-+// as arguments to the MacroAssembler emitters as required.
-+//
-+// R3_ARG1..R6_ARG4 are preset to hold the incoming java arguments.
-+// Their contents is not constant but may change according to the requirements
-+// of the emitted code.
-+//
-+// All other registers from the scratch/work register set are used "internally"
-+// and contain garbage (i.e. unpredictable values) once blr() is reached.
-+// Basically, only R3_RET contains a defined value which is the function result.
-+//
-+/**
-+ * Method entry for static native methods:
-+ * int java.util.zip.CRC32.update(int crc, int b)
-+ */
-+address InterpreterGenerator::generate_CRC32_update_entry() {
-+ address start = __ pc(); // Remember stub start address (is rtn value).
-+
-+ if (UseCRC32Intrinsics) {
-+ Label slow_path;
-+
-+ // Safepoint check
-+ const Register sync_state = R11_scratch1;
-+ int sync_state_offs = __ load_const_optimized(sync_state, SafepointSynchronize::address_of_state(), /*temp*/R0, true);
-+ __ lwz(sync_state, sync_state_offs, sync_state);
-+ __ cmpwi(CCR0, sync_state, SafepointSynchronize::_not_synchronized);
-+ __ bne(CCR0, slow_path);
-+
-+ // We don't generate local frame and don't align stack because
-+ // we not even call stub code (we generate the code inline)
-+ // and there is no safepoint on this path.
-+
-+ // Load java parameters.
-+ // R15_esp is callers operand stack pointer, i.e. it points to the parameters.
-+ const Register argP = R15_esp;
-+ const Register crc = R3_ARG1; // crc value
-+ const Register data = R4_ARG2; // address of java byte value (kernel_crc32 needs address)
-+ const Register dataLen = R5_ARG3; // source data len (1 byte). Not used because calling the single-byte emitter.
-+ const Register table = R6_ARG4; // address of crc32 table
-+ const Register tmp = dataLen; // Reuse unused len register to show we don't actually need a separate tmp here.
-+
-+ BLOCK_COMMENT("CRC32_update {");
-+
-+ // Arguments are reversed on java expression stack
-+#ifdef VM_LITTLE_ENDIAN
-+ __ addi(data, argP, 0+1*wordSize); // (stack) address of byte value. Emitter expects address, not value.
-+ // Being passed as an int, the single byte is at offset +0.
-+#else
-+ __ addi(data, argP, 3+1*wordSize); // (stack) address of byte value. Emitter expects address, not value.
-+ // Being passed from java as an int, the single byte is at offset +3.
-+#endif
-+ __ lwz(crc, 2*wordSize, argP); // Current crc state, zero extend to 64 bit to have a clean register.
-+
-+ StubRoutines::ppc64::generate_load_crc_table_addr(_masm, table);
-+ __ kernel_crc32_singleByte(crc, data, dataLen, table, tmp);
-+
-+ // Restore caller sp for c2i case and return.
-+ __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started.
-+ __ blr();
-+
-+ // Generate a vanilla native entry as the slow path.
-+ BLOCK_COMMENT("} CRC32_update");
-+ BIND(slow_path);
-+ }
-+
-+ (void) generate_native_entry(false);
-+
-+ return start;
-+}
-+
-+// CRC32 Intrinsics.
-+/**
-+ * Method entry for static native methods:
-+ * int java.util.zip.CRC32.updateBytes( int crc, byte[] b, int off, int len)
-+ * int java.util.zip.CRC32.updateByteBuffer(int crc, long* buf, int off, int len)
-+ */
-+address InterpreterGenerator::generate_CRC32_updateBytes_entry(AbstractInterpreter::MethodKind kind) {
-+ address start = __ pc(); // Remember stub start address (is rtn value).
-+
-+ if (UseCRC32Intrinsics) {
-+ Label slow_path;
-+
-+ // Safepoint check
-+ const Register sync_state = R11_scratch1;
-+ int sync_state_offs = __ load_const_optimized(sync_state, SafepointSynchronize::address_of_state(), /*temp*/R0, true);
-+ __ lwz(sync_state, sync_state_offs, sync_state);
-+ __ cmpwi(CCR0, sync_state, SafepointSynchronize::_not_synchronized);
-+ __ bne(CCR0, slow_path);
-+
-+ // We don't generate local frame and don't align stack because
-+ // we not even call stub code (we generate the code inline)
-+ // and there is no safepoint on this path.
-+
-+ // Load parameters.
-+ // Z_esp is callers operand stack pointer, i.e. it points to the parameters.
-+ const Register argP = R15_esp;
-+ const Register crc = R3_ARG1; // crc value
-+ const Register data = R4_ARG2; // address of java byte array
-+ const Register dataLen = R5_ARG3; // source data len
-+ const Register table = R6_ARG4; // address of crc32 table
-+
-+ const Register t0 = R9; // scratch registers for crc calculation
-+ const Register t1 = R10;
-+ const Register t2 = R11;
-+ const Register t3 = R12;
-+
-+ const Register tc0 = R2; // registers to hold pre-calculated column addresses
-+ const Register tc1 = R7;
-+ const Register tc2 = R8;
-+ const Register tc3 = table; // table address is reconstructed at the end of kernel_crc32_* emitters
-+
-+ const Register tmp = t0; // Only used very locally to calculate byte buffer address.
-+
-+ // Arguments are reversed on java expression stack.
-+ // Calculate address of start element.
-+ if (kind == Interpreter::java_util_zip_CRC32_updateByteBuffer) { // Used for "updateByteBuffer direct".
-+ BLOCK_COMMENT("CRC32_updateByteBuffer {");
-+ // crc @ (SP + 5W) (32bit)
-+ // buf @ (SP + 3W) (64bit ptr to long array)
-+ // off @ (SP + 2W) (32bit)
-+ // dataLen @ (SP + 1W) (32bit)
-+ // data = buf + off
-+ __ ld( data, 3*wordSize, argP); // start of byte buffer
-+ __ lwa( tmp, 2*wordSize, argP); // byte buffer offset
-+ __ lwa( dataLen, 1*wordSize, argP); // #bytes to process
-+ __ lwz( crc, 5*wordSize, argP); // current crc state
-+ __ add( data, data, tmp); // Add byte buffer offset.
-+ } else { // Used for "updateBytes update".
-+ BLOCK_COMMENT("CRC32_updateBytes {");
-+ // crc @ (SP + 4W) (32bit)
-+ // buf @ (SP + 3W) (64bit ptr to byte array)
-+ // off @ (SP + 2W) (32bit)
-+ // dataLen @ (SP + 1W) (32bit)
-+ // data = buf + off + base_offset
-+ __ ld( data, 3*wordSize, argP); // start of byte buffer
-+ __ lwa( tmp, 2*wordSize, argP); // byte buffer offset
-+ __ lwa( dataLen, 1*wordSize, argP); // #bytes to process
-+ __ add( data, data, tmp); // add byte buffer offset
-+ __ lwz( crc, 4*wordSize, argP); // current crc state
-+ __ addi(data, data, arrayOopDesc::base_offset_in_bytes(T_BYTE));
-+ }
-+
-+ StubRoutines::ppc64::generate_load_crc_table_addr(_masm, table);
-+
-+ // Performance measurements show the 1word and 2word variants to be almost equivalent,
-+ // with very light advantages for the 1word variant. We chose the 1word variant for
-+ // code compactness.
-+ __ kernel_crc32_1word(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, tc3);
-+
-+ // Restore caller sp for c2i case and return.
-+ __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started.
-+ __ blr();
-+
-+ // Generate a vanilla native entry as the slow path.
-+ BLOCK_COMMENT("} CRC32_updateBytes(Buffer)");
-+ BIND(slow_path);
-+ }
-+
-+ (void) generate_native_entry(false);
-+
-+ return start;
-+}
-+
- // These should never be compiled since the interpreter will prefer
- // the compiled version to the intrinsic version.
- bool AbstractInterpreter::can_be_compiled(methodHandle m) {
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp
-@@ -150,10 +150,12 @@
-
- assert(AllocatePrefetchStyle >= 0, "AllocatePrefetchStyle should be positive");
-
-- if (UseCRC32Intrinsics) {
-- if (!FLAG_IS_DEFAULT(UseCRC32Intrinsics))
-- warning("CRC32 intrinsics are not available on this CPU");
-- FLAG_SET_DEFAULT(UseCRC32Intrinsics, false);
-+ // Implementation does not use any of the vector instructions
-+ // available with Power8. Their exploitation is still pending.
-+ if (!UseCRC32Intrinsics) {
-+ if (FLAG_IS_DEFAULT(UseCRC32Intrinsics)) {
-+ FLAG_SET_DEFAULT(UseCRC32Intrinsics, true);
-+ }
- }
-
- // The AES intrinsic stubs require AES instruction support.
-diff --git openjdk.orig/hotspot/src/share/vm/opto/library_call.cpp openjdk/hotspot/src/share/vm/opto/library_call.cpp
---- openjdk.orig/hotspot/src/share/vm/opto/library_call.cpp
-+++ openjdk/hotspot/src/share/vm/opto/library_call.cpp
-@@ -6225,10 +6225,16 @@
- // Call the stub.
- address stubAddr = StubRoutines::updateBytesCRC32();
- const char *stubName = "updateBytesCRC32";
--
-- Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(),
-- stubAddr, stubName, TypePtr::BOTTOM,
-- crc, src_start, length);
-+ Node* call;
-+ if (CCallingConventionRequiresIntsAsLongs) {
-+ call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(),
-+ stubAddr, stubName, TypePtr::BOTTOM,
-+ crc XTOP, src_start, length XTOP);
-+ } else {
-+ call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(),
-+ stubAddr, stubName, TypePtr::BOTTOM,
-+ crc, src_start, length);
-+ }
- Node* result = _gvn.transform(new (C) ProjNode(call, TypeFunc::Parms));
- set_result(result);
- return true;
-@@ -6257,10 +6263,16 @@
- // Call the stub.
- address stubAddr = StubRoutines::updateBytesCRC32();
- const char *stubName = "updateBytesCRC32";
--
-- Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(),
-- stubAddr, stubName, TypePtr::BOTTOM,
-- crc, src_start, length);
-+ Node* call;
-+ if (CCallingConventionRequiresIntsAsLongs) {
-+ call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(),
-+ stubAddr, stubName, TypePtr::BOTTOM,
-+ crc XTOP, src_start, length XTOP);
-+ } else {
-+ call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(),
-+ stubAddr, stubName, TypePtr::BOTTOM,
-+ crc, src_start, length);
-+ }
- Node* result = _gvn.transform(new (C) ProjNode(call, TypeFunc::Parms));
- set_result(result);
- return true;
-diff --git openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp openjdk/hotspot/src/share/vm/opto/runtime.cpp
---- openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp
-+++ openjdk/hotspot/src/share/vm/opto/runtime.cpp
-@@ -848,13 +848,24 @@
- */
- const TypeFunc* OptoRuntime::updateBytesCRC32_Type() {
- // create input type (domain)
-- int num_args = 3;
-+ int num_args = 3;
- int argcnt = num_args;
-+ if (CCallingConventionRequiresIntsAsLongs) {
-+ argcnt += 2;
-+ }
- const Type** fields = TypeTuple::fields(argcnt);
- int argp = TypeFunc::Parms;
-- fields[argp++] = TypeInt::INT; // crc
-- fields[argp++] = TypePtr::NOTNULL; // src
-- fields[argp++] = TypeInt::INT; // len
-+ if (CCallingConventionRequiresIntsAsLongs) {
-+ fields[argp++] = TypeLong::LONG; // crc
-+ fields[argp++] = Type::HALF;
-+ fields[argp++] = TypePtr::NOTNULL; // src
-+ fields[argp++] = TypeLong::LONG; // len
-+ fields[argp++] = Type::HALF;
-+ } else {
-+ fields[argp++] = TypeInt::INT; // crc
-+ fields[argp++] = TypePtr::NOTNULL; // src
-+ fields[argp++] = TypeInt::INT; // len
-+ }
- assert(argp == TypeFunc::Parms+argcnt, "correct decoding");
- const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields);
-
diff --git a/SOURCES/jdk8145096-pr3693-undefined_behaviour.patch b/SOURCES/jdk8145096-pr3693-undefined_behaviour.patch
deleted file mode 100644
index 51aed3c..0000000
--- a/SOURCES/jdk8145096-pr3693-undefined_behaviour.patch
+++ /dev/null
@@ -1,280 +0,0 @@
-# HG changeset patch
-# User aph
-# Date 1549014450 -3600
-# Fri Feb 01 10:47:30 2019 +0100
-# Node ID f43f77de876acfbf29c02803418d4d06d83e7dc3
-# Parent 28f68e5c6fb323c521a489cfc92e8a129379378f
-8145096: Undefined behaviour in HotSpot
-Summary: Fix some integer overflows
-Reviewed-by: jrose, kvn, kbarrett, adinn, iklam
-
-diff --git openjdk.orig/hotspot/src/os/posix/vm/os_posix.cpp openjdk/hotspot/src/os/posix/vm/os_posix.cpp
---- openjdk.orig/hotspot/src/os/posix/vm/os_posix.cpp
-+++ openjdk/hotspot/src/os/posix/vm/os_posix.cpp
-@@ -604,7 +604,11 @@
- strncpy(buffer, "none", size);
-
- const struct {
-- int i;
-+ // NB: i is an unsigned int here because SA_RESETHAND is on some
-+ // systems 0x80000000, which is implicitly unsigned. Assignining
-+ // it to an int field would be an overflow in unsigned-to-signed
-+ // conversion.
-+ unsigned int i;
- const char* s;
- } flaginfo [] = {
- { SA_NOCLDSTOP, "SA_NOCLDSTOP" },
-diff --git openjdk.orig/hotspot/src/share/vm/opto/addnode.cpp openjdk/hotspot/src/share/vm/opto/addnode.cpp
---- openjdk.orig/hotspot/src/share/vm/opto/addnode.cpp
-+++ openjdk/hotspot/src/share/vm/opto/addnode.cpp
-@@ -344,8 +344,8 @@
- const Type *AddINode::add_ring( const Type *t0, const Type *t1 ) const {
- const TypeInt *r0 = t0->is_int(); // Handy access
- const TypeInt *r1 = t1->is_int();
-- int lo = r0->_lo + r1->_lo;
-- int hi = r0->_hi + r1->_hi;
-+ int lo = java_add(r0->_lo, r1->_lo);
-+ int hi = java_add(r0->_hi, r1->_hi);
- if( !(r0->is_con() && r1->is_con()) ) {
- // Not both constants, compute approximate result
- if( (r0->_lo & r1->_lo) < 0 && lo >= 0 ) {
-@@ -462,8 +462,8 @@
- const Type *AddLNode::add_ring( const Type *t0, const Type *t1 ) const {
- const TypeLong *r0 = t0->is_long(); // Handy access
- const TypeLong *r1 = t1->is_long();
-- jlong lo = r0->_lo + r1->_lo;
-- jlong hi = r0->_hi + r1->_hi;
-+ jlong lo = java_add(r0->_lo, r1->_lo);
-+ jlong hi = java_add(r0->_hi, r1->_hi);
- if( !(r0->is_con() && r1->is_con()) ) {
- // Not both constants, compute approximate result
- if( (r0->_lo & r1->_lo) < 0 && lo >= 0 ) {
-diff --git openjdk.orig/hotspot/src/share/vm/opto/loopTransform.cpp openjdk/hotspot/src/share/vm/opto/loopTransform.cpp
---- openjdk.orig/hotspot/src/share/vm/opto/loopTransform.cpp
-+++ openjdk/hotspot/src/share/vm/opto/loopTransform.cpp
-@@ -1310,8 +1310,8 @@
- limit = new (C) Opaque2Node( C, limit );
- register_new_node( limit, opaq_ctrl );
- }
-- if (stride_con > 0 && ((limit_type->_lo - stride_con) < limit_type->_lo) ||
-- stride_con < 0 && ((limit_type->_hi - stride_con) > limit_type->_hi)) {
-+ if (stride_con > 0 && (java_subtract(limit_type->_lo, stride_con) < limit_type->_lo) ||
-+ stride_con < 0 && (java_subtract(limit_type->_hi, stride_con) > limit_type->_hi)) {
- // No underflow.
- new_limit = new (C) SubINode(limit, stride);
- } else {
-diff --git openjdk.orig/hotspot/src/share/vm/opto/mulnode.cpp openjdk/hotspot/src/share/vm/opto/mulnode.cpp
---- openjdk.orig/hotspot/src/share/vm/opto/mulnode.cpp
-+++ openjdk/hotspot/src/share/vm/opto/mulnode.cpp
-@@ -244,13 +244,13 @@
- double d = (double)hi1;
-
- // Compute all endpoints & check for overflow
-- int32 A = lo0*lo1;
-+ int32 A = java_multiply(lo0, lo1);
- if( (double)A != a*c ) return TypeInt::INT; // Overflow?
-- int32 B = lo0*hi1;
-+ int32 B = java_multiply(lo0, hi1);
- if( (double)B != a*d ) return TypeInt::INT; // Overflow?
-- int32 C = hi0*lo1;
-+ int32 C = java_multiply(hi0, lo1);
- if( (double)C != b*c ) return TypeInt::INT; // Overflow?
-- int32 D = hi0*hi1;
-+ int32 D = java_multiply(hi0, hi1);
- if( (double)D != b*d ) return TypeInt::INT; // Overflow?
-
- if( A < B ) { lo0 = A; hi0 = B; } // Sort range endpoints
-@@ -340,13 +340,13 @@
- double d = (double)hi1;
-
- // Compute all endpoints & check for overflow
-- jlong A = lo0*lo1;
-+ jlong A = java_multiply(lo0, lo1);
- if( (double)A != a*c ) return TypeLong::LONG; // Overflow?
-- jlong B = lo0*hi1;
-+ jlong B = java_multiply(lo0, hi1);
- if( (double)B != a*d ) return TypeLong::LONG; // Overflow?
-- jlong C = hi0*lo1;
-+ jlong C = java_multiply(hi0, lo1);
- if( (double)C != b*c ) return TypeLong::LONG; // Overflow?
-- jlong D = hi0*hi1;
-+ jlong D = java_multiply(hi0, hi1);
- if( (double)D != b*d ) return TypeLong::LONG; // Overflow?
-
- if( A < B ) { lo0 = A; hi0 = B; } // Sort range endpoints
-@@ -573,7 +573,8 @@
- // Masking off high bits which are always zero is useless.
- const TypeLong* t1 = phase->type( in(1) )->isa_long();
- if (t1 != NULL && t1->_lo >= 0) {
-- jlong t1_support = ((jlong)1 << (1 + log2_long(t1->_hi))) - 1;
-+ int bit_count = log2_long(t1->_hi) + 1;
-+ jlong t1_support = jlong(max_julong >> (BitsPerJavaLong - bit_count));
- if ((t1_support & con) == t1_support)
- return usr;
- }
-@@ -801,7 +802,7 @@
-
- // Check for ((x & ((CONST64(1)<<(64-c0))-1)) << c0) which ANDs off high bits
- // before shifting them away.
-- const jlong bits_mask = ((jlong)CONST64(1) << (jlong)(BitsPerJavaLong - con)) - CONST64(1);
-+ const jlong bits_mask = jlong(max_julong >> con);
- if( add1_op == Op_AndL &&
- phase->type(add1->in(2)) == TypeLong::make( bits_mask ) )
- return new (phase->C) LShiftLNode( add1->in(1), in(2) );
-@@ -1253,7 +1254,7 @@
- if ( con == 0 ) return NULL; // let Identity() handle a 0 shift count
- // note: mask computation below does not work for 0 shift count
- // We'll be wanting the right-shift amount as a mask of that many bits
-- const jlong mask = (((jlong)CONST64(1) << (jlong)(BitsPerJavaLong - con)) -1);
-+ const jlong mask = jlong(max_julong >> con);
-
- // Check for ((x << z) + Y) >>> z. Replace with x + con>>>z
- // The idiom for rounding to a power of 2 is "(Q+(2^z-1)) >>> z".
-diff --git openjdk.orig/hotspot/src/share/vm/opto/subnode.cpp openjdk/hotspot/src/share/vm/opto/subnode.cpp
---- openjdk.orig/hotspot/src/share/vm/opto/subnode.cpp
-+++ openjdk/hotspot/src/share/vm/opto/subnode.cpp
-@@ -252,8 +252,8 @@
- const Type *SubINode::sub( const Type *t1, const Type *t2 ) const {
- const TypeInt *r0 = t1->is_int(); // Handy access
- const TypeInt *r1 = t2->is_int();
-- int32 lo = r0->_lo - r1->_hi;
-- int32 hi = r0->_hi - r1->_lo;
-+ int32 lo = java_subtract(r0->_lo, r1->_hi);
-+ int32 hi = java_subtract(r0->_hi, r1->_lo);
-
- // We next check for 32-bit overflow.
- // If that happens, we just assume all integers are possible.
-@@ -361,8 +361,8 @@
- const Type *SubLNode::sub( const Type *t1, const Type *t2 ) const {
- const TypeLong *r0 = t1->is_long(); // Handy access
- const TypeLong *r1 = t2->is_long();
-- jlong lo = r0->_lo - r1->_hi;
-- jlong hi = r0->_hi - r1->_lo;
-+ jlong lo = java_subtract(r0->_lo, r1->_hi);
-+ jlong hi = java_subtract(r0->_hi, r1->_lo);
-
- // We next check for 32-bit overflow.
- // If that happens, we just assume all integers are possible.
-diff --git openjdk.orig/hotspot/src/share/vm/opto/type.cpp openjdk/hotspot/src/share/vm/opto/type.cpp
---- openjdk.orig/hotspot/src/share/vm/opto/type.cpp
-+++ openjdk/hotspot/src/share/vm/opto/type.cpp
-@@ -1329,8 +1329,8 @@
-
- // The new type narrows the old type, so look for a "death march".
- // See comments on PhaseTransform::saturate.
-- juint nrange = _hi - _lo;
-- juint orange = ohi - olo;
-+ juint nrange = (juint)_hi - _lo;
-+ juint orange = (juint)ohi - olo;
- if (nrange < max_juint - 1 && nrange > (orange >> 1) + (SMALLINT*2)) {
- // Use the new type only if the range shrinks a lot.
- // We do not want the optimizer computing 2^31 point by point.
-@@ -1363,7 +1363,7 @@
- //------------------------------hash-------------------------------------------
- // Type-specific hashing function.
- int TypeInt::hash(void) const {
-- return _lo+_hi+_widen+(int)Type::Int;
-+ return java_add(java_add(_lo, _hi), java_add(_widen, (int)Type::Int));
- }
-
- //------------------------------is_finite--------------------------------------
-@@ -1544,7 +1544,7 @@
- // If neither endpoint is extremal yet, push out the endpoint
- // which is closer to its respective limit.
- if (_lo >= 0 || // easy common case
-- (julong)(_lo - min) >= (julong)(max - _hi)) {
-+ ((julong)_lo - min) >= ((julong)max - _hi)) {
- // Try to widen to an unsigned range type of 32/63 bits:
- if (max >= max_juint && _hi < max_juint)
- return make(_lo, max_juint, WidenMax);
-@@ -2314,7 +2314,7 @@
- //------------------------------hash-------------------------------------------
- // Type-specific hashing function.
- int TypePtr::hash(void) const {
-- return _ptr + _offset;
-+ return java_add(_ptr, _offset);
- }
-
- //------------------------------dump2------------------------------------------
-@@ -2904,12 +2904,8 @@
- // Type-specific hashing function.
- int TypeOopPtr::hash(void) const {
- return
-- (const_oop() ? const_oop()->hash() : 0) +
-- _klass_is_exact +
-- _instance_id +
-- hash_speculative() +
-- _inline_depth +
-- TypePtr::hash();
-+ java_add(java_add(java_add(const_oop() ? const_oop()->hash() : 0, _klass_is_exact),
-+ java_add(_instance_id , hash_speculative())), java_add(_inline_depth , TypePtr::hash()));
- }
-
- //------------------------------dump2------------------------------------------
-@@ -3635,7 +3631,7 @@
- //------------------------------hash-------------------------------------------
- // Type-specific hashing function.
- int TypeInstPtr::hash(void) const {
-- int hash = klass()->hash() + TypeOopPtr::hash();
-+ int hash = java_add(klass()->hash(), TypeOopPtr::hash());
- return hash;
- }
-
-@@ -4530,7 +4526,7 @@
- //------------------------------hash-------------------------------------------
- // Type-specific hashing function.
- int TypeKlassPtr::hash(void) const {
-- return klass()->hash() + TypePtr::hash();
-+ return java_add(klass()->hash(), TypePtr::hash());
- }
-
- //------------------------------singleton--------------------------------------
-diff --git openjdk.orig/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp openjdk/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp
---- openjdk.orig/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp
-+++ openjdk/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp
-@@ -131,7 +131,8 @@
- }
-
- double AdvancedThresholdPolicy::weight(Method* method) {
-- return (method->rate() + 1) * ((method->invocation_count() + 1) * (method->backedge_count() + 1));
-+ return (double)(method->rate() + 1) *
-+ (method->invocation_count() + 1) * (method->backedge_count() + 1);
- }
-
- // Apply heuristics and return true if x should be compiled before y
-diff --git openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp
---- openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp
-+++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp
-@@ -1403,6 +1403,32 @@
-
- #define ARRAY_SIZE(array) (sizeof(array)/sizeof((array)[0]))
-
-+//----------------------------------------------------------------------------------------------------
-+// Sum and product which can never overflow: they wrap, just like the
-+// Java operations. Note that we don't intend these to be used for
-+// general-purpose arithmetic: their purpose is to emulate Java
-+// operations.
-+
-+// The goal of this code to avoid undefined or implementation-defined
-+// behaviour. The use of an lvalue to reference cast is explicitly
-+// permitted by Lvalues and rvalues [basic.lval]. [Section 3.10 Para
-+// 15 in C++03]
-+#define JAVA_INTEGER_OP(OP, NAME, TYPE, UNSIGNED_TYPE) \
-+inline TYPE NAME (TYPE in1, TYPE in2) { \
-+ UNSIGNED_TYPE ures = static_cast(in1); \
-+ ures OP ## = static_cast(in2); \
-+ return reinterpret_cast(ures); \
-+}
-+
-+JAVA_INTEGER_OP(+, java_add, jint, juint)
-+JAVA_INTEGER_OP(-, java_subtract, jint, juint)
-+JAVA_INTEGER_OP(*, java_multiply, jint, juint)
-+JAVA_INTEGER_OP(+, java_add, jlong, julong)
-+JAVA_INTEGER_OP(-, java_subtract, jlong, julong)
-+JAVA_INTEGER_OP(*, java_multiply, jlong, julong)
-+
-+#undef JAVA_INTEGER_OP
-+
- // Dereference vptr
- // All C++ compilers that we know of have the vtbl pointer in the first
- // word. If there are exceptions, this function needs to be made compiler
diff --git a/SOURCES/jdk8160748-aarch64_ideal_reg.patch b/SOURCES/jdk8160748-aarch64_ideal_reg.patch
deleted file mode 100644
index b3e6ea6..0000000
--- a/SOURCES/jdk8160748-aarch64_ideal_reg.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-# HG changeset patch
-# User kbarrett
-# Date 1547614745 0
-# Wed Jan 16 04:59:05 2019 +0000
-# Node ID bca8195a3bc70df281a73d9a40032c673971676c
-# Parent 09abae195e9a7e134a1cfd9b375a6f4d95091de7
-8160748: [AArch64] Inconsistent types for ideal_reg
-Summary: Made ideal_reg consistently uint.
-Reviewed-by: kvn, iveresov
-
-diff --git openjdk.orig/hotspot/src/cpu/aarch64/vm/aarch64.ad openjdk/hotspot/src/cpu/aarch64/vm/aarch64.ad
---- openjdk.orig/hotspot/src/cpu/aarch64/vm/aarch64.ad
-+++ openjdk/hotspot/src/cpu/aarch64/vm/aarch64.ad
-@@ -1,6 +1,6 @@
- //
-+// Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
- // Copyright (c) 2013, Red Hat Inc.
--// Copyright (c) 2003, 2012, Oracle and/or its affiliates.
- // All rights reserved.
- // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- //
-@@ -3449,7 +3449,7 @@
- }
-
- // Vector ideal reg.
--const int Matcher::vector_ideal_reg(int len) {
-+const uint Matcher::vector_ideal_reg(int len) {
- switch(len) {
- case 8: return Op_VecD;
- case 16: return Op_VecX;
-@@ -3458,7 +3458,7 @@
- return 0;
- }
-
--const int Matcher::vector_shift_count_ideal_reg(int size) {
-+const uint Matcher::vector_shift_count_ideal_reg(int size) {
- return Op_VecX;
- }
-
diff --git a/SOURCES/jdk8164920-pr3574-rh1498936-ppc_crc32_enhancement.patch b/SOURCES/jdk8164920-pr3574-rh1498936-ppc_crc32_enhancement.patch
deleted file mode 100644
index 27a2ed4..0000000
--- a/SOURCES/jdk8164920-pr3574-rh1498936-ppc_crc32_enhancement.patch
+++ /dev/null
@@ -1,1152 +0,0 @@
-# HG changeset patch
-# User mdoerr
-# Date 1474539444 -7200
-# Thu Sep 22 12:17:24 2016 +0200
-# Node ID de4f1f9fbcc5b7b30e1a796b7cf88a16943e785f
-# Parent 567e95df42f866b890dc3f0670e086d266915112
-8164920, PR3574, RH1498936: ppc: enhancement of CRC32 intrinsic
-Reviewed-by: goetz, mdoerr
-Contributed-by: Hiroshi H Horii
-
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp
-@@ -468,6 +468,10 @@
- LVSL_OPCODE = (31u << OPCODE_SHIFT | 6u << 1),
- LVSR_OPCODE = (31u << OPCODE_SHIFT | 38u << 1),
-
-+ // Vector-Scalar (VSX) instruction support.
-+ MTVSRD_OPCODE = (31u << OPCODE_SHIFT | 179u << 1),
-+ MFVSRD_OPCODE = (31u << OPCODE_SHIFT | 51u << 1),
-+
- // Vector Permute and Formatting
- VPKPX_OPCODE = (4u << OPCODE_SHIFT | 782u ),
- VPKSHSS_OPCODE = (4u << OPCODE_SHIFT | 398u ),
-@@ -1938,6 +1942,10 @@
- inline void mtvscr( VectorRegister b);
- inline void mfvscr( VectorRegister d);
-
-+ // Vector-Scalar (VSX) instructions.
-+ inline void mtvrd( VectorRegister d, Register a);
-+ inline void mfvrd( Register a, VectorRegister d);
-+
- // AES (introduced with Power 8)
- inline void vcipher( VectorRegister d, VectorRegister a, VectorRegister b);
- inline void vcipherlast( VectorRegister d, VectorRegister a, VectorRegister b);
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp
-@@ -623,6 +623,10 @@
- inline void Assembler::lvsl( VectorRegister d, Register s1, Register s2) { emit_int32( LVSL_OPCODE | vrt(d) | ra0mem(s1) | rb(s2)); }
- inline void Assembler::lvsr( VectorRegister d, Register s1, Register s2) { emit_int32( LVSR_OPCODE | vrt(d) | ra0mem(s1) | rb(s2)); }
-
-+// Vector-Scalar (VSX) instructions.
-+inline void Assembler::mtvrd( VectorRegister d, Register a) { emit_int32( MTVSRD_OPCODE | vrt(d) | ra(a) | 1u); } // 1u: d is treated as Vector (VMX/Altivec).
-+inline void Assembler::mfvrd( Register a, VectorRegister d) { emit_int32( MFVSRD_OPCODE | vrt(d) | ra(a) | 1u); } // 1u: d is treated as Vector (VMX/Altivec).
-+
- inline void Assembler::vpkpx( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VPKPX_OPCODE | vrt(d) | vra(a) | vrb(b)); }
- inline void Assembler::vpkshss( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VPKSHSS_OPCODE | vrt(d) | vra(a) | vrb(b)); }
- inline void Assembler::vpkswss( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VPKSWSS_OPCODE | vrt(d) | vra(a) | vrb(b)); }
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp openjdk/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp
-@@ -3423,6 +3423,565 @@
- BLOCK_COMMENT("} kernel_crc32_1byte");
- }
-
-+/**
-+ * @param crc register containing existing CRC (32-bit)
-+ * @param buf register pointing to input byte buffer (byte*)
-+ * @param len register containing number of bytes
-+ * @param table register pointing to CRC table
-+ * @param constants register pointing to CRC table for 128-bit aligned memory
-+ * @param barretConstants register pointing to table for barrett reduction
-+ * @param t0 volatile register
-+ * @param t1 volatile register
-+ * @param t2 volatile register
-+ * @param t3 volatile register
-+ */
-+void MacroAssembler::kernel_crc32_1word_vpmsumd(Register crc, Register buf, Register len, Register table,
-+ Register constants, Register barretConstants,
-+ Register t0, Register t1, Register t2, Register t3, Register t4) {
-+ assert_different_registers(crc, buf, len, table);
-+
-+ Label L_alignedHead, L_tail, L_alignTail, L_start, L_end;
-+
-+ Register prealign = t0;
-+ Register postalign = t0;
-+
-+ BLOCK_COMMENT("kernel_crc32_1word_vpmsumb {");
-+
-+ // 1. use kernel_crc32_1word for shorter than 384bit
-+ clrldi(len, len, 32);
-+ cmpdi(CCR0, len, 384);
-+ bge(CCR0, L_start);
-+
-+ Register tc0 = t4;
-+ Register tc1 = constants;
-+ Register tc2 = barretConstants;
-+ kernel_crc32_1word(crc, buf, len, table,t0, t1, t2, t3, tc0, tc1, tc2, table);
-+ b(L_end);
-+
-+ BIND(L_start);
-+
-+ // 2. ~c
-+ nand(crc, crc, crc);
-+
-+ // 3. calculate from 0 to first 128bit-aligned address
-+ clrldi_(prealign, buf, 57);
-+ beq(CCR0, L_alignedHead);
-+
-+ subfic(prealign, prealign, 128);
-+
-+ subf(len, prealign, len);
-+ update_byteLoop_crc32(crc, buf, prealign, table, t2, false, false);
-+
-+ // 4. calculate from first 128bit-aligned address to last 128bit-aligned address
-+ BIND(L_alignedHead);
-+
-+ clrldi(postalign, len, 57);
-+ subf(len, postalign, len);
-+
-+ // len must be more than 256bit
-+ kernel_crc32_1word_aligned(crc, buf, len, constants, barretConstants, t1, t2, t3);
-+
-+ // 5. calculate remaining
-+ cmpdi(CCR0, postalign, 0);
-+ beq(CCR0, L_tail);
-+
-+ update_byteLoop_crc32(crc, buf, postalign, table, t2, false, false);
-+
-+ BIND(L_tail);
-+
-+ // 6. ~c
-+ nand(crc, crc, crc);
-+
-+ BIND(L_end);
-+
-+ BLOCK_COMMENT("} kernel_crc32_1word_vpmsumb");
-+}
-+
-+/**
-+ * @param crc register containing existing CRC (32-bit)
-+ * @param buf register pointing to input byte buffer (byte*)
-+ * @param len register containing number of bytes
-+ * @param constants register pointing to CRC table for 128-bit aligned memory
-+ * @param barretConstants register pointing to table for barrett reduction
-+ * @param t0 volatile register
-+ * @param t1 volatile register
-+ * @param t2 volatile register
-+ */
-+void MacroAssembler::kernel_crc32_1word_aligned(Register crc, Register buf, Register len,
-+ Register constants, Register barretConstants, Register t0, Register t1, Register t2) {
-+ Label L_mainLoop, L_tail, L_alignTail, L_barrett_reduction, L_end, L_first_warm_up_done, L_first_cool_down, L_second_cool_down, L_XOR, L_test;
-+ Label L_lv0, L_lv1, L_lv2, L_lv3, L_lv4, L_lv5, L_lv6, L_lv7, L_lv8, L_lv9, L_lv10, L_lv11, L_lv12, L_lv13, L_lv14, L_lv15;
-+ Label L_1, L_2, L_3, L_4;
-+
-+ Register rLoaded = t0;
-+ Register rTmp1 = t1;
-+ Register rTmp2 = t2;
-+ Register off16 = R22;
-+ Register off32 = R23;
-+ Register off48 = R24;
-+ Register off64 = R25;
-+ Register off80 = R26;
-+ Register off96 = R27;
-+ Register off112 = R28;
-+ Register rIdx = R29;
-+ Register rMax = R30;
-+ Register constantsPos = R31;
-+
-+ VectorRegister mask_32bit = VR24;
-+ VectorRegister mask_64bit = VR25;
-+ VectorRegister zeroes = VR26;
-+ VectorRegister const1 = VR27;
-+ VectorRegister const2 = VR28;
-+
-+ // Save non-volatile vector registers (frameless).
-+ Register offset = t1; int offsetInt = 0;
-+ offsetInt -= 16; li(offset, -16); stvx(VR20, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); stvx(VR21, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); stvx(VR22, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); stvx(VR23, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); stvx(VR24, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); stvx(VR25, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); stvx(VR26, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); stvx(VR27, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); stvx(VR28, offset, R1_SP);
-+ offsetInt -= 8; std(R22, offsetInt, R1_SP);
-+ offsetInt -= 8; std(R23, offsetInt, R1_SP);
-+ offsetInt -= 8; std(R24, offsetInt, R1_SP);
-+ offsetInt -= 8; std(R25, offsetInt, R1_SP);
-+ offsetInt -= 8; std(R26, offsetInt, R1_SP);
-+ offsetInt -= 8; std(R27, offsetInt, R1_SP);
-+ offsetInt -= 8; std(R28, offsetInt, R1_SP);
-+ offsetInt -= 8; std(R29, offsetInt, R1_SP);
-+ offsetInt -= 8; std(R30, offsetInt, R1_SP);
-+ offsetInt -= 8; std(R31, offsetInt, R1_SP);
-+
-+ // Set constants
-+ li(off16, 16);
-+ li(off32, 32);
-+ li(off48, 48);
-+ li(off64, 64);
-+ li(off80, 80);
-+ li(off96, 96);
-+ li(off112, 112);
-+
-+ clrldi(crc, crc, 32);
-+
-+ vxor(zeroes, zeroes, zeroes);
-+ vspltisw(VR0, -1);
-+
-+ vsldoi(mask_32bit, zeroes, VR0, 4);
-+ vsldoi(mask_64bit, zeroes, VR0, -8);
-+
-+ // Get the initial value into v8
-+ vxor(VR8, VR8, VR8);
-+ mtvrd(VR8, crc);
-+ vsldoi(VR8, zeroes, VR8, -8); // shift into bottom 32 bits
-+
-+ li (rLoaded, 0);
-+
-+ rldicr(rIdx, len, 0, 56);
-+
-+ {
-+ BIND(L_1);
-+ // Checksum in blocks of MAX_SIZE (32768)
-+ lis(rMax, 0);
-+ ori(rMax, rMax, 32768);
-+ mr(rTmp2, rMax);
-+ cmpd(CCR0, rIdx, rMax);
-+ bgt(CCR0, L_2);
-+ mr(rMax, rIdx);
-+
-+ BIND(L_2);
-+ subf(rIdx, rMax, rIdx);
-+
-+ // our main loop does 128 bytes at a time
-+ srdi(rMax, rMax, 7);
-+
-+ /*
-+ * Work out the offset into the constants table to start at. Each
-+ * constant is 16 bytes, and it is used against 128 bytes of input
-+ * data - 128 / 16 = 8
-+ */
-+ sldi(rTmp1, rMax, 4);
-+ srdi(rTmp2, rTmp2, 3);
-+ subf(rTmp1, rTmp1, rTmp2);
-+
-+ // We reduce our final 128 bytes in a separate step
-+ addi(rMax, rMax, -1);
-+ mtctr(rMax);
-+
-+ // Find the start of our constants
-+ add(constantsPos, constants, rTmp1);
-+
-+ // zero VR0-v7 which will contain our checksums
-+ vxor(VR0, VR0, VR0);
-+ vxor(VR1, VR1, VR1);
-+ vxor(VR2, VR2, VR2);
-+ vxor(VR3, VR3, VR3);
-+ vxor(VR4, VR4, VR4);
-+ vxor(VR5, VR5, VR5);
-+ vxor(VR6, VR6, VR6);
-+ vxor(VR7, VR7, VR7);
-+
-+ lvx(const1, constantsPos);
-+
-+ /*
-+ * If we are looping back to consume more data we use the values
-+ * already in VR16-v23.
-+ */
-+ cmpdi(CCR0, rLoaded, 1);
-+ beq(CCR0, L_3);
-+ {
-+
-+ // First warm up pass
-+ lvx(VR16, buf);
-+ lvx(VR17, off16, buf);
-+ lvx(VR18, off32, buf);
-+ lvx(VR19, off48, buf);
-+ lvx(VR20, off64, buf);
-+ lvx(VR21, off80, buf);
-+ lvx(VR22, off96, buf);
-+ lvx(VR23, off112, buf);
-+ addi(buf, buf, 8*16);
-+
-+ // xor in initial value
-+ vxor(VR16, VR16, VR8);
-+ }
-+
-+ BIND(L_3);
-+ bdz(L_first_warm_up_done);
-+
-+ addi(constantsPos, constantsPos, 16);
-+ lvx(const2, constantsPos);
-+
-+ // Second warm up pass
-+ vpmsumd(VR8, VR16, const1);
-+ lvx(VR16, buf);
-+
-+ vpmsumd(VR9, VR17, const1);
-+ lvx(VR17, off16, buf);
-+
-+ vpmsumd(VR10, VR18, const1);
-+ lvx(VR18, off32, buf);
-+
-+ vpmsumd(VR11, VR19, const1);
-+ lvx(VR19, off48, buf);
-+
-+ vpmsumd(VR12, VR20, const1);
-+ lvx(VR20, off64, buf);
-+
-+ vpmsumd(VR13, VR21, const1);
-+ lvx(VR21, off80, buf);
-+
-+ vpmsumd(VR14, VR22, const1);
-+ lvx(VR22, off96, buf);
-+
-+ vpmsumd(VR15, VR23, const1);
-+ lvx(VR23, off112, buf);
-+
-+ addi(buf, buf, 8 * 16);
-+
-+ bdz(L_first_cool_down);
-+
-+ /*
-+ * main loop. We modulo schedule it such that it takes three iterations
-+ * to complete - first iteration load, second iteration vpmsum, third
-+ * iteration xor.
-+ */
-+ {
-+ BIND(L_4);
-+ lvx(const1, constantsPos); addi(constantsPos, constantsPos, 16);
-+
-+ vxor(VR0, VR0, VR8);
-+ vpmsumd(VR8, VR16, const2);
-+ lvx(VR16, buf);
-+
-+ vxor(VR1, VR1, VR9);
-+ vpmsumd(VR9, VR17, const2);
-+ lvx(VR17, off16, buf);
-+
-+ vxor(VR2, VR2, VR10);
-+ vpmsumd(VR10, VR18, const2);
-+ lvx(VR18, off32, buf);
-+
-+ vxor(VR3, VR3, VR11);
-+ vpmsumd(VR11, VR19, const2);
-+ lvx(VR19, off48, buf);
-+ lvx(const2, constantsPos);
-+
-+ vxor(VR4, VR4, VR12);
-+ vpmsumd(VR12, VR20, const1);
-+ lvx(VR20, off64, buf);
-+
-+ vxor(VR5, VR5, VR13);
-+ vpmsumd(VR13, VR21, const1);
-+ lvx(VR21, off80, buf);
-+
-+ vxor(VR6, VR6, VR14);
-+ vpmsumd(VR14, VR22, const1);
-+ lvx(VR22, off96, buf);
-+
-+ vxor(VR7, VR7, VR15);
-+ vpmsumd(VR15, VR23, const1);
-+ lvx(VR23, off112, buf);
-+
-+ addi(buf, buf, 8 * 16);
-+
-+ bdnz(L_4);
-+ }
-+
-+ BIND(L_first_cool_down);
-+
-+ // First cool down pass
-+ lvx(const1, constantsPos);
-+ addi(constantsPos, constantsPos, 16);
-+
-+ vxor(VR0, VR0, VR8);
-+ vpmsumd(VR8, VR16, const1);
-+
-+ vxor(VR1, VR1, VR9);
-+ vpmsumd(VR9, VR17, const1);
-+
-+ vxor(VR2, VR2, VR10);
-+ vpmsumd(VR10, VR18, const1);
-+
-+ vxor(VR3, VR3, VR11);
-+ vpmsumd(VR11, VR19, const1);
-+
-+ vxor(VR4, VR4, VR12);
-+ vpmsumd(VR12, VR20, const1);
-+
-+ vxor(VR5, VR5, VR13);
-+ vpmsumd(VR13, VR21, const1);
-+
-+ vxor(VR6, VR6, VR14);
-+ vpmsumd(VR14, VR22, const1);
-+
-+ vxor(VR7, VR7, VR15);
-+ vpmsumd(VR15, VR23, const1);
-+
-+ BIND(L_second_cool_down);
-+ // Second cool down pass
-+ vxor(VR0, VR0, VR8);
-+ vxor(VR1, VR1, VR9);
-+ vxor(VR2, VR2, VR10);
-+ vxor(VR3, VR3, VR11);
-+ vxor(VR4, VR4, VR12);
-+ vxor(VR5, VR5, VR13);
-+ vxor(VR6, VR6, VR14);
-+ vxor(VR7, VR7, VR15);
-+
-+ /*
-+ * vpmsumd produces a 96 bit result in the least significant bits
-+ * of the register. Since we are bit reflected we have to shift it
-+ * left 32 bits so it occupies the least significant bits in the
-+ * bit reflected domain.
-+ */
-+ vsldoi(VR0, VR0, zeroes, 4);
-+ vsldoi(VR1, VR1, zeroes, 4);
-+ vsldoi(VR2, VR2, zeroes, 4);
-+ vsldoi(VR3, VR3, zeroes, 4);
-+ vsldoi(VR4, VR4, zeroes, 4);
-+ vsldoi(VR5, VR5, zeroes, 4);
-+ vsldoi(VR6, VR6, zeroes, 4);
-+ vsldoi(VR7, VR7, zeroes, 4);
-+
-+ // xor with last 1024 bits
-+ lvx(VR8, buf);
-+ lvx(VR9, off16, buf);
-+ lvx(VR10, off32, buf);
-+ lvx(VR11, off48, buf);
-+ lvx(VR12, off64, buf);
-+ lvx(VR13, off80, buf);
-+ lvx(VR14, off96, buf);
-+ lvx(VR15, off112, buf);
-+ addi(buf, buf, 8 * 16);
-+
-+ vxor(VR16, VR0, VR8);
-+ vxor(VR17, VR1, VR9);
-+ vxor(VR18, VR2, VR10);
-+ vxor(VR19, VR3, VR11);
-+ vxor(VR20, VR4, VR12);
-+ vxor(VR21, VR5, VR13);
-+ vxor(VR22, VR6, VR14);
-+ vxor(VR23, VR7, VR15);
-+
-+ li(rLoaded, 1);
-+ cmpdi(CCR0, rIdx, 0);
-+ addi(rIdx, rIdx, 128);
-+ bne(CCR0, L_1);
-+ }
-+
-+ // Work out how many bytes we have left
-+ andi_(len, len, 127);
-+
-+ // Calculate where in the constant table we need to start
-+ subfic(rTmp1, len, 128);
-+ add(constantsPos, constantsPos, rTmp1);
-+
-+ // How many 16 byte chunks are in the tail
-+ srdi(rIdx, len, 4);
-+ mtctr(rIdx);
-+
-+ /*
-+ * Reduce the previously calculated 1024 bits to 64 bits, shifting
-+ * 32 bits to include the trailing 32 bits of zeros
-+ */
-+ lvx(VR0, constantsPos);
-+ lvx(VR1, off16, constantsPos);
-+ lvx(VR2, off32, constantsPos);
-+ lvx(VR3, off48, constantsPos);
-+ lvx(VR4, off64, constantsPos);
-+ lvx(VR5, off80, constantsPos);
-+ lvx(VR6, off96, constantsPos);
-+ lvx(VR7, off112, constantsPos);
-+ addi(constantsPos, constantsPos, 8 * 16);
-+
-+ vpmsumw(VR0, VR16, VR0);
-+ vpmsumw(VR1, VR17, VR1);
-+ vpmsumw(VR2, VR18, VR2);
-+ vpmsumw(VR3, VR19, VR3);
-+ vpmsumw(VR4, VR20, VR4);
-+ vpmsumw(VR5, VR21, VR5);
-+ vpmsumw(VR6, VR22, VR6);
-+ vpmsumw(VR7, VR23, VR7);
-+
-+ // Now reduce the tail (0 - 112 bytes)
-+ cmpdi(CCR0, rIdx, 0);
-+ beq(CCR0, L_XOR);
-+
-+ lvx(VR16, buf); addi(buf, buf, 16);
-+ lvx(VR17, constantsPos);
-+ vpmsumw(VR16, VR16, VR17);
-+ vxor(VR0, VR0, VR16);
-+ beq(CCR0, L_XOR);
-+
-+ lvx(VR16, buf); addi(buf, buf, 16);
-+ lvx(VR17, off16, constantsPos);
-+ vpmsumw(VR16, VR16, VR17);
-+ vxor(VR0, VR0, VR16);
-+ beq(CCR0, L_XOR);
-+
-+ lvx(VR16, buf); addi(buf, buf, 16);
-+ lvx(VR17, off32, constantsPos);
-+ vpmsumw(VR16, VR16, VR17);
-+ vxor(VR0, VR0, VR16);
-+ beq(CCR0, L_XOR);
-+
-+ lvx(VR16, buf); addi(buf, buf, 16);
-+ lvx(VR17, off48,constantsPos);
-+ vpmsumw(VR16, VR16, VR17);
-+ vxor(VR0, VR0, VR16);
-+ beq(CCR0, L_XOR);
-+
-+ lvx(VR16, buf); addi(buf, buf, 16);
-+ lvx(VR17, off64, constantsPos);
-+ vpmsumw(VR16, VR16, VR17);
-+ vxor(VR0, VR0, VR16);
-+ beq(CCR0, L_XOR);
-+
-+ lvx(VR16, buf); addi(buf, buf, 16);
-+ lvx(VR17, off80, constantsPos);
-+ vpmsumw(VR16, VR16, VR17);
-+ vxor(VR0, VR0, VR16);
-+ beq(CCR0, L_XOR);
-+
-+ lvx(VR16, buf); addi(buf, buf, 16);
-+ lvx(VR17, off96, constantsPos);
-+ vpmsumw(VR16, VR16, VR17);
-+ vxor(VR0, VR0, VR16);
-+
-+ // Now xor all the parallel chunks together
-+ BIND(L_XOR);
-+ vxor(VR0, VR0, VR1);
-+ vxor(VR2, VR2, VR3);
-+ vxor(VR4, VR4, VR5);
-+ vxor(VR6, VR6, VR7);
-+
-+ vxor(VR0, VR0, VR2);
-+ vxor(VR4, VR4, VR6);
-+
-+ vxor(VR0, VR0, VR4);
-+
-+ b(L_barrett_reduction);
-+
-+ BIND(L_first_warm_up_done);
-+ lvx(const1, constantsPos);
-+ addi(constantsPos, constantsPos, 16);
-+ vpmsumd(VR8, VR16, const1);
-+ vpmsumd(VR9, VR17, const1);
-+ vpmsumd(VR10, VR18, const1);
-+ vpmsumd(VR11, VR19, const1);
-+ vpmsumd(VR12, VR20, const1);
-+ vpmsumd(VR13, VR21, const1);
-+ vpmsumd(VR14, VR22, const1);
-+ vpmsumd(VR15, VR23, const1);
-+ b(L_second_cool_down);
-+
-+ BIND(L_barrett_reduction);
-+
-+ lvx(const1, barretConstants);
-+ addi(barretConstants, barretConstants, 16);
-+ lvx(const2, barretConstants);
-+
-+ vsldoi(VR1, VR0, VR0, -8);
-+ vxor(VR0, VR0, VR1); // xor two 64 bit results together
-+
-+ // shift left one bit
-+ vspltisb(VR1, 1);
-+ vsl(VR0, VR0, VR1);
-+
-+ vand(VR0, VR0, mask_64bit);
-+
-+ /*
-+ * The reflected version of Barrett reduction. Instead of bit
-+ * reflecting our data (which is expensive to do), we bit reflect our
-+ * constants and our algorithm, which means the intermediate data in
-+ * our vector registers goes from 0-63 instead of 63-0. We can reflect
-+ * the algorithm because we don't carry in mod 2 arithmetic.
-+ */
-+ vand(VR1, VR0, mask_32bit); // bottom 32 bits of a
-+ vpmsumd(VR1, VR1, const1); // ma
-+ vand(VR1, VR1, mask_32bit); // bottom 32bits of ma
-+ vpmsumd(VR1, VR1, const2); // qn */
-+ vxor(VR0, VR0, VR1); // a - qn, subtraction is xor in GF(2)
-+
-+ /*
-+ * Since we are bit reflected, the result (ie the low 32 bits) is in
-+ * the high 32 bits. We just need to shift it left 4 bytes
-+ * V0 [ 0 1 X 3 ]
-+ * V0 [ 0 X 2 3 ]
-+ */
-+ vsldoi(VR0, VR0, zeroes, 4); // shift result into top 64 bits of
-+
-+ // Get it into r3
-+ mfvrd(crc, VR0);
-+
-+ BIND(L_end);
-+
-+ offsetInt = 0;
-+ // Restore non-volatile Vector registers (frameless).
-+ offsetInt -= 16; li(offset, -16); lvx(VR20, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); lvx(VR21, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); lvx(VR22, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); lvx(VR23, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); lvx(VR24, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); lvx(VR25, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); lvx(VR26, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); lvx(VR27, offset, R1_SP);
-+ offsetInt -= 16; addi(offset, offset, -16); lvx(VR28, offset, R1_SP);
-+ offsetInt -= 8; ld(R22, offsetInt, R1_SP);
-+ offsetInt -= 8; ld(R23, offsetInt, R1_SP);
-+ offsetInt -= 8; ld(R24, offsetInt, R1_SP);
-+ offsetInt -= 8; ld(R25, offsetInt, R1_SP);
-+ offsetInt -= 8; ld(R26, offsetInt, R1_SP);
-+ offsetInt -= 8; ld(R27, offsetInt, R1_SP);
-+ offsetInt -= 8; ld(R28, offsetInt, R1_SP);
-+ offsetInt -= 8; ld(R29, offsetInt, R1_SP);
-+ offsetInt -= 8; ld(R30, offsetInt, R1_SP);
-+ offsetInt -= 8; ld(R31, offsetInt, R1_SP);
-+}
-+
- void MacroAssembler::kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp) {
- assert_different_registers(crc, buf, /* len, not used!! */ table, tmp);
-
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp openjdk/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp
-@@ -656,6 +656,13 @@
- Register tc0, Register tc1, Register tc2, Register tc3);
- void kernel_crc32_1byte(Register crc, Register buf, Register len, Register table,
- Register t0, Register t1, Register t2, Register t3);
-+ void kernel_crc32_1word_vpmsumd(Register crc, Register buf, Register len, Register table,
-+ Register constants, Register barretConstants,
-+ Register t0, Register t1, Register t2, Register t3, Register t4);
-+ void kernel_crc32_1word_aligned(Register crc, Register buf, Register len,
-+ Register constants, Register barretConstants,
-+ Register t0, Register t1, Register t2);
-+
- void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp);
-
- //
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp openjdk/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp
-@@ -2482,9 +2482,7 @@
- * R5_ARG3 - int length (of buffer)
- *
- * scratch:
-- * R6_ARG4 - crc table address
-- * R7_ARG5 - tmp1
-- * R8_ARG6 - tmp2
-+ * R2, R6-R12
- *
- * Ouput:
- * R3_RET - int crc result
-@@ -2496,28 +2494,62 @@
- address start = __ function_entry(); // Remember stub start address (is rtn value).
-
- // arguments to kernel_crc32:
-- Register crc = R3_ARG1; // Current checksum, preset by caller or result from previous call.
-- Register data = R4_ARG2; // source byte array
-- Register dataLen = R5_ARG3; // #bytes to process
-- Register table = R6_ARG4; // crc table address
--
-- Register t0 = R9; // work reg for kernel* emitters
-- Register t1 = R10; // work reg for kernel* emitters
-- Register t2 = R11; // work reg for kernel* emitters
-- Register t3 = R12; // work reg for kernel* emitters
--
-- BLOCK_COMMENT("Stub body {");
-- assert_different_registers(crc, data, dataLen, table);
--
-- StubRoutines::ppc64::generate_load_crc_table_addr(_masm, table);
--
-- __ kernel_crc32_1byte(crc, data, dataLen, table, t0, t1, t2, t3);
--
-- BLOCK_COMMENT("return");
-- __ mr_if_needed(R3_RET, crc); // Updated crc is function result. No copying required (R3_ARG1 == R3_RET).
-- __ blr();
--
-- BLOCK_COMMENT("} Stub body");
-+ const Register crc = R3_ARG1; // Current checksum, preset by caller or result from previous call.
-+ const Register data = R4_ARG2; // source byte array
-+ const Register dataLen = R5_ARG3; // #bytes to process
-+
-+ const Register table = R6; // crc table address
-+
-+#ifdef VM_LITTLE_ENDIAN
-+ if (VM_Version::has_vpmsumb()) {
-+ const Register constants = R2; // constants address
-+ const Register bconstants = R8; // barret table address
-+
-+ const Register t0 = R9;
-+ const Register t1 = R10;
-+ const Register t2 = R11;
-+ const Register t3 = R12;
-+ const Register t4 = R7;
-+
-+ BLOCK_COMMENT("Stub body {");
-+ assert_different_registers(crc, data, dataLen, table);
-+
-+ StubRoutines::ppc64::generate_load_crc_table_addr(_masm, table);
-+ StubRoutines::ppc64::generate_load_crc_constants_addr(_masm, constants);
-+ StubRoutines::ppc64::generate_load_crc_barret_constants_addr(_masm, bconstants);
-+
-+ __ kernel_crc32_1word_vpmsumd(crc, data, dataLen, table, constants, bconstants, t0, t1, t2, t3, t4);
-+
-+ BLOCK_COMMENT("return");
-+ __ mr_if_needed(R3_RET, crc); // Updated crc is function result. No copying required (R3_ARG1 == R3_RET).
-+ __ blr();
-+
-+ BLOCK_COMMENT("} Stub body");
-+ } else
-+#endif
-+ {
-+ const Register t0 = R2;
-+ const Register t1 = R7;
-+ const Register t2 = R8;
-+ const Register t3 = R9;
-+ const Register tc0 = R10;
-+ const Register tc1 = R11;
-+ const Register tc2 = R12;
-+
-+ BLOCK_COMMENT("Stub body {");
-+ assert_different_registers(crc, data, dataLen, table);
-+
-+ StubRoutines::ppc64::generate_load_crc_table_addr(_masm, table);
-+
-+ __ kernel_crc32_1word(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, table);
-+
-+ BLOCK_COMMENT("return");
-+ __ mr_if_needed(R3_RET, crc); // Updated crc is function result. No copying required (R3_ARG1 == R3_RET).
-+ __ blr();
-+
-+ BLOCK_COMMENT("} Stub body");
-+ }
-+
- return start;
- }
-
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.cpp openjdk/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.cpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.cpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.cpp
-@@ -37,6 +37,311 @@
- __ load_const(table, StubRoutines::_crc_table_adr);
- }
-
-+void StubRoutines::ppc64::generate_load_crc_constants_addr(MacroAssembler* masm, Register table) {
-+ __ load_const_optimized(table, (address)StubRoutines::ppc64::_constants, R0);
-+}
-+
-+void StubRoutines::ppc64::generate_load_crc_barret_constants_addr(MacroAssembler* masm, Register table) {
-+ __ load_const_optimized(table, (address)StubRoutines::ppc64::_barret_constants, R0);
-+}
-+
-+juint* StubRoutines::ppc64::generate_crc_constants() {
-+ juint constants[CRC32_CONSTANTS_SIZE] = {
-+ // Reduce 262144 kbits to 1024 bits
-+ 0x99ea94a8UL, 0x00000000UL, 0x651797d2UL, 0x00000001UL, // x^261120 mod p(x)` << 1, x^261184 mod p(x)` << 1
-+ 0x945a8420UL, 0x00000000UL, 0x21e0d56cUL, 0x00000000UL, // x^260096 mod p(x)` << 1, x^260160 mod p(x)` << 1
-+ 0x30762706UL, 0x00000000UL, 0x0f95ecaaUL, 0x00000000UL, // x^259072 mod p(x)` << 1, x^259136 mod p(x)` << 1
-+ 0xa52fc582UL, 0x00000001UL, 0xebd224acUL, 0x00000001UL, // x^258048 mod p(x)` << 1, x^258112 mod p(x)` << 1
-+ 0xa4a7167aUL, 0x00000001UL, 0x0ccb97caUL, 0x00000000UL, // x^257024 mod p(x)` << 1, x^257088 mod p(x)` << 1
-+ 0x0c18249aUL, 0x00000000UL, 0x006ec8a8UL, 0x00000001UL, // x^256000 mod p(x)` << 1, x^256064 mod p(x)` << 1
-+ 0xa924ae7cUL, 0x00000000UL, 0x4f58f196UL, 0x00000001UL, // x^254976 mod p(x)` << 1, x^255040 mod p(x)` << 1
-+ 0xe12ccc12UL, 0x00000001UL, 0xa7192ca6UL, 0x00000001UL, // x^253952 mod p(x)` << 1, x^254016 mod p(x)` << 1
-+ 0xa0b9d4acUL, 0x00000000UL, 0x9a64bab2UL, 0x00000001UL, // x^252928 mod p(x)` << 1, x^252992 mod p(x)` << 1
-+ 0x95e8ddfeUL, 0x00000000UL, 0x14f4ed2eUL, 0x00000000UL, // x^251904 mod p(x)` << 1, x^251968 mod p(x)` << 1
-+ 0x233fddc4UL, 0x00000000UL, 0x1092b6a2UL, 0x00000001UL, // x^250880 mod p(x)` << 1, x^250944 mod p(x)` << 1
-+ 0xb4529b62UL, 0x00000001UL, 0xc8a1629cUL, 0x00000000UL, // x^249856 mod p(x)` << 1, x^249920 mod p(x)` << 1
-+ 0xa7fa0e64UL, 0x00000001UL, 0x7bf32e8eUL, 0x00000001UL, // x^248832 mod p(x)` << 1, x^248896 mod p(x)` << 1
-+ 0xb5334592UL, 0x00000001UL, 0xf8cc6582UL, 0x00000001UL, // x^247808 mod p(x)` << 1, x^247872 mod p(x)` << 1
-+ 0x1f8ee1b4UL, 0x00000001UL, 0x8631ddf0UL, 0x00000000UL, // x^246784 mod p(x)` << 1, x^246848 mod p(x)` << 1
-+ 0x6252e632UL, 0x00000000UL, 0x7e5a76d0UL, 0x00000000UL, // x^245760 mod p(x)` << 1, x^245824 mod p(x)` << 1
-+ 0xab973e84UL, 0x00000000UL, 0x2b09b31cUL, 0x00000000UL, // x^244736 mod p(x)` << 1, x^244800 mod p(x)` << 1
-+ 0x7734f5ecUL, 0x00000000UL, 0xb2df1f84UL, 0x00000001UL, // x^243712 mod p(x)` << 1, x^243776 mod p(x)` << 1
-+ 0x7c547798UL, 0x00000000UL, 0xd6f56afcUL, 0x00000001UL, // x^242688 mod p(x)` << 1, x^242752 mod p(x)` << 1
-+ 0x7ec40210UL, 0x00000000UL, 0xb9b5e70cUL, 0x00000001UL, // x^241664 mod p(x)` << 1, x^241728 mod p(x)` << 1
-+ 0xab1695a8UL, 0x00000001UL, 0x34b626d2UL, 0x00000000UL, // x^240640 mod p(x)` << 1, x^240704 mod p(x)` << 1
-+ 0x90494bbaUL, 0x00000000UL, 0x4c53479aUL, 0x00000001UL, // x^239616 mod p(x)` << 1, x^239680 mod p(x)` << 1
-+ 0x123fb816UL, 0x00000001UL, 0xa6d179a4UL, 0x00000001UL, // x^238592 mod p(x)` << 1, x^238656 mod p(x)` << 1
-+ 0xe188c74cUL, 0x00000001UL, 0x5abd16b4UL, 0x00000001UL, // x^237568 mod p(x)` << 1, x^237632 mod p(x)` << 1
-+ 0xc2d3451cUL, 0x00000001UL, 0x018f9852UL, 0x00000000UL, // x^236544 mod p(x)` << 1, x^236608 mod p(x)` << 1
-+ 0xf55cf1caUL, 0x00000000UL, 0x1fb3084aUL, 0x00000000UL, // x^235520 mod p(x)` << 1, x^235584 mod p(x)` << 1
-+ 0xa0531540UL, 0x00000001UL, 0xc53dfb04UL, 0x00000000UL, // x^234496 mod p(x)` << 1, x^234560 mod p(x)` << 1
-+ 0x32cd7ebcUL, 0x00000001UL, 0xe10c9ad6UL, 0x00000000UL, // x^233472 mod p(x)` << 1, x^233536 mod p(x)` << 1
-+ 0x73ab7f36UL, 0x00000000UL, 0x25aa994aUL, 0x00000000UL, // x^232448 mod p(x)` << 1, x^232512 mod p(x)` << 1
-+ 0x41aed1c2UL, 0x00000000UL, 0xfa3a74c4UL, 0x00000000UL, // x^231424 mod p(x)` << 1, x^231488 mod p(x)` << 1
-+ 0x36c53800UL, 0x00000001UL, 0x33eb3f40UL, 0x00000000UL, // x^230400 mod p(x)` << 1, x^230464 mod p(x)` << 1
-+ 0x26835a30UL, 0x00000001UL, 0x7193f296UL, 0x00000001UL, // x^229376 mod p(x)` << 1, x^229440 mod p(x)` << 1
-+ 0x6241b502UL, 0x00000000UL, 0x43f6c86aUL, 0x00000000UL, // x^228352 mod p(x)` << 1, x^228416 mod p(x)` << 1
-+ 0xd5196ad4UL, 0x00000000UL, 0x6b513ec6UL, 0x00000001UL, // x^227328 mod p(x)` << 1, x^227392 mod p(x)` << 1
-+ 0x9cfa769aUL, 0x00000000UL, 0xc8f25b4eUL, 0x00000000UL, // x^226304 mod p(x)` << 1, x^226368 mod p(x)` << 1
-+ 0x920e5df4UL, 0x00000000UL, 0xa45048ecUL, 0x00000001UL, // x^225280 mod p(x)` << 1, x^225344 mod p(x)` << 1
-+ 0x69dc310eUL, 0x00000001UL, 0x0c441004UL, 0x00000000UL, // x^224256 mod p(x)` << 1, x^224320 mod p(x)` << 1
-+ 0x09fc331cUL, 0x00000000UL, 0x0e17cad6UL, 0x00000000UL, // x^223232 mod p(x)` << 1, x^223296 mod p(x)` << 1
-+ 0x0d94a81eUL, 0x00000001UL, 0x253ae964UL, 0x00000001UL, // x^222208 mod p(x)` << 1, x^222272 mod p(x)` << 1
-+ 0x27a20ab2UL, 0x00000000UL, 0xd7c88ebcUL, 0x00000001UL, // x^221184 mod p(x)` << 1, x^221248 mod p(x)` << 1
-+ 0x14f87504UL, 0x00000001UL, 0xe7ca913aUL, 0x00000001UL, // x^220160 mod p(x)` << 1, x^220224 mod p(x)` << 1
-+ 0x4b076d96UL, 0x00000000UL, 0x33ed078aUL, 0x00000000UL, // x^219136 mod p(x)` << 1, x^219200 mod p(x)` << 1
-+ 0xda4d1e74UL, 0x00000000UL, 0xe1839c78UL, 0x00000000UL, // x^218112 mod p(x)` << 1, x^218176 mod p(x)` << 1
-+ 0x1b81f672UL, 0x00000000UL, 0x322b267eUL, 0x00000001UL, // x^217088 mod p(x)` << 1, x^217152 mod p(x)` << 1
-+ 0x9367c988UL, 0x00000000UL, 0x638231b6UL, 0x00000000UL, // x^216064 mod p(x)` << 1, x^216128 mod p(x)` << 1
-+ 0x717214caUL, 0x00000001UL, 0xee7f16f4UL, 0x00000001UL, // x^215040 mod p(x)` << 1, x^215104 mod p(x)` << 1
-+ 0x9f47d820UL, 0x00000000UL, 0x17d9924aUL, 0x00000001UL, // x^214016 mod p(x)` << 1, x^214080 mod p(x)` << 1
-+ 0x0d9a47d2UL, 0x00000001UL, 0xe1a9e0c4UL, 0x00000000UL, // x^212992 mod p(x)` << 1, x^213056 mod p(x)` << 1
-+ 0xa696c58cUL, 0x00000000UL, 0x403731dcUL, 0x00000001UL, // x^211968 mod p(x)` << 1, x^212032 mod p(x)` << 1
-+ 0x2aa28ec6UL, 0x00000000UL, 0xa5ea9682UL, 0x00000001UL, // x^210944 mod p(x)` << 1, x^211008 mod p(x)` << 1
-+ 0xfe18fd9aUL, 0x00000001UL, 0x01c5c578UL, 0x00000001UL, // x^209920 mod p(x)` << 1, x^209984 mod p(x)` << 1
-+ 0x9d4fc1aeUL, 0x00000001UL, 0xdddf6494UL, 0x00000000UL, // x^208896 mod p(x)` << 1, x^208960 mod p(x)` << 1
-+ 0xba0e3deaUL, 0x00000001UL, 0xf1c3db28UL, 0x00000000UL, // x^207872 mod p(x)` << 1, x^207936 mod p(x)` << 1
-+ 0x74b59a5eUL, 0x00000000UL, 0x3112fb9cUL, 0x00000001UL, // x^206848 mod p(x)` << 1, x^206912 mod p(x)` << 1
-+ 0xf2b5ea98UL, 0x00000000UL, 0xb680b906UL, 0x00000000UL, // x^205824 mod p(x)` << 1, x^205888 mod p(x)` << 1
-+ 0x87132676UL, 0x00000001UL, 0x1a282932UL, 0x00000000UL, // x^204800 mod p(x)` << 1, x^204864 mod p(x)` << 1
-+ 0x0a8c6ad4UL, 0x00000001UL, 0x89406e7eUL, 0x00000000UL, // x^203776 mod p(x)` << 1, x^203840 mod p(x)` << 1
-+ 0xe21dfe70UL, 0x00000001UL, 0xdef6be8cUL, 0x00000001UL, // x^202752 mod p(x)` << 1, x^202816 mod p(x)` << 1
-+ 0xda0050e4UL, 0x00000001UL, 0x75258728UL, 0x00000000UL, // x^201728 mod p(x)` << 1, x^201792 mod p(x)` << 1
-+ 0x772172aeUL, 0x00000000UL, 0x9536090aUL, 0x00000001UL, // x^200704 mod p(x)` << 1, x^200768 mod p(x)` << 1
-+ 0xe47724aaUL, 0x00000000UL, 0xf2455bfcUL, 0x00000000UL, // x^199680 mod p(x)` << 1, x^199744 mod p(x)` << 1
-+ 0x3cd63ac4UL, 0x00000000UL, 0x8c40baf4UL, 0x00000001UL, // x^198656 mod p(x)` << 1, x^198720 mod p(x)` << 1
-+ 0xbf47d352UL, 0x00000001UL, 0x4cd390d4UL, 0x00000000UL, // x^197632 mod p(x)` << 1, x^197696 mod p(x)` << 1
-+ 0x8dc1d708UL, 0x00000001UL, 0xe4ece95aUL, 0x00000001UL, // x^196608 mod p(x)` << 1, x^196672 mod p(x)` << 1
-+ 0x2d4620a4UL, 0x00000000UL, 0x1a3ee918UL, 0x00000000UL, // x^195584 mod p(x)` << 1, x^195648 mod p(x)` << 1
-+ 0x58fd1740UL, 0x00000000UL, 0x7c652fb8UL, 0x00000000UL, // x^194560 mod p(x)` << 1, x^194624 mod p(x)` << 1
-+ 0xdadd9bfcUL, 0x00000000UL, 0x1c67842cUL, 0x00000001UL, // x^193536 mod p(x)` << 1, x^193600 mod p(x)` << 1
-+ 0xea2140beUL, 0x00000001UL, 0x254f759cUL, 0x00000000UL, // x^192512 mod p(x)` << 1, x^192576 mod p(x)` << 1
-+ 0x9de128baUL, 0x00000000UL, 0x7ece94caUL, 0x00000000UL, // x^191488 mod p(x)` << 1, x^191552 mod p(x)` << 1
-+ 0x3ac3aa8eUL, 0x00000001UL, 0x38f258c2UL, 0x00000000UL, // x^190464 mod p(x)` << 1, x^190528 mod p(x)` << 1
-+ 0x99980562UL, 0x00000000UL, 0xcdf17b00UL, 0x00000001UL, // x^189440 mod p(x)` << 1, x^189504 mod p(x)` << 1
-+ 0xc1579c86UL, 0x00000001UL, 0x1f882c16UL, 0x00000001UL, // x^188416 mod p(x)` << 1, x^188480 mod p(x)` << 1
-+ 0x68dbbf94UL, 0x00000000UL, 0x00093fc8UL, 0x00000001UL, // x^187392 mod p(x)` << 1, x^187456 mod p(x)` << 1
-+ 0x4509fb04UL, 0x00000000UL, 0xcd684f16UL, 0x00000001UL, // x^186368 mod p(x)` << 1, x^186432 mod p(x)` << 1
-+ 0x202f6398UL, 0x00000001UL, 0x4bc6a70aUL, 0x00000000UL, // x^185344 mod p(x)` << 1, x^185408 mod p(x)` << 1
-+ 0x3aea243eUL, 0x00000001UL, 0x4fc7e8e4UL, 0x00000000UL, // x^184320 mod p(x)` << 1, x^184384 mod p(x)` << 1
-+ 0xb4052ae6UL, 0x00000001UL, 0x30103f1cUL, 0x00000001UL, // x^183296 mod p(x)` << 1, x^183360 mod p(x)` << 1
-+ 0xcd2a0ae8UL, 0x00000001UL, 0x11b0024cUL, 0x00000001UL, // x^182272 mod p(x)` << 1, x^182336 mod p(x)` << 1
-+ 0xfe4aa8b4UL, 0x00000001UL, 0x0b3079daUL, 0x00000001UL, // x^181248 mod p(x)` << 1, x^181312 mod p(x)` << 1
-+ 0xd1559a42UL, 0x00000001UL, 0x0192bcc2UL, 0x00000001UL, // x^180224 mod p(x)` << 1, x^180288 mod p(x)` << 1
-+ 0xf3e05eccUL, 0x00000001UL, 0x74838d50UL, 0x00000000UL, // x^179200 mod p(x)` << 1, x^179264 mod p(x)` << 1
-+ 0x04ddd2ccUL, 0x00000001UL, 0x1b20f520UL, 0x00000000UL, // x^178176 mod p(x)` << 1, x^178240 mod p(x)` << 1
-+ 0x5393153cUL, 0x00000001UL, 0x50c3590aUL, 0x00000000UL, // x^177152 mod p(x)` << 1, x^177216 mod p(x)` << 1
-+ 0x57e942c6UL, 0x00000000UL, 0xb41cac8eUL, 0x00000000UL, // x^176128 mod p(x)` << 1, x^176192 mod p(x)` << 1
-+ 0x2c633850UL, 0x00000001UL, 0x0c72cc78UL, 0x00000000UL, // x^175104 mod p(x)` << 1, x^175168 mod p(x)` << 1
-+ 0xebcaae4cUL, 0x00000000UL, 0x30cdb032UL, 0x00000000UL, // x^174080 mod p(x)` << 1, x^174144 mod p(x)` << 1
-+ 0x3ee532a6UL, 0x00000001UL, 0x3e09fc32UL, 0x00000001UL, // x^173056 mod p(x)` << 1, x^173120 mod p(x)` << 1
-+ 0xbf0cbc7eUL, 0x00000001UL, 0x1ed624d2UL, 0x00000000UL, // x^172032 mod p(x)` << 1, x^172096 mod p(x)` << 1
-+ 0xd50b7a5aUL, 0x00000000UL, 0x781aee1aUL, 0x00000000UL, // x^171008 mod p(x)` << 1, x^171072 mod p(x)` << 1
-+ 0x02fca6e8UL, 0x00000000UL, 0xc4d8348cUL, 0x00000001UL, // x^169984 mod p(x)` << 1, x^170048 mod p(x)` << 1
-+ 0x7af40044UL, 0x00000000UL, 0x57a40336UL, 0x00000000UL, // x^168960 mod p(x)` << 1, x^169024 mod p(x)` << 1
-+ 0x16178744UL, 0x00000000UL, 0x85544940UL, 0x00000000UL, // x^167936 mod p(x)` << 1, x^168000 mod p(x)` << 1
-+ 0x4c177458UL, 0x00000001UL, 0x9cd21e80UL, 0x00000001UL, // x^166912 mod p(x)` << 1, x^166976 mod p(x)` << 1
-+ 0x1b6ddf04UL, 0x00000001UL, 0x3eb95bc0UL, 0x00000001UL, // x^165888 mod p(x)` << 1, x^165952 mod p(x)` << 1
-+ 0xf3e29cccUL, 0x00000001UL, 0xdfc9fdfcUL, 0x00000001UL, // x^164864 mod p(x)` << 1, x^164928 mod p(x)` << 1
-+ 0x35ae7562UL, 0x00000001UL, 0xcd028bc2UL, 0x00000000UL, // x^163840 mod p(x)` << 1, x^163904 mod p(x)` << 1
-+ 0x90ef812cUL, 0x00000001UL, 0x90db8c44UL, 0x00000000UL, // x^162816 mod p(x)` << 1, x^162880 mod p(x)` << 1
-+ 0x67a2c786UL, 0x00000000UL, 0x0010a4ceUL, 0x00000001UL, // x^161792 mod p(x)` << 1, x^161856 mod p(x)` << 1
-+ 0x48b9496cUL, 0x00000000UL, 0xc8f4c72cUL, 0x00000001UL, // x^160768 mod p(x)` << 1, x^160832 mod p(x)` << 1
-+ 0x5a422de6UL, 0x00000001UL, 0x1c26170cUL, 0x00000000UL, // x^159744 mod p(x)` << 1, x^159808 mod p(x)` << 1
-+ 0xef0e3640UL, 0x00000001UL, 0xe3fccf68UL, 0x00000000UL, // x^158720 mod p(x)` << 1, x^158784 mod p(x)` << 1
-+ 0x006d2d26UL, 0x00000001UL, 0xd513ed24UL, 0x00000000UL, // x^157696 mod p(x)` << 1, x^157760 mod p(x)` << 1
-+ 0x170d56d6UL, 0x00000001UL, 0x141beadaUL, 0x00000000UL, // x^156672 mod p(x)` << 1, x^156736 mod p(x)` << 1
-+ 0xa5fb613cUL, 0x00000000UL, 0x1071aea0UL, 0x00000001UL, // x^155648 mod p(x)` << 1, x^155712 mod p(x)` << 1
-+ 0x40bbf7fcUL, 0x00000000UL, 0x2e19080aUL, 0x00000001UL, // x^154624 mod p(x)` << 1, x^154688 mod p(x)` << 1
-+ 0x6ac3a5b2UL, 0x00000001UL, 0x00ecf826UL, 0x00000001UL, // x^153600 mod p(x)` << 1, x^153664 mod p(x)` << 1
-+ 0xabf16230UL, 0x00000000UL, 0x69b09412UL, 0x00000000UL, // x^152576 mod p(x)` << 1, x^152640 mod p(x)` << 1
-+ 0xebe23facUL, 0x00000001UL, 0x22297bacUL, 0x00000001UL, // x^151552 mod p(x)` << 1, x^151616 mod p(x)` << 1
-+ 0x8b6a0894UL, 0x00000000UL, 0xe9e4b068UL, 0x00000000UL, // x^150528 mod p(x)` << 1, x^150592 mod p(x)` << 1
-+ 0x288ea478UL, 0x00000001UL, 0x4b38651aUL, 0x00000000UL, // x^149504 mod p(x)` << 1, x^149568 mod p(x)` << 1
-+ 0x6619c442UL, 0x00000001UL, 0x468360e2UL, 0x00000001UL, // x^148480 mod p(x)` << 1, x^148544 mod p(x)` << 1
-+ 0x86230038UL, 0x00000000UL, 0x121c2408UL, 0x00000000UL, // x^147456 mod p(x)` << 1, x^147520 mod p(x)` << 1
-+ 0x7746a756UL, 0x00000001UL, 0xda7e7d08UL, 0x00000000UL, // x^146432 mod p(x)` << 1, x^146496 mod p(x)` << 1
-+ 0x91b8f8f8UL, 0x00000001UL, 0x058d7652UL, 0x00000001UL, // x^145408 mod p(x)` << 1, x^145472 mod p(x)` << 1
-+ 0x8e167708UL, 0x00000000UL, 0x4a098a90UL, 0x00000001UL, // x^144384 mod p(x)` << 1, x^144448 mod p(x)` << 1
-+ 0x48b22d54UL, 0x00000001UL, 0x20dbe72eUL, 0x00000000UL, // x^143360 mod p(x)` << 1, x^143424 mod p(x)` << 1
-+ 0x44ba2c3cUL, 0x00000000UL, 0x1e7323e8UL, 0x00000001UL, // x^142336 mod p(x)` << 1, x^142400 mod p(x)` << 1
-+ 0xb54d2b52UL, 0x00000000UL, 0xd5d4bf94UL, 0x00000000UL, // x^141312 mod p(x)` << 1, x^141376 mod p(x)` << 1
-+ 0x05a4fd8aUL, 0x00000000UL, 0x99d8746cUL, 0x00000001UL, // x^140288 mod p(x)` << 1, x^140352 mod p(x)` << 1
-+ 0x39f9fc46UL, 0x00000001UL, 0xce9ca8a0UL, 0x00000000UL, // x^139264 mod p(x)` << 1, x^139328 mod p(x)` << 1
-+ 0x5a1fa824UL, 0x00000001UL, 0x136edeceUL, 0x00000000UL, // x^138240 mod p(x)` << 1, x^138304 mod p(x)` << 1
-+ 0x0a61ae4cUL, 0x00000000UL, 0x9b92a068UL, 0x00000001UL, // x^137216 mod p(x)` << 1, x^137280 mod p(x)` << 1
-+ 0x45e9113eUL, 0x00000001UL, 0x71d62206UL, 0x00000000UL, // x^136192 mod p(x)` << 1, x^136256 mod p(x)` << 1
-+ 0x6a348448UL, 0x00000000UL, 0xdfc50158UL, 0x00000000UL, // x^135168 mod p(x)` << 1, x^135232 mod p(x)` << 1
-+ 0x4d80a08cUL, 0x00000000UL, 0x517626bcUL, 0x00000001UL, // x^134144 mod p(x)` << 1, x^134208 mod p(x)` << 1
-+ 0x4b6837a0UL, 0x00000001UL, 0x48d1e4faUL, 0x00000001UL, // x^133120 mod p(x)` << 1, x^133184 mod p(x)` << 1
-+ 0x6896a7fcUL, 0x00000001UL, 0x94d8266eUL, 0x00000000UL, // x^132096 mod p(x)` << 1, x^132160 mod p(x)` << 1
-+ 0x4f187140UL, 0x00000001UL, 0x606c5e34UL, 0x00000000UL, // x^131072 mod p(x)` << 1, x^131136 mod p(x)` << 1
-+ 0x9581b9daUL, 0x00000001UL, 0x9766beaaUL, 0x00000001UL, // x^130048 mod p(x)` << 1, x^130112 mod p(x)` << 1
-+ 0x091bc984UL, 0x00000001UL, 0xd80c506cUL, 0x00000001UL, // x^129024 mod p(x)` << 1, x^129088 mod p(x)` << 1
-+ 0x1067223cUL, 0x00000000UL, 0x1e73837cUL, 0x00000000UL, // x^128000 mod p(x)` << 1, x^128064 mod p(x)` << 1
-+ 0xab16ea02UL, 0x00000001UL, 0x64d587deUL, 0x00000000UL, // x^126976 mod p(x)` << 1, x^127040 mod p(x)` << 1
-+ 0x3c4598a8UL, 0x00000001UL, 0xf4a507b0UL, 0x00000000UL, // x^125952 mod p(x)` << 1, x^126016 mod p(x)` << 1
-+ 0xb3735430UL, 0x00000000UL, 0x40e342fcUL, 0x00000000UL, // x^124928 mod p(x)` << 1, x^124992 mod p(x)` << 1
-+ 0xbb3fc0c0UL, 0x00000001UL, 0xd5ad9c3aUL, 0x00000001UL, // x^123904 mod p(x)` << 1, x^123968 mod p(x)` << 1
-+ 0x570ae19cUL, 0x00000001UL, 0x94a691a4UL, 0x00000000UL, // x^122880 mod p(x)` << 1, x^122944 mod p(x)` << 1
-+ 0xea910712UL, 0x00000001UL, 0x271ecdfaUL, 0x00000001UL, // x^121856 mod p(x)` << 1, x^121920 mod p(x)` << 1
-+ 0x67127128UL, 0x00000001UL, 0x9e54475aUL, 0x00000000UL, // x^120832 mod p(x)` << 1, x^120896 mod p(x)` << 1
-+ 0x19e790a2UL, 0x00000000UL, 0xc9c099eeUL, 0x00000000UL, // x^119808 mod p(x)` << 1, x^119872 mod p(x)` << 1
-+ 0x3788f710UL, 0x00000000UL, 0x9a2f736cUL, 0x00000000UL, // x^118784 mod p(x)` << 1, x^118848 mod p(x)` << 1
-+ 0x682a160eUL, 0x00000001UL, 0xbb9f4996UL, 0x00000000UL, // x^117760 mod p(x)` << 1, x^117824 mod p(x)` << 1
-+ 0x7f0ebd2eUL, 0x00000000UL, 0xdb688050UL, 0x00000001UL, // x^116736 mod p(x)` << 1, x^116800 mod p(x)` << 1
-+ 0x2b032080UL, 0x00000000UL, 0xe9b10af4UL, 0x00000000UL, // x^115712 mod p(x)` << 1, x^115776 mod p(x)` << 1
-+ 0xcfd1664aUL, 0x00000000UL, 0x2d4545e4UL, 0x00000001UL, // x^114688 mod p(x)` << 1, x^114752 mod p(x)` << 1
-+ 0xaa1181c2UL, 0x00000000UL, 0x0361139cUL, 0x00000000UL, // x^113664 mod p(x)` << 1, x^113728 mod p(x)` << 1
-+ 0xddd08002UL, 0x00000000UL, 0xa5a1a3a8UL, 0x00000001UL, // x^112640 mod p(x)` << 1, x^112704 mod p(x)` << 1
-+ 0xe8dd0446UL, 0x00000000UL, 0x6844e0b0UL, 0x00000000UL, // x^111616 mod p(x)` << 1, x^111680 mod p(x)` << 1
-+ 0xbbd94a00UL, 0x00000001UL, 0xc3762f28UL, 0x00000000UL, // x^110592 mod p(x)` << 1, x^110656 mod p(x)` << 1
-+ 0xab6cd180UL, 0x00000000UL, 0xd26287a2UL, 0x00000001UL, // x^109568 mod p(x)` << 1, x^109632 mod p(x)` << 1
-+ 0x31803ce2UL, 0x00000000UL, 0xf6f0bba8UL, 0x00000001UL, // x^108544 mod p(x)` << 1, x^108608 mod p(x)` << 1
-+ 0x24f40b0cUL, 0x00000000UL, 0x2ffabd62UL, 0x00000000UL, // x^107520 mod p(x)` << 1, x^107584 mod p(x)` << 1
-+ 0xba1d9834UL, 0x00000001UL, 0xfb4516b8UL, 0x00000000UL, // x^106496 mod p(x)` << 1, x^106560 mod p(x)` << 1
-+ 0x04de61aaUL, 0x00000001UL, 0x8cfa961cUL, 0x00000001UL, // x^105472 mod p(x)` << 1, x^105536 mod p(x)` << 1
-+ 0x13e40d46UL, 0x00000001UL, 0x9e588d52UL, 0x00000001UL, // x^104448 mod p(x)` << 1, x^104512 mod p(x)` << 1
-+ 0x415598a0UL, 0x00000001UL, 0x180f0bbcUL, 0x00000001UL, // x^103424 mod p(x)` << 1, x^103488 mod p(x)` << 1
-+ 0xbf6c8c90UL, 0x00000000UL, 0xe1d9177aUL, 0x00000000UL, // x^102400 mod p(x)` << 1, x^102464 mod p(x)` << 1
-+ 0x788b0504UL, 0x00000001UL, 0x05abc27cUL, 0x00000001UL, // x^101376 mod p(x)` << 1, x^101440 mod p(x)` << 1
-+ 0x38385d02UL, 0x00000000UL, 0x972e4a58UL, 0x00000000UL, // x^100352 mod p(x)` << 1, x^100416 mod p(x)` << 1
-+ 0xb6c83844UL, 0x00000001UL, 0x83499a5eUL, 0x00000001UL, // x^99328 mod p(x)` << 1, x^99392 mod p(x)` << 1
-+ 0x51061a8aUL, 0x00000000UL, 0xc96a8ccaUL, 0x00000001UL, // x^98304 mod p(x)` << 1, x^98368 mod p(x)` << 1
-+ 0x7351388aUL, 0x00000001UL, 0xa1a5b60cUL, 0x00000001UL, // x^97280 mod p(x)` << 1, x^97344 mod p(x)` << 1
-+ 0x32928f92UL, 0x00000001UL, 0xe4b6ac9cUL, 0x00000000UL, // x^96256 mod p(x)` << 1, x^96320 mod p(x)` << 1
-+ 0xe6b4f48aUL, 0x00000000UL, 0x807e7f5aUL, 0x00000001UL, // x^95232 mod p(x)` << 1, x^95296 mod p(x)` << 1
-+ 0x39d15e90UL, 0x00000000UL, 0x7a7e3bc8UL, 0x00000001UL, // x^94208 mod p(x)` << 1, x^94272 mod p(x)` << 1
-+ 0x312d6074UL, 0x00000000UL, 0xd73975daUL, 0x00000000UL, // x^93184 mod p(x)` << 1, x^93248 mod p(x)` << 1
-+ 0x7bbb2cc4UL, 0x00000001UL, 0x7375d038UL, 0x00000001UL, // x^92160 mod p(x)` << 1, x^92224 mod p(x)` << 1
-+ 0x6ded3e18UL, 0x00000001UL, 0x193680bcUL, 0x00000000UL, // x^91136 mod p(x)` << 1, x^91200 mod p(x)` << 1
-+ 0xf1638b16UL, 0x00000000UL, 0x999b06f6UL, 0x00000000UL, // x^90112 mod p(x)` << 1, x^90176 mod p(x)` << 1
-+ 0xd38b9eccUL, 0x00000001UL, 0xf685d2b8UL, 0x00000001UL, // x^89088 mod p(x)` << 1, x^89152 mod p(x)` << 1
-+ 0x8b8d09dcUL, 0x00000001UL, 0xf4ecbed2UL, 0x00000001UL, // x^88064 mod p(x)` << 1, x^88128 mod p(x)` << 1
-+ 0xe7bc27d2UL, 0x00000000UL, 0xba16f1a0UL, 0x00000000UL, // x^87040 mod p(x)` << 1, x^87104 mod p(x)` << 1
-+ 0x275e1e96UL, 0x00000000UL, 0x15aceac4UL, 0x00000001UL, // x^86016 mod p(x)` << 1, x^86080 mod p(x)` << 1
-+ 0xe2e3031eUL, 0x00000000UL, 0xaeff6292UL, 0x00000001UL, // x^84992 mod p(x)` << 1, x^85056 mod p(x)` << 1
-+ 0x041c84d8UL, 0x00000001UL, 0x9640124cUL, 0x00000000UL, // x^83968 mod p(x)` << 1, x^84032 mod p(x)` << 1
-+ 0x706ce672UL, 0x00000000UL, 0x14f41f02UL, 0x00000001UL, // x^82944 mod p(x)` << 1, x^83008 mod p(x)` << 1
-+ 0x5d5070daUL, 0x00000001UL, 0x9c5f3586UL, 0x00000000UL, // x^81920 mod p(x)` << 1, x^81984 mod p(x)` << 1
-+ 0x38f9493aUL, 0x00000000UL, 0x878275faUL, 0x00000001UL, // x^80896 mod p(x)` << 1, x^80960 mod p(x)` << 1
-+ 0xa3348a76UL, 0x00000000UL, 0xddc42ce8UL, 0x00000000UL, // x^79872 mod p(x)` << 1, x^79936 mod p(x)` << 1
-+ 0xad0aab92UL, 0x00000001UL, 0x81d2c73aUL, 0x00000001UL, // x^78848 mod p(x)` << 1, x^78912 mod p(x)` << 1
-+ 0x9e85f712UL, 0x00000001UL, 0x41c9320aUL, 0x00000001UL, // x^77824 mod p(x)` << 1, x^77888 mod p(x)` << 1
-+ 0x5a871e76UL, 0x00000000UL, 0x5235719aUL, 0x00000001UL, // x^76800 mod p(x)` << 1, x^76864 mod p(x)` << 1
-+ 0x7249c662UL, 0x00000001UL, 0xbe27d804UL, 0x00000000UL, // x^75776 mod p(x)` << 1, x^75840 mod p(x)` << 1
-+ 0x3a084712UL, 0x00000000UL, 0x6242d45aUL, 0x00000000UL, // x^74752 mod p(x)` << 1, x^74816 mod p(x)` << 1
-+ 0xed438478UL, 0x00000000UL, 0x9a53638eUL, 0x00000000UL, // x^73728 mod p(x)` << 1, x^73792 mod p(x)` << 1
-+ 0xabac34ccUL, 0x00000000UL, 0x001ecfb6UL, 0x00000001UL, // x^72704 mod p(x)` << 1, x^72768 mod p(x)` << 1
-+ 0x5f35ef3eUL, 0x00000000UL, 0x6d7c2d64UL, 0x00000001UL, // x^71680 mod p(x)` << 1, x^71744 mod p(x)` << 1
-+ 0x47d6608cUL, 0x00000000UL, 0xd0ce46c0UL, 0x00000001UL, // x^70656 mod p(x)` << 1, x^70720 mod p(x)` << 1
-+ 0x2d01470eUL, 0x00000000UL, 0x24c907b4UL, 0x00000001UL, // x^69632 mod p(x)` << 1, x^69696 mod p(x)` << 1
-+ 0x58bbc7b0UL, 0x00000001UL, 0x18a555caUL, 0x00000000UL, // x^68608 mod p(x)` << 1, x^68672 mod p(x)` << 1
-+ 0xc0a23e8eUL, 0x00000000UL, 0x6b0980bcUL, 0x00000000UL, // x^67584 mod p(x)` << 1, x^67648 mod p(x)` << 1
-+ 0xebd85c88UL, 0x00000001UL, 0x8bbba964UL, 0x00000000UL, // x^66560 mod p(x)` << 1, x^66624 mod p(x)` << 1
-+ 0x9ee20bb2UL, 0x00000001UL, 0x070a5a1eUL, 0x00000001UL, // x^65536 mod p(x)` << 1, x^65600 mod p(x)` << 1
-+ 0xacabf2d6UL, 0x00000001UL, 0x2204322aUL, 0x00000000UL, // x^64512 mod p(x)` << 1, x^64576 mod p(x)` << 1
-+ 0xb7963d56UL, 0x00000001UL, 0xa27524d0UL, 0x00000000UL, // x^63488 mod p(x)` << 1, x^63552 mod p(x)` << 1
-+ 0x7bffa1feUL, 0x00000001UL, 0x20b1e4baUL, 0x00000000UL, // x^62464 mod p(x)` << 1, x^62528 mod p(x)` << 1
-+ 0x1f15333eUL, 0x00000000UL, 0x32cc27fcUL, 0x00000000UL, // x^61440 mod p(x)` << 1, x^61504 mod p(x)` << 1
-+ 0x8593129eUL, 0x00000001UL, 0x44dd22b8UL, 0x00000000UL, // x^60416 mod p(x)` << 1, x^60480 mod p(x)` << 1
-+ 0x9cb32602UL, 0x00000001UL, 0xdffc9e0aUL, 0x00000000UL, // x^59392 mod p(x)` << 1, x^59456 mod p(x)` << 1
-+ 0x42b05cc8UL, 0x00000001UL, 0xb7a0ed14UL, 0x00000001UL, // x^58368 mod p(x)` << 1, x^58432 mod p(x)` << 1
-+ 0xbe49e7a4UL, 0x00000001UL, 0xc7842488UL, 0x00000000UL, // x^57344 mod p(x)` << 1, x^57408 mod p(x)` << 1
-+ 0x08f69d6cUL, 0x00000001UL, 0xc02a4feeUL, 0x00000001UL, // x^56320 mod p(x)` << 1, x^56384 mod p(x)` << 1
-+ 0x6c0971f0UL, 0x00000000UL, 0x3c273778UL, 0x00000000UL, // x^55296 mod p(x)` << 1, x^55360 mod p(x)` << 1
-+ 0x5b16467aUL, 0x00000000UL, 0xd63f8894UL, 0x00000001UL, // x^54272 mod p(x)` << 1, x^54336 mod p(x)` << 1
-+ 0x551a628eUL, 0x00000001UL, 0x6be557d6UL, 0x00000000UL, // x^53248 mod p(x)` << 1, x^53312 mod p(x)` << 1
-+ 0x9e42ea92UL, 0x00000001UL, 0x6a7806eaUL, 0x00000000UL, // x^52224 mod p(x)` << 1, x^52288 mod p(x)` << 1
-+ 0x2fa83ff2UL, 0x00000001UL, 0x6155aa0cUL, 0x00000001UL, // x^51200 mod p(x)` << 1, x^51264 mod p(x)` << 1
-+ 0x1ca9cde0UL, 0x00000001UL, 0x908650acUL, 0x00000000UL, // x^50176 mod p(x)` << 1, x^50240 mod p(x)` << 1
-+ 0xc8e5cd74UL, 0x00000000UL, 0xaa5a8084UL, 0x00000000UL, // x^49152 mod p(x)` << 1, x^49216 mod p(x)` << 1
-+ 0x96c27f0cUL, 0x00000000UL, 0x91bb500aUL, 0x00000001UL, // x^48128 mod p(x)` << 1, x^48192 mod p(x)` << 1
-+ 0x2baed926UL, 0x00000000UL, 0x64e9bed0UL, 0x00000000UL, // x^47104 mod p(x)` << 1, x^47168 mod p(x)` << 1
-+ 0x7c8de8d2UL, 0x00000001UL, 0x9444f302UL, 0x00000000UL, // x^46080 mod p(x)` << 1, x^46144 mod p(x)` << 1
-+ 0xd43d6068UL, 0x00000000UL, 0x9db07d3cUL, 0x00000001UL, // x^45056 mod p(x)` << 1, x^45120 mod p(x)` << 1
-+ 0xcb2c4b26UL, 0x00000000UL, 0x359e3e6eUL, 0x00000001UL, // x^44032 mod p(x)` << 1, x^44096 mod p(x)` << 1
-+ 0x45b8da26UL, 0x00000001UL, 0xe4f10dd2UL, 0x00000001UL, // x^43008 mod p(x)` << 1, x^43072 mod p(x)` << 1
-+ 0x8fff4b08UL, 0x00000001UL, 0x24f5735eUL, 0x00000001UL, // x^41984 mod p(x)` << 1, x^42048 mod p(x)` << 1
-+ 0x50b58ed0UL, 0x00000001UL, 0x24760a4cUL, 0x00000001UL, // x^40960 mod p(x)` << 1, x^41024 mod p(x)` << 1
-+ 0x549f39bcUL, 0x00000001UL, 0x0f1fc186UL, 0x00000000UL, // x^39936 mod p(x)` << 1, x^40000 mod p(x)` << 1
-+ 0xef4d2f42UL, 0x00000000UL, 0x150e4cc4UL, 0x00000000UL, // x^38912 mod p(x)` << 1, x^38976 mod p(x)` << 1
-+ 0xb1468572UL, 0x00000001UL, 0x2a6204e8UL, 0x00000000UL, // x^37888 mod p(x)` << 1, x^37952 mod p(x)` << 1
-+ 0x3d7403b2UL, 0x00000001UL, 0xbeb1d432UL, 0x00000000UL, // x^36864 mod p(x)` << 1, x^36928 mod p(x)` << 1
-+ 0xa4681842UL, 0x00000001UL, 0x35f3f1f0UL, 0x00000001UL, // x^35840 mod p(x)` << 1, x^35904 mod p(x)` << 1
-+ 0x67714492UL, 0x00000001UL, 0x74fe2232UL, 0x00000000UL, // x^34816 mod p(x)` << 1, x^34880 mod p(x)` << 1
-+ 0xe599099aUL, 0x00000001UL, 0x1ac6e2baUL, 0x00000000UL, // x^33792 mod p(x)` << 1, x^33856 mod p(x)` << 1
-+ 0xfe128194UL, 0x00000000UL, 0x13fca91eUL, 0x00000000UL, // x^32768 mod p(x)` << 1, x^32832 mod p(x)` << 1
-+ 0x77e8b990UL, 0x00000000UL, 0x83f4931eUL, 0x00000001UL, // x^31744 mod p(x)` << 1, x^31808 mod p(x)` << 1
-+ 0xa267f63aUL, 0x00000001UL, 0xb6d9b4e4UL, 0x00000000UL, // x^30720 mod p(x)` << 1, x^30784 mod p(x)` << 1
-+ 0x945c245aUL, 0x00000001UL, 0xb5188656UL, 0x00000000UL, // x^29696 mod p(x)` << 1, x^29760 mod p(x)` << 1
-+ 0x49002e76UL, 0x00000001UL, 0x27a81a84UL, 0x00000000UL, // x^28672 mod p(x)` << 1, x^28736 mod p(x)` << 1
-+ 0xbb8310a4UL, 0x00000001UL, 0x25699258UL, 0x00000001UL, // x^27648 mod p(x)` << 1, x^27712 mod p(x)` << 1
-+ 0x9ec60bccUL, 0x00000001UL, 0xb23de796UL, 0x00000001UL, // x^26624 mod p(x)` << 1, x^26688 mod p(x)` << 1
-+ 0x2d8590aeUL, 0x00000001UL, 0xfe4365dcUL, 0x00000000UL, // x^25600 mod p(x)` << 1, x^25664 mod p(x)` << 1
-+ 0x65b00684UL, 0x00000000UL, 0xc68f497aUL, 0x00000000UL, // x^24576 mod p(x)` << 1, x^24640 mod p(x)` << 1
-+ 0x5e5aeadcUL, 0x00000001UL, 0xfbf521eeUL, 0x00000000UL, // x^23552 mod p(x)` << 1, x^23616 mod p(x)` << 1
-+ 0xb77ff2b0UL, 0x00000000UL, 0x5eac3378UL, 0x00000001UL, // x^22528 mod p(x)` << 1, x^22592 mod p(x)` << 1
-+ 0x88da2ff6UL, 0x00000001UL, 0x34914b90UL, 0x00000001UL, // x^21504 mod p(x)` << 1, x^21568 mod p(x)` << 1
-+ 0x63da929aUL, 0x00000000UL, 0x16335cfeUL, 0x00000000UL, // x^20480 mod p(x)` << 1, x^20544 mod p(x)` << 1
-+ 0x389caa80UL, 0x00000001UL, 0x0372d10cUL, 0x00000001UL, // x^19456 mod p(x)` << 1, x^19520 mod p(x)` << 1
-+ 0x3db599d2UL, 0x00000001UL, 0x5097b908UL, 0x00000001UL, // x^18432 mod p(x)` << 1, x^18496 mod p(x)` << 1
-+ 0x22505a86UL, 0x00000001UL, 0x227a7572UL, 0x00000001UL, // x^17408 mod p(x)` << 1, x^17472 mod p(x)` << 1
-+ 0x6bd72746UL, 0x00000001UL, 0x9a8f75c0UL, 0x00000000UL, // x^16384 mod p(x)` << 1, x^16448 mod p(x)` << 1
-+ 0xc3faf1d4UL, 0x00000001UL, 0x682c77a2UL, 0x00000000UL, // x^15360 mod p(x)` << 1, x^15424 mod p(x)` << 1
-+ 0x111c826cUL, 0x00000001UL, 0x231f091cUL, 0x00000000UL, // x^14336 mod p(x)` << 1, x^14400 mod p(x)` << 1
-+ 0x153e9fb2UL, 0x00000000UL, 0x7d4439f2UL, 0x00000000UL, // x^13312 mod p(x)` << 1, x^13376 mod p(x)` << 1
-+ 0x2b1f7b60UL, 0x00000000UL, 0x7e221efcUL, 0x00000001UL, // x^12288 mod p(x)` << 1, x^12352 mod p(x)` << 1
-+ 0xb1dba570UL, 0x00000000UL, 0x67457c38UL, 0x00000001UL, // x^11264 mod p(x)` << 1, x^11328 mod p(x)` << 1
-+ 0xf6397b76UL, 0x00000001UL, 0xbdf081c4UL, 0x00000000UL, // x^10240 mod p(x)` << 1, x^10304 mod p(x)` << 1
-+ 0x56335214UL, 0x00000001UL, 0x6286d6b0UL, 0x00000001UL, // x^9216 mod p(x)` << 1, x^9280 mod p(x)` << 1
-+ 0xd70e3986UL, 0x00000001UL, 0xc84f001cUL, 0x00000000UL, // x^8192 mod p(x)` << 1, x^8256 mod p(x)` << 1
-+ 0x3701a774UL, 0x00000000UL, 0x64efe7c0UL, 0x00000000UL, // x^7168 mod p(x)` << 1, x^7232 mod p(x)` << 1
-+ 0xac81ef72UL, 0x00000000UL, 0x0ac2d904UL, 0x00000000UL, // x^6144 mod p(x)` << 1, x^6208 mod p(x)` << 1
-+ 0x33212464UL, 0x00000001UL, 0xfd226d14UL, 0x00000000UL, // x^5120 mod p(x)` << 1, x^5184 mod p(x)` << 1
-+ 0xe4e45610UL, 0x00000000UL, 0x1cfd42e0UL, 0x00000001UL, // x^4096 mod p(x)` << 1, x^4160 mod p(x)` << 1
-+ 0x0c1bd370UL, 0x00000000UL, 0x6e5a5678UL, 0x00000001UL, // x^3072 mod p(x)` << 1, x^3136 mod p(x)` << 1
-+ 0xa7b9e7a6UL, 0x00000001UL, 0xd888fe22UL, 0x00000001UL, // x^2048 mod p(x)` << 1, x^2112 mod p(x)` << 1
-+ 0x7d657a10UL, 0x00000000UL, 0xaf77fcd4UL, 0x00000001UL, // x^1024 mod p(x)` << 1, x^1088 mod p(x)` << 1
-+
-+ // Reduce final 1024-2048 bits to 64 bits, shifting 32 bits to include the trailing 32 bits of zeros
-+ 0xec447f11UL, 0x99168a18UL, 0x13e8221eUL, 0xed837b26UL, // x^2048 mod p(x)`, x^2016 mod p(x)`, x^1984 mod p(x)`, x^1952 mod p(x)`
-+ 0x8fd2cd3cUL, 0xe23e954eUL, 0x47b9ce5aUL, 0xc8acdd81UL, // x^1920 mod p(x)`, x^1888 mod p(x)`, x^1856 mod p(x)`, x^1824 mod p(x)`
-+ 0x6b1d2b53UL, 0x92f8befeUL, 0xd4277e25UL, 0xd9ad6d87UL, // x^1792 mod p(x)`, x^1760 mod p(x)`, x^1728 mod p(x)`, x^1696 mod p(x)`
-+ 0x291ea462UL, 0xf38a3556UL, 0x33fbca3bUL, 0xc10ec5e0UL, // x^1664 mod p(x)`, x^1632 mod p(x)`, x^1600 mod p(x)`, x^1568 mod p(x)`
-+ 0x62b6ca4bUL, 0x974ac562UL, 0x82e02e2fUL, 0xc0b55b0eUL, // x^1536 mod p(x)`, x^1504 mod p(x)`, x^1472 mod p(x)`, x^1440 mod p(x)`
-+ 0x784d2a56UL, 0x855712b3UL, 0xe172334dUL, 0x71aa1df0UL, // x^1408 mod p(x)`, x^1376 mod p(x)`, x^1344 mod p(x)`, x^1312 mod p(x)`
-+ 0x0eaee722UL, 0xa5abe9f8UL, 0x3969324dUL, 0xfee3053eUL, // x^1280 mod p(x)`, x^1248 mod p(x)`, x^1216 mod p(x)`, x^1184 mod p(x)`
-+ 0xdb54814cUL, 0x1fa0943dUL, 0x3eb2bd08UL, 0xf44779b9UL, // x^1152 mod p(x)`, x^1120 mod p(x)`, x^1088 mod p(x)`, x^1056 mod p(x)`
-+ 0xd7bbfe6aUL, 0xa53ff440UL, 0x00cc3374UL, 0xf5449b3fUL, // x^1024 mod p(x)`, x^992 mod p(x)`, x^960 mod p(x)`, x^928 mod p(x)`
-+ 0x6325605cUL, 0xebe7e356UL, 0xd777606eUL, 0x6f8346e1UL, // x^896 mod p(x)`, x^864 mod p(x)`, x^832 mod p(x)`, x^800 mod p(x)`
-+ 0xe5b592b8UL, 0xc65a272cUL, 0xc0b95347UL, 0xe3ab4f2aUL, // x^768 mod p(x)`, x^736 mod p(x)`, x^704 mod p(x)`, x^672 mod p(x)`
-+ 0x4721589fUL, 0x5705a9caUL, 0x329ecc11UL, 0xaa2215eaUL, // x^640 mod p(x)`, x^608 mod p(x)`, x^576 mod p(x)`, x^544 mod p(x)`
-+ 0x88d14467UL, 0xe3720acbUL, 0xd95efd26UL, 0x1ed8f66eUL, // x^512 mod p(x)`, x^480 mod p(x)`, x^448 mod p(x)`, x^416 mod p(x)`
-+ 0x15141c31UL, 0xba1aca03UL, 0xa700e96aUL, 0x78ed02d5UL, // x^384 mod p(x)`, x^352 mod p(x)`, x^320 mod p(x)`, x^288 mod p(x)`
-+ 0xed627daeUL, 0xad2a31b3UL, 0x32b39da3UL, 0xba8ccbe8UL, // x^256 mod p(x)`, x^224 mod p(x)`, x^192 mod p(x)`, x^160 mod p(x)`
-+ 0xa06a2517UL, 0x6655004fUL, 0xb1e6b092UL, 0xedb88320UL // x^128 mod p(x)`, x^96 mod p(x)`, x^64 mod p(x)`, x^32 mod p(x)`
-+ };
-+
-+ juint* ptr = (juint*) malloc(sizeof(juint) * CRC32_CONSTANTS_SIZE);
-+ guarantee(((intptr_t)ptr & 0xF) == 0, "16-byte alignment needed");
-+ guarantee(ptr != NULL, "allocation error of a crc table");
-+ memcpy((void*)ptr, constants, sizeof(juint) * CRC32_CONSTANTS_SIZE);
-+ return ptr;
-+}
-+
-+juint* StubRoutines::ppc64::generate_crc_barret_constants() {
-+ juint barret_constants[CRC32_BARRET_CONSTANTS] = {
-+ 0xf7011641UL, 0x00000001UL, 0x00000000UL, 0x00000000UL,
-+ 0xdb710641UL, 0x00000001UL, 0x00000000UL, 0x00000000UL
-+ };
-+ juint* ptr = (juint*) malloc(sizeof(juint) * CRC32_CONSTANTS_SIZE);
-+ guarantee(((intptr_t)ptr & 0xF) == 0, "16-byte alignment needed");
-+ guarantee(ptr != NULL, "allocation error of a crc table");
-+ memcpy((void*) ptr, barret_constants, sizeof(juint) * CRC32_BARRET_CONSTANTS);
-+ return ptr;
-+}
-+
- // CRC32 Intrinsics.
- /**
- * crc_table[] from jdk/src/share/native/java/util/zip/zlib-1.2.8/crc32.h
-@@ -477,3 +782,7 @@
- #endif
- }
- };
-+
-+juint* StubRoutines::ppc64::_constants = StubRoutines::ppc64::generate_crc_constants();
-+
-+juint* StubRoutines::ppc64::_barret_constants = StubRoutines::ppc64::generate_crc_barret_constants();
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.hpp openjdk/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.hpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.hpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/stubRoutines_ppc_64.hpp
-@@ -45,6 +45,8 @@
- #else
- #define CRC32_TABLES 1
- #endif
-+#define CRC32_CONSTANTS_SIZE 1084
-+#define CRC32_BARRET_CONSTANTS 10
-
- class ppc64 {
- friend class StubGenerator;
-@@ -53,11 +55,17 @@
-
- // CRC32 Intrinsics.
- static juint _crc_table[CRC32_TABLES][CRC32_COLUMN_SIZE];
-+ static juint* _constants;
-+ static juint* _barret_constants;
-
- public:
-
- // CRC32 Intrinsics.
- static void generate_load_crc_table_addr(MacroAssembler* masm, Register table);
-+ static void generate_load_crc_constants_addr(MacroAssembler* masm, Register table);
-+ static void generate_load_crc_barret_constants_addr(MacroAssembler* masm, Register table);
-+ static juint* generate_crc_constants();
-+ static juint* generate_crc_barret_constants();
-
- };
-
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp
-@@ -102,7 +102,7 @@
- // Create and print feature-string.
- char buf[(num_features+1) * 16]; // Max 16 chars per feature.
- jio_snprintf(buf, sizeof(buf),
-- "ppc64%s%s%s%s%s%s%s%s%s",
-+ "ppc64%s%s%s%s%s%s%s%s%s%s",
- (has_fsqrt() ? " fsqrt" : ""),
- (has_isel() ? " isel" : ""),
- (has_lxarxeh() ? " lxarxeh" : ""),
-@@ -112,7 +112,8 @@
- (has_popcntw() ? " popcntw" : ""),
- (has_fcfids() ? " fcfids" : ""),
- (has_vand() ? " vand" : ""),
-- (has_vcipher() ? " aes" : "")
-+ (has_vcipher() ? " aes" : ""),
-+ (has_vpmsumb() ? " vpmsumb" : "")
- // Make sure number of %s matches num_features!
- );
- _features_str = strdup(buf);
-@@ -490,6 +491,7 @@
- a->fcfids(F3, F4); // code[8] -> fcfids
- a->vand(VR0, VR0, VR0); // code[9] -> vand
- a->vcipher(VR0, VR1, VR2); // code[10] -> vcipher
-+ a->vpmsumb(VR0, VR1, VR2); // code[11] -> vpmsumb
- a->blr();
-
- // Emit function to set one cache line to zero. Emit function descriptor and get pointer to it.
-@@ -534,6 +536,7 @@
- if (code[feature_cntr++]) features |= fcfids_m;
- if (code[feature_cntr++]) features |= vand_m;
- if (code[feature_cntr++]) features |= vcipher_m;
-+ if (code[feature_cntr++]) features |= vpmsumb_m;
-
- // Print the detection code.
- if (PrintAssembly) {
-diff --git openjdk.orig/hotspot/src/cpu/ppc/vm/vm_version_ppc.hpp openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.hpp
---- openjdk.orig/hotspot/src/cpu/ppc/vm/vm_version_ppc.hpp
-+++ openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.hpp
-@@ -43,6 +43,7 @@
- vand,
- dcba,
- vcipher,
-+ vpmsumb,
- num_features // last entry to count features
- };
- enum Feature_Flag_Set {
-@@ -58,6 +59,7 @@
- vand_m = (1 << vand ),
- dcba_m = (1 << dcba ),
- vcipher_m = (1 << vcipher),
-+ vpmsumb_m = (1 << vpmsumb),
- all_features_m = -1
- };
- static int _features;
-@@ -86,6 +88,7 @@
- static bool has_vand() { return (_features & vand_m) != 0; }
- static bool has_dcba() { return (_features & dcba_m) != 0; }
- static bool has_vcipher() { return (_features & vcipher_m) != 0; }
-+ static bool has_vpmsumb() { return (_features & vpmsumb_m) != 0; }
-
- static const char* cpu_features() { return _features_str; }
-
diff --git a/SOURCES/jdk8165852-pr3468-mount_point_not_found_for_a_file_which_is_present_in_overlayfs.patch b/SOURCES/jdk8165852-pr3468-mount_point_not_found_for_a_file_which_is_present_in_overlayfs.patch
deleted file mode 100644
index 6be87a7..0000000
--- a/SOURCES/jdk8165852-pr3468-mount_point_not_found_for_a_file_which_is_present_in_overlayfs.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-
-# HG changeset patch
-# User bpb
-# Date 1515783982 28800
-# Node ID b8843bca95b5e0eed5bbb4dc195c89c727c7aede
-# Parent 61d7ce442d95f5f30c84037a50cf6361bf7c37e1
-8165852: (fs) Mount point not found for a file which is present in overlayfs
-Summary: Check /proc/mounts when the device ID boundary is reached
-Reviewed-by: alanb
-
-diff -r 61d7ce442d95 -r b8843bca95b5 src/solaris/classes/sun/nio/fs/LinuxFileStore.java
---- openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileStore.java Tue Jul 24 05:10:45 2018 -0400
-+++ openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileStore.java Fri Jan 12 11:06:22 2018 -0800
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2008, 2018, 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
-@@ -66,6 +66,8 @@
- }
-
- // step 2: find mount point
-+ List procMountsEntries =
-+ fs.getMountEntries("/proc/mounts");
- UnixPath parent = path.getParent();
- while (parent != null) {
- UnixFileAttributes attrs = null;
-@@ -74,16 +76,23 @@
- } catch (UnixException x) {
- x.rethrowAsIOException(parent);
- }
-- if (attrs.dev() != dev())
-- break;
-+ if (attrs.dev() != dev()) {
-+ // step 3: lookup mounted file systems (use /proc/mounts to
-+ // ensure we find the file system even when not in /etc/mtab)
-+ byte[] dir = path.asByteArray();
-+ for (UnixMountEntry entry : procMountsEntries) {
-+ if (Arrays.equals(dir, entry.dir()))
-+ return entry;
-+ }
-+ }
- path = parent;
- parent = parent.getParent();
- }
-
-- // step 3: lookup mounted file systems (use /proc/mounts to ensure we
-- // find the file system even when not in /etc/mtab)
-+ // step 3: lookup mounted file systems (use /proc/mounts to
-+ // ensure we find the file system even when not in /etc/mtab)
- byte[] dir = path.asByteArray();
-- for (UnixMountEntry entry: fs.getMountEntries("/proc/mounts")) {
-+ for (UnixMountEntry entry : procMountsEntries) {
- if (Arrays.equals(dir, entry.dir()))
- return entry;
- }
-diff -r 61d7ce442d95 -r b8843bca95b5 src/solaris/classes/sun/nio/fs/LinuxFileSystem.java
---- openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java Tue Jul 24 05:10:45 2018 -0400
-+++ openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java Fri Jan 12 11:06:22 2018 -0800
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2008, 2018, 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
-@@ -75,7 +75,7 @@
- /**
- * Returns object to iterate over the mount entries in the given fstab file.
- */
-- Iterable getMountEntries(String fstab) {
-+ List getMountEntries(String fstab) {
- ArrayList entries = new ArrayList<>();
- try {
- long fp = setmntent(Util.toBytes(fstab), Util.toBytes("r"));
-@@ -101,7 +101,7 @@
- * Returns object to iterate over the mount entries in /etc/mtab
- */
- @Override
-- Iterable getMountEntries() {
-+ List getMountEntries() {
- return getMountEntries("/etc/mtab");
- }
-
-
diff --git a/SOURCES/jdk8172850-rh1640127-01-register_allocator_crash.patch b/SOURCES/jdk8172850-rh1640127-01-register_allocator_crash.patch
deleted file mode 100644
index 294e313..0000000
--- a/SOURCES/jdk8172850-rh1640127-01-register_allocator_crash.patch
+++ /dev/null
@@ -1,213 +0,0 @@
-
-# HG changeset patch
-# User thartmann
-# Date 1539594027 -7200
-# Node ID e044997c2edaeae97866394a7f8e2ddebbd41392
-# Parent 99212080341058548d449a22d1381e79353ec5b5
-8172850: Anti-dependency on membar causes crash in register allocator due to invalid instruction scheduling
-Summary: Regression test and additional asserts. The problem is fixed by 8087341.
-Reviewed-by: kvn
-
-diff -r 992120803410 -r e044997c2eda src/share/vm/opto/cfgnode.cpp
---- openjdk/hotspot/src/share/vm/opto/cfgnode.cpp Mon Oct 22 05:26:38 2018 -0400
-+++ openjdk/hotspot/src/share/vm/opto/cfgnode.cpp Mon Oct 15 11:00:27 2018 +0200
-@@ -2016,6 +2016,7 @@
- uint ideal_reg = _type->ideal_reg();
- assert( ideal_reg != Node::NotAMachineReg, "invalid type at Phi" );
- if( ideal_reg == 0 ) return RegMask::Empty;
-+ assert(ideal_reg != Op_RegFlags, "flags register is not spillable");
- return *(Compile::current()->matcher()->idealreg2spillmask[ideal_reg]);
- }
-
-diff -r 992120803410 -r e044997c2eda src/share/vm/opto/coalesce.cpp
---- openjdk/hotspot/src/share/vm/opto/coalesce.cpp Mon Oct 22 05:26:38 2018 -0400
-+++ openjdk/hotspot/src/share/vm/opto/coalesce.cpp Mon Oct 15 11:00:27 2018 +0200
-@@ -292,7 +292,14 @@
- // Copy any flags as well
- _phc.clone_projs(pred, pred->end_idx(), m, copy, _phc._lrg_map);
- } else {
-- const RegMask *rm = C->matcher()->idealreg2spillmask[m->ideal_reg()];
-+ int ireg = m->ideal_reg();
-+ if (ireg == 0 || ireg == Op_RegFlags) {
-+ assert(false, err_msg("attempted to spill a non-spillable item: %d: %s, ireg = %d",
-+ m->_idx, m->Name(), ireg));
-+ C->record_method_not_compilable("attempted to spill a non-spillable item");
-+ return;
-+ }
-+ const RegMask *rm = C->matcher()->idealreg2spillmask[ireg];
- copy = new (C) MachSpillCopyNode(m, *rm, *rm);
- // Find a good place to insert. Kinda tricky, use a subroutine
- insert_copy_with_overlap(pred,copy,phi_name,src_name);
-@@ -326,7 +333,14 @@
- b->insert_node(copy, l++);
- l += _phc.clone_projs(b, l, m, copy, _phc._lrg_map);
- } else {
-- const RegMask *rm = C->matcher()->idealreg2spillmask[m->ideal_reg()];
-+ int ireg = m->ideal_reg();
-+ if (ireg == 0 || ireg == Op_RegFlags) {
-+ assert(false, err_msg("attempted to spill a non-spillable item: %d: %s, ireg = %d",
-+ m->_idx, m->Name(), ireg));
-+ C->record_method_not_compilable("attempted to spill a non-spillable item");
-+ return;
-+ }
-+ const RegMask *rm = C->matcher()->idealreg2spillmask[ireg];
- copy = new (C) MachSpillCopyNode(m, *rm, *rm);
- // Insert the copy in the basic block, just before us
- b->insert_node(copy, l++);
-@@ -373,7 +387,14 @@
- if( k < b->_num_succs )
- continue; // Live out; do not pre-split
- // Split the lrg at this use
-- const RegMask *rm = C->matcher()->idealreg2spillmask[inp->ideal_reg()];
-+ int ireg = inp->ideal_reg();
-+ if (ireg == 0 || ireg == Op_RegFlags) {
-+ assert(false, err_msg("attempted to spill a non-spillable item: %d: %s, ireg = %d",
-+ inp->_idx, inp->Name(), ireg));
-+ C->record_method_not_compilable("attempted to spill a non-spillable item");
-+ return;
-+ }
-+ const RegMask *rm = C->matcher()->idealreg2spillmask[ireg];
- Node *copy = new (C) MachSpillCopyNode( inp, *rm, *rm );
- // Insert the copy in the use-def chain
- n->set_req(inpidx, copy );
-diff -r 992120803410 -r e044997c2eda src/share/vm/opto/machnode.cpp
---- openjdk/hotspot/src/share/vm/opto/machnode.cpp Mon Oct 22 05:26:38 2018 -0400
-+++ openjdk/hotspot/src/share/vm/opto/machnode.cpp Mon Oct 15 11:00:27 2018 +0200
-@@ -619,6 +619,7 @@
- }
-
- // Values outside the domain represent debug info
-+ assert(in(idx)->ideal_reg() != Op_RegFlags, "flags register is not spillable");
- return *Compile::current()->matcher()->idealreg2spillmask[in(idx)->ideal_reg()];
- }
-
-diff -r 992120803410 -r e044997c2eda src/share/vm/opto/matcher.cpp
---- openjdk/hotspot/src/share/vm/opto/matcher.cpp Mon Oct 22 05:26:38 2018 -0400
-+++ openjdk/hotspot/src/share/vm/opto/matcher.cpp Mon Oct 15 11:00:27 2018 +0200
-@@ -95,6 +95,7 @@
- idealreg2spillmask [Op_VecD] = NULL;
- idealreg2spillmask [Op_VecX] = NULL;
- idealreg2spillmask [Op_VecY] = NULL;
-+ idealreg2spillmask [Op_RegFlags] = NULL;
-
- idealreg2debugmask [Op_RegI] = NULL;
- idealreg2debugmask [Op_RegN] = NULL;
-@@ -106,6 +107,7 @@
- idealreg2debugmask [Op_VecD] = NULL;
- idealreg2debugmask [Op_VecX] = NULL;
- idealreg2debugmask [Op_VecY] = NULL;
-+ idealreg2debugmask [Op_RegFlags] = NULL;
-
- idealreg2mhdebugmask[Op_RegI] = NULL;
- idealreg2mhdebugmask[Op_RegN] = NULL;
-@@ -117,6 +119,7 @@
- idealreg2mhdebugmask[Op_VecD] = NULL;
- idealreg2mhdebugmask[Op_VecX] = NULL;
- idealreg2mhdebugmask[Op_VecY] = NULL;
-+ idealreg2mhdebugmask[Op_RegFlags] = NULL;
-
- debug_only(_mem_node = NULL;) // Ideal memory node consumed by mach node
- }
-diff -r 992120803410 -r e044997c2eda test/compiler/gcbarriers/TestMembarDependencies.java
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ openjdk/hotspot/test/compiler/gcbarriers/TestMembarDependencies.java Mon Oct 15 11:00:27 2018 +0200
-@@ -0,0 +1,98 @@
-+/*
-+ * 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 TestMembarDependencies
-+ * @bug 8172850
-+ * @summary Tests correct scheduling of memory loads around MembarVolatile emitted by GC barriers.
-+ * @library /testlibrary
-+ * @run driver compiler.membars.TestMembarDependencies
-+ */
-+
-+package compiler.membars;
-+
-+import com.oracle.java.testlibrary.*;
-+
-+public class TestMembarDependencies {
-+ private static TestMembarDependencies f1;
-+ private static TestMembarDependencies f2;
-+
-+ public static void main(String args[]) throws Throwable {
-+ if (args.length == 0) {
-+ // For debugging, add "-XX:+TraceOptoPipelining"
-+ OutputAnalyzer oa = ProcessTools.executeTestJvm("-XX:+IgnoreUnrecognizedVMOptions",
-+ "-XX:-TieredCompilation", "-XX:-BackgroundCompilation", "-XX:+PrintOpto",
-+ "-XX:CompileCommand=compileonly,compiler.membars.TestMembarDependencies::test*",
-+ "-XX:CompileCommand=dontinline,compiler.membars.TestMembarDependencies::test_m1",
-+ TestMembarDependencies.class.getName(), "run");
-+ // C2 should not crash or bail out from compilation
-+ oa.shouldHaveExitValue(0);
-+ oa.shouldNotMatch("Bailout: Recompile without subsuming loads");
-+ System.out.println(oa.getOutput());
-+ } else {
-+ f2 = new TestMembarDependencies();
-+ // Trigger compilation of test1 and test2
-+ for (int i = 0; i < 10_000; ++i) {
-+ f2.test1(f2);
-+ f2.test2(f2);
-+ }
-+ }
-+ }
-+
-+ public void test_m1() { }
-+ public void test_m2() { }
-+
-+ public void test1(TestMembarDependencies obj) {
-+ // Try/catch/finally is used to create a CFG block without a test + jmpCon
-+ // allowing GCM to schedule the testN_mem_reg0 instruction into that block.
-+ try {
-+ // Method call defines memory state that is then
-+ // used by subsequent instructions/blocks (see below).
-+ test_m1();
-+ } catch (Exception e) {
-+
-+ } finally {
-+ // Oop write to field emits a GC post-barrier with a MembarVolatile
-+ // which has a wide memory effect (kills all memory). This creates an
-+ // anti-dependency on all surrounding memory loads.
-+ f1 = obj;
-+ }
-+ // The empty method m2 is inlined but the null check of f2 remains. It is encoded
-+ // as CmpN(LoadN(MEM), NULL) where MEM is the memory after the call to test_m1().
-+ // This is matched to testN_mem_reg0 on x86 which is scheduled before the barrier
-+ // in the try/catch block due to the anti-dependency on the MembarVolatile.
-+ // C2 crashes in the register allocator when trying to spill the flag register
-+ // to keep the result of the testN instruction live from the try/catch block
-+ // until it is here.
-+ f2.test_m2();
-+ }
-+
-+ public void test2(TestMembarDependencies obj) {
-+ // Same as test1 but without try/catch/finally.
-+ // This causes C2 to bail out in block local scheduling because testN_mem_reg0 is
-+ // scheduled into a block that already contains another test + jmpCon instruction.
-+ test_m1();
-+ f1 = obj;
-+ f2.test_m2();
-+ }
-+}
-
diff --git a/SOURCES/jdk8184309-pr3596-build_warnings_from_gcc_7_1_on_fedora_26.patch b/SOURCES/jdk8184309-pr3596-build_warnings_from_gcc_7_1_on_fedora_26.patch
deleted file mode 100644
index 00b6125..0000000
--- a/SOURCES/jdk8184309-pr3596-build_warnings_from_gcc_7_1_on_fedora_26.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-# HG changeset patch
-# User ysuenaga
-# Date 1527498573 -3600
-# Mon May 28 10:09:33 2018 +0100
-# Node ID ef176cb429c49d1c330d9575938f66b04e3fb730
-# Parent 6915dc9ae18cce5625d3a3fc74b37da70a5b4215
-8184309, PR3596: Build warnings from GCC 7.1 on Fedora 26
-Reviewed-by: kbarrett, vlivanov
-
-diff --git openjdk.orig/hotspot/src/share/vm/code/dependencies.cpp openjdk/hotspot/src/share/vm/code/dependencies.cpp
---- openjdk.orig/hotspot/src/share/vm/code/dependencies.cpp
-+++ openjdk/hotspot/src/share/vm/code/dependencies.cpp
-@@ -525,7 +525,7 @@
- xtty->object("x", arg.metadata_value());
- }
- } else {
-- char xn[10]; sprintf(xn, "x%d", j);
-+ char xn[12]; sprintf(xn, "x%d", j);
- if (arg.is_oop()) {
- xtty->object(xn, arg.oop_value());
- } else {
diff --git a/SOURCES/jdk8189170-aarch64_primordial_thread.patch b/SOURCES/jdk8189170-aarch64_primordial_thread.patch
deleted file mode 100644
index 876cfdf..0000000
--- a/SOURCES/jdk8189170-aarch64_primordial_thread.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-# HG changeset patch
-# User dbuck
-# Date 1547622839 0
-# Wed Jan 16 07:13:59 2019 +0000
-# Node ID 34c6b4b813caf9b3a6fd1859596a87a24a49c423
-# Parent bca8195a3bc70df281a73d9a40032c673971676c
-8189170: [AArch64] Add option to disable stack overflow checking in primordial thread for use with JNI_CreateJavaJVM
-Reviewed-by: dcubed
-
-diff --git openjdk.orig/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp openjdk/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
---- openjdk.orig/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
-+++ openjdk/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1999, 2018, 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
-@@ -550,8 +550,8 @@
- // pthread_attr_getstack()
-
- static void current_stack_region(address * bottom, size_t * size) {
-- if (os::Linux::is_initial_thread()) {
-- // initial thread needs special handling because pthread_getattr_np()
-+ if (os::is_primordial_thread()) {
-+ // primordial thread needs special handling because pthread_getattr_np()
- // may return bogus value.
- *bottom = os::Linux::initial_thread_stack_bottom();
- *size = os::Linux::initial_thread_stack_size();
diff --git a/SOURCES/jdk8197429-pr3546-rh1536622-increased_stack_guard_causes_segfaults_on_x86_32.patch b/SOURCES/jdk8197429-pr3546-rh1536622-increased_stack_guard_causes_segfaults_on_x86_32.patch
deleted file mode 100644
index 6d7f743..0000000
--- a/SOURCES/jdk8197429-pr3546-rh1536622-increased_stack_guard_causes_segfaults_on_x86_32.patch
+++ /dev/null
@@ -1,286 +0,0 @@
-# HG changeset patch
-# User aph
-# Date 1530894306 -3600
-# Fri Jul 06 17:25:06 2018 +0100
-# Node ID 1485461a0fd1ff977a6acb8f2ed1069aaaf3b07e
-# Parent d7bcbcfde5057ad066ad2fb55a87d19a5827ddee
-8197429: Increased stack guard causes segfaults on x86-32
-Reviewed-by: dholmes
-
-diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
---- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp
-+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
-@@ -724,6 +724,10 @@
- }
- }
-
-+void os::Linux::expand_stack_to(address bottom) {
-+ _expand_stack_to(bottom);
-+}
-+
- bool os::Linux::manually_expand_stack(JavaThread * t, address addr) {
- assert(t!=NULL, "just checking");
- assert(t->osthread()->expanding_stack(), "expand should be set");
-diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.hpp openjdk/hotspot/src/os/linux/vm/os_linux.hpp
---- openjdk.orig/hotspot/src/os/linux/vm/os_linux.hpp
-+++ openjdk/hotspot/src/os/linux/vm/os_linux.hpp
-@@ -249,6 +249,8 @@
- static int safe_cond_timedwait(pthread_cond_t *_cond, pthread_mutex_t *_mutex, const struct timespec *_abstime);
-
- private:
-+ static void expand_stack_to(address bottom);
-+
- typedef int (*sched_getcpu_func_t)(void);
- typedef int (*numa_node_to_cpus_func_t)(int node, unsigned long *buffer, int bufferlen);
- typedef int (*numa_max_node_func_t)(void);
-diff --git openjdk.orig/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp
---- openjdk.orig/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp
-+++ openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp
-@@ -892,6 +892,27 @@
- void os::workaround_expand_exec_shield_cs_limit() {
- #if defined(IA32)
- size_t page_size = os::vm_page_size();
-+
-+ /*
-+ * JDK-8197429
-+ *
-+ * Expand the stack mapping to the end of the initial stack before
-+ * attempting to install the codebuf. This is needed because newer
-+ * Linux kernels impose a distance of a megabyte between stack
-+ * memory and other memory regions. If we try to install the
-+ * codebuf before expanding the stack the installation will appear
-+ * to succeed but we'll get a segfault later if we expand the stack
-+ * in Java code.
-+ *
-+ */
-+ if (os::is_primordial_thread()) {
-+ address limit = Linux::initial_thread_stack_bottom();
-+ if (! DisablePrimordialThreadGuardPages) {
-+ limit += (StackYellowPages + StackRedPages) * page_size;
-+ }
-+ os::Linux::expand_stack_to(limit);
-+ }
-+
- /*
- * Take the highest VA the OS will give us and exec
- *
-@@ -910,6 +931,16 @@
- char* hint = (char*) (Linux::initial_thread_stack_bottom() -
- ((StackYellowPages + StackRedPages + 1) * page_size));
- char* codebuf = os::attempt_reserve_memory_at(page_size, hint);
-+
-+ if (codebuf == NULL) {
-+ // JDK-8197429: There may be a stack gap of one megabyte between
-+ // the limit of the stack and the nearest memory region: this is a
-+ // Linux kernel workaround for CVE-2017-1000364. If we failed to
-+ // map our codebuf, try again at an address one megabyte lower.
-+ hint -= 1 * M;
-+ codebuf = os::attempt_reserve_memory_at(page_size, hint);
-+ }
-+
- if ( (codebuf == NULL) || (!os::commit_memory(codebuf, page_size, true)) ) {
- return; // No matter, we tried, best effort.
- }
-diff --git openjdk.orig/hotspot/test/runtime/StackGap/T.java openjdk/hotspot/test/runtime/StackGap/T.java
-new file mode 100644
---- /dev/null
-+++ openjdk/hotspot/test/runtime/StackGap/T.java
-@@ -0,0 +1,33 @@
-+/*
-+ * Copyright (c) 2018, 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.
-+ */
-+
-+public class T {
-+
-+ public static void test(int n) {
-+ if (n == 0) return;
-+ System.out.println (n);
-+ test (n - 1);
-+
-+ }
-+
-+}
-diff --git openjdk.orig/hotspot/test/runtime/StackGap/exestack-gap.c openjdk/hotspot/test/runtime/StackGap/exestack-gap.c
-new file mode 100644
---- /dev/null
-+++ openjdk/hotspot/test/runtime/StackGap/exestack-gap.c
-@@ -0,0 +1,82 @@
-+/*
-+ * Copyright (c) 2018, 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.
-+ */
-+
-+#include
-+#include
-+#include
-+
-+JNIEnv* create_vm(JavaVM **jvm, char *extra_option)
-+{
-+ JNIEnv* env;
-+ JavaVMInitArgs args;
-+ JavaVMOption options[4];
-+ args.version = JNI_VERSION_1_8;
-+ args.nOptions = 3 + (extra_option != NULL);
-+ options[0].optionString = "-Xss2048k";
-+ char classpath[4096];
-+ snprintf(classpath, sizeof classpath,
-+ "-Djava.class.path=%s", getenv("CLASSPATH"));
-+ options[1].optionString = classpath;
-+ options[2].optionString = "-XX:+UnlockExperimentalVMOptions";
-+ if (extra_option) {
-+ options[3].optionString = extra_option;
-+ }
-+ args.options = &options[0];
-+ args.ignoreUnrecognized = 0;
-+ int rv;
-+ rv = JNI_CreateJavaVM(jvm, (void**)&env, &args);
-+ if (rv < 0) return NULL;
-+ return env;
-+}
-+
-+void run(char *extra_arg) {
-+ JavaVM *jvm;
-+ jclass T_class;
-+ jmethodID test_method;
-+ JNIEnv *env = create_vm(&jvm, extra_arg);
-+ if (env == NULL)
-+ exit(1);
-+ T_class = (*env)->FindClass(env, "T");
-+ if ((*env)->ExceptionCheck(env) == JNI_TRUE) {
-+ (*env)->ExceptionDescribe(env);
-+ exit(1);
-+ }
-+ test_method = (*env)->GetStaticMethodID(env, T_class, "test", "(I)V");
-+ if ((*env)->ExceptionCheck(env) == JNI_TRUE) {
-+ (*env)->ExceptionDescribe(env);
-+ exit(1);
-+ }
-+ (*env)->CallStaticVoidMethod(env, T_class, test_method, 1000);
-+}
-+
-+
-+int main(int argc, char **argv)
-+{
-+ if (argc > 1) {
-+ run(argv[1]);
-+ } else {
-+ run(NULL);
-+ }
-+
-+ return 0;
-+}
-diff --git openjdk.orig/hotspot/test/runtime/StackGap/testme.sh openjdk/hotspot/test/runtime/StackGap/testme.sh
-new file mode 100644
---- /dev/null
-+++ openjdk/hotspot/test/runtime/StackGap/testme.sh
-@@ -0,0 +1,73 @@
-+# Copyright (c) 2014, 2018, 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.
-+#!/bin/sh
-+
-+#
-+# @test testme.sh
-+# @bug 8197429
-+# @summary Linux kernel stack guard should not cause segfaults on x86-32
-+# @compile T.java
-+# @run shell testme.sh
-+#
-+
-+if [ "${TESTSRC}" = "" ]
-+then
-+ TESTSRC=${PWD}
-+ echo "TESTSRC not set. Using "${TESTSRC}" as default"
-+fi
-+echo "TESTSRC=${TESTSRC}"
-+## Adding common setup Variables for running shell tests.
-+. ${TESTSRC}/../../test_env.sh
-+
-+if [ "${VM_OS}" != "linux" ]
-+then
-+ echo "Test only valid for Linux"
-+ exit 0
-+fi
-+
-+gcc_cmd=`which gcc`
-+if [ "x$gcc_cmd" = "x" ]; then
-+ echo "WARNING: gcc not found. Cannot execute test." 2>&1
-+ exit 0;
-+fi
-+
-+CFLAGS="-m${VM_BITS}"
-+
-+LD_LIBRARY_PATH=.:${COMPILEJAVA}/jre/lib/${VM_CPU}/${VM_TYPE}:/usr/lib:$LD_LIBRARY_PATH
-+export LD_LIBRARY_PATH
-+
-+cp ${TESTSRC}${FS}exestack-gap.c .
-+
-+# Copy the result of our @compile action:
-+cp ${TESTCLASSES}${FS}T.class .
-+
-+echo "Compilation flag: ${COMP_FLAG}"
-+# Note pthread may not be found thus invoke creation will fail to be created.
-+# Check to ensure you have a /usr/lib/libpthread.so if you don't please look
-+# for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation.
-+
-+$gcc_cmd -DLINUX ${CFLAGS} -o stack-gap \
-+ -I${COMPILEJAVA}/include -I${COMPILEJAVA}/include/linux \
-+ -L${COMPILEJAVA}/jre/lib/${VM_CPU}/${VM_TYPE} \
-+ -ljvm -lpthread exestack-gap.c
-+
-+./stack-gap || exit $?
-+./stack-gap -XX:+DisablePrimordialThreadGuardPages || exit $?
diff --git a/SOURCES/jdk8203030-zero_s390_31_bit_size_t_type_conflicts_in_shared_code.patch b/SOURCES/jdk8203030-zero_s390_31_bit_size_t_type_conflicts_in_shared_code.patch
index 6e0d762..843158e 100644
--- a/SOURCES/jdk8203030-zero_s390_31_bit_size_t_type_conflicts_in_shared_code.patch
+++ b/SOURCES/jdk8203030-zero_s390_31_bit_size_t_type_conflicts_in_shared_code.patch
@@ -1,5 +1,5 @@
-diff --git a/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp b/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
@@ -2659,7 +2659,7 @@
if (ResizeOldPLAB && CMSOldPLABResizeQuicker) {
@@ -10,8 +10,8 @@ diff --git a/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeL
}
assert(n_blks > 0, "Error");
_cfls->par_get_chunk_of_blocks(word_sz, n_blks, fl);
-diff --git a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
@@ -957,7 +957,7 @@
if (free_percentage < desired_free_percentage) {
@@ -40,10 +40,10 @@ diff --git a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSw
// Do not give up existing stack until we have managed to
// get the double capacity that we desired.
ReservedSpace rs(ReservedSpace::allocation_align_size_up(
-diff --git a/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/src/share/vm/gc_implementation/g1/concurrentMark.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp openjdk/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
-@@ -3903,7 +3903,7 @@
+@@ -3902,7 +3902,7 @@
// of things to do) or totally (at the very end).
size_t target_size;
if (partially) {
@@ -52,7 +52,7 @@ diff --git a/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/src/share/vm
} else {
target_size = 0;
}
-@@ -4707,7 +4707,7 @@
+@@ -4706,7 +4706,7 @@
// The > 0 check is to deal with the prev and next live bytes which
// could be 0.
if (*hum_bytes > 0) {
@@ -61,10 +61,10 @@ diff --git a/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/src/share/vm
*hum_bytes -= bytes;
}
return bytes;
-diff --git a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp openjdk/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
-@@ -1726,7 +1726,7 @@
+@@ -1729,7 +1729,7 @@
verify_region_sets_optional();
@@ -73,8 +73,8 @@ diff --git a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/src/share/v
ergo_verbose1(ErgoHeapSizing,
"attempt heap expansion",
ergo_format_reason("allocation request failed")
-diff --git a/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp b/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp openjdk/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp
@@ -117,7 +117,7 @@
return reserved_size() - committed_size();
@@ -85,8 +85,8 @@ diff --git a/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp b/src
return (addr - _low_boundary) / _page_size;
}
-diff --git a/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp b/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp openjdk/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp
@@ -38,7 +38,7 @@
_cancel(false),
@@ -97,8 +97,8 @@ diff --git a/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp b/src/shar
_queues = NEW_C_HEAP_ARRAY(G1StringDedupWorkerQueue, _nqueues, mtGC);
for (size_t i = 0; i < _nqueues; i++) {
new (_queues + i) G1StringDedupWorkerQueue(G1StringDedupWorkerQueue::default_segment_size(), _max_cache_size, _max_size);
-diff --git a/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp b/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp openjdk/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp
@@ -120,7 +120,7 @@
};
@@ -109,8 +109,8 @@ diff --git a/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp b/src/shar
_max_list_length(0),
_cached(PaddedArray::create_unfreeable((uint)_nlists)),
_overflowed(PaddedArray::create_unfreeable((uint)_nlists)) {
-diff --git a/src/share/vm/gc_implementation/g1/heapRegion.cpp b/src/share/vm/gc_implementation/g1/heapRegion.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp openjdk/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp
@@ -109,7 +109,7 @@
if (FLAG_IS_DEFAULT(G1HeapRegionSize)) {
@@ -121,8 +121,8 @@ diff --git a/src/share/vm/gc_implementation/g1/heapRegion.cpp b/src/share/vm/gc_
}
int region_size_log = log2_long((jlong) region_size);
-diff --git a/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp openjdk/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
@@ -194,7 +194,7 @@
const size_t num_overflow_elems = of_stack->size();
@@ -133,8 +133,8 @@ diff --git a/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/src/sh
num_overflow_elems);
// Transfer the most recent num_take_elems from the overflow
// stack to our work queue.
-diff --git a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
---- openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
@@ -910,8 +910,8 @@
void PSParallelCompact::initialize_dead_wood_limiter()
@@ -147,8 +147,8 @@ diff --git a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.c
_dwl_first_term = 1.0 / (sqrt(2.0 * M_PI) * _dwl_std_dev);
DEBUG_ONLY(_dwl_initialized = true;)
_dwl_adjustment = normal_distribution(1.0);
-diff --git a/src/share/vm/memory/collectorPolicy.cpp b/src/share/vm/memory/collectorPolicy.cpp
---- openjdk/hotspot/src/share/vm/memory/collectorPolicy.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/memory/collectorPolicy.cpp openjdk/hotspot/src/share/vm/memory/collectorPolicy.cpp
+--- openjdk.orig/hotspot/src/share/vm/memory/collectorPolicy.cpp
+++ openjdk/hotspot/src/share/vm/memory/collectorPolicy.cpp
@@ -385,7 +385,7 @@
uintx calculated_size = NewSize + OldSize;
@@ -207,10 +207,10 @@ diff --git a/src/share/vm/memory/collectorPolicy.cpp b/src/share/vm/memory/colle
_initial_gen1_size = OldSize;
// If the user has explicitly set an OldSize that is inconsistent
-diff --git a/src/share/vm/memory/metaspace.cpp b/src/share/vm/memory/metaspace.cpp
---- openjdk/hotspot/src/share/vm/memory/metaspace.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/memory/metaspace.cpp openjdk/hotspot/src/share/vm/memory/metaspace.cpp
+--- openjdk.orig/hotspot/src/share/vm/memory/metaspace.cpp
+++ openjdk/hotspot/src/share/vm/memory/metaspace.cpp
-@@ -1455,7 +1455,7 @@
+@@ -1482,7 +1482,7 @@
void MetaspaceGC::post_initialize() {
// Reset the high-water mark once the VM initialization is done.
@@ -219,8 +219,8 @@ diff --git a/src/share/vm/memory/metaspace.cpp b/src/share/vm/memory/metaspace.c
}
bool MetaspaceGC::can_expand(size_t word_size, bool is_class) {
-@@ -1515,7 +1515,7 @@
- (size_t)MIN2(min_tmp, double(max_uintx));
+@@ -1542,7 +1542,7 @@
+ (size_t)MIN2(min_tmp, double(MaxMetaspaceSize));
// Don't shrink less than the initial generation size
minimum_desired_capacity = MAX2(minimum_desired_capacity,
- MetaspaceSize);
@@ -228,16 +228,16 @@ diff --git a/src/share/vm/memory/metaspace.cpp b/src/share/vm/memory/metaspace.c
if (PrintGCDetails && Verbose) {
gclog_or_tty->print_cr("\nMetaspaceGC::compute_new_size: ");
-@@ -1573,7 +1573,7 @@
+@@ -1600,7 +1600,7 @@
const double max_tmp = used_after_gc / minimum_used_percentage;
- size_t maximum_desired_capacity = (size_t)MIN2(max_tmp, double(max_uintx));
+ size_t maximum_desired_capacity = (size_t)MIN2(max_tmp, double(MaxMetaspaceSize));
maximum_desired_capacity = MAX2(maximum_desired_capacity,
- MetaspaceSize);
+ (size_t)MetaspaceSize);
if (PrintGCDetails && Verbose) {
gclog_or_tty->print_cr(" "
" maximum_free_percentage: %6.2f"
-@@ -3285,7 +3285,7 @@
+@@ -3361,7 +3361,7 @@
// on the medium chunk list. The next chunk will be small and progress
// from there. This size calculated by -version.
_first_class_chunk_word_size = MIN2((size_t)MediumChunk*6,
@@ -246,10 +246,10 @@ diff --git a/src/share/vm/memory/metaspace.cpp b/src/share/vm/memory/metaspace.c
_first_class_chunk_word_size = align_word_size_up(_first_class_chunk_word_size);
// Arbitrarily set the initial virtual space to a multiple
// of the boot class loader size.
-diff --git a/src/share/vm/memory/threadLocalAllocBuffer.cpp b/src/share/vm/memory/threadLocalAllocBuffer.cpp
---- openjdk/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp
+diff --git openjdk.orig/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp openjdk/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp
+--- openjdk.orig/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp
+++ openjdk/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp
-@@ -238,13 +238,13 @@
+@@ -250,13 +250,13 @@
size_t init_sz = 0;
if (TLABSize > 0) {
@@ -266,8 +266,8 @@ diff --git a/src/share/vm/memory/threadLocalAllocBuffer.cpp b/src/share/vm/memor
init_sz = align_object_size(init_sz);
}
init_sz = MIN2(MAX2(init_sz, min_size()), max_size());
-diff --git a/src/share/vm/oops/objArrayKlass.inline.hpp b/src/share/vm/oops/objArrayKlass.inline.hpp
---- openjdk/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp
+diff --git openjdk.orig/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp openjdk/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp
+--- openjdk.orig/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp
+++ openjdk/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp
@@ -48,7 +48,7 @@
const size_t beg_index = size_t(index);
@@ -287,10 +287,10 @@ diff --git a/src/share/vm/oops/objArrayKlass.inline.hpp b/src/share/vm/oops/objA
const size_t end_index = beg_index + stride;
T* const base = (T*)a->base();
T* const beg = base + beg_index;
-diff --git a/src/share/vm/runtime/arguments.cpp b/src/share/vm/runtime/arguments.cpp
---- openjdk/hotspot/src/share/vm/runtime/arguments.cpp
+diff --git 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
+++ openjdk/hotspot/src/share/vm/runtime/arguments.cpp
-@@ -1283,7 +1283,7 @@
+@@ -1289,7 +1289,7 @@
// NewSize was set on the command line and it is larger than
// preferred_max_new_size.
if (!FLAG_IS_DEFAULT(NewSize)) { // NewSize explicitly set at command-line
@@ -299,7 +299,7 @@ diff --git a/src/share/vm/runtime/arguments.cpp b/src/share/vm/runtime/arguments
} else {
FLAG_SET_ERGO(uintx, MaxNewSize, preferred_max_new_size);
}
-@@ -1308,8 +1308,8 @@
+@@ -1314,8 +1314,8 @@
// Unless explicitly requested otherwise, make young gen
// at least min_new, and at most preferred_max_new_size.
if (FLAG_IS_DEFAULT(NewSize)) {
@@ -310,7 +310,7 @@ diff --git a/src/share/vm/runtime/arguments.cpp b/src/share/vm/runtime/arguments
if (PrintGCDetails && Verbose) {
// Too early to use gclog_or_tty
tty->print_cr("CMS ergo set NewSize: " SIZE_FORMAT, NewSize);
-@@ -1319,7 +1319,7 @@
+@@ -1325,7 +1325,7 @@
// so it's NewRatio x of NewSize.
if (FLAG_IS_DEFAULT(OldSize)) {
if (max_heap > NewSize) {
diff --git a/SOURCES/jdk8207057-pr3613-no_debug_info_for_assembler_files_hotspot.patch b/SOURCES/jdk8207057-pr3613-no_debug_info_for_assembler_files_hotspot.patch
deleted file mode 100644
index c61d972..0000000
--- a/SOURCES/jdk8207057-pr3613-no_debug_info_for_assembler_files_hotspot.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- openjdk/hotspot/make/linux/makefiles/gcc.make 2018-09-17 15:40:56.933127667 +0200
-+++ openjdk/hotspot/make/linux/makefiles/gcc.make 2018-09-17 15:40:56.831127850 +0200
-@@ -184,6 +184,10 @@
- LFLAGS += $(ARCHFLAG)
- ASFLAGS += $(ARCHFLAG)
-
-+ifeq ($(DEBUG_BINARIES), true)
-+ ASFLAGS += $(ASFLAGS_DEBUG_SYMBOLS)
-+endif
-+
- # Use C++ Interpreter
- ifdef CC_INTERP
- CFLAGS += -DCC_INTERP
diff --git a/SOURCES/jdk8207057-pr3613-no_debug_info_for_assembler_files_root.patch b/SOURCES/jdk8207057-pr3613-no_debug_info_for_assembler_files_root.patch
deleted file mode 100644
index e4a007c..0000000
--- a/SOURCES/jdk8207057-pr3613-no_debug_info_for_assembler_files_root.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-diff --git openjdk.orig///common/autoconf/flags.m4 openjdk///common/autoconf/flags.m4
---- openjdk.orig///common/autoconf/flags.m4
-+++ openjdk///common/autoconf/flags.m4
-@@ -282,9 +282,11 @@
- if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then
- CFLAGS_DEBUG_SYMBOLS="-g1"
- CXXFLAGS_DEBUG_SYMBOLS="-g1"
-+ ASFLAGS_DEBUG_SYMBOLS="-g1"
- else
- CFLAGS_DEBUG_SYMBOLS="-g"
- CXXFLAGS_DEBUG_SYMBOLS="-g"
-+ ASFLAGS_DEBUG_SYMBOLS="-g"
- fi
- elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
- CFLAGS_DEBUG_SYMBOLS="-g -xs"
-@@ -295,6 +297,7 @@
- fi
- AC_SUBST(CFLAGS_DEBUG_SYMBOLS)
- AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS)
-+ AC_SUBST(ASFLAGS_DEBUG_SYMBOLS)
-
- # Optimization levels
- if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
-diff --git openjdk.orig///common/autoconf/spec.gmk.in openjdk///common/autoconf/spec.gmk.in
---- openjdk.orig///common/autoconf/spec.gmk.in
-+++ openjdk///common/autoconf/spec.gmk.in
-@@ -414,6 +414,7 @@
- # Options for generating debug symbols
- ENABLE_DEBUG_SYMBOLS:=@ENABLE_DEBUG_SYMBOLS@
- CFLAGS_DEBUG_SYMBOLS:=@CFLAGS_DEBUG_SYMBOLS@
-+ASFLAGS_DEBUG_SYMBOLS:=@ASFLAGS_DEBUG_SYMBOLS@
- CXXFLAGS_DEBUG_SYMBOLS:=@CXXFLAGS_DEBUG_SYMBOLS@
- ZIP_DEBUGINFO_FILES:=@ZIP_DEBUGINFO_FILES@
- STRIP_POLICY:=@STRIP_POLICY@
-diff --git openjdk.orig///make/common/NativeCompilation.gmk openjdk///make/common/NativeCompilation.gmk
---- openjdk.orig///make/common/NativeCompilation.gmk
-+++ openjdk///make/common/NativeCompilation.gmk
-@@ -351,12 +351,14 @@
- # Always add debug symbols
- $1_EXTRA_CFLAGS+=$(CFLAGS_DEBUG_SYMBOLS)
- $1_EXTRA_CXXFLAGS+=$(CXXFLAGS_DEBUG_SYMBOLS)
-+ $1_EXTRA_ASFLAGS+=$(ASFLAGS_DEBUG_SYMBOLS)
- else
- # Programs don't get the debug symbols added in the old build. It's not clear if
- # this is intentional.
- ifeq ($$($1_PROGRAM),)
- $1_EXTRA_CFLAGS+=$(CFLAGS_DEBUG_SYMBOLS)
- $1_EXTRA_CXXFLAGS+=$(CXXFLAGS_DEBUG_SYMBOLS)
-+ $1_EXTRA_ASFLAGS+=$(ASFLAGS_DEBUG_SYMBOLS)
- endif
- endif
- endif
diff --git a/SOURCES/jdk8209639-rh1640127-02-coalesce_attempted_spill_non_spillable.patch b/SOURCES/jdk8209639-rh1640127-02-coalesce_attempted_spill_non_spillable.patch
deleted file mode 100644
index 63c9cba..0000000
--- a/SOURCES/jdk8209639-rh1640127-02-coalesce_attempted_spill_non_spillable.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-
-# HG changeset patch
-# User roland
-# Date 1540370574 -7200
-# Node ID d853bac073f8a4851e313ba8fa9768b38396a204
-# Parent e044997c2edaeae97866394a7f8e2ddebbd41392
-8209639: assert failure in coalesce.cpp: attempted to spill a non-spillable item
-Reviewed-by: neliasso, kvn
-
-diff -r e044997c2eda -r d853bac073f8 src/share/vm/opto/coalesce.cpp
---- openjdk/hotspot/src/share/vm/opto/coalesce.cpp Mon Oct 15 11:00:27 2018 +0200
-+++ openjdk/hotspot/src/share/vm/opto/coalesce.cpp Wed Oct 24 10:42:54 2018 +0200
-@@ -25,6 +25,7 @@
- #include "precompiled.hpp"
- #include "memory/allocation.inline.hpp"
- #include "opto/block.hpp"
-+#include "opto/c2compiler.hpp"
- #include "opto/cfgnode.hpp"
- #include "opto/chaitin.hpp"
- #include "opto/coalesce.hpp"
-@@ -294,9 +295,13 @@
- } else {
- int ireg = m->ideal_reg();
- if (ireg == 0 || ireg == Op_RegFlags) {
-- assert(false, err_msg("attempted to spill a non-spillable item: %d: %s, ireg = %d",
-- m->_idx, m->Name(), ireg));
-- C->record_method_not_compilable("attempted to spill a non-spillable item");
-+ if (C->subsume_loads()) {
-+ C->record_failure(C2Compiler::retry_no_subsuming_loads());
-+ } else {
-+ assert(false, err_msg("attempted to spill a non-spillable item: %d: %s, ireg = %d",
-+ m->_idx, m->Name(), ireg));
-+ C->record_method_not_compilable("attempted to spill a non-spillable item");
-+ }
- return;
- }
- const RegMask *rm = C->matcher()->idealreg2spillmask[ireg];
-diff -r e044997c2eda -r d853bac073f8 test/compiler/c2/SubsumingLoadsCauseFlagSpill.java
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ openjdk/hotspot/test/compiler/c2/SubsumingLoadsCauseFlagSpill.java Wed Oct 24 10:42:54 2018 +0200
-@@ -0,0 +1,72 @@
-+/*
-+ * Copyright (c) 2018, 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 8209639
-+ * @summary assert failure in coalesce.cpp: attempted to spill a non-spillable item
-+ *
-+ * @run main/othervm -XX:-BackgroundCompilation -XX:CompileCommand=dontinline,SubsumingLoadsCauseFlagSpill::not_inlined -Xmx1024m SubsumingLoadsCauseFlagSpill
-+ *
-+ */
-+
-+public class SubsumingLoadsCauseFlagSpill {
-+ private static Object field;
-+ private static boolean do_throw;
-+ private static volatile boolean barrier;
-+
-+ public static void main(String[] args) {
-+ for (int i = 0; i < 20_000; i++) {
-+ do_throw = true;
-+ field = null;
-+ test(0);
-+ do_throw = false;
-+ field = new Object();
-+ test(0);
-+ }
-+ }
-+
-+ private static float test(float f) {
-+ Object v = null;
-+ try {
-+ not_inlined();
-+ v = field;
-+ } catch (MyException me) {
-+ v = field;
-+ barrier = true;
-+ }
-+ if (v == null) {
-+ return f * f;
-+ }
-+ return f;
-+ }
-+
-+ private static void not_inlined() throws MyException{
-+ if (do_throw) {
-+ throw new MyException();
-+ }
-+ }
-+
-+ private static class MyException extends Throwable {
-+ }
-+}
-
diff --git a/SOURCES/jdk8210647-rh1632174-libsaproc_is_being_compiled_without_optimization.patch b/SOURCES/jdk8210647-rh1632174-libsaproc_is_being_compiled_without_optimization.patch
deleted file mode 100644
index 0ab09e4..0000000
--- a/SOURCES/jdk8210647-rh1632174-libsaproc_is_being_compiled_without_optimization.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff --git openjdk.orig/hotspot/make/linux/makefiles/saproc.make openjdk/hotspot/make/linux/makefiles/saproc.make
---- openjdk.orig/hotspot/make/linux/makefiles/saproc.make
-+++ openjdk/hotspot/make/linux/makefiles/saproc.make
-@@ -59,6 +59,11 @@
- SA_DEBUG_CFLAGS = -g
- endif
-
-+# Optimize saproc lib at level -O3 unless it's a slowdebug build
-+ifneq ($(DEBUG_LEVEL), slowdebug)
-+ SA_OPT_FLAGS = $(OPT_CFLAGS)
-+endif
-+
- # if $(AGENT_DIR) does not exist, we don't build SA
- # also, we don't build SA on Itanium or zero.
-
-@@ -95,6 +100,7 @@
- $(SASRCFILES) \
- $(SA_LFLAGS) \
- $(SA_DEBUG_CFLAGS) \
-+ $(SA_OPT_FLAGS) \
- $(EXTRA_CFLAGS) \
- -o $@ \
- -lthread_db
diff --git a/SOURCES/jdk8223219-fstack-protector-hotspot.patch b/SOURCES/jdk8223219-fstack-protector-hotspot.patch
new file mode 100644
index 0000000..ec69944
--- /dev/null
+++ b/SOURCES/jdk8223219-fstack-protector-hotspot.patch
@@ -0,0 +1,35 @@
+diff --git openjdk.orig/hotspot/make/bsd/makefiles/gcc.make openjdk/hotspot/make/bsd/makefiles/gcc.make
+--- openjdk.orig/hotspot/make/bsd/makefiles/gcc.make
++++ openjdk/hotspot/make/bsd/makefiles/gcc.make
+@@ -190,7 +190,7 @@
+ CFLAGS += -fno-exceptions
+ ifeq ($(USE_CLANG),)
+ CFLAGS += -pthread
+- CFLAGS += -fcheck-new -fstack-protector
++ CFLAGS += -fcheck-new
+ # version 4 and above support fvisibility=hidden (matches jni_x86.h file)
+ # except 4.1.2 gives pointless warnings that can't be disabled (afaik)
+ ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0"
+diff --git openjdk.orig/hotspot/make/linux/makefiles/gcc.make openjdk/hotspot/make/linux/makefiles/gcc.make
+--- openjdk.orig/hotspot/make/linux/makefiles/gcc.make
++++ openjdk/hotspot/make/linux/makefiles/gcc.make
+@@ -150,7 +150,7 @@
+ CFLAGS += -fno-exceptions
+ CFLAGS += -D_REENTRANT
+ ifeq ($(USE_CLANG),)
+- CFLAGS += -fcheck-new -fstack-protector
++ CFLAGS += -fcheck-new
+ # version 4 and above support fvisibility=hidden (matches jni_x86.h file)
+ # except 4.1.2 gives pointless warnings that can't be disabled (afaik)
+ ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0"
+diff --git openjdk.orig/hotspot/make/solaris/makefiles/gcc.make openjdk/hotspot/make/solaris/makefiles/gcc.make
+--- openjdk.orig/hotspot/make/solaris/makefiles/gcc.make
++++ openjdk/hotspot/make/solaris/makefiles/gcc.make
+@@ -75,7 +75,6 @@
+ CFLAGS += -fno-exceptions
+ CFLAGS += -D_REENTRANT
+ CFLAGS += -fcheck-new
+-CFLAGS += -fstack-protector
+
+ ARCHFLAG = $(ARCHFLAG/$(BUILDARCH))
+
diff --git a/SOURCES/jdk8223219-fstack-protector-root.patch b/SOURCES/jdk8223219-fstack-protector-root.patch
new file mode 100644
index 0000000..a73761c
--- /dev/null
+++ b/SOURCES/jdk8223219-fstack-protector-root.patch
@@ -0,0 +1,33 @@
+diff --git a/common/autoconf/flags.m4 b/common/autoconf/flags.m4
+--- openjdk.orig/common/autoconf/flags.m4
++++ openjdk/common/autoconf/flags.m4
+@@ -388,16 +388,8 @@
+ CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt"
+ CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt"
+ elif test "x$TOOLCHAIN_TYPE" = xgcc; then
+- case $OPENJDK_TARGET_CPU_ARCH in
+- x86 )
+- LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS -fstack-protector"
+- LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS -fstack-protector"
+- ;;
+- x86_64 )
+- LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS -fstack-protector"
+- LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS -fstack-protector"
+- ;;
+- esac
++ LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS -fstack-protector"
++ LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS -fstack-protector"
+ if test "x$OPENJDK_TARGET_OS" != xmacosx; then
+ LDFLAGS_JDK="$LDFLAGS_JDK -Wl,-z,relro"
+ LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS -Wl,-z,relro"
+@@ -464,10 +456,6 @@
+ ppc )
+ # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing
+ ;;
+- x86 )
+- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer -fstack-protector"
+- CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing -fstack-protector"
+- ;;
+ * )
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer"
+ CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
diff --git a/SOURCES/pr3559-use_ldrexd_for_atomic_reads_on_armv7_zero.patch b/SOURCES/pr3559-use_ldrexd_for_atomic_reads_on_armv7_zero.patch
deleted file mode 100644
index 1c322fa..0000000
--- a/SOURCES/pr3559-use_ldrexd_for_atomic_reads_on_armv7_zero.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-# HG changeset patch
-# User aph
-# Date 1338206478 14400
-# Mon May 28 08:01:18 2012 -0400
-# Node ID 6275d7b419091092752d5a1854194c98897892ba
-# Parent be1379a186ba527b32c93a83e04c9600735fe44b
-PR3559: Use ldrexd for atomic reads on ARMv7.
-
-2012-05-28 Andrew Haley
-
- * os_linux_zero.hpp (atomic_copy64): Use ldrexd for atomic reads
- on ARMv7.
-
-diff --git openjdk.orig/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.hpp openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.hpp
---- openjdk.orig/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.hpp
-+++ openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.hpp
-@@ -54,6 +54,12 @@
- "std %0, %1\n"
- : "=&f"(tmp), "=Q"(*(volatile double*)dst)
- : "Q"(*(volatile double*)src));
-+#elif defined(__ARM_ARCH_7A__)
-+ jlong tmp;
-+ asm volatile ("ldrexd %0, [%1]\n"
-+ : "=r"(tmp)
-+ : "r"(src), "m"(src));
-+ *(jlong *) dst = tmp;
- #else
- *(jlong *) dst = *(jlong *) src;
- #endif
diff --git a/SOURCES/rh1566890-CVE_2018_3639-speculative_store_bypass.patch b/SOURCES/rh1566890-CVE_2018_3639-speculative_store_bypass.patch
new file mode 100644
index 0000000..d8f3a5a
--- /dev/null
+++ b/SOURCES/rh1566890-CVE_2018_3639-speculative_store_bypass.patch
@@ -0,0 +1,44 @@
+diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
+--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp
++++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
+@@ -103,6 +103,8 @@
+ # include
+ # include
+
++#include
++
+ PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
+
+ #ifndef _GNU_SOURCE
+@@ -4997,6 +4999,31 @@
+ }
+ }
+
++/* Per task speculation control */
++#ifndef PR_GET_SPECULATION_CTRL
++#define PR_GET_SPECULATION_CTRL 52
++#endif
++#ifndef PR_SET_SPECULATION_CTRL
++#define PR_SET_SPECULATION_CTRL 53
++#endif
++/* Speculation control variants */
++# undef PR_SPEC_STORE_BYPASS
++# define PR_SPEC_STORE_BYPASS 0
++/* Return and control values for PR_SET/GET_SPECULATION_CTRL */
++# undef PR_SPEC_NOT_AFFECTED
++# undef PR_SPEC_PRCTL
++# undef PR_SPEC_ENABLE
++# undef PR_SPEC_DISABLE
++# define PR_SPEC_NOT_AFFECTED 0
++# define PR_SPEC_PRCTL (1UL << 0)
++# define PR_SPEC_ENABLE (1UL << 1)
++# define PR_SPEC_DISABLE (1UL << 2)
++
++static void set_speculation() __attribute__((constructor));
++static void set_speculation() {
++ prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
++}
++
+ // this is called _before_ most of the global arguments have been parsed
+ void os::init(void) {
+ char dummy; /* used to get a guess on initial stack address */
diff --git a/SOURCES/rh1566890-CVE_2018_3639-speculative_store_bypass_toggle.patch b/SOURCES/rh1566890-CVE_2018_3639-speculative_store_bypass_toggle.patch
new file mode 100644
index 0000000..94ef9d4
--- /dev/null
+++ b/SOURCES/rh1566890-CVE_2018_3639-speculative_store_bypass_toggle.patch
@@ -0,0 +1,54 @@
+diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
+--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp
++++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
+@@ -5001,26 +5001,43 @@
+
+ /* Per task speculation control */
+ #ifndef PR_GET_SPECULATION_CTRL
+-#define PR_GET_SPECULATION_CTRL 52
++# define PR_GET_SPECULATION_CTRL 52
+ #endif
+ #ifndef PR_SET_SPECULATION_CTRL
+-#define PR_SET_SPECULATION_CTRL 53
++# define PR_SET_SPECULATION_CTRL 53
+ #endif
+ /* Speculation control variants */
+-# undef PR_SPEC_STORE_BYPASS
++#ifndef PR_SPEC_STORE_BYPASS
+ # define PR_SPEC_STORE_BYPASS 0
++#endif
+ /* Return and control values for PR_SET/GET_SPECULATION_CTRL */
+-# undef PR_SPEC_NOT_AFFECTED
+-# undef PR_SPEC_PRCTL
+-# undef PR_SPEC_ENABLE
+-# undef PR_SPEC_DISABLE
++
++#ifndef PR_SPEC_NOT_AFFECTED
+ # define PR_SPEC_NOT_AFFECTED 0
++#endif
++#ifndef PR_SPEC_PRCTL
+ # define PR_SPEC_PRCTL (1UL << 0)
++#endif
++#ifndef PR_SPEC_ENABLE
+ # define PR_SPEC_ENABLE (1UL << 1)
++#endif
++#ifndef PR_SPEC_DISABLE
+ # define PR_SPEC_DISABLE (1UL << 2)
++#endif
++#ifndef PR_SPEC_FORCE_DISABLE
++# define PR_SPEC_FORCE_DISABLE (1UL << 3)
++#endif
++#ifndef PR_SPEC_DISABLE_NOEXEC
++# define PR_SPEC_DISABLE_NOEXEC (1UL << 4)
++#endif
+
+ static void set_speculation() __attribute__((constructor));
+ static void set_speculation() {
++ if ( prctl(PR_SET_SPECULATION_CTRL,
++ PR_SPEC_STORE_BYPASS,
++ PR_SPEC_DISABLE_NOEXEC, 0, 0) == 0 ) {
++ return;
++ }
+ prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
+ }
+
diff --git a/SOURCES/rh1566890_speculative_store_bypass_so_added_more_per_task_speculation_control_CVE_2018_3639.patch b/SOURCES/rh1566890_speculative_store_bypass_so_added_more_per_task_speculation_control_CVE_2018_3639.patch
deleted file mode 100644
index d8f3a5a..0000000
--- a/SOURCES/rh1566890_speculative_store_bypass_so_added_more_per_task_speculation_control_CVE_2018_3639.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
---- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp
-+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
-@@ -103,6 +103,8 @@
- # include
- # include
-
-+#include
-+
- PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
-
- #ifndef _GNU_SOURCE
-@@ -4997,6 +4999,31 @@
- }
- }
-
-+/* Per task speculation control */
-+#ifndef PR_GET_SPECULATION_CTRL
-+#define PR_GET_SPECULATION_CTRL 52
-+#endif
-+#ifndef PR_SET_SPECULATION_CTRL
-+#define PR_SET_SPECULATION_CTRL 53
-+#endif
-+/* Speculation control variants */
-+# undef PR_SPEC_STORE_BYPASS
-+# define PR_SPEC_STORE_BYPASS 0
-+/* Return and control values for PR_SET/GET_SPECULATION_CTRL */
-+# undef PR_SPEC_NOT_AFFECTED
-+# undef PR_SPEC_PRCTL
-+# undef PR_SPEC_ENABLE
-+# undef PR_SPEC_DISABLE
-+# define PR_SPEC_NOT_AFFECTED 0
-+# define PR_SPEC_PRCTL (1UL << 0)
-+# define PR_SPEC_ENABLE (1UL << 1)
-+# define PR_SPEC_DISABLE (1UL << 2)
-+
-+static void set_speculation() __attribute__((constructor));
-+static void set_speculation() {
-+ prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
-+}
-+
- // this is called _before_ most of the global arguments have been parsed
- void os::init(void) {
- char dummy; /* used to get a guess on initial stack address */
diff --git a/SOURCES/s390-8214206_fix.patch b/SOURCES/s390-8214206_fix.patch
new file mode 100644
index 0000000..93f12de
--- /dev/null
+++ b/SOURCES/s390-8214206_fix.patch
@@ -0,0 +1,37 @@
+diff --git openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp openjdk/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp
++++ openjdk/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp
+@@ -78,7 +78,8 @@
+ size_t num_target_elems = pointer_delta(end, bottom, mapping_granularity_in_bytes);
+ idx_t bias = (uintptr_t)bottom / mapping_granularity_in_bytes;
+ address base = create_new_base_array(num_target_elems, target_elem_size_in_bytes);
+- initialize_base(base, num_target_elems, bias, target_elem_size_in_bytes, log2_intptr(mapping_granularity_in_bytes));
++ initialize_base(base, num_target_elems, bias, target_elem_size_in_bytes,
++ log2_intptr((uintptr_t) mapping_granularity_in_bytes));
+ }
+
+ size_t bias() const { return _bias; }
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/os.cpp openjdk/hotspot/src/share/vm/runtime/os.cpp
+--- openjdk.orig/hotspot/src/share/vm/runtime/os.cpp
++++ openjdk/hotspot/src/share/vm/runtime/os.cpp
+@@ -1284,7 +1284,7 @@
+ }
+
+ void os::set_memory_serialize_page(address page) {
+- int count = log2_intptr(sizeof(class JavaThread)) - log2_int(64);
++ int count = log2_intptr((uintptr_t) sizeof(class JavaThread)) - log2_int(64);
+ _mem_serialize_page = (volatile int32_t *)page;
+ // We initialize the serialization page shift count here
+ // We assume a cache line size of 64 bytes
+diff --git openjdk.orig/hotspot/src/share/vm/utilities/numberSeq.cpp openjdk/hotspot/src/share/vm/utilities/numberSeq.cpp
+--- openjdk.orig/hotspot/src/share/vm/utilities/numberSeq.cpp
++++ openjdk/hotspot/src/share/vm/utilities/numberSeq.cpp
+@@ -369,7 +369,7 @@
+ void BinaryMagnitudeSeq::add(size_t val) {
+ Atomic::add(val, &_sum);
+
+- int mag = log2_intptr(val) + 1;
++ int mag = log2_intptr((uintptr_t) val) + 1;
+
+ // Defensively saturate for product bits:
+ if (mag < 0) {
diff --git a/SPECS/java-1.8.0-openjdk.spec b/SPECS/java-1.8.0-openjdk.spec
index e21d588..566ed8f 100644
--- a/SPECS/java-1.8.0-openjdk.spec
+++ b/SPECS/java-1.8.0-openjdk.spec
@@ -206,7 +206,7 @@
# note, following three variables are sedded from update_sources if used correctly. Hardcode them rather there.
%global shenandoah_project aarch64-port
%global shenandoah_repo jdk8u-shenandoah
-%global shenandoah_revision aarch64-shenandoah-jdk8u201-b09
+%global shenandoah_revision aarch64-shenandoah-jdk8u212-b04
# Define old aarch64/jdk8u tree variables for compatibility
%global project %{shenandoah_project}
%global repo %{shenandoah_repo}
@@ -556,6 +556,8 @@ exit 0
%dir %{_jvmdir}/%{jredir -- %{?1}}
%dir %{_jvmdir}/%{jredir -- %{?1}}/bin
%dir %{_jvmdir}/%{jredir -- %{?1}}/lib
+%{_jvmdir}/%{jredir -- %{?1}}/bin/clhsdb
+%{_jvmdir}/%{jredir -- %{?1}}/bin/hsdb
%{_jvmdir}/%{jredir -- %{?1}}/bin/java
%{_jvmdir}/%{jredir -- %{?1}}/bin/jjs
%{_jvmdir}/%{jredir -- %{?1}}/bin/keytool
@@ -578,15 +580,15 @@ exit 0
%config(noreplace) %{etcjavadir -- %{?1}}/lib/security/blacklisted.certs
%config(noreplace) %{etcjavadir -- %{?1}}/lib/logging.properties
%config(noreplace) %{etcjavadir -- %{?1}}/lib/calendars.properties
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/security/policy/unlimited/US_export_policy.jar
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/security/policy/unlimited/local_policy.jar
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/security/policy/limited/US_export_policy.jar
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/security/policy/limited/local_policy.jar
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/security/java.policy
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/security/java.security
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/security/blacklisted.certs
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/logging.properties
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/calendars.properties
+%{_jvmdir}/%{jredir -- %{?1}}/lib/security/policy/unlimited/US_export_policy.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/security/policy/unlimited/local_policy.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/security/policy/limited/US_export_policy.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/security/policy/limited/local_policy.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/security/java.policy
+%{_jvmdir}/%{jredir -- %{?1}}/lib/security/java.security
+%{_jvmdir}/%{jredir -- %{?1}}/lib/security/blacklisted.certs
+%{_jvmdir}/%{jredir -- %{?1}}/lib/logging.properties
+%{_jvmdir}/%{jredir -- %{?1}}/lib/calendars.properties
%{_mandir}/man1/java-%{uniquesuffix -- %{?1}}.1*
%{_mandir}/man1/jjs-%{uniquesuffix -- %{?1}}.1*
%{_mandir}/man1/keytool-%{uniquesuffix -- %{?1}}.1*
@@ -598,7 +600,7 @@ exit 0
%{_mandir}/man1/tnameserv-%{uniquesuffix -- %{?1}}.1*
%{_mandir}/man1/unpack200-%{uniquesuffix -- %{?1}}.1*
%{_mandir}/man1/policytool-%{uniquesuffix -- %{?1}}.1*
-%config(noreplace) %{_jvmdir}/%{jredir -- %{?1}}/lib/security/nss.cfg
+%{_jvmdir}/%{jredir -- %{?1}}/lib/security/nss.cfg
%config(noreplace) %{etcjavadir -- %{?1}}/lib/security/nss.cfg
%ifarch %{jit_arches}
%ifnarch %{power64}
@@ -701,7 +703,9 @@ exit 0
%dir %{_jvmdir}/%{sdkdir -- %{?1}}/include
%dir %{_jvmdir}/%{sdkdir -- %{?1}}/lib
%{_jvmdir}/%{sdkdir -- %{?1}}/bin/appletviewer
+%{_jvmdir}/%{sdkdir -- %{?1}}/bin/clhsdb
%{_jvmdir}/%{sdkdir -- %{?1}}/bin/extcheck
+%{_jvmdir}/%{sdkdir -- %{?1}}/bin/hsdb
%{_jvmdir}/%{sdkdir -- %{?1}}/bin/idlj
%{_jvmdir}/%{sdkdir -- %{?1}}/bin/jar
%{_jvmdir}/%{sdkdir -- %{?1}}/bin/jarsigner
@@ -971,7 +975,7 @@ Provides: java-%{javaver}-%{origin}-accessibility = %{epoch}:%{version}-%{releas
Name: java-%{javaver}-%{origin}
Version: %{javaver}.%{updatever}.%{buildver}
-Release: 2%{?dist}
+Release: 1%{?dist}
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
# also included the epoch in their virtual provides. This created a
@@ -1079,7 +1083,8 @@ Patch523: pr2974-rh1337583-add_systemlineendings_option_to_keytool_and_use_line_
# PR3083, RH1346460: Regression in SSL debug output without an ECC provider
Patch528: pr3083-rh1346460-for_ssl_debug_return_null_instead_of_exception_when_theres_no_ecc_provider.patch
# RH1566890: CVE-2018-3639
-Patch529: rh1566890_speculative_store_bypass_so_added_more_per_task_speculation_control_CVE_2018_3639.patch
+Patch529: rh1566890-CVE_2018_3639-speculative_store_bypass.patch
+Patch531: rh1566890-CVE_2018_3639-speculative_store_bypass_toggle.patch
# PR3601: Fix additional -Wreturn-type issues introduced by 8061651
Patch530: pr3601-fix_additional_Wreturn_type_issues_introduced_by_8061651_for_prims_jvm_cpp.patch
# Support for building the SunEC provider with the system NSS installation
@@ -1122,10 +1127,8 @@ Patch103: pr3593-s390_use_z_format_specifier_for_size_t_arguments_as_size_t_not_
Patch105: jdk8199936-pr3533-enable_mstackrealign_on_x86_linux_as_well_as_x86_mac_os_x.patch
# AArch64: PR3519: Fix further functions with a missing return value (AArch64)
Patch106: pr3519-fix_further_functions_with_a_missing_return_value.patch
-# AArch64: JDK-8160748: [AArch64] Inconsistent types for ideal_reg
-Patch107: jdk8160748-aarch64_ideal_reg.patch
-# AArch64: JDK-8189170: [AArch64] Add option to disable stack overflow checking in primordial thread for use with JNI_CreateJavaJVM
-Patch108: jdk8189170-aarch64_primordial_thread.patch
+# S390 ambiguous log2_intptr calls
+Patch107: s390-8214206_fix.patch
#############################################
#
@@ -1141,18 +1144,12 @@ Patch108: jdk8189170-aarch64_primordial_thread.patch
Patch502: pr2462-resolve_disabled_warnings_for_libunpack_and_the_unpack200_binary.patch
# S8154313: Generated javadoc scattered all over the place
Patch400: jdk8154313-generated_javadoc_scattered_all_over_the_place.patch
-# 8197429, PR3546, RH153662{2,3}: 32 bit java app started via JNI crashes with larger stack sizes
-Patch561: jdk8197429-pr3546-rh1536622-increased_stack_guard_causes_segfaults_on_x86_32.patch
# 8171000, PR3542, RH1402819: Robot.createScreenCapture() crashes in wayland mode
Patch563: jdk8171000-pr3542-rh1402819-robot_createScreenCapture_crashes_in_wayland_mode.patch
# 8197546, PR3542, RH1402819: Fix for 8171000 breaks Solaris + Linux builds
Patch564: jdk8197546-pr3542-rh1402819-fix_for_8171000_breaks_solaris_linux_builds.patch
-# PR3559: Use ldrexd for atomic reads on ARMv7.
-Patch567: pr3559-use_ldrexd_for_atomic_reads_on_armv7_zero.patch
# PR3591: Fix for bug 3533 doesn't add -mstackrealign to JDK code
Patch571: jdk8199936-pr3591-enable_mstackrealign_on_x86_linux_as_well_as_x86_mac_os_x_jdk.patch
-# 8184309, PR3596: Build warnings from GCC 7.1 on Fedora 26
-Patch572: jdk8184309-pr3596-build_warnings_from_gcc_7_1_on_fedora_26.patch
# 8141570, PR3548: Fix Zero interpreter build for --disable-precompiled-headers
Patch573: jdk8141570-pr3548-fix_zero_interpreter_build_for_disable_precompiled_headers.patch
# 8143245, PR3548: Zero build requires disabled warnings
@@ -1171,8 +1168,6 @@ Patch202: jdk8035341-allow_using_system_installed_libpng.patch
Patch203: jdk8042159-allow_using_system_installed_lcms2.patch
# 8210761: libjsig is being compiled without optimization
Patch620: jdk8210761-rh1632174-libjsig_is_being_compiled_without_optimization.patch
-# 8210647: libsaproc is being compiled without optimization
-Patch621: jdk8210647-rh1632174-libsaproc_is_being_compiled_without_optimization.patch
# 8210416: [linux] Poor StrictMath performance due to non-optimized compilation
Patch622: jdk8210416-rh1632174-compile_fdlibm_with_o2_ffp_contract_off_on_gcc_clang_arches.patch
# 8210425: [x86] sharedRuntimeTrig/sharedRuntimeTrans compiled without optimization
@@ -1184,49 +1179,20 @@ Patch624: jdk8210425-rh1632174-02-compile_with_o2_and_ffp_contract_off_as_for_fd
# 8210425: [x86] sharedRuntimeTrig/sharedRuntimeTrans compiled without optimization
# Zero part of the fix for (arm/s390 arches)
Patch625: jdk8210425-rh1632174-03-compile_with_o2_and_ffp_contract_off_as_for_fdlibm_zero.patch
+# JDK-8223219: Backport of JDK-8199552 to OpenJDK 8 leads to duplicate -fstack-protector flags,
+# overriding --with-extra-cflags
+Patch626: jdk8223219-fstack-protector-root.patch
+Patch627: jdk8223219-fstack-protector-hotspot.patch
#############################################
#
-# Patches appearing in 8u202
+# Patches appearing in 8u222
#
# This section includes patches which are present
# in the listed OpenJDK 8u release and should be
# able to be removed once that release is out
# and used by this RPM.
#############################################
-# 8207057, PR3613: Enable debug information for assembly code files
-Patch206: jdk8207057-pr3613-no_debug_info_for_assembler_files_hotspot.patch
-Patch207: jdk8207057-pr3613-no_debug_info_for_assembler_files_root.patch
-# 8165852, PR3468: (fs) Mount point not found for a file which is present in overlayfs
-Patch210: jdk8165852-pr3468-mount_point_not_found_for_a_file_which_is_present_in_overlayfs.patch
-# S8073139, RH1191652; fix name of ppc64le architecture
-Patch601: jdk8073139-pr1758-rh1191652-ppc64_le_says_its_arch_is_ppc64_not_ppc64le_root.patch
-Patch602: jdk8073139-pr1758-rh1191652-ppc64_le_says_its_arch_is_ppc64_not_ppc64le_jdk.patch
-Patch603: jdk8073139-pr2236-rh1191652--use_ppc64le_as_the_arch_directory_on_that_platform_and_report_it_in_os_arch_aarch64_forest.patch
-# 8044235: src.zip should include all sources
-Patch7: jdk8044235-src_zip_should_include_all_sources.patch
-# JDK-8172850, RH1640127: Anti-dependency on membar causes crash in register allocator due to invalid instruction scheduling
-Patch583: jdk8172850-rh1640127-01-register_allocator_crash.patch
-# JDK-8209639, RH1640127: assert failure in coalesce.cpp: attempted to spill a non-spillable item
-Patch584: jdk8209639-rh1640127-02-coalesce_attempted_spill_non_spillable.patch
-# JDK-8131048, PR3574, RH1498936: ppc implement CRC32 intrinsic
-Patch586: jdk8131048-pr3574-rh1498936-ppc_crc32.patch
-# JDK-8164920, PR3574, RH1498936: ppc: enhancement of CRC32 intrinsic
-Patch587: jdk8164920-pr3574-rh1498936-ppc_crc32_enhancement.patch
-
-#############################################
-#
-# Patches appearing in 8u211
-#
-# This section includes patches which are present
-# in the listed OpenJDK 8u release and should be
-# able to be removed once that release is out
-# and used by this RPM.
-#############################################
-# JDK-8029661, PR3642, RH1477159: Support TLS v1.2 algorithm in SunPKCS11 provider
-Patch585: jdk8029661-pr3642-rh1477159-add_tlsv1_2_support_to_pkcs11_provider.patch
-# JDK-8145096, PR3693: Undefined behaviour in HotSpot
-Patch588: jdk8145096-pr3693-undefined_behaviour.patch
#############################################
#
@@ -1552,36 +1518,25 @@ sh %{SOURCE12}
%patch202
%patch203
-# Debugging fixes
-%patch206
-%patch207
-%patch210
-
+# System security policy fixes
%patch300
%patch301
%patch1
%patch3
%patch5
-%patch7
# s390 build fixes
%patch102
%patch103
+%patch107
# AArch64 fixes
%patch106
-%patch107
-%patch108
# x86 fixes
%patch105
-# ppc64le fixes
-%patch603
-%patch601
-%patch602
-
# Upstreamable fixes
%patch502
%patch504
@@ -1597,30 +1552,23 @@ sh %{SOURCE12}
%patch523
%patch528
%patch529
+%patch531
%patch530
-%patch561
%patch563
%patch564
-%patch567
%patch571
-%patch572
%patch573
%patch574
%patch575
%patch576
%patch577
%patch620
-%patch621
%patch622
%patch623
%patch624
%patch625
-%patch583
-%patch584
-%patch585
-%patch586
-%patch587
-%patch588
+%patch626
+%patch627
# RPM-only fixes
%patch525
@@ -1701,8 +1649,8 @@ export CFLAGS="$CFLAGS -mieee"
# We use ourcppflags because the OpenJDK build seems to
# pass EXTRA_CFLAGS to the HotSpot C++ compiler...
# Explicitly set the C++ standard as the default has changed on GCC >= 6
-EXTRA_CFLAGS="%ourcppflags -std=gnu++98 -Wno-error -fno-delete-null-pointer-checks -fno-lifetime-dse"
-EXTRA_CPP_FLAGS="%ourcppflags -std=gnu++98 -fno-delete-null-pointer-checks -fno-lifetime-dse"
+EXTRA_CFLAGS="%ourcppflags -Wno-error"
+EXTRA_CPP_FLAGS="%ourcppflags"
%ifarch %{power64} ppc
# fix rpmlint warnings
@@ -2224,6 +2172,72 @@ require "copy_jdk_configs.lua"
%endif
%changelog
+* Thu May 02 2019 Andrew Hughes - 1:1.8.0.212.b04-1
+- Remove additions to EXTRA_CFLAGS and EXTRA_CPP_FLAGS which are now made by upstream.
+- Resolves: rhbz#1693468
+
+* Thu May 02 2019 Andrew Hughes - 1:1.8.0.212.b04-1
+- Add JDK-8223219 to avoid -fstack-protector overriding -fstack-protector-strong
+- Resolves: rhbz#1693468
+
+* Thu Apr 11 2019 Andrew Hughes - 1:1.8.0.212.b04-0
+- Update to aarch64-shenandoah-jdk8u212-b04.
+- Resolves: rhbz#1693468
+
+* Thu Apr 11 2019 Andrew Hughes - 1:1.8.0.212.b03-0
+- Update to aarch64-shenandoah-jdk8u212-b03.
+- Resolves: rhbz#1693468
+
+* Thu Apr 11 2019 Andrew Hughes - 1:1.8.0.212.b02-0
+- Add new clhsdb and hsdb binaries.
+- Resolves: rhbz#1693468
+
+* Tue Apr 09 2019 Andrew Hughes - 1:1.8.0.212.b02-0
+- Update to aarch64-shenandoah-jdk8u212-b02.
+- Remove patches included upstream
+ - JDK-8197429/PR3546/RH153662{2,3}
+ - JDK-8184309/PR3596
+ - JDK-8210647/RH1632174
+ - JDK-8029661/PR3642/RH1477159
+ - JDK-8145096/PR3693
+- Re-generate patches
+ - JDK-8203030
+- Add casts to resolve s390 ambiguity in calls to log2_intptr
+- Resolves: rhbz#1693468
+
+* Sun Apr 07 2019 Andrew Hughes - 1:1.8.0.202.b08-0
+- Update to aarch64-shenandoah-jdk8u202-b08.
+- Remove patches included upstream
+ - JDK-8211387/PR3559
+ - JDK-8207057/PR3613
+ - JDK-8165852/PR3468
+ - JDK-8073139/PR1758/RH1191652
+ - JDK-8044235
+ - JDK-8172850/RH1640127
+ - JDK-8209639/RH1640127
+ - JDK-8131048/PR3574/RH1498936
+ - JDK-8164920/PR3574/RH1498936
+- Re-generate patches
+ - JDK-8210647/RH1632174
+- Resolves: rhbz#1693468
+
+* Thu Apr 04 2019 Andrew Hughes - 1:1.8.0.201.b13-0
+- Update to aarch64-shenandoah-jdk8u201-b13.
+- Drop JDK-8160748 & JDK-8189170 AArch64 patches now applied upstream.
+- Resolves: rhbz#1693468
+
+* Tue Apr 02 2019 Severin Gehwolf - 1:1.8.0.201.b09-4
+- Update patch for RH1566890.
+ - Renamed rh1566890_speculative_store_bypass_so_added_more_per_task_speculation_control_CVE_2018_3639 to
+ rh1566890-CVE_2018_3639-speculative_store_bypass.patch
+ - Added dependent patch,
+ rh1566890-CVE_2018_3639-speculative_store_bypass_toggle.patch
+- Resolves: rhbz#1693468
+
+* Mon Feb 11 2019 Jiri Vanek - 1:1.8.0.201.b09-3
+- removed config declaration from links to config files
+- Resolves: rhbz#1661577
+
* Thu Feb 07 2019 Andrew Hughes - 1:1.8.0.201.b09-2
- Fix invalid dates earlier in the ChangeLog.
- Resolves: rhbz#1661577