changeset 57354:6e16ceda3b96

Merge
author psadhukhan
date Wed, 11 Dec 2019 11:13:41 +0530
parents fa409cbc32ad c71ec1f09f21
children 2d77b8cd4230
files src/hotspot/share/jfr/leakprofiler/utilities/unifiedOop.hpp src/java.base/share/native/libjava/jdk_util.c test/jdk/ProblemList.txt
diffstat 173 files changed, 1969 insertions(+), 834 deletions(-) [+]
line wrap: on
line diff
--- a/doc/building.html	Tue Dec 10 10:44:09 2019 +0530
+++ b/doc/building.html	Wed Dec 11 11:13:41 2019 +0530
@@ -161,6 +161,7 @@
 <p>Even for 32-bit builds, it is recommended to use a 64-bit build machine, and instead create a 32-bit target using <code>--with-target-bits=32</code>.</p>
 <h3 id="building-on-sparc">Building on sparc</h3>
 <p>At a minimum, a machine with 4 cores is advisable, as well as 4 GB of RAM. (The more cores to use, the more memory you need.) At least 8 GB of free disk space is required.</p>
+<p>Note: The sparc port is deprecated.</p>
 <h3 id="building-on-aarch64">Building on aarch64</h3>
 <p>At a minimum, a machine with 8 cores is advisable, as well as 8 GB of RAM. (The more cores to use, the more memory you need.) At least 6 GB of free disk space is required.</p>
 <p>If you do not have access to sufficiently powerful hardware, it is also possible to use <a href="#cross-compiling">cross-compiling</a>.</p>
@@ -225,6 +226,7 @@
 <h3 id="solaris">Solaris</h3>
 <p>See <code>make/devkit/solaris11.1-package-list.txt</code> for a list of recommended packages to install when building on Solaris. The versions specified in this list is the versions used by the daily builds at Oracle, and is likely to work properly.</p>
 <p>Older versions of Solaris shipped a broken version of <code>objcopy</code>. At least version 2.21.1 is needed, which is provided by Solaris 11 Update 1. Objcopy is needed if you want to have external debug symbols. Please make sure you are using at least version 2.21.1 of objcopy, or that you disable external debug symbols.</p>
+<p>Note: The Solaris port is deprecated.</p>
 <h3 id="macos">macOS</h3>
 <p>Apple is using a quite aggressive scheme of pushing OS updates, and coupling these updates with required updates of Xcode. Unfortunately, this makes it difficult for a project such as the JDK to keep pace with a continuously updated machine running macOS. See the section on <a href="#apple-xcode">Apple Xcode</a> on some strategies to deal with this.</p>
 <p>It is recommended that you use at least Mac OS X 10.13 (High Sierra). At the time of writing, the JDK has been successfully compiled on macOS 10.12 (Sierra).</p>
--- a/doc/building.md	Tue Dec 10 10:44:09 2019 +0530
+++ b/doc/building.md	Wed Dec 11 11:13:41 2019 +0530
@@ -120,6 +120,8 @@
 more cores to use, the more memory you need.) At least 8 GB of free disk space
 is required.
 
+Note: The sparc port is deprecated.
+
 ### Building on aarch64
 
 At a minimum, a machine with 8 cores is advisable, as well as 8 GB of RAM.
@@ -258,6 +260,8 @@
 using at least version 2.21.1 of objcopy, or that you disable external debug
 symbols.
 
+Note: The Solaris port is deprecated.
+
 ### macOS
 
 Apple is using a quite aggressive scheme of pushing OS updates, and coupling
--- a/make/autoconf/platform.m4	Tue Dec 10 10:44:09 2019 +0530
+++ b/make/autoconf/platform.m4	Wed Dec 11 11:13:41 2019 +0530
@@ -558,6 +558,23 @@
   PLATFORM_SET_MODULE_TARGET_OS_VALUES
   PLATFORM_SET_RELEASE_FILE_OS_VALUES
   PLATFORM_SETUP_LEGACY_VARS
+  PLATFORM_CHECK_DEPRECATION
+])
+
+AC_DEFUN_ONCE([PLATFORM_CHECK_DEPRECATION],
+[
+  AC_ARG_ENABLE(deprecated-ports, [AS_HELP_STRING([--enable-deprecated-ports@<:@=yes/no@:>@],
+       [Suppress the error when configuring for a deprecated port @<:@no@:>@])])
+
+  AC_REQUIRE([PLATFORM_EXTRACT_TARGET_AND_BUILD])
+  if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_CPU_ARCH" = xsparc; then
+    if test "x$enable_deprecated_ports" = "xyes"; then
+      AC_MSG_WARN([The Solaris and SPARC ports are deprecated and may be removed in a future release.])
+    else
+      AC_MSG_ERROR(m4_normalize([The Solaris and SPARC ports are deprecated and may be removed in a
+        future release. Use --enable-deprecated-ports=yes to suppress this error.]))
+    fi
+  fi
 ])
 
 AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION],
--- a/make/hotspot/src/classes/build/tools/projectcreator/WinGammaPlatformVC10.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/make/hotspot/src/classes/build/tools/projectcreator/WinGammaPlatformVC10.java	Wed Dec 11 11:13:41 2019 +0530
@@ -403,7 +403,6 @@
                     "/export:jio_snprintf /export:jio_printf "+
                     "/export:jio_fprintf /export:jio_vfprintf "+
                     "/export:jio_vsnprintf "+
-                    "/export:JVM_GetVersionInfo "+
                     "/export:JVM_InitAgentProperties");
         }
         addAttr(rv, "AdditionalDependencies", "kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;Wsock32.lib;winmm.lib;psapi.lib;version.lib");
--- a/make/hotspot/symbols/symbols-shared	Tue Dec 10 10:44:09 2019 +0530
+++ b/make/hotspot/symbols/symbols-shared	Wed Dec 11 11:13:41 2019 +0530
@@ -31,5 +31,4 @@
 JNI_GetCreatedJavaVMs
 JNI_GetDefaultJavaVMInitArgs
 JVM_FindClassFromBootLoader
-JVM_GetVersionInfo
 JVM_InitAgentProperties
--- a/src/hotspot/share/c1/c1_InstructionPrinter.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/c1/c1_InstructionPrinter.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -329,7 +329,9 @@
 void InstructionPrinter::print_line(Instruction* instr) {
   // print instruction data on one line
   if (instr->is_pinned()) output()->put('.');
-  fill_to(bci_pos  ); output()->print("%d", instr->printable_bci());
+  if (instr->has_printable_bci()) {
+    fill_to(bci_pos  ); output()->print("%d", instr->printable_bci());
+  }
   fill_to(use_pos  ); output()->print("%d", instr->use_count());
   fill_to(temp_pos ); print_temp(instr);
   fill_to(instr_pos); print_instr(instr);
--- a/src/hotspot/share/classfile/classFileParser.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/classfile/classFileParser.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -3477,7 +3477,7 @@
 }
 
 bool ClassFileParser::supports_records() {
-  return _major_version == JAVA_14_VERSION &&
+  return _major_version == JVM_CLASSFILE_MAJOR_VERSION &&
     _minor_version == JAVA_PREVIEW_MINOR_VERSION &&
     Arguments::enable_preview();
 }
@@ -3722,14 +3722,19 @@
               record_attribute_length = attribute_length;
             } else if (log_is_enabled(Info, class, record)) {
               // Log why the Record attribute was ignored.  Note that if the
-              // class file version is 58.65535 and --enable-preview wasn't
-              // specified then a java.lang.UnsupportedClassVersionError
+              // class file version is JVM_CLASSFILE_MAJOR_VERSION.65535 and
+              // --enable-preview wasn't specified then a java.lang.UnsupportedClassVersionError
               // exception would have been thrown.
               ResourceMark rm(THREAD);
-              log_info(class, record)("Ignoring Record attribute in class %s because %s",
-                _class_name->as_C_string(),
-                supports_records() ? "super type is not java.lang.Record" :
-                                     "class file version is not 58.65535");
+              if (supports_records()) {
+                log_info(class, record)(
+                  "Ignoring Record attribute in class %s because super type is not java.lang.Record",
+                  _class_name->as_C_string());
+              } else {
+                log_info(class, record)(
+                  "Ignoring Record attribute in class %s because class file version is not %d.65535",
+                   _class_name->as_C_string(), JVM_CLASSFILE_MAJOR_VERSION);
+              }
             }
             cfs->skip_u1(attribute_length, CHECK);
           } else {
--- a/src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahPassiveHeuristics.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahPassiveHeuristics.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahPassiveHeuristics.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahPassiveHeuristics.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahStaticHeuristics.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahStaticHeuristics.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahStaticHeuristics.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahStaticHeuristics.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalAggressiveHeuristics.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalAggressiveHeuristics.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalHeuristics.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalHeuristics.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahAllocRequest.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahAllocRequest.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahAllocTracker.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahAllocTracker.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahArguments.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahArguments.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahAsserts.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahAsserts.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSetAssembler.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSetAssembler.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2016, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2016, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahCollectionSet.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahCollectorPolicy.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahCollectorPolicy.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahCollectorPolicy.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahCollectorPolicy.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahControlThread.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahControlThread.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahForwarding.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahForwarding.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahForwarding.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahForwarding.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2016, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionCounters.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionCounters.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2016, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionCounters.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionCounters.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2016, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionSet.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionSet.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeuristics.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeuristics.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeuristics.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeuristics.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahMarkCompact.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMarkCompact.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2014, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahMemoryPool.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMemoryPool.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahMemoryPool.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMemoryPool.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahMetrics.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMetrics.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahMonitoringSupport.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMonitoringSupport.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahMonitoringSupport.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMonitoringSupport.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahNumberSeq.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahNumberSeq.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahNumberSeq.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahNumberSeq.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahOopClosures.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahOopClosures.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahOopClosures.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahOopClosures.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2015, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahPacer.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahPacer.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahPacer.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahPacer.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahSharedVariables.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahSharedVariables.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahStrDedupQueue.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahStrDedupQueue.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahStrDedupQueue.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahStrDedupQueue.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahTimingTracker.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTimingTracker.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahTimingTracker.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTimingTracker.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahTracer.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTracer.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahVMOperations.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahVMOperations.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahVMOperations.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahVMOperations.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahWorkGroup.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahWorkGroup.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/shenandoah/shenandoahWorkerPolicy.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
  *
  * 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
--- a/src/hotspot/share/gc/z/zAddress.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zAddress.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -46,6 +46,7 @@
   static bool is_weak_good(uintptr_t value);
   static bool is_weak_good_or_null(uintptr_t value);
   static bool is_marked(uintptr_t value);
+  static bool is_marked_or_null(uintptr_t value);
   static bool is_finalizable(uintptr_t value);
   static bool is_finalizable_good(uintptr_t value);
   static bool is_remapped(uintptr_t value);
--- a/src/hotspot/share/gc/z/zAddress.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zAddress.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -70,6 +70,10 @@
   return value & ZAddressMetadataMarked;
 }
 
+inline bool ZAddress::is_marked_or_null(uintptr_t value) {
+  return is_marked(value) || is_null(value);
+}
+
 inline bool ZAddress::is_finalizable(uintptr_t value) {
   return value & ZAddressMetadataFinalizable;
 }
--- a/src/hotspot/share/gc/z/zBarrier.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zBarrier.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -84,6 +84,17 @@
     ZHeap::heap()->mark_object<follow, finalizable, publish>(good_addr);
   }
 
+  if (finalizable) {
+    // Make the oop finalizable marked/good, instead of normal marked/good.
+    // This is needed because an object might first becomes finalizable
+    // marked by the GC, and then loaded by a mutator thread. In this case,
+    // the mutator thread must be able to tell that the object needs to be
+    // strongly marked. The finalizable bit in the oop exists to make sure
+    // that a load of a finalizable marked oop will fall into the barrier
+    // slow path so that we can mark the object as strongly reachable.
+    return ZAddress::finalizable_good(good_addr);
+  }
+
   return good_addr;
 }
 
@@ -166,25 +177,17 @@
 // Mark barrier
 //
 uintptr_t ZBarrier::mark_barrier_on_oop_slow_path(uintptr_t addr) {
+  assert(during_mark(), "Invalid phase");
+
+  // Mark
   return mark<Follow, Strong, Overflow>(addr);
 }
 
 uintptr_t ZBarrier::mark_barrier_on_finalizable_oop_slow_path(uintptr_t addr) {
-  const uintptr_t good_addr = mark<Follow, Finalizable, Overflow>(addr);
-  if (ZAddress::is_good(addr)) {
-    // If the oop was already strongly marked/good, then we do
-    // not want to downgrade it to finalizable marked/good.
-    return good_addr;
-  }
+  assert(during_mark(), "Invalid phase");
 
-  // Make the oop finalizable marked/good, instead of normal marked/good.
-  // This is needed because an object might first becomes finalizable
-  // marked by the GC, and then loaded by a mutator thread. In this case,
-  // the mutator thread must be able to tell that the object needs to be
-  // strongly marked. The finalizable bit in the oop exists to make sure
-  // that a load of a finalizable marked oop will fall into the barrier
-  // slow path so that we can mark the object as strongly reachable.
-  return ZAddress::finalizable_good(good_addr);
+  // Mark
+  return mark<Follow, Finalizable, Overflow>(addr);
 }
 
 uintptr_t ZBarrier::mark_barrier_on_root_oop_slow_path(uintptr_t addr) {
--- a/src/hotspot/share/gc/z/zBarrier.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zBarrier.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -41,15 +41,15 @@
   static const bool Publish     = true;
   static const bool Overflow    = false;
 
-  static void self_heal(volatile oop* p, uintptr_t addr, uintptr_t heal_addr);
+  template <ZBarrierFastPath fast_path> static void self_heal(volatile oop* p, uintptr_t addr, uintptr_t heal_addr);
 
   template <ZBarrierFastPath fast_path, ZBarrierSlowPath slow_path> static oop barrier(volatile oop* p, oop o);
   template <ZBarrierFastPath fast_path, ZBarrierSlowPath slow_path> static oop weak_barrier(volatile oop* p, oop o);
   template <ZBarrierFastPath fast_path, ZBarrierSlowPath slow_path> static void root_barrier(oop* p, oop o);
 
-  static bool is_null_fast_path(uintptr_t addr);
   static bool is_good_or_null_fast_path(uintptr_t addr);
   static bool is_weak_good_or_null_fast_path(uintptr_t addr);
+  static bool is_marked_or_null_fast_path(uintptr_t addr);
 
   static bool during_mark();
   static bool during_relocate();
--- a/src/hotspot/share/gc/z/zBarrier.inline.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zBarrier.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -32,6 +32,77 @@
 #include "oops/oop.hpp"
 #include "runtime/atomic.hpp"
 
+// A self heal must always "upgrade" the address metadata bits in
+// accordance with the metadata bits state machine, which has the
+// valid state transitions as described below (where N is the GC
+// cycle).
+//
+// Note the subtleness of overlapping GC cycles. Specifically that
+// oops are colored Remapped(N) starting at relocation N and ending
+// at marking N + 1.
+//
+//              +--- Mark Start
+//              | +--- Mark End
+//              | | +--- Relocate Start
+//              | | | +--- Relocate End
+//              | | | |
+// Marked       |---N---|--N+1--|--N+2--|----
+// Finalizable  |---N---|--N+1--|--N+2--|----
+// Remapped     ----|---N---|--N+1--|--N+2--|
+//
+// VALID STATE TRANSITIONS
+//
+//   Marked(N)           -> Remapped(N)
+//                       -> Marked(N + 1)
+//                       -> Finalizable(N + 1)
+//
+//   Finalizable(N)      -> Marked(N)
+//                       -> Remapped(N)
+//                       -> Marked(N + 1)
+//                       -> Finalizable(N + 1)
+//
+//   Remapped(N)         -> Marked(N + 1)
+//                       -> Finalizable(N + 1)
+//
+// PHASE VIEW
+//
+// ZPhaseMark
+//   Load & Mark
+//     Marked(N)         <- Marked(N - 1)
+//                       <- Finalizable(N - 1)
+//                       <- Remapped(N - 1)
+//                       <- Finalizable(N)
+//
+//   Mark(Finalizable)
+//     Finalizable(N)    <- Marked(N - 1)
+//                       <- Finalizable(N - 1)
+//                       <- Remapped(N - 1)
+//
+//   Load(AS_NO_KEEPALIVE)
+//     Remapped(N - 1)   <- Marked(N - 1)
+//                       <- Finalizable(N - 1)
+//
+// ZPhaseMarkCompleted (Resurrection blocked)
+//   Load & Load(ON_WEAK/PHANTOM_OOP_REF | AS_NO_KEEPALIVE) & KeepAlive
+//     Marked(N)         <- Marked(N - 1)
+//                       <- Finalizable(N - 1)
+//                       <- Remapped(N - 1)
+//                       <- Finalizable(N)
+//
+//   Load(ON_STRONG_OOP_REF | AS_NO_KEEPALIVE)
+//     Remapped(N - 1)   <- Marked(N - 1)
+//                       <- Finalizable(N - 1)
+//
+// ZPhaseMarkCompleted (Resurrection unblocked)
+//   Load
+//     Marked(N)         <- Finalizable(N)
+//
+// ZPhaseRelocate
+//   Load & Load(AS_NO_KEEPALIVE)
+//     Remapped(N)       <- Marked(N)
+//                       <- Finalizable(N)
+
+template <ZBarrierFastPath fast_path>
 inline void ZBarrier::self_heal(volatile oop* p, uintptr_t addr, uintptr_t heal_addr) {
   if (heal_addr == 0) {
     // Never heal with null since it interacts badly with reference processing.
@@ -41,12 +112,10 @@
     return;
   }
 
+  assert(!fast_path(addr), "Invalid self heal");
+  assert(fast_path(heal_addr), "Invalid self heal");
+
   for (;;) {
-    if (addr == heal_addr) {
-      // Already healed
-      return;
-    }
-
     // Heal
     const uintptr_t prev_addr = Atomic::cmpxchg((volatile uintptr_t*)p, addr, heal_addr);
     if (prev_addr == addr) {
@@ -54,15 +123,14 @@
       return;
     }
 
-    if (ZAddress::is_good_or_null(prev_addr)) {
-      // No need to heal
+    if (fast_path(prev_addr)) {
+      // Must not self heal
       return;
     }
 
-    // The oop location was healed by another barrier, but it is still not
-    // good or null. Re-apply healing to make sure the oop is not left with
-    // weaker (remapped or finalizable) metadata bits than what this barrier
-    // tried to apply.
+    // The oop location was healed by another barrier, but still needs upgrading.
+    // Re-apply healing to make sure the oop is not left with weaker (remapped or
+    // finalizable) metadata bits than what this barrier tried to apply.
     assert(ZAddress::offset(prev_addr) == ZAddress::offset(heal_addr), "Invalid offset");
     addr = prev_addr;
   }
@@ -70,7 +138,7 @@
 
 template <ZBarrierFastPath fast_path, ZBarrierSlowPath slow_path>
 inline oop ZBarrier::barrier(volatile oop* p, oop o) {
-  uintptr_t addr = ZOop::to_address(o);
+  const uintptr_t addr = ZOop::to_address(o);
 
   // Fast path
   if (fast_path(addr)) {
@@ -81,7 +149,7 @@
   const uintptr_t good_addr = slow_path(addr);
 
   if (p != NULL) {
-    self_heal(p, addr, good_addr);
+    self_heal<fast_path>(p, addr, good_addr);
   }
 
   return ZOop::from_address(good_addr);
@@ -104,7 +172,7 @@
   if (p != NULL) {
     // The slow path returns a good/marked address or null, but we never mark
     // oops in a weak load barrier so we always heal with the remapped address.
-    self_heal(p, addr, ZAddress::remapped_or_null(good_addr));
+    self_heal<fast_path>(p, addr, ZAddress::remapped_or_null(good_addr));
   }
 
   return ZOop::from_address(good_addr);
@@ -132,10 +200,6 @@
   *p = ZOop::from_address(good_addr);
 }
 
-inline bool ZBarrier::is_null_fast_path(uintptr_t addr) {
-  return ZAddress::is_null(addr);
-}
-
 inline bool ZBarrier::is_good_or_null_fast_path(uintptr_t addr) {
   return ZAddress::is_good_or_null(addr);
 }
@@ -144,6 +208,10 @@
   return ZAddress::is_weak_good_or_null(addr);
 }
 
+inline bool ZBarrier::is_marked_or_null_fast_path(uintptr_t addr) {
+  return ZAddress::is_marked_or_null(addr);
+}
+
 inline bool ZBarrier::during_mark() {
   return ZGlobalPhase == ZPhaseMark;
 }
@@ -300,8 +368,11 @@
 }
 
 inline void ZBarrier::keep_alive_barrier_on_oop(oop o) {
+  const uintptr_t addr = ZOop::to_address(o);
+  assert(ZAddress::is_good(addr), "Invalid address");
+
   if (during_mark()) {
-    barrier<is_null_fast_path, mark_barrier_on_oop_slow_path>(NULL, o);
+    mark_barrier_on_oop_slow_path(addr);
   }
 }
 
@@ -309,14 +380,19 @@
 // Mark barrier
 //
 inline void ZBarrier::mark_barrier_on_oop_field(volatile oop* p, bool finalizable) {
-  // The fast path only checks for null since the GC worker
-  // threads doing marking wants to mark through good oops.
   const oop o = *p;
 
   if (finalizable) {
-    barrier<is_null_fast_path, mark_barrier_on_finalizable_oop_slow_path>(p, o);
+    barrier<is_marked_or_null_fast_path, mark_barrier_on_finalizable_oop_slow_path>(p, o);
   } else {
-    barrier<is_null_fast_path, mark_barrier_on_oop_slow_path>(p, o);
+    const uintptr_t addr = ZOop::to_address(o);
+    if (ZAddress::is_good(addr)) {
+      // Mark through good oop
+      mark_barrier_on_oop_slow_path(addr);
+    } else {
+      // Mark through bad oop
+      barrier<is_good_or_null_fast_path, mark_barrier_on_oop_slow_path>(p, o);
+    }
   }
 }
 
--- a/src/hotspot/share/gc/z/zMark.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zMark.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -140,6 +140,10 @@
     ZThreadLocalAllocBuffer::retire(thread);
   }
 
+  virtual bool should_disarm_nmethods() const {
+    return true;
+  }
+
   virtual void do_oop(oop* p) {
     ZBarrier::mark_barrier_on_root_oop_field(p);
   }
--- a/src/hotspot/share/gc/z/zNMethod.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zNMethod.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -163,7 +163,7 @@
   ZNMethodTable::register_nmethod(nm);
 
   // Disarm nmethod entry barrier
-  disarm_nmethod(nm);
+  disarm(nm);
 }
 
 void ZNMethod::unregister_nmethod(nmethod* nm) {
@@ -187,7 +187,16 @@
   delete gc_data(nm);
 }
 
-void ZNMethod::disarm_nmethod(nmethod* nm) {
+bool ZNMethod::is_armed(nmethod* nm) {
+  BarrierSetNMethod* const bs = BarrierSet::barrier_set()->barrier_set_nmethod();
+  if (bs != NULL) {
+    return bs->is_armed(nm);
+  }
+
+  return false;
+}
+
+void ZNMethod::disarm(nmethod* nm) {
   BarrierSetNMethod* const bs = BarrierSet::barrier_set()->barrier_set_nmethod();
   if (bs != NULL) {
     bs->disarm(nm);
@@ -301,10 +310,12 @@
 
     ZLocker<ZReentrantLock> locker(ZNMethod::lock_for_nmethod(nm));
 
-    // Heal oops and disarm
-    ZNMethodOopClosure cl;
-    ZNMethod::nmethod_oops_do(nm, &cl);
-    ZNMethod::disarm_nmethod(nm);
+    if (ZNMethod::is_armed(nm)) {
+      // Heal oops and disarm
+      ZNMethodOopClosure cl;
+      ZNMethod::nmethod_oops_do(nm, &cl);
+      ZNMethod::disarm(nm);
+    }
 
     // Clear compiled ICs and exception caches
     if (!nm->unload_nmethod_caches(_unloading_occurred)) {
--- a/src/hotspot/share/gc/z/zNMethod.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zNMethod.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -43,7 +43,8 @@
   static void unregister_nmethod(nmethod* nm);
   static void flush_nmethod(nmethod* nm);
 
-  static void disarm_nmethod(nmethod* nm);
+  static bool is_armed(nmethod* nm);
+  static void disarm(nmethod* nm);
 
   static void nmethod_oops_do(nmethod* nm, OopClosure* cl);
 
--- a/src/hotspot/share/gc/z/zRelocate.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zRelocate.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -56,6 +56,10 @@
     ZThreadLocalAllocBuffer::remap(thread);
   }
 
+  virtual bool should_disarm_nmethods() const {
+    return true;
+  }
+
   virtual void do_oop(oop* p) {
     ZBarrier::relocate_barrier_on_root_oop_field(p);
   }
--- a/src/hotspot/share/gc/z/zRootsIterator.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zRootsIterator.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -139,27 +139,31 @@
   }
 }
 
-class ZRootsIteratorCodeBlobClosure : public CodeBlobToOopClosure {
+class ZRootsIteratorCodeBlobClosure : public CodeBlobClosure {
 private:
-  BarrierSetNMethod* _bs;
+  ZRootsIteratorClosure* const _cl;
+  const bool                   _should_disarm_nmethods;
 
 public:
-  ZRootsIteratorCodeBlobClosure(OopClosure* cl) :
-    CodeBlobToOopClosure(cl, true /* fix_relocations */),
-    _bs(BarrierSet::barrier_set()->barrier_set_nmethod()) {}
+  ZRootsIteratorCodeBlobClosure(ZRootsIteratorClosure* cl) :
+    _cl(cl),
+    _should_disarm_nmethods(cl->should_disarm_nmethods()) {}
 
   virtual void do_code_blob(CodeBlob* cb) {
     nmethod* const nm = cb->as_nmethod_or_null();
     if (nm != NULL && nm->oops_do_try_claim()) {
-      CodeBlobToOopClosure::do_code_blob(cb);
-      _bs->disarm(nm);
+      ZNMethod::nmethod_oops_do(nm, _cl);
+      assert(ZNMethod::is_armed(nm) == _should_disarm_nmethods, "Invalid state");
+      if (_should_disarm_nmethods) {
+        ZNMethod::disarm(nm);
+      }
     }
   }
 };
 
 class ZRootsIteratorThreadClosure : public ThreadClosure {
 private:
-  ZRootsIteratorClosure* _cl;
+  ZRootsIteratorClosure* const _cl;
 
 public:
   ZRootsIteratorThreadClosure(ZRootsIteratorClosure* cl) :
--- a/src/hotspot/share/gc/z/zRootsIterator.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/gc/z/zRootsIterator.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -31,10 +31,7 @@
 #include "runtime/thread.hpp"
 #include "utilities/globalDefinitions.hpp"
 
-class ZRootsIteratorClosure : public OopClosure {
-public:
-  virtual void do_thread(Thread* thread) {}
-};
+class ZRootsIteratorClosure;
 
 typedef OopStorage::ParState<true /* concurrent */, false /* is_const */> ZOopStorageIterator;
 
@@ -82,9 +79,18 @@
   void weak_oops_do(BoolObjectClosure* is_alive, ZRootsIteratorClosure* cl);
 };
 
+class ZRootsIteratorClosure : public OopClosure {
+public:
+  virtual void do_thread(Thread* thread) {}
+
+  virtual bool should_disarm_nmethods() const {
+    return false;
+  }
+};
+
 class ZRootsIterator {
 private:
-  bool _visit_jvmti_weak_export;
+  const bool _visit_jvmti_weak_export;
 
   void do_universe(ZRootsIteratorClosure* cl);
   void do_object_synchronizer(ZRootsIteratorClosure* cl);
--- a/src/hotspot/share/include/jvm.h	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/include/jvm.h	Wed Dec 11 11:13:41 2019 +0530
@@ -1186,76 +1186,6 @@
 JNIEXPORT jobjectArray JNICALL
 JVM_GetEnclosingMethodInfo(JNIEnv* env, jclass ofClass);
 
-/* =========================================================================
- * The following defines a private JVM interface that the JDK can query
- * for the JVM version and capabilities.  sun.misc.Version defines
- * the methods for getting the VM version and its capabilities.
- *
- * When a new bit is added, the following should be updated to provide
- * access to the new capability:
- *    HS:   JVM_GetVersionInfo and Abstract_VM_Version class
- *    SDK:  Version class
- *
- * Similary, a private JDK interface JDK_GetVersionInfo0 is defined for
- * JVM to query for the JDK version and capabilities.
- *
- * When a new bit is added, the following should be updated to provide
- * access to the new capability:
- *    HS:   JDK_Version class
- *    SDK:  JDK_GetVersionInfo0
- *
- * ==========================================================================
- */
-typedef struct {
-    unsigned int jvm_version;  /* Encoded $VNUM as specified by JEP-223 */
-    unsigned int patch_version : 8; /* JEP-223 patch version */
-    unsigned int reserved3 : 8;
-    unsigned int reserved1 : 16;
-    unsigned int reserved2;
-
-    /* The following bits represents JVM supports that JDK has dependency on.
-     * JDK can use these bits to determine which JVM version
-     * and support it has to maintain runtime compatibility.
-     *
-     * When a new bit is added in a minor or update release, make sure
-     * the new bit is also added in the main/baseline.
-     */
-    unsigned int is_attach_supported : 1;
-    unsigned int : 31;
-    unsigned int : 32;
-    unsigned int : 32;
-} jvm_version_info;
-
-#define JVM_VERSION_MAJOR(version) ((version & 0xFF000000) >> 24)
-#define JVM_VERSION_MINOR(version) ((version & 0x00FF0000) >> 16)
-#define JVM_VERSION_SECURITY(version) ((version & 0x0000FF00) >> 8)
-#define JVM_VERSION_BUILD(version) ((version & 0x000000FF))
-
-JNIEXPORT void JNICALL
-JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size);
-
-typedef struct {
-    unsigned int jdk_version; /* Encoded $VNUM as specified by JEP-223 */
-    unsigned int patch_version : 8; /* JEP-223 patch version */
-    unsigned int reserved3 : 8;
-    unsigned int reserved1 : 16;
-    unsigned int reserved2;
-    unsigned int : 32;
-    unsigned int : 32;
-    unsigned int : 32;
-} jdk_version_info;
-
-#define JDK_VERSION_MAJOR(version) ((version & 0xFF000000) >> 24)
-#define JDK_VERSION_MINOR(version) ((version & 0x00FF0000) >> 16)
-#define JDK_VERSION_SECURITY(version) ((version & 0x0000FF00) >> 8)
-#define JDK_VERSION_BUILD(version) ((version & 0x000000FF))
-
-/*
- * This is the function JDK_GetVersionInfo0 defined in libjava.so
- * that is dynamically looked up by JVM.
- */
-typedef void (*jdk_version_info_fn_t)(jdk_version_info* info, size_t info_size);
-
 /*
  * This structure is used by the launcher to get the default thread
  * stack size from the VM using JNI_GetDefaultJavaVMInitArgs() with a
--- a/src/hotspot/share/jfr/jfr.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/jfr.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -103,7 +103,7 @@
 
 void Jfr::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) {
   if (LeakProfiler::is_running()) {
-    LeakProfiler::oops_do(is_alive, f);
+    LeakProfiler::weak_oops_do(is_alive, f);
   }
 }
 
--- a/src/hotspot/share/jfr/leakprofiler/chains/bfsClosure.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/bfsClosure.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -29,7 +29,7 @@
 #include "jfr/leakprofiler/chains/edgeStore.hpp"
 #include "jfr/leakprofiler/chains/edgeQueue.hpp"
 #include "jfr/leakprofiler/utilities/granularTimer.hpp"
-#include "jfr/leakprofiler/utilities/unifiedOop.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 #include "logging/log.hpp"
 #include "memory/iterator.inline.hpp"
 #include "memory/resourceArea.hpp"
@@ -111,12 +111,12 @@
   }
 }
 
-void BFSClosure::process(const oop* reference, const oop pointee) {
+void BFSClosure::process(UnifiedOopRef reference, const oop pointee) {
   closure_impl(reference, pointee);
 }
-void BFSClosure::closure_impl(const oop* reference, const oop pointee) {
-  assert(reference != NULL, "invariant");
-  assert(UnifiedOop::dereference(reference) == pointee, "invariant");
+void BFSClosure::closure_impl(UnifiedOopRef reference, const oop pointee) {
+  assert(!reference.is_null(), "invariant");
+  assert(reference.dereference() == pointee, "invariant");
 
   if (GranularTimer::is_finished()) {
      return;
@@ -146,7 +146,7 @@
   }
 }
 
-void BFSClosure::add_chain(const oop* reference, const oop pointee) {
+void BFSClosure::add_chain(UnifiedOopRef reference, const oop pointee) {
   assert(pointee != NULL, "invariant");
   assert(NULL == pointee->mark().to_pointer(), "invariant");
   Edge leak_edge(_current_parent, reference);
@@ -213,23 +213,23 @@
 void BFSClosure::do_oop(oop* ref) {
   assert(ref != NULL, "invariant");
   assert(is_aligned(ref, HeapWordSize), "invariant");
-  const oop pointee = *ref;
+  const oop pointee = HeapAccess<AS_NO_KEEPALIVE>::oop_load(ref);
   if (pointee != NULL) {
-    closure_impl(ref, pointee);
+    closure_impl(UnifiedOopRef::encode_in_heap(ref), pointee);
   }
 }
 
 void BFSClosure::do_oop(narrowOop* ref) {
   assert(ref != NULL, "invariant");
   assert(is_aligned(ref, sizeof(narrowOop)), "invariant");
-  const oop pointee = RawAccess<>::oop_load(ref);
+  const oop pointee = HeapAccess<AS_NO_KEEPALIVE>::oop_load(ref);
   if (pointee != NULL) {
-    closure_impl(UnifiedOop::encode(ref), pointee);
+    closure_impl(UnifiedOopRef::encode_in_heap(ref), pointee);
   }
 }
 
-void BFSClosure::do_root(const oop* ref) {
-  assert(ref != NULL, "invariant");
+void BFSClosure::do_root(UnifiedOopRef ref) {
+  assert(!ref.is_null(), "invariant");
   if (!_edge_queue->is_full()) {
     _edge_queue->add(NULL, ref);
   }
--- a/src/hotspot/share/jfr/leakprofiler/chains/bfsClosure.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/bfsClosure.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -25,6 +25,7 @@
 #ifndef SHARE_JFR_LEAKPROFILER_CHAINS_BFSCLOSURE_HPP
 #define SHARE_JFR_LEAKPROFILER_CHAINS_BFSCLOSURE_HPP
 
+#include "jfr/leakprofiler/utilities/unifiedOopRef.hpp"
 #include "memory/iterator.hpp"
 
 class BitSet;
@@ -51,20 +52,23 @@
   bool is_complete() const;
   void step_frontier() const;
 
-  void closure_impl(const oop* reference, const oop pointee);
-  void add_chain(const oop* reference, const oop pointee);
+  void closure_impl(UnifiedOopRef reference, const oop pointee);
+  void add_chain(UnifiedOopRef reference, const oop pointee);
   void dfs_fallback();
 
   void iterate(const Edge* parent);
-  void process(const oop* reference, const oop pointee);
+  void process(UnifiedOopRef reference, const oop pointee);
 
   void process_root_set();
   void process_queue();
 
  public:
+  virtual ReferenceIterationMode reference_iteration_mode() { return DO_FIELDS_EXCEPT_REFERENT; }
+  virtual bool should_verify_oops() { return false; }
+
   BFSClosure(EdgeQueue* edge_queue, EdgeStore* edge_store, BitSet* mark_bits);
   void process();
-  void do_root(const oop* ref);
+  void do_root(UnifiedOopRef ref);
 
   virtual void do_oop(oop* ref);
   virtual void do_oop(narrowOop* ref);
--- a/src/hotspot/share/jfr/leakprofiler/chains/dfsClosure.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/dfsClosure.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -30,7 +30,7 @@
 #include "jfr/leakprofiler/chains/rootSetClosure.hpp"
 #include "jfr/leakprofiler/utilities/granularTimer.hpp"
 #include "jfr/leakprofiler/utilities/rootType.hpp"
-#include "jfr/leakprofiler/utilities/unifiedOop.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 #include "memory/iterator.inline.hpp"
 #include "memory/resourceArea.hpp"
 #include "oops/access.inline.hpp"
@@ -48,13 +48,13 @@
 
 DFSClosure::DFSClosure() :
   _parent(NULL),
-  _reference(NULL),
+  _reference(UnifiedOopRef::encode_null()),
   _depth(0) {
 }
 
 DFSClosure::DFSClosure(DFSClosure* parent, size_t depth) :
   _parent(parent),
-  _reference(NULL),
+  _reference(UnifiedOopRef::encode_null()),
   _depth(depth) {
 }
 
@@ -99,9 +99,9 @@
   rs.process();
 }
 
-void DFSClosure::closure_impl(const oop* reference, const oop pointee) {
+void DFSClosure::closure_impl(UnifiedOopRef reference, const oop pointee) {
   assert(pointee != NULL, "invariant");
-  assert(reference != NULL, "invariant");
+  assert(!reference.is_null(), "invariant");
 
   if (GranularTimer::is_finished()) {
      return;
@@ -161,24 +161,24 @@
 void DFSClosure::do_oop(oop* ref) {
   assert(ref != NULL, "invariant");
   assert(is_aligned(ref, HeapWordSize), "invariant");
-  const oop pointee = *ref;
+  const oop pointee = HeapAccess<AS_NO_KEEPALIVE>::oop_load(ref);
   if (pointee != NULL) {
-    closure_impl(ref, pointee);
+    closure_impl(UnifiedOopRef::encode_in_heap(ref), pointee);
   }
 }
 
 void DFSClosure::do_oop(narrowOop* ref) {
   assert(ref != NULL, "invariant");
   assert(is_aligned(ref, sizeof(narrowOop)), "invariant");
-  const oop pointee = RawAccess<>::oop_load(ref);
+  const oop pointee = HeapAccess<AS_NO_KEEPALIVE>::oop_load(ref);
   if (pointee != NULL) {
-    closure_impl(UnifiedOop::encode(ref), pointee);
+    closure_impl(UnifiedOopRef::encode_in_heap(ref), pointee);
   }
 }
 
-void DFSClosure::do_root(const oop* ref) {
-  assert(ref != NULL, "invariant");
-  const oop pointee = UnifiedOop::dereference(ref);
+void DFSClosure::do_root(UnifiedOopRef ref) {
+  assert(!ref.is_null(), "invariant");
+  const oop pointee = ref.dereference();
   assert(pointee != NULL, "invariant");
   closure_impl(ref, pointee);
 }
--- a/src/hotspot/share/jfr/leakprofiler/chains/dfsClosure.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/dfsClosure.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -25,6 +25,7 @@
 #ifndef SHARE_JFR_LEAKPROFILER_CHAINS_DFSCLOSURE_HPP
 #define SHARE_JFR_LEAKPROFILER_CHAINS_DFSCLOSURE_HPP
 
+#include "jfr/leakprofiler/utilities/unifiedOopRef.hpp"
 #include "memory/iterator.hpp"
 
 class BitSet;
@@ -41,22 +42,25 @@
   static size_t _max_depth;
   static bool _ignore_root_set;
   DFSClosure* _parent;
-  const oop* _reference;
+  UnifiedOopRef _reference;
   size_t _depth;
 
   void add_chain();
-  void closure_impl(const oop* reference, const oop pointee);
+  void closure_impl(UnifiedOopRef reference, const oop pointee);
 
   DFSClosure* parent() const { return _parent; }
-  const oop* reference() const { return _reference; }
+  UnifiedOopRef reference() const { return _reference; }
 
   DFSClosure(DFSClosure* parent, size_t depth);
   DFSClosure();
 
  public:
+  virtual ReferenceIterationMode reference_iteration_mode() { return DO_FIELDS_EXCEPT_REFERENT; }
+  virtual bool should_verify_oops() { return false; }
+
   static void find_leaks_from_edge(EdgeStore* edge_store, BitSet* mark_bits, const Edge* start_edge);
   static void find_leaks_from_root_set(EdgeStore* edge_store, BitSet* mark_bits);
-  void do_root(const oop* ref);
+  void do_root(UnifiedOopRef ref);
 
   virtual void do_oop(oop* ref);
   virtual void do_oop(narrowOop* ref);
--- a/src/hotspot/share/jfr/leakprofiler/chains/edge.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/edge.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -24,19 +24,17 @@
 #include "precompiled.hpp"
 #include "classfile/javaClasses.inline.hpp"
 #include "jfr/leakprofiler/chains/edge.hpp"
-#include "jfr/leakprofiler/utilities/unifiedOop.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 
-Edge::Edge() : _parent(NULL), _reference(NULL) {}
-
-Edge::Edge(const Edge* parent, const oop* reference) : _parent(parent),
-                                                       _reference(reference) {}
+Edge::Edge(const Edge* parent, UnifiedOopRef reference) : _parent(parent),
+                                                          _reference(reference) {}
 
 const oop Edge::pointee() const {
-  return UnifiedOop::dereference(_reference);
+  return _reference.dereference();
 }
 
 const oop Edge::reference_owner() const {
-  return is_root() ? (oop)NULL : UnifiedOop::dereference(_parent->reference());
+  return is_root() ? (oop)NULL : _parent->reference().dereference();
 }
 
 static const Klass* resolve_klass(const oop obj) {
--- a/src/hotspot/share/jfr/leakprofiler/chains/edge.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/edge.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -25,18 +25,18 @@
 #ifndef SHARE_JFR_LEAKPROFILER_CHAINS_EDGE_HPP
 #define SHARE_JFR_LEAKPROFILER_CHAINS_EDGE_HPP
 
+#include "jfr/leakprofiler/utilities/unifiedOopRef.hpp"
 #include "memory/allocation.hpp"
 #include "oops/oopsHierarchy.hpp"
 
 class Edge {
  protected:
   const Edge* _parent;
-  const oop* _reference;
+  UnifiedOopRef _reference;
  public:
-  Edge();
-  Edge(const Edge* parent, const oop* reference);
+  Edge(const Edge* parent, UnifiedOopRef reference);
 
-  const oop* reference() const {
+  UnifiedOopRef reference() const {
     return _reference;
   }
   const Edge* parent() const {
--- a/src/hotspot/share/jfr/leakprofiler/chains/edgeQueue.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/edgeQueue.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -24,6 +24,7 @@
 
 #include "precompiled.hpp"
 #include "jfr/leakprofiler/chains/edgeQueue.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 #include "jfr/recorder/storage/jfrVirtualMemory.hpp"
 
 EdgeQueue::EdgeQueue(size_t reservation_size_bytes, size_t commit_block_size_bytes) :
@@ -45,8 +46,8 @@
   delete _vmm;
 }
 
-void EdgeQueue::add(const Edge* parent, const oop* ref) {
-  assert(ref != NULL, "Null objects not allowed in EdgeQueue");
+void EdgeQueue::add(const Edge* parent, UnifiedOopRef ref) {
+  assert(!ref.is_null(), "Null objects not allowed in EdgeQueue");
   assert(!is_full(), "EdgeQueue is full. Check is_full before adding another Edge");
   assert(!_vmm->is_full(), "invariant");
   void* const allocation = _vmm->new_datum();
--- a/src/hotspot/share/jfr/leakprofiler/chains/edgeQueue.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/edgeQueue.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -27,6 +27,7 @@
 
 #include "memory/allocation.hpp"
 #include "jfr/leakprofiler/chains/edge.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.hpp"
 
 class JfrVirtualMemory;
 
@@ -43,7 +44,7 @@
 
   bool initialize();
 
-  void add(const Edge* parent, const oop* ref);
+  void add(const Edge* parent, UnifiedOopRef ref);
   const Edge* remove() const;
   const Edge* element_at(size_t index) const;
 
--- a/src/hotspot/share/jfr/leakprofiler/chains/edgeStore.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/edgeStore.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -25,21 +25,15 @@
 #include "precompiled.hpp"
 #include "jfr/leakprofiler/chains/edgeStore.hpp"
 #include "jfr/leakprofiler/chains/edgeUtils.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 #include "oops/oop.inline.hpp"
 
-StoredEdge::StoredEdge() : Edge() {}
-StoredEdge::StoredEdge(const Edge* parent, const oop* reference) : Edge(parent, reference), _gc_root_id(0), _skip_length(0) {}
+StoredEdge::StoredEdge(const Edge* parent, UnifiedOopRef reference) : Edge(parent, reference), _gc_root_id(0), _skip_length(0) {}
 
 StoredEdge::StoredEdge(const Edge& edge) : Edge(edge), _gc_root_id(0), _skip_length(0) {}
 
 StoredEdge::StoredEdge(const StoredEdge& edge) : Edge(edge), _gc_root_id(edge._gc_root_id), _skip_length(edge._skip_length) {}
 
-void StoredEdge::operator=(const StoredEdge& edge) {
-  Edge::operator=(edge);
-  _gc_root_id = edge._gc_root_id;
-  _skip_length = edge._skip_length;
-}
-
 traceid EdgeStore::_edge_id_counter = 0;
 
 EdgeStore::EdgeStore() : _edges(NULL) {
@@ -73,28 +67,28 @@
 }
 
 #ifdef ASSERT
-bool EdgeStore::contains(const oop* reference) const {
+bool EdgeStore::contains(UnifiedOopRef reference) const {
   return get(reference) != NULL;
 }
 #endif
 
-StoredEdge* EdgeStore::get(const oop* reference) const {
-  assert(reference != NULL, "invariant");
-  EdgeEntry* const entry = _edges->lookup_only((uintptr_t)reference);
+StoredEdge* EdgeStore::get(UnifiedOopRef reference) const {
+  assert(!reference.is_null(), "invariant");
+  EdgeEntry* const entry = _edges->lookup_only(reference.addr<uintptr_t>());
   return entry != NULL ? entry->literal_addr() : NULL;
 }
 
-StoredEdge* EdgeStore::put(const oop* reference) {
-  assert(reference != NULL, "invariant");
+StoredEdge* EdgeStore::put(UnifiedOopRef reference) {
+  assert(!reference.is_null(), "invariant");
   const StoredEdge e(NULL, reference);
-  assert(NULL == _edges->lookup_only((uintptr_t)reference), "invariant");
-  EdgeEntry& entry = _edges->put((uintptr_t)reference, e);
+  assert(NULL == _edges->lookup_only(reference.addr<uintptr_t>()), "invariant");
+  EdgeEntry& entry = _edges->put(reference.addr<uintptr_t>(), e);
   return entry.literal_addr();
 }
 
 traceid EdgeStore::get_id(const Edge* edge) const {
   assert(edge != NULL, "invariant");
-  EdgeEntry* const entry = _edges->lookup_only((uintptr_t)edge->reference());
+  EdgeEntry* const entry = _edges->lookup_only(edge->reference().addr<uintptr_t>());
   assert(entry != NULL, "invariant");
   return entry->id();
 }
--- a/src/hotspot/share/jfr/leakprofiler/chains/edgeStore.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/edgeStore.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -26,6 +26,7 @@
 #define SHARE_JFR_LEAKPROFILER_CHAINS_EDGESTORE_HPP
 
 #include "jfr/leakprofiler/chains/edge.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.hpp"
 #include "jfr/utilities/jfrHashtable.hpp"
 #include "memory/allocation.hpp"
 
@@ -38,10 +39,9 @@
 
  public:
   StoredEdge();
-  StoredEdge(const Edge* parent, const oop* reference);
+  StoredEdge(const Edge* parent, UnifiedOopRef reference);
   StoredEdge(const Edge& edge);
   StoredEdge(const StoredEdge& edge);
-  void operator=(const StoredEdge& edge);
 
   traceid gc_root_id() const { return _gc_root_id; }
   void set_gc_root_id(traceid root_id) const { _gc_root_id = root_id; }
@@ -78,8 +78,8 @@
   bool on_equals(uintptr_t hash, const EdgeEntry* entry);
   void on_unlink(EdgeEntry* entry);
 
-  StoredEdge* get(const oop* reference) const;
-  StoredEdge* put(const oop* reference);
+  StoredEdge* get(UnifiedOopRef reference) const;
+  StoredEdge* put(UnifiedOopRef reference);
   traceid gc_root_id(const Edge* edge) const;
 
   bool put_edges(StoredEdge** previous, const Edge** current, size_t length);
@@ -94,7 +94,7 @@
   template <typename T>
   void iterate(T& functor) const { _edges->iterate_value<T>(functor); }
 
-  DEBUG_ONLY(bool contains(const oop* reference) const;)
+  DEBUG_ONLY(bool contains(UnifiedOopRef reference) const;)
 
  public:
   EdgeStore();
--- a/src/hotspot/share/jfr/leakprofiler/chains/edgeUtils.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/edgeUtils.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -27,7 +27,7 @@
 #include "jfr/leakprofiler/chains/edge.hpp"
 #include "jfr/leakprofiler/chains/edgeStore.hpp"
 #include "jfr/leakprofiler/chains/edgeUtils.hpp"
-#include "jfr/leakprofiler/utilities/unifiedOop.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 #include "oops/fieldStreams.inline.hpp"
 #include "oops/instanceKlass.hpp"
 #include "oops/objArrayOop.inline.hpp"
@@ -42,12 +42,11 @@
   assert(!edge.is_root(), "invariant");
   const oop ref_owner = edge.reference_owner();
   assert(ref_owner != NULL, "invariant");
-  const oop* reference = UnifiedOop::decode(edge.reference());
-  assert(reference != NULL, "invariant");
-  assert(!UnifiedOop::is_narrow(reference), "invariant");
+  UnifiedOopRef reference = edge.reference();
+  assert(!reference.is_null(), "invariant");
   assert(!ref_owner->is_array(), "invariant");
   assert(ref_owner->is_instance(), "invariant");
-  const int offset = (int)pointer_delta(reference, ref_owner, sizeof(char));
+  const int offset = (int)(reference.addr<uintptr_t>() - cast_from_oop<uintptr_t>(ref_owner));
   assert(offset < (ref_owner->size() * HeapWordSize), "invariant");
   return offset;
 }
@@ -103,12 +102,11 @@
   assert(!edge.is_root(), "invariant");
   const oop ref_owner = edge.reference_owner();
   assert(ref_owner != NULL, "invariant");
-  const oop* reference = UnifiedOop::decode(edge.reference());
-  assert(reference != NULL, "invariant");
-  assert(!UnifiedOop::is_narrow(reference), "invariant");
+  UnifiedOopRef reference = edge.reference();
+  assert(!reference.is_null(), "invariant");
   assert(ref_owner->is_array(), "invariant");
   const objArrayOop ref_owner_array = static_cast<const objArrayOop>(ref_owner);
-  const int offset = (int)pointer_delta(reference, ref_owner_array->base(), heapOopSize);
+  const int offset = (int)pointer_delta(reference.addr<HeapWord*>(), ref_owner_array->base(), heapOopSize);
   assert(offset >= 0 && offset < ref_owner_array->length(), "invariant");
   return offset;
 }
@@ -122,7 +120,7 @@
     const oop ref_owner = edge.reference_owner();
     assert(ref_owner != NULL, "invariant");
     assert(ref_owner->is_objArray(), "invariant");
-    return ((objArrayOop)(ref_owner))->length();
+    return ((objArrayOop)ref_owner)->length();
   }
   return 0;
 }
--- a/src/hotspot/share/jfr/leakprofiler/chains/rootSetClosure.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/chains/rootSetClosure.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -32,7 +32,7 @@
 #include "jfr/leakprofiler/chains/dfsClosure.hpp"
 #include "jfr/leakprofiler/chains/edgeQueue.hpp"
 #include "jfr/leakprofiler/chains/rootSetClosure.hpp"
-#include "jfr/leakprofiler/utilities/unifiedOop.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 #include "memory/universe.hpp"
 #include "oops/access.inline.hpp"
 #include "oops/oop.inline.hpp"
@@ -49,20 +49,9 @@
 template <typename Delegate>
 void RootSetClosure<Delegate>::do_oop(oop* ref) {
   assert(ref != NULL, "invariant");
-  // We discard unaligned root references because
-  // our reference tagging scheme will use
-  // the lowest bit in a represented reference
-  // to indicate the reference is narrow.
-  // It is mainly roots delivered via nmethods::do_oops()
-  // that come in unaligned. It should be ok to duck these
-  // since they are supposedly weak.
-  if (!is_aligned(ref, HeapWordSize)) {
-    return;
-  }
-
   assert(is_aligned(ref, HeapWordSize), "invariant");
   if (*ref != NULL) {
-    _delegate->do_root(ref);
+    _delegate->do_root(UnifiedOopRef::encode_in_native(ref));
   }
 }
 
@@ -70,9 +59,8 @@
 void RootSetClosure<Delegate>::do_oop(narrowOop* ref) {
   assert(ref != NULL, "invariant");
   assert(is_aligned(ref, sizeof(narrowOop)), "invariant");
-  const oop pointee = RawAccess<>::oop_load(ref);
-  if (pointee != NULL) {
-    _delegate->do_root(UnifiedOop::encode(ref));
+  if (*ref != 0) {
+    _delegate->do_root(UnifiedOopRef::encode_in_native(ref));
   }
 }
 
@@ -83,8 +71,8 @@
   RootSetClosureMarkScope mark_scope;
   CLDToOopClosure cldt_closure(this, ClassLoaderData::_claim_none);
   ClassLoaderDataGraph::always_strong_cld_do(&cldt_closure);
-  CodeBlobToOopClosure blobs(this, false);
-  Threads::oops_do(this, &blobs);
+  // We don't follow code blob oops, because they have misaligned oops.
+  Threads::oops_do(this, NULL);
   ObjectSynchronizer::oops_do(this);
   Universe::oops_do(this);
   JNIHandles::oops_do(this);
--- a/src/hotspot/share/jfr/leakprofiler/checkpoint/eventEmitter.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/checkpoint/eventEmitter.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -30,6 +30,7 @@
 #include "jfr/leakprofiler/checkpoint/objectSampleCheckpoint.hpp"
 #include "jfr/leakprofiler/sampling/objectSample.hpp"
 #include "jfr/leakprofiler/sampling/objectSampler.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 #include "logging/log.hpp"
 #include "memory/resourceArea.hpp"
 #include "oops/markWord.hpp"
@@ -109,17 +110,16 @@
   assert(edge_store != NULL, "invariant");
   assert(_jfr_thread_local != NULL, "invariant");
 
-  const oop* object_addr = sample->object_addr();
   traceid gc_root_id = 0;
   const Edge* edge = NULL;
   if (SafepointSynchronize::is_at_safepoint()) {
-    edge = (const Edge*)(*object_addr)->mark().to_pointer();
+    edge = (const Edge*)(sample->object())->mark().to_pointer();
   }
   if (edge == NULL) {
     // In order to dump out a representation of the event
     // even though it was not reachable / too long to reach,
     // we need to register a top level edge for this object.
-    edge = edge_store->put(object_addr);
+    edge = edge_store->put(UnifiedOopRef::encode_in_native(sample->object_addr()));
   } else {
     gc_root_id = edge_store->gc_root_id(edge);
   }
--- a/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -466,7 +466,7 @@
 }
 
 void ObjectSampleCheckpoint::on_type_set_unload(JfrCheckpointWriter& writer) {
-  assert(SafepointSynchronize::is_at_safepoint(), "invariant");
+  assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
   assert(LeakProfiler::is_running(), "invariant");
   if (writer.has_data() && ObjectSampler::sampler()->last() != NULL) {
     save_type_set_blob(writer, true);
--- a/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleWriter.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleWriter.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -32,7 +32,7 @@
 #include "jfr/leakprofiler/checkpoint/rootResolver.hpp"
 #include "jfr/leakprofiler/sampling/objectSampler.hpp"
 #include "jfr/leakprofiler/utilities/rootType.hpp"
-#include "jfr/leakprofiler/utilities/unifiedOop.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 #include "jfr/metadata/jfrSerializer.hpp"
 #include "jfr/writers/jfrTypeWriterHost.hpp"
 #include "oops/oop.inline.hpp"
@@ -374,8 +374,8 @@
 }
 
 int _root_desc_compare_(const ObjectSampleRootDescriptionInfo*const & lhs, const ObjectSampleRootDescriptionInfo* const& rhs) {
-  const uintptr_t lhs_ref = (uintptr_t)lhs->_data._root_edge->reference();
-  const uintptr_t rhs_ref = (uintptr_t)rhs->_data._root_edge->reference();
+  const uintptr_t lhs_ref = lhs->_data._root_edge->reference().addr<uintptr_t>();
+  const uintptr_t rhs_ref = rhs->_data._root_edge->reference().addr<uintptr_t>();
   return _edge_reference_compare_(lhs_ref, rhs_ref);
 }
 
@@ -393,7 +393,7 @@
   while (max >= min) {
     const int mid = (int)(((uint)max + min) / 2);
     int diff = _edge_reference_compare_((uintptr_t)callback_info._high,
-                                        (uintptr_t)arr->at(mid)->_data._root_edge->reference());
+                                        arr->at(mid)->_data._root_edge->reference().addr<uintptr_t>());
     if (diff > 0) {
       min = mid + 1;
     } else if (diff < 0) {
@@ -411,11 +411,11 @@
   GrowableArray<const ObjectSampleRootDescriptionInfo*>* _unresolved_roots;
 
   const uintptr_t high() const {
-    return (uintptr_t)_unresolved_roots->last()->_data._root_edge->reference();
+    return _unresolved_roots->last()->_data._root_edge->reference().addr<uintptr_t>();
   }
 
   const uintptr_t low() const {
-    return (uintptr_t)_unresolved_roots->first()->_data._root_edge->reference();
+    return _unresolved_roots->first()->_data._root_edge->reference().addr<uintptr_t>();
   }
 
   bool in_set_address_range(const RootCallbackInfo& callback_info) const {
@@ -429,7 +429,7 @@
     assert(callback_info._low != NULL, "invariant");
 
     for (int i = 0; i < _unresolved_roots->length(); ++i) {
-      const uintptr_t ref_addr = (uintptr_t)_unresolved_roots->at(i)->_data._root_edge->reference();
+      const uintptr_t ref_addr = _unresolved_roots->at(i)->_data._root_edge->reference().addr<uintptr_t>();
       if ((uintptr_t)callback_info._low <= ref_addr && (uintptr_t)callback_info._high >= ref_addr) {
         return i;
       }
@@ -453,7 +453,7 @@
     ObjectSampleRootDescriptionInfo* const desc =
       const_cast<ObjectSampleRootDescriptionInfo*>(_unresolved_roots->at(idx));
     assert(desc != NULL, "invariant");
-    assert((uintptr_t)callback_info._high == (uintptr_t)desc->_data._root_edge->reference(), "invariant");
+    assert((uintptr_t)callback_info._high == desc->_data._root_edge->reference().addr<uintptr_t>(), "invariant");
 
     desc->_data._system = callback_info._system;
     desc->_data._type = callback_info._type;
@@ -499,7 +499,7 @@
     return _unresolved_roots->length();
   }
 
-  const void* at(int idx) const {
+  UnifiedOopRef at(int idx) const {
     assert(idx >= 0, "invariant");
     assert(idx < _unresolved_roots->length(), "invariant");
     return _unresolved_roots->at(idx)->_data._root_edge->reference();
--- a/src/hotspot/share/jfr/leakprofiler/checkpoint/rootResolver.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/checkpoint/rootResolver.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -27,7 +27,7 @@
 #include "classfile/classLoaderDataGraph.hpp"
 #include "classfile/stringTable.hpp"
 #include "gc/shared/strongRootsScope.hpp"
-#include "jfr/leakprofiler/utilities/unifiedOop.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp"
 #include "jfr/leakprofiler/checkpoint/rootResolver.hpp"
 #include "jfr/utilities/jfrThreadIterator.hpp"
 #include "memory/iterator.hpp"
@@ -47,7 +47,7 @@
   RootCallbackInfo _info;
   bool _complete;
 
-  void do_oop_shared(const void* ref);
+  void do_oop_shared(UnifiedOopRef ref);
 
  public:
   ReferenceLocateClosure(RootCallback& callback,
@@ -71,20 +71,20 @@
   }
 };
 
-void ReferenceLocateClosure::do_oop_shared(const void* ref) {
-  assert(ref != NULL, "invariant");
+void ReferenceLocateClosure::do_oop_shared(UnifiedOopRef ref) {
+  assert(!ref.is_null(), "invariant");
   if (!_complete) {
-    _info._high = ref;
+    _info._high = ref.addr<address>();
     _complete = _callback.process(_info);
   }
 }
 
 void ReferenceLocateClosure::do_oop(oop* ref) {
-  do_oop_shared(ref);
+  do_oop_shared(UnifiedOopRef::encode_in_native(ref));
 }
 
 void ReferenceLocateClosure::do_oop(narrowOop* ref) {
-  do_oop_shared(ref);
+  do_oop_shared(UnifiedOopRef::encode_in_native(ref));
 }
 
 class ReferenceToRootClosure : public StackObj {
@@ -303,7 +303,7 @@
   info._type = OldObjectRoot::_stack_variable;
 
   for (int i = 0; i < _callback.entries(); ++i) {
-    const address adr = (address)_callback.at(i);
+    const address adr = _callback.at(i).addr<address>();
     if (jt->is_in_usable_stack(adr)) {
       info._high = adr;
       _complete = _callback.process(info);
--- a/src/hotspot/share/jfr/leakprofiler/checkpoint/rootResolver.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/checkpoint/rootResolver.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -26,12 +26,13 @@
 #define SHARE_JFR_LEAKPROFILER_CHECKPOINT_ROOTRESOLVER_HPP
 
 #include "jfr/leakprofiler/utilities/rootType.hpp"
+#include "jfr/leakprofiler/utilities/unifiedOopRef.hpp"
 #include "memory/allocation.hpp"
 #include "oops/oopsHierarchy.hpp"
 
 struct RootCallbackInfo {
-  const void* _high;
-  const void* _low;
+  address _high;
+  address _low;
   const void* _context;
   OldObjectRoot::System _system;
   OldObjectRoot::Type _type;
@@ -41,7 +42,7 @@
  public:
   virtual bool process(const RootCallbackInfo& info) = 0;
   virtual int entries() const = 0;
-  virtual const void* at(int idx) const = 0;
+  virtual UnifiedOopRef at(int idx) const = 0;
 };
 
 class RootResolver : public AllStatic {
--- a/src/hotspot/share/jfr/leakprofiler/leakProfiler.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/leakProfiler.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -49,16 +49,6 @@
     return false;
   }
 
-  if (UseZGC) {
-    log_warning(jfr)("LeakProfiler is currently not supported in combination with ZGC");
-    return false;
-  }
-
-  if (UseShenandoahGC) {
-    log_warning(jfr)("LeakProfiler is currently not supported in combination with Shenandoah GC");
-    return false;
-  }
-
   assert(!is_running(), "invariant");
   assert(sample_count > 0, "invariant");
 
@@ -101,11 +91,11 @@
   ObjectSampler::release();
 }
 
-void LeakProfiler::oops_do(BoolObjectClosure* is_alive, OopClosure* f) {
+void LeakProfiler::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) {
   assert(SafepointSynchronize::is_at_safepoint(),
     "Leak Profiler::oops_do(...) may only be called during safepoint");
   if (is_running()) {
-    ObjectSampler::oops_do(is_alive, f);
+    ObjectSampler::weak_oops_do(is_alive, f);
   }
 }
 
--- a/src/hotspot/share/jfr/leakprofiler/leakProfiler.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/leakProfiler.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -41,7 +41,7 @@
   static void sample(HeapWord* object, size_t size, JavaThread* thread);
 
   // Called by GC
-  static void oops_do(BoolObjectClosure* is_alive, OopClosure* f);
+  static void weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f);
 };
 
 #endif // SHARE_JFR_LEAKPROFILER_LEAKPROFILER_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/jfr/leakprofiler/sampling/objectSample.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+#include "precompiled.hpp"
+#include "jfr/leakprofiler/sampling/objectSample.hpp"
+#include "oops/access.inline.hpp"
+
+const oop ObjectSample::object() const {
+  return NativeAccess<ON_PHANTOM_OOP_REF | AS_NO_KEEPALIVE>::oop_load(&_object);
+}
+
+void ObjectSample::set_object(oop object) {
+  NativeAccess<ON_PHANTOM_OOP_REF>::oop_store(&_object, object);
+}
--- a/src/hotspot/share/jfr/leakprofiler/sampling/objectSample.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/sampling/objectSample.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -57,11 +57,6 @@
   size_t _allocated;
   size_t _heap_used_at_last_gc;
   unsigned int _stack_trace_hash;
-  bool _dead;
-
-  void set_dead() {
-    _dead = true;
-  }
 
   void release_references() {
     _stacktrace.~JfrBlobHandle();
@@ -70,10 +65,10 @@
   }
 
   void reset() {
+    _object = NULL;
     set_stack_trace_id(0);
     set_stack_trace_hash(0);
     release_references();
-    _dead = false;
   }
 
  public:
@@ -90,8 +85,7 @@
                    _span(0),
                    _allocated(0),
                    _heap_used_at_last_gc(0),
-                   _stack_trace_hash(0),
-                   _dead(false) {}
+                   _stack_trace_hash(0) {}
 
   ObjectSample* next() const {
     return _next;
@@ -110,26 +104,16 @@
   }
 
   bool is_dead() const {
-    return _dead;
+    return object() == NULL;
   }
 
-  const oop object() const {
-    return _object;
-  }
+  const oop object() const;
+  void set_object(oop object);
 
   const oop* object_addr() const {
     return &_object;
   }
 
-  void set_object(oop object) {
-    _object = object;
-  }
-
-  const Klass* klass() const {
-    assert(_object != NULL, "invariant");
-    return _object->klass();
-  }
-
   int index() const {
     return _index;
   }
--- a/src/hotspot/share/jfr/leakprofiler/sampling/objectSampler.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/sampling/objectSampler.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -206,7 +206,7 @@
   assert(sample != NULL, "invariant");
   assert(sample->is_dead(), "invariant");
   ObjectSample* const previous = sample->prev();
-  // push span on to previous
+  // push span onto previous
   if (previous != NULL) {
     _priority_queue->remove(previous);
     previous->add_span(sample->span());
@@ -216,23 +216,23 @@
   _list->release(sample);
 }
 
-void ObjectSampler::oops_do(BoolObjectClosure* is_alive, OopClosure* f) {
+void ObjectSampler::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) {
   assert(is_created(), "invariant");
   assert(SafepointSynchronize::is_at_safepoint(), "invariant");
   ObjectSampler& sampler = instance();
   ObjectSample* current = sampler._list->last();
   while (current != NULL) {
-    ObjectSample* next = current->next();
-    if (!current->is_dead()) {
+    if (current->_object != NULL) {
       if (is_alive->do_object_b(current->object())) {
         // The weakly referenced object is alive, update pointer
         f->do_oop(const_cast<oop*>(current->object_addr()));
       } else {
-        current->set_dead();
+        // clear existing field to assist GC barriers
+        current->_object = NULL;
         sampler._dead_samples = true;
       }
     }
-    current = next;
+    current = current->next();
   }
   sampler._last_sweep = JfrTicks::now();
 }
--- a/src/hotspot/share/jfr/leakprofiler/sampling/objectSampler.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jfr/leakprofiler/sampling/objectSampler.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -67,7 +67,7 @@
   void remove_dead(ObjectSample* sample);
 
   // Called by GC
-  static void oops_do(BoolObjectClosure* is_alive, OopClosure* f);
+  static void weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f);
 
   const ObjectSample* item_at(int index) const;
   ObjectSample* item_at(int index);
--- a/src/hotspot/share/jfr/leakprofiler/utilities/unifiedOop.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2017, 2019, 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.
- *
- */
-
-#ifndef SHARE_JFR_LEAKPROFILER_UTILITIES_UNIFIEDOOP_HPP
-#define SHARE_JFR_LEAKPROFILER_UTILITIES_UNIFIEDOOP_HPP
-
-#include "oops/oop.inline.hpp"
-
-class UnifiedOop : public AllStatic {
- public:
-  static const bool is_narrow(const oop* ref) {
-    assert(ref != NULL, "invariant");
-    return 1 == (((u8)ref) & 1);
-  }
-
-  static const oop* decode(const oop* ref) {
-    assert(ref != NULL, "invariant");
-    return is_narrow(ref) ? (const oop*)(((u8)ref) & ~1) : ref;
-  }
-
-  static const oop* encode(narrowOop* ref) {
-    assert(ref != NULL, "invariant");
-    return (const oop*)((u8)ref | 1);
-  }
-
-  static oop dereference(const oop* ref) {
-    assert(ref != NULL, "invariant");
-    return is_narrow(ref) ?
-      (oop)RawAccess<>::oop_load((narrowOop*)decode(ref)) :
-      (oop)RawAccess<>::oop_load(const_cast<oop*>(ref));
-
-  }
-};
-
-#endif // SHARE_JFR_LEAKPROFILER_UTILITIES_UNIFIEDOOP_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/jfr/leakprofiler/utilities/unifiedOopRef.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2017, 2019, 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.
+ *
+ */
+
+#ifndef SHARE_JFR_LEAKPROFILER_UTILITIES_UNIFIEDOOPREF_HPP
+#define SHARE_JFR_LEAKPROFILER_UTILITIES_UNIFIEDOOPREF_HPP
+
+#include "oops/oopsHierarchy.hpp"
+#include "utilities/globalDefinitions.hpp"
+
+struct UnifiedOopRef {
+  uintptr_t _value;
+
+  template <typename T>
+  T addr() const;
+
+  bool is_narrow() const;
+  bool is_native() const;
+  bool is_null() const;
+
+  oop dereference() const;
+
+  static UnifiedOopRef encode_in_native(const narrowOop* ref);
+  static UnifiedOopRef encode_in_native(const oop* ref);
+  static UnifiedOopRef encode_in_heap(const oop* ref);
+  static UnifiedOopRef encode_in_heap(const narrowOop* ref);
+  static UnifiedOopRef encode_null();
+};
+
+#endif // SHARE_JFR_LEAKPROFILER_UTILITIES_UNIFIEDOOPREF_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/jfr/leakprofiler/utilities/unifiedOopRef.inline.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#ifndef SHARE_JFR_LEAKPROFILER_UTILITIES_UNIFIEDOOPREF_INLINE_HPP
+#define SHARE_JFR_LEAKPROFILER_UTILITIES_UNIFIEDOOPREF_INLINE_HPP
+
+#include "jfr/leakprofiler/utilities/unifiedOopRef.hpp"
+#include "oops/access.inline.hpp"
+#include "utilities/debug.hpp"
+
+template <typename T>
+inline T UnifiedOopRef::addr() const {
+  return reinterpret_cast<T>(_value & ~uintptr_t(3));
+}
+
+// Visual Studio 2019 and earlier have a problem with reinterpret_cast
+// when the new type is the same as the expression type. For example:
+//  reinterpret_cast<int>(1);
+//  "error C2440: 'reinterpret_cast': cannot convert from 'int' to 'int'"
+// this specialization provides a workaround.
+template<>
+inline uintptr_t UnifiedOopRef::addr<uintptr_t>() const {
+  return _value & ~uintptr_t(3);
+}
+
+inline bool UnifiedOopRef::is_narrow() const {
+  return _value & 1;
+}
+
+inline bool UnifiedOopRef::is_native() const {
+  return _value & 2;
+}
+
+inline bool UnifiedOopRef::is_null() const {
+  return _value == 0;
+}
+
+inline UnifiedOopRef UnifiedOopRef::encode_in_native(const narrowOop* ref) {
+  assert(ref != NULL, "invariant");
+  UnifiedOopRef result = { reinterpret_cast<uintptr_t>(ref) | 3 };
+  assert(result.addr<narrowOop*>() == ref, "sanity");
+  return result;
+}
+
+inline UnifiedOopRef UnifiedOopRef::encode_in_native(const oop* ref) {
+  assert(ref != NULL, "invariant");
+  UnifiedOopRef result = { reinterpret_cast<uintptr_t>(ref) | 2 };
+  assert(result.addr<oop*>() == ref, "sanity");
+  return result;
+}
+
+inline UnifiedOopRef UnifiedOopRef::encode_in_heap(const narrowOop* ref) {
+  assert(ref != NULL, "invariant");
+  UnifiedOopRef result = { reinterpret_cast<uintptr_t>(ref) | 1 };
+  assert(result.addr<narrowOop*>() == ref, "sanity");
+  return result;
+}
+
+inline UnifiedOopRef UnifiedOopRef::encode_in_heap(const oop* ref) {
+  assert(ref != NULL, "invariant");
+  UnifiedOopRef result = { reinterpret_cast<uintptr_t>(ref) | 0 };
+  assert(result.addr<oop*>() == ref, "sanity");
+  return result;
+}
+
+inline UnifiedOopRef UnifiedOopRef::encode_null() {
+  return UnifiedOopRef();
+}
+
+inline oop UnifiedOopRef::dereference() const {
+  if (is_native()) {
+    if (is_narrow()) {
+      return NativeAccess<AS_NO_KEEPALIVE>::oop_load(addr<narrowOop*>());
+    } else {
+      return NativeAccess<AS_NO_KEEPALIVE>::oop_load(addr<oop*>());
+    }
+  } else {
+    if (is_narrow()) {
+      return HeapAccess<AS_NO_KEEPALIVE>::oop_load(addr<narrowOop*>());
+    } else {
+      return HeapAccess<AS_NO_KEEPALIVE>::oop_load(addr<oop*>());
+    }
+  }
+}
+
+#endif // SHARE_JFR_LEAKPROFILER_UTILITIES_UNIFIEDOOPREF_INLINE_HPP
--- a/src/hotspot/share/jvmci/jvmci_globals.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jvmci/jvmci_globals.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -55,6 +55,15 @@
     return false;                                      \
   }
 
+  if (EnableJVMCIProduct) {
+    if (FLAG_IS_DEFAULT(EnableJVMCI)) {
+      FLAG_SET_DEFAULT(EnableJVMCI, true);
+    }
+    if (EnableJVMCI && FLAG_IS_DEFAULT(UseJVMCICompiler)) {
+      FLAG_SET_DEFAULT(UseJVMCICompiler, true);
+    }
+  }
+
   JVMCI_FLAG_CHECKED(UseJVMCICompiler)
   JVMCI_FLAG_CHECKED(EnableJVMCI)
   JVMCI_FLAG_CHECKED(EnableJVMCIProduct)
@@ -163,11 +172,11 @@
   if (JVMFlag::boolAtPut(jvmciEnableFlag, &value, origin) != JVMFlag::SUCCESS) {
     return false;
   }
-  value = true;
-  JVMFlag *jvmciCompilerFlag = JVMFlag::find_flag("UseJVMCICompiler");
-  if (JVMFlag::boolAtPut(jvmciCompilerFlag, &value, origin) != JVMFlag::SUCCESS) {
-    return false;
-  }
+
+  // Effect of EnableJVMCIProduct on changing defaults of EnableJVMCI
+  // and UseJVMCICompiler is deferred to check_jvmci_flags_are_consistent
+  // so that setting these flags explicitly (e.g. on the command line)
+  // takes precedence.
 
   return true;
 }
--- a/src/hotspot/share/jvmci/jvmci_globals.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/jvmci/jvmci_globals.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -51,8 +51,8 @@
   experimental(bool, EnableJVMCIProduct, false,                             \
           "Allow JVMCI to be used in product mode. This alters a subset of "\
           "JVMCI flags to be non-experimental, defaults UseJVMCICompiler "  \
-          "to true and defaults UseJVMCINativeLibrary to true if a JVMCI "  \
-          "native library is available.")                                   \
+          "and EnableJVMCI to true and defaults UseJVMCINativeLibrary "     \
+          "to true if a JVMCI native library is available.")                \
                                                                             \
   experimental(bool, UseJVMCICompiler, false,                               \
           "Use JVMCI as the default compiler. Defaults to true if "         \
@@ -122,7 +122,7 @@
           "Execute JVMCI Java code from a shared library "                  \
           "instead of loading it from class files and executing it "        \
           "on the HotSpot heap. Defaults to true if EnableJVMCIProduct is " \
-          "true and a JVMCI native library is available.")\
+          "true and a JVMCI native library is available.")                  \
                                                                             \
   NOT_COMPILER2(diagnostic(bool, UseMultiplyToLenIntrinsic, false,          \
           "Enables intrinsification of BigInteger.multiplyToLen()"))        \
--- a/src/hotspot/share/opto/loopopts.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/opto/loopopts.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1727,7 +1727,8 @@
 #ifdef ASSERT
     if (loop->_head->as_Loop()->is_strip_mined() && outer_loop->is_member(use_loop) && !loop->is_member(use_loop) && old_new[use->_idx] == NULL) {
       Node* sfpt = loop->_head->as_CountedLoop()->outer_safepoint();
-      assert(mode == ControlAroundStripMined && (use == sfpt || !use->is_reachable_from_root()), "missed a node");
+      assert(mode != IgnoreStripMined, "incorrect cloning mode");
+      assert((mode == ControlAroundStripMined && use == sfpt) || !use->is_reachable_from_root(), "missed a node");
     }
 #endif
     if (!loop->is_member(use_loop) && !outer_loop->is_member(use_loop) && (!old->is_CFG() || !use->is_CFG())) {
--- a/src/hotspot/share/opto/superword.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/opto/superword.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -2255,30 +2255,38 @@
     // we use the memory state of the last load. However, if any load could
     // not be moved down due to the dependence constraint, we use the memory
     // state of the first load.
-    Node* first_mem = pk->at(0)->in(MemNode::Memory);
-    Node* last_mem = first_mem;
-    for (uint i = 1; i < pk->size(); i++) {
-      Node* ld = pk->at(i);
-      Node* mem = ld->in(MemNode::Memory);
-      assert(in_bb(first_mem) || in_bb(mem) || mem == first_mem, "2 different memory state from outside the loop?");
-      if (in_bb(mem)) {
-        if (in_bb(first_mem) && bb_idx(mem) < bb_idx(first_mem)) {
-          first_mem = mem;
-        }
-        if (!in_bb(last_mem) || bb_idx(mem) > bb_idx(last_mem)) {
-          last_mem = mem;
+    Node* last_mem  = pk->at(0)->in(MemNode::Memory);
+    Node* first_mem = last_mem;
+    // Walk the memory graph from the current first load until the
+    // start of the loop and check if nodes on the way are memory
+    // edges of loads in the pack. The last one we encounter is the
+    // first load.
+    for (Node* current = first_mem; in_bb(current); current = current->is_Phi() ? current->in(LoopNode::EntryControl) : current->in(MemNode::Memory)) {
+     assert(current->is_Mem() || (current->is_Phi() && current->in(0) == bb()), "unexpected memory");
+     for (uint i = 1; i < pk->size(); i++) {
+        Node* ld = pk->at(i);
+        if (ld->in(MemNode::Memory) == current) {
+          first_mem = current;
+          break;
         }
       }
     }
+    // Find the last load by going over the pack again and walking
+    // the memory graph from the loads of the pack to the memory of
+    // the first load. If we encounter the memory of the current last
+    // load, then we started from further down in the memory graph and
+    // the load we started from is the last load. Check for dependence
+    // constraints in that loop as well.
     bool schedule_last = true;
     for (uint i = 0; i < pk->size(); i++) {
       Node* ld = pk->at(i);
-      for (Node* current = last_mem; current != ld->in(MemNode::Memory);
-           current=current->in(MemNode::Memory)) {
-        assert(current != first_mem, "corrupted memory graph");
-        if(current->is_Mem() && !independent(current, ld)){
+      for (Node* current = ld->in(MemNode::Memory); current != first_mem; current = current->in(MemNode::Memory)) {
+        assert(current->is_Mem() && in_bb(current), "unexpected memory");
+        if (current->in(MemNode::Memory) == last_mem) {
+          last_mem = ld->in(MemNode::Memory);
+        }
+        if (!independent(current, ld)) {
           schedule_last = false; // a later store depends on this load
-          break;
         }
       }
     }
--- a/src/hotspot/share/prims/jvm.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/prims/jvm.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -3645,20 +3645,6 @@
 }
 JVM_END
 
-JVM_ENTRY(void, JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size))
-{
-  memset(info, 0, info_size);
-
-  info->jvm_version = VM_Version::jvm_version();
-  info->patch_version = VM_Version::vm_patch_version();
-
-  // when we add a new capability in the jvm_version_info struct, we should also
-  // consider to expose this new capability in the sun.rt.jvmCapabilities jvmstat
-  // counter defined in runtimeService.cpp.
-  info->is_attach_supported = AttachListener::is_attach_supported();
-}
-JVM_END
-
 // Returns an array of java.lang.String objects containing the input arguments to the VM.
 JVM_ENTRY(jobjectArray, JVM_GetVmArguments(JNIEnv *env))
   ResourceMark rm(THREAD);
--- a/src/hotspot/share/runtime/abstract_vm_version.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/runtime/abstract_vm_version.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -109,7 +109,7 @@
   static int vm_patch_version()               { return _vm_patch_version; }
   static int vm_build_number()                { return _vm_build_number; }
 
-  // Gets the jvm_version_info.jvm_version defined in jvm.h
+  // Gets the jvm_version_info.jvm_version
   static unsigned int jvm_version();
 
   // Internal version providing additional build information
--- a/src/hotspot/share/runtime/arguments.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/runtime/arguments.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -3037,6 +3037,12 @@
         return JNI_ERR;
 #endif // INCLUDE_MANAGEMENT
 #if INCLUDE_JVMCI
+    } else if (match_option(option, "-XX:-EnableJVMCIProduct")) {
+      if (EnableJVMCIProduct) {
+        jio_fprintf(defaultStream::error_stream(),
+                  "-XX:-EnableJVMCIProduct cannot come after -XX:+EnableJVMCIProduct\n");
+        return JNI_EINVAL;
+      }
     } else if (match_option(option, "-XX:+EnableJVMCIProduct")) {
       JVMFlag *jvmciFlag = JVMFlag::find_flag("EnableJVMCIProduct");
       // Allow this flag if it has been unlocked.
--- a/src/hotspot/share/runtime/globals.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/runtime/globals.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -1489,7 +1489,7 @@
   notproduct(intx, MaxSubklassPrintSize, 4,                                 \
           "maximum number of subklasses to print when printing klass")      \
                                                                             \
-  product(intx, MaxInlineLevel, 9,                                          \
+  product(intx, MaxInlineLevel, 15,                                         \
           "maximum number of nested calls that are inlined")                \
           range(0, max_jint)                                                \
                                                                             \
--- a/src/hotspot/share/runtime/handshake.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/runtime/handshake.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -271,14 +271,14 @@
     _executed = true;
   }
 
-  // Use the semaphore to inform the VM thread that we have completed the operation
-  _done.signal();
-
   if (start_time_ns != 0) {
     jlong completion_time = os::javaTimeNanos() - start_time_ns;
     log_debug(handshake, task)("Operation: %s for thread " PTR_FORMAT ", is_vm_thread: %s, completed in " JLONG_FORMAT " ns",
                                name(), p2i(thread), BOOL_TO_STR(Thread::current()->is_VM_thread()), completion_time);
   }
+
+  // Use the semaphore to inform the VM thread that we have completed the operation
+  _done.signal();
 }
 
 void Handshake::execute(HandshakeClosure* thread_cl) {
--- a/src/hotspot/share/runtime/java.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/runtime/java.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -694,23 +694,14 @@
 const char* JDK_Version::_runtime_vendor_vm_bug_url;
 
 void JDK_Version::initialize() {
-  jdk_version_info info;
   assert(!_current.is_valid(), "Don't initialize twice");
 
-  void *lib_handle = os::native_java_library();
-  jdk_version_info_fn_t func = CAST_TO_FN_PTR(jdk_version_info_fn_t,
-     os::dll_lookup(lib_handle, "JDK_GetVersionInfo0"));
-
-  assert(func != NULL, "Support for JDK 1.5 or older has been removed after JEP-223");
-
-  (*func)(&info, sizeof(info));
-
-  int major = JDK_VERSION_MAJOR(info.jdk_version);
-  int minor = JDK_VERSION_MINOR(info.jdk_version);
-  int security = JDK_VERSION_SECURITY(info.jdk_version);
-  int build = JDK_VERSION_BUILD(info.jdk_version);
-
-  _current = JDK_Version(major, minor, security, info.patch_version, build);
+  int major = VM_Version::vm_major_version();
+  int minor = VM_Version::vm_minor_version();
+  int security = VM_Version::vm_security_version();
+  int build = VM_Version::vm_build_number();
+  int patch = VM_Version::vm_patch_version();
+  _current = JDK_Version(major, minor, security, patch, build);
 }
 
 void JDK_Version_init() {
--- a/src/hotspot/share/runtime/rtmLocking.cpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/runtime/rtmLocking.cpp	Wed Dec 11 11:13:41 2019 +0530
@@ -55,12 +55,21 @@
   }
 }
 
+const char* RTMLockingCounters::_abortX_desc[ABORT_STATUS_LIMIT] = {
+  "abort instruction   ",
+  "may succeed on retry",
+  "thread conflict     ",
+  "buffer overflow     ",
+  "debug or trap hit   ",
+  "maximum nested depth"
+};
+
 //------------------------------print_on-------------------------------
 void RTMLockingCounters::print_on(outputStream* st) const {
   tty->print_cr("# rtm locks total (estimated): " UINTX_FORMAT, _total_count * RTMTotalCountIncrRate);
-  tty->print_cr("# rtm lock aborts  : " UINTX_FORMAT, _abort_count);
+  tty->print_cr("# rtm lock aborts (total): " UINTX_FORMAT, _abort_count);
   for (int i = 0; i < ABORT_STATUS_LIMIT; i++) {
-    tty->print_cr("# rtm lock aborts %d: " UINTX_FORMAT, i, _abortX_count[i]);
+    tty->print_cr("# rtm lock aborts %d (%s): " UINTX_FORMAT, i, _abortX_desc[i], _abortX_count[i]);
   }
 }
 void RTMLockingCounters::print() const { print_on(tty); }
--- a/src/hotspot/share/runtime/rtmLocking.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/runtime/rtmLocking.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -82,6 +82,7 @@
   //     5     Set if an abort occurred during execution of a nested transaction.
  private:
   uintx _abortX_count[ABORT_STATUS_LIMIT];
+  static const char* _abortX_desc[ABORT_STATUS_LIMIT];
 
  public:
   static uintx _calculation_flag;
--- a/src/hotspot/share/services/diagnosticCommand.hpp	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/hotspot/share/services/diagnosticCommand.hpp	Wed Dec 11 11:13:41 2019 +0530
@@ -388,7 +388,7 @@
     return "GC.class_stats";
   }
   static const char* description() {
-    return "Provide statistics about Java class meta data.";
+    return "(Deprecated) Provide statistics about Java class meta data.";
   }
   static const char* impact() {
     return "High: Depends on Java heap size and content.";
--- a/src/java.base/share/classes/java/lang/Class.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/java.base/share/classes/java/lang/Class.java	Wed Dec 11 11:13:41 2019 +0530
@@ -2271,14 +2271,20 @@
      *           may be removed in a future release, or upgraded to permanent
      *           features of the Java language.}
      *
-     * Returns an array containing {@code RecordComponent} objects reflecting all the
-     * declared record components of the record represented by this {@code Class} object.
-     * The components are returned in the same order that they are declared in the
-     * record header.
-     *
-     * @return  The array of {@code RecordComponent} objects representing all the
-     *          record components of this record. The array is empty if this class
-     *          is not a record, or if this class is a record with no components.
+     * Returns an array of {@code RecordComponent} objects representing all the
+     * record components of this record class, or {@code null} if this class is
+     * not a record class.
+     *
+     * <p> The components are returned in the same order that they are declared
+     * in the record header. The array is empty if this record class has no
+     * components. If the class is not a record class, that is {@link
+     * #isRecord()} returns {@code false}, then this method returns {@code null}.
+     * Conversely, if {@link #isRecord()} returns {@code true}, then this method
+     * returns a non-null value.
+     *
+     * @return  An array of {@code RecordComponent} objects representing all the
+     *          record components of this record class, or {@code null} if this
+     *          class is not a record class
      * @throws  SecurityException
      *          If a security manager, <i>s</i>, is present and any of the
      *          following conditions is met:
@@ -2312,8 +2318,8 @@
         if (sm != null) {
             checkMemberAccess(sm, Member.DECLARED, Reflection.getCallerClass(), true);
         }
-        if (isPrimitive() || isArray()) {
-            return new RecordComponent[0];
+        if (!isRecord()) {
+            return null;
         }
         RecordComponent[] recordComponents = getRecordComponents0();
         if (recordComponents == null) {
@@ -3590,6 +3596,16 @@
         this.getSuperclass() == java.lang.Enum.class;
     }
 
+    /** java.lang.Record.class */
+    private static final Class<?> JAVA_LANG_RECORD_CLASS = javaLangRecordClass();
+    private static Class<?> javaLangRecordClass() {
+        try {
+            return Class.forName0("java.lang.Record", false, null, null);
+        } catch (ClassNotFoundException e) {
+            throw new InternalError("should not reach here", e);
+        }
+    }
+
     /**
      * {@preview Associated with records, a preview feature of the Java language.
      *
@@ -3599,18 +3615,23 @@
      *           features of the Java language.}
      *
      * Returns {@code true} if and only if this class is a record class.
-     * It returns {@code false} otherwise. Note that class {@link Record} is not a
-     * record type and thus invoking this method on class {@link java.lang.Record}
-     * returns {@code false}.
-     *
-     * @return true if and only if this class is a record class
+     *
+     * <p> The {@linkplain #getSuperclass() direct superclass} of a record
+     * class is {@code java.lang.Record}. A record class has (possibly zero)
+     * record components, that is, {@link #getRecordComponents()} returns a
+     * non-null value.
+     *
+     * <p> Note that class {@link Record} is not a record type and thus invoking
+     * this method on class {@code Record} returns {@code false}.
+     *
+     * @return true if and only if this class is a record class, otherwise false
      * @jls 8.10 Record Types
      * @since 14
      */
     @jdk.internal.PreviewFeature(feature=jdk.internal.PreviewFeature.Feature.RECORDS,
                                  essentialAPI=false)
     public boolean isRecord() {
-        return isRecord0();
+        return getSuperclass() == JAVA_LANG_RECORD_CLASS && isRecord0();
     }
 
     // Fetches the factory for reflective objects
--- a/src/java.base/share/classes/java/net/DatagramSocket.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/java.base/share/classes/java/net/DatagramSocket.java	Wed Dec 11 11:13:41 2019 +0530
@@ -43,24 +43,69 @@
  * any order.
  *
  * <p> Where possible, a newly constructed {@code DatagramSocket} has the
- * {@link SocketOptions#SO_BROADCAST SO_BROADCAST} socket option enabled so as
+ * {@link StandardSocketOptions#SO_BROADCAST SO_BROADCAST} socket option enabled so as
  * to allow the transmission of broadcast datagrams. In order to receive
  * broadcast packets a DatagramSocket should be bound to the wildcard address.
  * In some implementations, broadcast packets may also be received when
  * a DatagramSocket is bound to a more specific address.
  * <p>
  * Example:
- * {@code
+ * <pre>{@code
  *              DatagramSocket s = new DatagramSocket(null);
  *              s.bind(new InetSocketAddress(8888));
- * }
+ * }</pre>
  * Which is equivalent to:
- * {@code
+ * <pre>{@code
  *              DatagramSocket s = new DatagramSocket(8888);
- * }
+ * }</pre>
  * Both cases will create a DatagramSocket able to receive broadcasts on
  * UDP port 8888.
  *
+ * <p> The {@code DatagramSocket} class defines convenience
+ * methods to set and get several socket options. This class also
+ * defines the {@link #setOption(SocketOption,Object) setOption}
+ * and {@link #getOption(SocketOption) getOption} methods to set
+ * and query socket options.
+ * A {@code DatagramSocket} supports the following socket options:
+ * <blockquote>
+ * <a id="SocketOptions"></a>
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
+ *   <tr>
+ *     <th scope="col">Option Name</th>
+ *     <th scope="col">Description</th>
+ *   </tr>
+ * </thead>
+ * <tbody>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </th>
+ *     <td> The size of the socket send buffer </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </th>
+ *     <td> The size of the socket receive buffer </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </th>
+ *     <td> Re-use address </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_BROADCAST SO_BROADCAST} </th>
+ *     <td> Allow transmission of broadcast datagrams </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#IP_TOS IP_TOS} </th>
+ *     <td> The Type of Service (ToS) octet in the Internet Protocol (IP) header </td>
+ *   </tr>
+ * </tbody>
+ * </table>
+ * </blockquote>
+ * An implementation may also support additional options. In particular an implementation
+ * may support <a href="MulticastSocket.html#MulticastOptions">multicast options</a> which
+ * can be useful when using a plain {@code DatagramSocket} to send datagrams to a
+ * multicast group.
+ *
  * @author  Pavani Diwanji
  * @see     java.net.DatagramPacket
  * @see     java.nio.channels.DatagramChannel
--- a/src/java.base/share/classes/java/net/MulticastSocket.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/java.base/share/classes/java/net/MulticastSocket.java	Wed Dec 11 11:13:41 2019 +0530
@@ -80,6 +80,46 @@
  * <B>Multiple MulticastSockets</B> may subscribe to a multicast group
  * and port concurrently, and they will all receive group datagrams.
  *
+ * <p> The {@code DatagramSocket} and {@code MulticastSocket}
+ * classes define convenience methods to set and get several
+ * socket options. Like {@code DatagramSocket} this class also
+ * supports the {@link #setOption(SocketOption, Object) setOption}
+ * and {@link #getOption(SocketOption) getOption} methods to set
+ * and query socket options.
+ * In addition to the socket options supported by
+ * <a href="DatagramSocket.html#SocketOptions">{@code DatagramSocket}</a>, a
+ * {@code MulticastSocket} supports the following socket options:
+ * <blockquote>
+ * <a id="MulticastOptions"></a>
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
+ *   <tr>
+ *     <th scope="col">Option Name</th>
+ *     <th scope="col">Description</th>
+ *   </tr>
+ * </thead>
+ * <tbody>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#IP_MULTICAST_IF IP_MULTICAST_IF} </th>
+ *     <td> The network interface for Internet Protocol (IP) multicast datagrams </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#IP_MULTICAST_TTL
+ *       IP_MULTICAST_TTL} </th>
+ *     <td> The <em>time-to-live</em> for Internet Protocol (IP) multicast
+ *       datagrams </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#IP_MULTICAST_LOOP
+ *       IP_MULTICAST_LOOP} </th>
+ *     <td> Loopback for Internet Protocol (IP) multicast datagrams </td>
+ *   </tr>
+ * </tbody>
+ * </table>
+ * </blockquote>
+ * Additional (implementation specific) options may also be supported.
+ *
  * @author Pavani Diwanji
  * @since 1.1
  */
--- a/src/java.base/share/classes/java/net/ServerSocket.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/java.base/share/classes/java/net/ServerSocket.java	Wed Dec 11 11:13:41 2019 +0530
@@ -46,6 +46,35 @@
  * implementation to configure itself to create sockets
  * appropriate to the local firewall.
  *
+ * <p> The {@code ServerSocket} class defines convenience
+ * methods to set and get several socket options. This class also
+ * defines the {@link #setOption(SocketOption, Object) setOption}
+ * and {@link #getOption(SocketOption) getOption} methods to set
+ * and query socket options.
+ * A {@code ServerSocket} supports the following options:
+ * <blockquote>
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
+ *   <tr>
+ *     <th scope="col">Option Name</th>
+ *     <th scope="col">Description</th>
+ *   </tr>
+ * </thead>
+ * <tbody>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </th>
+ *     <td> The size of the socket receive buffer </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </th>
+ *     <td> Re-use address </td>
+ *   </tr>
+ * </tbody>
+ * </table>
+ * </blockquote>
+ * Additional (implementation specific) options may also be supported.
+ *
  * @author  unascribed
  * @see     java.net.SocketImpl
  * @see     java.net.ServerSocket#setSocketFactory(java.net.SocketImplFactory)
--- a/src/java.base/share/classes/java/net/Socket.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/java.base/share/classes/java/net/Socket.java	Wed Dec 11 11:13:41 2019 +0530
@@ -50,6 +50,52 @@
  * can configure itself to create sockets appropriate to the local
  * firewall.
  *
+ * <p> The {@code Socket} class defines convenience
+ * methods to set and get several socket options. This class also
+ * defines the {@link #setOption(SocketOption, Object) setOption}
+ * and {@link #getOption(SocketOption) getOption} methods to set
+ * and query socket options.
+ * A {@code Socket} support the following options:
+ * <blockquote>
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
+ *   <tr>
+ *     <th scope="col">Option Name</th>
+ *     <th scope="col">Description</th>
+ *   </tr>
+ * </thead>
+ * <tbody>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </th>
+ *     <td> The size of the socket send buffer </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </th>
+ *     <td> The size of the socket receive buffer </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE} </th>
+ *     <td> Keep connection alive </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </th>
+ *     <td> Re-use address </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#SO_LINGER SO_LINGER} </th>
+ *     <td> Linger on close if data is present (when configured in blocking mode
+ *          only) </td>
+ *   </tr>
+ *   <tr>
+ *     <th scope="row"> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </th>
+ *     <td> Disable the Nagle algorithm </td>
+ *   </tr>
+ * </tbody>
+ * </table>
+ * </blockquote>
+ * Additional (implementation specific) options may also be supported.
+ *
  * @author  unascribed
  * @see     java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory)
  * @see     java.net.SocketImpl
--- a/src/java.base/share/classes/jdk/internal/loader/URLClassPath.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/java.base/share/classes/jdk/internal/loader/URLClassPath.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1125,27 +1125,21 @@
 
         /**
          * Attempt to return a file URL by resolving input against a base file
-         * URL. The input is an absolute or relative file URL that encodes a
-         * file path.
-         *
-         * @apiNote Nonsensical input such as a Windows file path with a drive
-         * letter cannot be disambiguated from an absolute URL so will be rejected
-         * (by returning null) by this method.
-         *
+         * URL.
          * @return the resolved URL or null if the input is an absolute URL with
          *         a scheme other than file (ignoring case)
          * @throws MalformedURLException
          */
         static URL tryResolveFile(URL base, String input) throws MalformedURLException {
-            int index = input.indexOf(':');
-            boolean isFile;
-            if (index >= 0) {
-                String scheme = input.substring(0, index);
-                isFile = "file".equalsIgnoreCase(scheme);
-            } else {
-                isFile = true;
+            URL retVal = new URL(base, input);
+            if (input.indexOf(':') >= 0 &&
+                    !"file".equalsIgnoreCase(retVal.getProtocol())) {
+                // 'input' contains a ':', which might be a scheme, or might be
+                // a Windows drive letter.  If the protocol for the resolved URL
+                // isn't "file:", it should be ignored.
+                return null;
             }
-            return (isFile) ? new URL(base, input) : null;
+            return retVal;
         }
 
         /**
--- a/src/java.base/share/classes/sun/security/ssl/SSLContextImpl.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/java.base/share/classes/sun/security/ssl/SSLContextImpl.java	Wed Dec 11 11:13:41 2019 +0530
@@ -550,9 +550,7 @@
                 ProtocolVersion.TLS13,
                 ProtocolVersion.TLS12,
                 ProtocolVersion.TLS11,
-                ProtocolVersion.TLS10,
-                ProtocolVersion.SSL30,
-                ProtocolVersion.SSL20Hello
+                ProtocolVersion.TLS10
             });
 
             supportedCipherSuites = getApplicableSupportedCipherSuites(
@@ -609,8 +607,7 @@
         static {
             clientDefaultProtocols = getAvailableProtocols(
                     new ProtocolVersion[] {
-                ProtocolVersion.TLS10,
-                ProtocolVersion.SSL30
+                ProtocolVersion.TLS10
             });
 
             clientDefaultCipherSuites = getApplicableEnabledCipherSuites(
@@ -641,8 +638,7 @@
             clientDefaultProtocols = getAvailableProtocols(
                     new ProtocolVersion[] {
                 ProtocolVersion.TLS11,
-                ProtocolVersion.TLS10,
-                ProtocolVersion.SSL30
+                ProtocolVersion.TLS10
             });
 
             clientDefaultCipherSuites = getApplicableEnabledCipherSuites(
@@ -675,8 +671,7 @@
                     new ProtocolVersion[] {
                 ProtocolVersion.TLS12,
                 ProtocolVersion.TLS11,
-                ProtocolVersion.TLS10,
-                ProtocolVersion.SSL30
+                ProtocolVersion.TLS10
             });
 
             clientDefaultCipherSuites = getApplicableEnabledCipherSuites(
@@ -709,8 +704,7 @@
                 ProtocolVersion.TLS13,
                 ProtocolVersion.TLS12,
                 ProtocolVersion.TLS11,
-                ProtocolVersion.TLS10,
-                ProtocolVersion.SSL30
+                ProtocolVersion.TLS10
             });
 
             clientDefaultCipherSuites = getApplicableEnabledCipherSuites(
@@ -847,26 +841,13 @@
             // Use the default enabled protocols if no customization
             ProtocolVersion[] candidates;
             if (refactored.isEmpty()) {
-                if (client) {
-                    // default client protocols
-                    candidates = new ProtocolVersion[] {
-                            ProtocolVersion.TLS13,
-                            ProtocolVersion.TLS12,
-                            ProtocolVersion.TLS11,
-                            ProtocolVersion.TLS10,
-                            ProtocolVersion.SSL30
-                        };
-
-                } else {
-                    candidates = new ProtocolVersion[] {
-                            ProtocolVersion.TLS13,
-                            ProtocolVersion.TLS12,
-                            ProtocolVersion.TLS11,
-                            ProtocolVersion.TLS10,
-                            ProtocolVersion.SSL30,
-                            ProtocolVersion.SSL20Hello
+                // Client and server use the same default protocols.
+                candidates = new ProtocolVersion[] {
+                        ProtocolVersion.TLS13,
+                        ProtocolVersion.TLS12,
+                        ProtocolVersion.TLS11,
+                        ProtocolVersion.TLS10
                     };
-                }
             } else {
                 // Use the customized TLS protocols.
                 candidates =
--- a/src/java.base/share/classes/sun/security/ssl/SSLTransport.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/java.base/share/classes/sun/security/ssl/SSLTransport.java	Wed Dec 11 11:13:41 2019 +0530
@@ -28,6 +28,7 @@
 import java.io.EOFException;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import javax.crypto.AEADBadTagException;
 import javax.crypto.BadPaddingException;
 import javax.net.ssl.SSLHandshakeException;
 
@@ -116,6 +117,8 @@
             }
 
             throw context.fatal(Alert.UNEXPECTED_MESSAGE, unsoe);
+        } catch (AEADBadTagException bte) {
+            throw context.fatal(Alert.BAD_RECORD_MAC, bte);
         } catch (BadPaddingException bpe) {
             /*
              * The basic SSLv3 record protection involves (optional)
@@ -123,9 +126,9 @@
              * data origin authentication.  We do them both here, and
              * throw a fatal alert if the integrity check fails.
              */
-            Alert alert = (context.handshakeContext != null) ?
-                    Alert.HANDSHAKE_FAILURE :
-                    Alert.BAD_RECORD_MAC;
+             Alert alert = (context.handshakeContext != null) ?
+                     Alert.HANDSHAKE_FAILURE :
+                     Alert.BAD_RECORD_MAC;
             throw context.fatal(alert, bpe);
         } catch (SSLHandshakeException she) {
             // may be record sequence number overflow
--- a/src/java.base/share/native/libjava/jdk_util.c	Tue Dec 10 10:44:09 2019 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2005, 2019, 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.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-
-#include "jvm.h"
-#include "jdk_util.h"
-
-JNIEXPORT void
-JDK_GetVersionInfo0(jdk_version_info* info, size_t info_size) {
-    /* These VERSION_* macros are given by the build system */
-    const unsigned int version_major = VERSION_FEATURE;
-    const unsigned int version_minor = VERSION_INTERIM;
-    const unsigned int version_security = VERSION_UPDATE;
-    const unsigned int version_patch = VERSION_PATCH;
-    const unsigned int version_build = VERSION_BUILD;
-
-    memset(info, 0, info_size);
-    info->jdk_version = ((version_major & 0xFF) << 24) |
-                        ((version_minor & 0xFF) << 16) |
-                        ((version_security & 0xFF) << 8)  |
-                        (version_build & 0xFF);
-    info->patch_version = version_patch;
-}
--- a/src/java.base/share/native/libjava/jdk_util.h	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/java.base/share/native/libjava/jdk_util.h	Wed Dec 11 11:13:41 2019 +0530
@@ -40,12 +40,6 @@
  */
 
 /*
- *
- */
-JNIEXPORT void
-JDK_GetVersionInfo0(jdk_version_info* info, size_t info_size);
-
-/*
  * Export the platform dependent path canonicalization so that
  * the VM can find it when loading system classes.
  * This function is also used by the instrumentation agent.
--- a/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/Arguments.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/Arguments.java	Wed Dec 11 11:13:41 2019 +0530
@@ -565,11 +565,24 @@
                 }
             }
         }
-        if (installerOnly && hasRuntime) {
-            // note --runtime-image is only for image or runtime installer.
-            throw new PackagerException("ERR_InvalidTypeOption",
-                    CLIOptions.PREDEFINED_RUNTIME_IMAGE.getIdWithPrefix(),
-                    ptype);
+        if (hasRuntime) {
+            if (hasAppImage) {
+                // note --runtime-image is only for image or runtime installer.
+                throw new PackagerException("ERR_MutuallyExclusiveOptions",
+                        CLIOptions.PREDEFINED_RUNTIME_IMAGE.getIdWithPrefix(),
+                        CLIOptions.PREDEFINED_APP_IMAGE.getIdWithPrefix());
+            }
+            if (allOptions.contains(CLIOptions.ADD_MODULES)) {
+                throw new PackagerException("ERR_MutuallyExclusiveOptions",
+                        CLIOptions.PREDEFINED_RUNTIME_IMAGE.getIdWithPrefix(),
+                        CLIOptions.ADD_MODULES.getIdWithPrefix());
+            }
+            if (allOptions.contains(CLIOptions.BIND_SERVICES)) {
+                throw new PackagerException("ERR_MutuallyExclusiveOptions",
+                        CLIOptions.PREDEFINED_RUNTIME_IMAGE.getIdWithPrefix(),
+                        CLIOptions.BIND_SERVICES.getIdWithPrefix());
+            }
+
         }
         if (hasMainJar && hasMainModule) {
             throw new PackagerException("ERR_BothMainJarAndModule");
--- a/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/IOUtils.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/IOUtils.java	Wed Dec 11 11:13:41 2019 +0530
@@ -121,10 +121,7 @@
         try (FileChannel source = new FileInputStream(sourceFile).getChannel();
             FileChannel destination =
                     new FileOutputStream(destFile).getChannel()) {
-
-            if (destination != null && source != null) {
-                destination.transferFrom(source, 0, source.size());
-            }
+            destination.transferFrom(source, 0, source.size());
         }
 
         //preserve executable bit!
--- a/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/resources/MainResources.properties	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/resources/MainResources.properties	Wed Dec 11 11:13:41 2019 +0530
@@ -72,6 +72,7 @@
 ERR_UnsupportedOption=Error: Option [{0}] is not valid on this platform
 ERR_InvalidTypeOption=Error: Option [{0}] is not valid with type [{1}]
 ERR_NoInstallerEntryPoint=Error: Option [{0}] is not valid without --module or --main-jar entry point option
+ERR_MutuallyExclusiveOptions="Error: Mutually exclusive options [{0}] and [{1}]
 
 ERR_MissingArgument=Error: Missing argument: {0}
 ERR_MissingAppResources=Error: No application jars found
--- a/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/resources/MainResources_ja.properties	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/resources/MainResources_ja.properties	Wed Dec 11 11:13:41 2019 +0530
@@ -72,6 +72,7 @@
 ERR_UnsupportedOption=Error: Option [{0}] is not valid on this platform
 ERR_InvalidTypeOption=Error: Option [{0}] is not valid with type [{1}]
 ERR_NoInstallerEntryPoint=Error: Option [{0}] is not valid without --module or --main-jar entry point option
+ERR_MutuallyExclusiveOptions="Error: Mutually exclusive options [{0}] and [{1}]
 
 ERR_MissingArgument=Error: Missing argument: {0}
 ERR_MissingAppResources=Error: No application jars found
--- a/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/resources/MainResources_zh_CN.properties	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/internal/resources/MainResources_zh_CN.properties	Wed Dec 11 11:13:41 2019 +0530
@@ -72,6 +72,7 @@
 ERR_UnsupportedOption=Error: Option [{0}] is not valid on this platform
 ERR_InvalidTypeOption=Error: Option [{0}] is not valid with type [{1}]
 ERR_NoInstallerEntryPoint=Error: Option [{0}] is not valid without --module or --main-jar entry point option
+ERR_MutuallyExclusiveOptions="Error: Mutually exclusive options [{0}] and [{1}]
 
 ERR_MissingArgument=Error: Missing argument: {0}
 ERR_MissingAppResources=Error: No application jars found
--- a/src/jdk.net/share/classes/jdk/net/ExtendedSocketOptions.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.net/share/classes/jdk/net/ExtendedSocketOptions.java	Wed Dec 11 11:13:41 2019 +0530
@@ -64,7 +64,11 @@
      * setting or getting this option requires a {@link NetworkPermission}
      * {@code ("setOption.SO_FLOW_SLA")} or {@code "getOption.SO_FLOW_SLA"}
      * respectively.
+     * @deprecated This is supported only on Solaris. Due to deprecation
+     * of Solaris port, this option is also deprecated.
      */
+    @Deprecated(since="14", forRemoval=true)
+    @SuppressWarnings("removal")
     public static final SocketOption<SocketFlow> SO_FLOW_SLA = new
         ExtSocketOption<SocketFlow>("SO_FLOW_SLA", SocketFlow.class);
 
@@ -192,6 +196,7 @@
                 new sun.net.ext.ExtendedSocketOptions(extendedOptions) {
 
             @Override
+            @SuppressWarnings("removal")
             public void setOption(FileDescriptor fd,
                                   SocketOption<?> option,
                                   Object value)
@@ -222,6 +227,7 @@
             }
 
             @Override
+            @SuppressWarnings("removal")
             public Object getOption(FileDescriptor fd,
                                     SocketOption<?> option)
                 throws SocketException
@@ -265,6 +271,7 @@
     private static final JavaIOFileDescriptorAccess fdAccess =
             SharedSecrets.getJavaIOFileDescriptorAccess();
 
+    @SuppressWarnings("removal")
     private static void setFlowOption(FileDescriptor fd, SocketFlow f)
         throws SocketException
     {
@@ -274,6 +281,7 @@
         f.status(status);  // augment the given flow with the status
     }
 
+    @SuppressWarnings("removal")
     private static void getFlowOption(FileDescriptor fd, SocketFlow f)
             throws SocketException {
         int status = platformSocketOptions.getFlowOption(fdAccess.get(fd), f);
@@ -362,6 +370,7 @@
             throw new UnsupportedOperationException("unsupported socket option");
         }
 
+        @SuppressWarnings("removal")
         int getFlowOption(int fd, SocketFlow f) throws SocketException {
             throw new UnsupportedOperationException("unsupported socket option");
         }
--- a/src/jdk.net/share/classes/jdk/net/NetworkPermission.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.net/share/classes/jdk/net/NetworkPermission.java	Wed Dec 11 11:13:41 2019 +0530
@@ -49,14 +49,15 @@
  *   <td>set the {@link ExtendedSocketOptions#SO_FLOW_SLA SO_FLOW_SLA} option
  *       on any socket that supports it</td>
  *   <td>allows caller to set a higher priority or bandwidth allocation
- *       to sockets it creates, than they might otherwise be allowed.</td>
+ *       to sockets it creates, than they might otherwise be allowed.
+ *       This permission is deprecated.</td>
  * </tr>
  * <tr>
  *   <th scope="row">getOption.SO_FLOW_SLA</th>
  *   <td>retrieve the {@link ExtendedSocketOptions#SO_FLOW_SLA SO_FLOW_SLA}
  *       setting from any socket that supports the option</td>
  *   <td>allows caller access to SLA information that it might not
- *       otherwise have</td>
+ *       otherwise have. This permission is deprecated.</td>
  * </tr>
  * </tbody>
  * </table>
--- a/src/jdk.net/share/classes/jdk/net/SocketFlow.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.net/share/classes/jdk/net/SocketFlow.java	Wed Dec 11 11:13:41 2019 +0530
@@ -43,8 +43,12 @@
  * When a security manager is installed, a {@link NetworkPermission}
  * is required to set or get this option.
  *
+ * @deprecated This is supported only on Solaris. Due to deprecation
+ * of Solaris port, this feature is also deprecated.
+ *
  * @since 1.8
  */
+@Deprecated(since="14", forRemoval=true)
 public class SocketFlow {
 
     @Native public static final int UNSET = -1;
@@ -65,9 +69,13 @@
      * socket option. Both setting and getting the option return
      * one of these statuses, which reflect the state of socket's
      * flow.
+     * @deprecated This is supported only on Solaris. Due to
+     * deprecation of Solaris port, this enum is also deprecated.
      *
      * @since 1.8
      */
+    @SuppressWarnings("removal")
+    @Deprecated(since="14", forRemoval=true)
     public enum Status {
         /**
          * Set or get socket option has not been called yet. Status
--- a/src/jdk.net/share/classes/jdk/net/Sockets.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.net/share/classes/jdk/net/Sockets.java	Wed Dec 11 11:13:41 2019 +0530
@@ -259,6 +259,7 @@
         return isReusePortAvailable;
     }
 
+    @SuppressWarnings("removal")
     private static Map<Class<?>,Set<SocketOption<?>>> optionSets() {
         Map<Class<?>,Set<SocketOption<?>>> options = new HashMap<>();
         boolean flowsupported = PlatformSocketOptions.get().flowSupported();
--- a/src/jdk.net/solaris/classes/jdk/net/SolarisSocketOptions.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/src/jdk.net/solaris/classes/jdk/net/SolarisSocketOptions.java	Wed Dec 11 11:13:41 2019 +0530
@@ -30,6 +30,7 @@
 import java.security.PrivilegedAction;
 import jdk.net.ExtendedSocketOptions.PlatformSocketOptions;
 
+@SuppressWarnings("removal")
 class SolarisSocketOptions extends PlatformSocketOptions {
 
     public SolarisSocketOptions() { }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/c1/TestPrintIRDuringConstruction.java	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2019, 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
+ * @summary load/store elimination will print out instructions without bcis.
+ * @bug 8235383
+ * @requires vm.debug == true
+ * @run main/othervm -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -Xcomp -XX:+PrintIRDuringConstruction -XX:+Verbose compiler.c1.TestPrintIRDuringConstruction
+ */
+
+package compiler.c1;
+
+public class TestPrintIRDuringConstruction {
+    static class Dummy {
+        public int value;
+    }
+
+    static int foo() {
+        Dummy obj = new Dummy();       // c1 doesn't have Escape Analysis
+
+        obj.value = 0;                 // dummy store an initial value.
+        return obj.value + obj.value;  // redundant load
+    }
+
+    public static void main(String[] args) {
+        for (int i=0; i<5_000; ++i) {
+            foo();
+        }
+    }
+ }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/jvmci/TestEnableJVMCIProduct.java	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2019, 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
+ * @bug 8235539
+ * @summary Tests effect of -XX:+EnableJVMCIProduct on EnableJVMCI and UseJVMCICompiler
+ * @requires vm.jvmci
+ * @library /test/lib
+ */
+
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.process.OutputAnalyzer;
+
+public class TestEnableJVMCIProduct {
+
+    static class Expectation {
+        final String name;
+        final String value;
+        final String origin;
+        final String pattern;
+        Expectation(final String name, String value, String origin) {
+            this.name = name;
+            this.value = value;
+            this.origin = origin;
+            this.pattern = "bool +" + name + " += " + value + " +\\{JVMCI product\\} \\{" + origin + "\\}";
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        // Test EnableJVMCIProduct without any other explicit JVMCI option
+        test("-XX:-PrintWarnings",
+            new Expectation("EnableJVMCI", "true", "default"),
+            new Expectation("UseJVMCICompiler", "true", "default"));
+        test("-XX:+UseJVMCICompiler",
+            new Expectation("EnableJVMCI", "true", "default"),
+            new Expectation("UseJVMCICompiler", "true", "command line"));
+        test("-XX:-UseJVMCICompiler",
+            new Expectation("EnableJVMCI", "true", "default"),
+            new Expectation("UseJVMCICompiler", "false", "command line"));
+        test("-XX:+EnableJVMCI",
+            new Expectation("EnableJVMCI", "true", "command line"),
+            new Expectation("UseJVMCICompiler", "true", "default"));
+        test("-XX:-EnableJVMCI",
+            new Expectation("EnableJVMCI", "false", "command line"),
+            new Expectation("UseJVMCICompiler", "false", "default"));
+    }
+
+    static void test(String explicitFlag, Expectation... expectations) throws Exception {
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+            "-XX:+UnlockExperimentalVMOptions", "-XX:+EnableJVMCIProduct", "-XX:-UnlockExperimentalVMOptions",
+            explicitFlag,
+            "-XX:+PrintFlagsFinal", "-version");
+        OutputAnalyzer output = new OutputAnalyzer(pb.start());
+        for (Expectation expectation : expectations) {
+            output.stdoutShouldMatch(expectation.pattern);
+        }
+        output.shouldHaveExitValue(0);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/loopopts/superword/CoLocatePack.java	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2019, 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
+ * @bug 8233032
+ * @summary Tests SuperWord::co_locate_pack() involving a load pack that relies on a sandwiched and moved StoreF node.
+ *
+ * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:UseAVX=1
+ *      -XX:CompileCommand=compileonly,compiler.loopopts.superword.CoLocatePack::test
+ *      compiler.loopopts.superword.CoLocatePack
+ */
+package compiler.loopopts.superword;
+
+public class CoLocatePack {
+
+    public static long lFld = 10;
+    public static float fFld = 11.2f;
+    public int iFld = 12;
+
+    public void test() {
+        int iArr[] = new int[200];
+        float fArr[] = new float[200];
+
+        /*
+         * The IR for this loop contains the following StoreF chain after unrolling once:
+         * StoreF 1 -> StoreF 2 -> StoreF 3 -> StoreF 4 -> StoreF 5 -> StoreF 6
+         *
+         * The superword algorithm creates a pack for [ StoreF 2 and 5 ] and one for [ StoreF 3 and 6 ]
+         * (The pack [ StoreF 1 and 4 ] is filtered out). As a result, StoreF 3 and 4 are sandwiched between
+         * StoreF 2 and 5. SuperWord::co_locate_pack() will move both after StoreF 5 to remove any dependencies
+         * within the pack:
+         * StoreF 1 -> [ StoreF 2 -> StoreF 5 ] -> StoreF 3 -> StoreF 4 -> StoreF 6
+         *
+         * Afterwards, StoreF 4 is moved before StoreF 3 to remove any dependency within [ StoreF 3 -> StoreF 6 ]
+         * The resulting chain looks like this:
+         * StoreF 1 -> [ StoreF 2 -> StoreF 5 ] -> StoreF 4 -> [ StoreF 3 -> StoreF 6 ]
+         *
+         * When later processing a load pack depending on StoreF 4 and 5, the first and last memory state of the load pack are
+         * determined by using the bb indices. However, those were not updated before when moving nodes around and
+         * bb_idx(4) < bb_idx(5) still holds even though they swapped positions in the IR. Therefore, it wrongly uses the memory
+         * state of the first load (StoreF 5) in the pack as the last memory state. As a result, the graph walk always starts
+         * following the input of StoreF 5 (which should actually be StoreF 4) and will move beyond a loop phi as the stop
+         * condition is never met for a node having another memory state than the first one of the load pack. Eventually a
+         * bb index for a node outside of the loop is read resulting in an assertion failure.
+         *
+         * The fix uses a different approach to find the first and last memory state of a load pack without depending on bb indices.
+         */
+        for (int i = 5; i < 169; i++) {
+            fArr[i + 1] += ((long)(fFld) | 1); // StoreF 1/4
+            iFld += lFld;
+            fArr[i - 1] -= 20; // StoreF 2/5
+            fFld += i;
+            fArr[i + 1] -= -117; // StoreF 3/6
+
+            int j = 10;
+            do {
+            } while (--j > 0);
+
+            iArr[i] += 11;
+        }
+    }
+
+    public static void main(String[] strArr) {
+        CoLocatePack _instance = new CoLocatePack();
+        for (int i = 0; i < 1000; i++ ) {
+            _instance.test();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/loopstripmining/DeadNodesInOuterLoopAtLoopCloning2.java	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2019, 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 8234350
+ * @summary loop unrolling breaks when outer strip mined loop contains dead node
+ *
+ * @run main/othervm -Xcomp -XX:-TieredCompilation -XX:CompileOnly=DeadNodesInOuterLoopAtLoopCloning2 DeadNodesInOuterLoopAtLoopCloning2
+ *
+ */
+
+public class DeadNodesInOuterLoopAtLoopCloning2 {
+    public static void vMeth(boolean b, int i, float f) {
+        int i1=-4, i2=14, i16=10;
+        byte by=116;
+
+        for (i1 = 323; i1 > 3; i1 -= 2) {
+            if (i2 != 0) {
+                return;
+            }
+            for (i16 = 1; i16 < 10; i16++) {
+                i2 = by;
+                i += (i16 - i2);
+                i2 -= i16;
+                if (b) {
+                    i = by;
+                }
+                i2 *= 20;
+            }
+        }
+    }
+
+    public static void main(String[] strArr) {
+        DeadNodesInOuterLoopAtLoopCloning2 _instance = new DeadNodesInOuterLoopAtLoopCloning2();
+        for (int i = 0; i < 10; i++ ) {
+            _instance.vMeth(true, 168, -125.661F);
+        }
+    }
+}
--- a/test/hotspot/jtreg/compiler/testlibrary/rtm/RTMLockingStatistics.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/hotspot/jtreg/compiler/testlibrary/rtm/RTMLockingStatistics.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -36,14 +36,14 @@
  * Example of locking statistics:
  *
  * java/lang/ClassLoader.loadClass@7
- * # rtm locks total (estimated): 0
- * # rtm lock aborts  : 13
- * # rtm lock aborts 0: 12
- * # rtm lock aborts 1: 0
- * # rtm lock aborts 2: 0
- * # rtm lock aborts 3: 0
- * # rtm lock aborts 4: 0
- * # rtm lock aborts 5: 0
+ * # rtm locks total (estimated): 6656
+ * # rtm lock aborts (total): 10000
+ * # rtm lock aborts 0 (abort instruction   ): 9999
+ * # rtm lock aborts 1 (may succeed on retry): 9999
+ * # rtm lock aborts 2 (thread conflict     ): 0
+ * # rtm lock aborts 3 (buffer overflow     ): 1
+ * # rtm lock aborts 4 (debug or trap hit   ): 0
+ * # rtm lock aborts 5 (maximum nested depth): 0
  */
 public class RTMLockingStatistics {
     /**
@@ -58,7 +58,7 @@
 
     static {
         String abortRe
-                = "# rtm lock aborts\\s+(?<type>[0-9]+):\\s(?<count>[0-9]+)";
+                = "# rtm lock aborts\\s+(?<type>[0-9]+)\\s+\\([a-z\\s]+\\):\\s(?<count>[0-9]+)";
 
         ABORT_PATTERN = Pattern.compile(abortRe);
         RTM_LOCKING_STATISTICS_PATTERN = Pattern.compile(
@@ -66,7 +66,7 @@
                 "(?<methodName>[^@\n]+)@(?<bci>[0-9]+)\n" +
                 "# rtm locks total \\(estimated\\):\\s*" +
                 "(?<totalLocks>[0-9]+)\n" +
-                "# rtm lock aborts\\s+:\\s*(?<totalAborts>[0-9]+)\n" +
+                "# rtm lock aborts\\s+\\(total\\):\\s*(?<totalAborts>[0-9]+)\n" +
                 "(?<abortStats>(" + abortRe + "\n)+)");
     }
 
--- a/test/hotspot/jtreg/runtime/records/recordReflectionTest.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/hotspot/jtreg/runtime/records/recordReflectionTest.java	Wed Dec 11 11:13:41 2019 +0530
@@ -87,8 +87,8 @@
 
         recordReflectionTest rft = new recordReflectionTest();
         components = rft.nr.getComponents();
-        if (components.length != 0) {
-            throw new RuntimeException("Non-empty component accessors returned for notRecord");
+        if (components != null) {
+            throw new RuntimeException("Non-null component accessors returned for notRecord");
         }
 
         recordGeneric rg = new recordGeneric(35, "abcd");
--- a/test/jdk/ProblemList.txt	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/ProblemList.txt	Wed Dec 11 11:13:41 2019 +0530
@@ -681,7 +681,6 @@
 javax/net/ssl/DTLS/PacketLossRetransmission.java                8169086 macosx-x64
 javax/net/ssl/DTLS/RespondToRetransmit.java                     8169086 macosx-x64
 javax/net/ssl/DTLS/CipherSuite.java                             8202059 macosx-x64
-javax/net/ssl/templates/SSLSocketSSLEngineTemplate.java         8231810 generic-all
 
 sun/security/provider/KeyStore/DKSTest.sh                       8180266 windows-all
 
--- a/test/jdk/java/io/Serializable/records/migration/AbstractTest.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/java/io/Serializable/records/migration/AbstractTest.java	Wed Dec 11 11:13:41 2019 +0530
@@ -38,12 +38,14 @@
 import static org.testng.Assert.*;
 
 /**
- * An abstract superclass foe tests that require to serialize and deserialize
+ * An abstract superclass for tests that require to serialize and deserialize
  * record-like and record classes. Can be used for determining migration and
  * interop between record-like and record classes.
  */
 public class AbstractTest {
 
+    private static final String VERSION = Integer.toString(Runtime.version().feature());
+
     static final String TEST_SRC = System.getProperty("test.src", ".");
     static final String TEST_CLASSES = System.getProperty("test.classes", ".");
     static final Path TEST_CLASSES_DIR = Path.of(TEST_CLASSES);
@@ -57,11 +59,11 @@
     @BeforeTest
     public void setup() throws IOException {
         assertTrue(CompilerUtils.compile(PLAIN_SRC_DIR, PLAIN_DEST_DIR,
-                   "--enable-preview", "-source", "14",
+                   "--enable-preview", "-source", VERSION,
                    "--class-path", TEST_CLASSES_DIR.toString()));
 
         assertTrue(CompilerUtils.compile(RECORD_SRC_DIR, RECORD_DEST_DIR,
-                   "--enable-preview", "-source", "14",
+                   "--enable-preview", "-source", VERSION,
                    "--class-path", TEST_CLASSES_DIR.toString()));
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/reflect/records/RecordPermissionsTest.java	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2019, 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
+ * @bug 8235369
+ * @summary Security manager checks for record related core reflection
+ * @compile --enable-preview -source ${jdk.version} RecordPermissionsTest.java
+ * @run testng/othervm/java.security.policy=allPermissions.policy --enable-preview RecordPermissionsTest
+ */
+
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.Path;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.Permission;
+import java.security.Permissions;
+import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Stream;
+import org.testng.annotations.*;
+import org.testng.annotations.Test;
+import static java.lang.System.out;
+import static org.testng.Assert.*;
+
+public class RecordPermissionsTest {
+
+    class C { }
+    record R1() { }
+    record R2(int i, int j) { }
+    record R3(List<String> ls) { }
+    record R4(R1 r1, R2 r2, R3 r3) { }
+    record R5(String... args) { }
+    record R6(long l, String... args) implements java.io.Serializable { }
+
+    /** A list of classes loaded by a different loader to that of this class' loader. */
+    static final List<Class<?>> OTHER_LOADER_CLASSES = otherLoaderClasses();
+
+    /** A list of classes loaded by the same loader as this class' loader. */
+    static final List<Class<?>> SAME_LOADER_CLASSES = sameLoaderClasses();
+
+    static List<Class<?>> otherLoaderClasses() {
+        try {
+            ClassLoader cl = new URLClassLoader(
+                "other-classloader",
+                new URL[]{Path.of(System.getProperty("test.classes")).toUri().toURL()},
+                ClassLoader.getPlatformClassLoader()); // skip the system classloader
+
+            return List.of(cl.loadClass("RecordPermissionsTest$R1"),
+                           cl.loadClass("RecordPermissionsTest$R2"),
+                           Record.class,
+                           Record[].class,
+                           byte.class,
+                           byte[].class);
+        } catch (Exception e) {
+            throw new AssertionError("should not reach here", e);
+        }
+    }
+
+    static List<Class<?>> sameLoaderClasses() {
+        return List.of(C.class,
+                       R3.class,
+                       R4.class,
+                       R5.class,
+                       R6.class);
+    }
+
+    @BeforeTest
+    public void setup() throws Exception {
+        assertTrue(System.getSecurityManager() != null);
+    }
+
+    @DataProvider(name = "isRecordScenarios")
+    public Object[][] isRecordScenarios() {
+         return Stream.of(OTHER_LOADER_CLASSES, SAME_LOADER_CLASSES)
+                      .flatMap(Collection::stream)
+                      .map(cls -> new Object[]{"isRecord-" + cls.getName(),
+                                               (PrivilegedAction<?>)cls::isRecord })
+                      .toArray(Object[][]::new);
+     }
+
+     @DataProvider(name = "otherGetRecordComponentsScenarios")
+     public Object[][] otherGetRecordComponentsScenarios() {
+         return OTHER_LOADER_CLASSES.stream()
+                     .map(cls -> new Object[]{"getRecordComponents-other-" + cls.getName(),
+                                             (PrivilegedAction<?>)cls::getRecordComponents })
+                     .toArray(Object[][]::new);
+    }
+
+    @DataProvider(name = "sameGetRecordComponentsScenarios")
+    public Object[][] sameGetRecordComponentsScenarios() {
+        return SAME_LOADER_CLASSES.stream()
+                     .map(cls -> new Object[]{"getRecordComponents-same-" + cls.getName(),
+                                             (PrivilegedAction<?>)cls::getRecordComponents })
+                     .toArray(Object[][]::new);
+    }
+
+    @DataProvider(name = "allScenarios")
+    public Object[][] allScenarios() {
+        return Stream.of(isRecordScenarios(),
+                         sameGetRecordComponentsScenarios(),
+                         otherGetRecordComponentsScenarios())
+                     .flatMap(Arrays::stream)
+                     .toArray(Object[][]::new);
+    }
+
+    @DataProvider(name = "allNonThrowingScenarios")
+    public Object[][] allNonThrowingScenarios() {
+        return Stream.of(isRecordScenarios(),
+                         sameGetRecordComponentsScenarios())
+                     .flatMap(Arrays::stream)
+                     .toArray(Object[][]::new);
+    }
+
+    /** Tests all scenarios without any security manager - sanity. */
+    @Test(dataProvider = "allScenarios")
+    public void testWithNoSecurityManager(String description,
+                                          PrivilegedAction<?> action) {
+        System.setSecurityManager(null);
+        try {
+            AccessController.doPrivileged(action);
+        } finally {
+            System.setSecurityManager(new SecurityManager());
+        }
+    }
+
+    /** Tests all scenarios with all permissions. */
+    @Test(dataProvider = "allScenarios")
+    public void testWithAllPermissions(String description,
+                                       PrivilegedAction<?> action) {
+        // Run with all permissions, i.e. no further restrictions than test's AllPermission
+        assert System.getSecurityManager() != null;
+        AccessController.doPrivileged(action);
+    }
+
+    /** Tests given scenarios with no permissions - expect should not require any. */
+    @Test(dataProvider = "allNonThrowingScenarios")
+    public void testWithNoPermissionsPass(String description,
+                                          PrivilegedAction<?> action) {
+        assert System.getSecurityManager() != null;
+        AccessController.doPrivileged(action, noPermissions());
+    }
+
+    static Class<SecurityException> SE = SecurityException.class;
+
+    /**
+     * Tests getRecordComponents with no permissions, and classes
+     * loaded by a loader other than the test class' loader - expects
+     * security exception.
+     */
+    @Test(dataProvider = "otherGetRecordComponentsScenarios")
+    public void testWithNoPermissionsFail(String description,
+                                          PrivilegedAction<?> action) {
+        // Run with NO permissions, i.e. expect SecurityException
+        assert System.getSecurityManager() != null;
+        SecurityException se = expectThrows(SE, () -> AccessController.doPrivileged(action, noPermissions()));
+        out.println("Got expected SecurityException: " + se);
+    }
+
+    /**
+     * Tests getRecordComponents with minimal permissions, and classes
+     * loaded by a loader other than the test class' loader.
+     */
+    @Test(dataProvider = "otherGetRecordComponentsScenarios")
+    public void testWithMinimalPermissions(String description,
+                                           PrivilegedAction<?> action) {
+        // Run with minimal permissions, i.e. just what is required
+        assert System.getSecurityManager() != null;
+        AccessControlContext minimalACC = withPermissions(
+                new RuntimePermission("accessDeclaredMembers"),
+                new RuntimePermission("accessClassInPackage.*")
+        );
+        AccessController.doPrivileged(action, minimalACC);
+    }
+
+    static AccessControlContext withPermissions(Permission... perms) {
+        Permissions p = new Permissions();
+        for (Permission perm : perms) {
+            p.add(perm);
+        }
+        ProtectionDomain pd = new ProtectionDomain(null, p);
+        return new AccessControlContext(new ProtectionDomain[]{ pd });
+    }
+
+    static AccessControlContext noPermissions() {
+        return withPermissions(/*empty*/);
+    }
+}
--- a/test/jdk/java/lang/reflect/records/RecordReflectionTest.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/java/lang/reflect/records/RecordReflectionTest.java	Wed Dec 11 11:13:41 2019 +0530
@@ -23,16 +23,16 @@
 
 /*
  * @test
- * @bug 8235369
+ * @bug 8235369 8235550
  * @summary reflection test for records
  * @compile --enable-preview -source ${jdk.version} RecordReflectionTest.java
  * @run testng/othervm --enable-preview RecordReflectionTest
+ * @run testng/othervm/java.security.policy=allPermissions.policy --enable-preview RecordReflectionTest
  */
 
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.util.List;
-
 import org.testng.annotations.*;
 import static org.testng.Assert.*;
 
@@ -49,18 +49,56 @@
 
     record R4(R1 r1, R2 r2, R3 r3) {}
 
-    public void testIsRecord() {
-        assertFalse(NoRecord.class.isRecord());
+    record R5(String... args) {}
 
-        for (Class<?> c : List.of(R1.class, R2.class, R3.class)) {
-            String message = c.toGenericString();
-            assertTrue(c.isRecord(), message);
-            assertTrue(message.contains("record") , message);
-        }
+    record R6(long l, String... args) implements java.io.Serializable {}
+
+    record R7(String s1, String s2, String... args) {}
+
+    record R8<A, B>(A a, B b) implements java.io.Serializable { }
+
+    @DataProvider(name = "recordClasses")
+    public Object[][] recordClassData() {
+        return List.of(R1.class,
+                       R2.class,
+                       R3.class,
+                       R4.class,
+                       R5.class,
+                       R6.class,
+                       R7.class,
+                       R8.class)
+                   .stream().map(c -> new Object[] {c}).toArray(Object[][]::new);
     }
 
-    public void testGetComponentsNoRecord() {
-        assertTrue(NoRecord.class.getRecordComponents().length == 0);
+    @Test(dataProvider = "recordClasses")
+    public void testIsRecord(Class<?> cls) {
+        String message = cls.toGenericString();
+        assertTrue(cls.isRecord());
+        assertTrue(cls.getSuperclass() == java.lang.Record.class);
+        assertTrue(cls.getRecordComponents() != null);
+        assertTrue(message.contains("record"), message);
+    }
+
+    @DataProvider(name = "notRecordClasses")
+    public Object[][] notRecordClasses() {
+        return List.of(NoRecord.class,
+                       NoRecord[].class,
+                       Record.class,  // java.lang.Record is not itself a record class
+                       Record[].class,
+                       byte.class,
+                       byte[].class,
+                       int.class,
+                       int[].class,
+                       long.class,
+                       long[].class)
+                   .stream().map(c -> new Object[] {c}).toArray(Object[][]::new);
+    }
+
+    @Test(dataProvider = "notRecordClasses")
+    public void testNotARecordClass(Class<?> cls) {
+        assertFalse(cls.isRecord());
+        assertFalse(cls.getSuperclass() == java.lang.Record.class);
+        assertTrue(cls.getRecordComponents() == null);
     }
 
     @DataProvider(name = "reflectionData")
@@ -83,7 +121,7 @@
                            new String[]{ "java.util.List<java.lang.String>"} },
             new Object[] { new R4(new R1(), new R2(6, 7), new R3(List.of("s"))),
                            3,
-                           new Object[]{ new R1(), new R2(6, 7), new R3(List.of("s")) } ,
+                           new Object[]{ new R1(), new R2(6, 7), new R3(List.of("s")) },
                            new String[]{ "r1", "r2", "r3" },
                            new String[]{ R1.class.toString(), R2.class.toString(), R3.class.toString()} },
         };
@@ -113,10 +151,6 @@
         }
     }
 
-    record R5(String... args) {}
-    record R6(long l, String... args) {}
-    record R7(String s1, String s2, String... args) {}
-
     @Retention(RetentionPolicy.RUNTIME)
     @Target({ ElementType.RECORD_COMPONENT, ElementType.FIELD })
     @interface RCA {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/reflect/records/allPermissions.policy	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,27 @@
+//
+// Copyright (c) 2019, 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.
+//
+
+// bootstrap to get the test going, it will do its own restrictions
+grant codeBase "file:${test.classes}/*" {
+    permission java.security.AllPermission;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/net/SocketOption/RequiredOptions.java	Wed Dec 11 11:13:41 2019 +0530
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.IOException;
+import java.net.DatagramSocket;
+import java.net.MulticastSocket;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketOption;
+import java.nio.channels.DatagramChannel;
+import java.nio.channels.NetworkChannel;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+import java.util.Set;
+import java.util.stream.Stream;
+import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
+
+import static java.net.StandardSocketOptions.*;
+
+/*
+ * @test
+ * @bug 8235141
+ * @summary verifies that our implementation supports the set
+ *          of SocketOptions that are required by the API documentation.
+ * @run testng/othervm -Djdk.net.usePlainSocketImpl RequiredOptions
+ * @run testng/othervm RequiredOptions
+ */
+public class RequiredOptions {
+
+    static final Set<SocketOption<?>> DATAGRAM_OPTIONS =
+            Set.of(SO_BROADCAST, SO_SNDBUF, SO_RCVBUF, SO_REUSEADDR, IP_TOS);
+    static final Set<SocketOption<?>> MULTICAST_OPTIONS =
+            concat(DATAGRAM_OPTIONS, Set.of(IP_MULTICAST_IF, IP_MULTICAST_LOOP, IP_MULTICAST_TTL));
+    static final Set<SocketOption<?>> SOCKET_OPTIONS =
+            Set.of(SO_KEEPALIVE, SO_LINGER, SO_SNDBUF, SO_RCVBUF, SO_REUSEADDR, TCP_NODELAY);
+    static final Set<SocketOption<?>> SERVER_OPTIONS =
+            Set.of(SO_RCVBUF, SO_REUSEADDR);
+
+    static Set<SocketOption<?>> concat(Set<SocketOption<?>> ...options) {
+        return Set.of(Stream.of(options).flatMap(Set::stream).distinct().toArray(SocketOption[]::new));
+    }
+
+    @DataProvider(name = "sockets")
+    static Object[][] provider() throws IOException {
+        return new Object[][] {
+                // UDP
+                { Configurable.of(new DatagramSocket(null)), DATAGRAM_OPTIONS },
+                { Configurable.of(new MulticastSocket(null)), MULTICAST_OPTIONS },
+                // TCP
+                { Configurable.of(new Socket()), SOCKET_OPTIONS },
+                { Configurable.of(new ServerSocket()), SERVER_OPTIONS },
+                // Adaptors
+                { Configurable.of(DatagramChannel.open().socket()), MULTICAST_OPTIONS },
+                { Configurable.of(SocketChannel.open().socket()), SOCKET_OPTIONS },
+                { Configurable.of(ServerSocketChannel.open().socket()), SERVER_OPTIONS },
+        };
+    }
+
+    @Test(dataProvider = "sockets")
+    public <R, E extends Exception>
+    void test(Configurable<R,E> socket, Set<SocketOption<?>> options) throws E {
+        try (var s = socket) {
+            var impl = socket.socket().getClass();
+            System.out.println("Testing " + impl + " with " + options);
+            Set<SocketOption<?>> supported = socket.supportedOptions();
+            if (!supported.containsAll(options)) {
+                for (var option : options) {
+                    if (!supported.contains(option)) {
+                        System.err.println("Option " + option + " not supported by " + impl);
+                    }
+                }
+                throw new AssertionError("Not all documented options are supported by " + impl);
+            }
+        }
+    }
+
+    static interface Configurable<R, E extends Exception> extends AutoCloseable {
+        <T> R setOption(SocketOption<T> name, T value) throws E;
+        <T> T getOption(SocketOption<T> name) throws E;
+        Set<SocketOption<?>> supportedOptions() throws E;
+        R socket();
+        void close() throws E;
+
+        static Configurable<DatagramSocket, IOException> of(DatagramSocket socket) {
+            return new ConfigurableImpl<>(socket, socket::setOption,
+                    socket::getOption, socket::supportedOptions, socket::close);
+        }
+        static Configurable<Socket, IOException> of(Socket socket) {
+            return new ConfigurableImpl<>(socket, socket::setOption,
+                    socket::getOption, socket::supportedOptions, socket::close);
+        }
+        static Configurable<ServerSocket, IOException> of(ServerSocket socket) {
+            return new ConfigurableImpl<>(socket, socket::setOption,
+                    socket::getOption, socket::supportedOptions, socket::close);
+        }
+    }
+
+    static final class ConfigurableImpl<R, E extends Exception> implements Configurable<R, E> {
+        @FunctionalInterface
+        interface SetOption<R, E extends Exception> {
+            <T> R setOption(SocketOption<T> name, T value) throws E;
+        }
+        @FunctionalInterface
+        interface GetOption<E extends Exception> {
+            <T> T getOption(SocketOption<T> name) throws E;
+        }
+        @FunctionalInterface
+        interface SupportedOption<E extends Exception> {
+            Set<SocketOption<?>> supportedOptions() throws E;
+        }
+        @FunctionalInterface
+        interface Closer<E extends Exception> {
+            void close() throws E;
+        }
+
+        private final R socket;
+        private final SetOption<R, E> setter;
+        private final GetOption<E> getter;
+        private final SupportedOption<E> support;
+        private final Closer<E> closer;
+
+        public ConfigurableImpl(R socket, SetOption<R, E> setter, GetOption<E> getter,
+                                SupportedOption<E> support, Closer<E> closer) {
+            this.socket = socket;
+            this.setter = setter;
+            this.getter = getter;
+            this.support = support;
+            this.closer = closer;
+        }
+
+        @Override
+        public <T> R setOption(SocketOption<T> name, T value) throws E {
+            return setter.setOption(name, value);
+        }
+        @Override
+        public <T> T getOption(SocketOption<T> name) throws E {
+            return getter.getOption(name);
+        }
+        @Override
+        public Set<SocketOption<?>> supportedOptions() throws E {
+            return support.supportedOptions();
+        }
+        @Override
+        public R socket() {
+            return socket;
+        }
+        @Override
+        public void close() throws E {
+            closer.close();
+        }
+    }
+
+
+}
--- a/test/jdk/javax/net/ssl/SSLEngine/NoAuthClientAuth.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/javax/net/ssl/SSLEngine/NoAuthClientAuth.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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
@@ -28,7 +28,7 @@
 
 /*
  * @test
- * @bug 4495742
+ * @bug 4495742 8190492
  * @summary Demonstrate SSLEngine switch from no client auth to client auth.
  * @run main/othervm NoAuthClientAuth SSLv3
  * @run main/othervm NoAuthClientAuth TLSv1
@@ -304,6 +304,11 @@
         serverEngine.setUseClientMode(false);
         serverEngine.setNeedClientAuth(false);
 
+        // Enable all supported protocols on server side to test SSLv3
+        if ("SSLv3".equals(tlsProtocol)) {
+            serverEngine.setEnabledProtocols(serverEngine.getSupportedProtocols());
+        }
+
         /*
          * Similar to above, but using client mode instead.
          */
--- a/test/jdk/javax/net/ssl/ServerName/SSLEngineExplorer.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/javax/net/ssl/ServerName/SSLEngineExplorer.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -28,7 +28,7 @@
 
 /*
  * @test
- * @bug 7068321
+ * @bug 7068321 8190492
  * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server
  * @library ../SSLEngine ../templates
  * @build SSLEngineService SSLCapabilities SSLExplorer
@@ -80,6 +80,9 @@
         // create SSLEngine.
         SSLEngine ssle = createSSLEngine(false);
 
+        // Enable all supported protocols on server side to test SSLv3
+        ssle.setEnabledProtocols(ssle.getSupportedProtocols());
+
         // Create a server socket channel.
         InetSocketAddress isa =
                 new InetSocketAddress(InetAddress.getLocalHost(), serverPort);
--- a/test/jdk/javax/net/ssl/ServerName/SSLSocketExplorer.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/javax/net/ssl/ServerName/SSLSocketExplorer.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -28,7 +28,7 @@
 
 /**
  * @test
- * @bug 7068321
+ * @bug 7068321 8190492
  * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server
  * @library ../templates
  * @build SSLCapabilities SSLExplorer
@@ -148,6 +148,9 @@
             new ByteArrayInputStream(buffer, 0, position);
         SSLSocket sslSocket = (SSLSocket)sslsf.createSocket(socket, bais, true);
 
+        // Enable all supported protocols on server side to test SSLv3
+        sslSocket.setEnabledProtocols(sslSocket.getSupportedProtocols());
+
         InputStream sslIS = sslSocket.getInputStream();
         OutputStream sslOS = sslSocket.getOutputStream();
 
--- a/test/jdk/javax/net/ssl/sanity/interop/JSSEServer.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/javax/net/ssl/sanity/interop/JSSEServer.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -51,6 +51,10 @@
         serverSocket
                 = (SSLServerSocket) factory.createServerSocket(CipherTest.serverPort);
         CipherTest.serverPort = serverSocket.getLocalPort();
+
+        // JDK-8190492: Enable all supported protocols on server side to test SSLv3
+        serverSocket.setEnabledProtocols(serverSocket.getSupportedProtocols());
+
         serverSocket.setEnabledCipherSuites(factory.getSupportedCipherSuites());
         serverSocket.setWantClientAuth(true);
     }
--- a/test/jdk/javax/net/ssl/templates/SSLSocketSSLEngineTemplate.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/javax/net/ssl/templates/SSLSocketSSLEngineTemplate.java	Wed Dec 11 11:13:41 2019 +0530
@@ -30,7 +30,10 @@
  * @test
  * @bug 7105780
  * @summary Add SSLSocket client/SSLEngine server to templates directory.
- * @run main/othervm SSLSocketSSLEngineTemplate
+ * @run main/othervm SSLSocketSSLEngineTemplate TLSv1
+ * @run main/othervm SSLSocketSSLEngineTemplate TLSv1.1
+ * @run main/othervm SSLSocketSSLEngineTemplate TLSv1.2
+ * @run main/othervm SSLSocketSSLEngineTemplate TLSv1.3
  */
 
 /**
@@ -100,11 +103,12 @@
     private static final boolean debug = false;
     private final SSLContext sslc;
     private SSLEngine serverEngine;     // server-side SSLEngine
+    private SSLSocket clientSocket;
 
     private final byte[] serverMsg =
         "Hi there Client, I'm a Server.".getBytes();
     private final byte[] clientMsg =
-        "Hello Server, I'm a Client!  Pleased to meet you!".getBytes();
+        "Hello Server, I'm a Client! Pleased to meet you!".getBytes();
 
     private ByteBuffer serverOut;       // write side of serverEngine
     private ByteBuffer serverIn;        // read side of serverEngine
@@ -135,6 +139,8 @@
      * Main entry point for this test.
      */
     public static void main(String args[]) throws Exception {
+        String protocol = args[0];
+
         // reset security properties to make sure that the algorithms
         // and keys used in this test are not disabled.
         Security.setProperty("jdk.tls.disabledAlgorithms", "");
@@ -144,26 +150,20 @@
             System.setProperty("javax.net.debug", "all");
         }
 
-        String [] protocols = new String [] {
-            "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3" };
+        /*
+         * Run the tests with direct and indirect buffers.
+         */
+        SSLSocketSSLEngineTemplate test =
+            new SSLSocketSSLEngineTemplate(protocol);
+        log("-------------------------------------");
+        log("Testing " + protocol + " for direct buffers ...");
+        test.runTest(true);
 
-        for (String protocol : protocols) {
-            log("Testing " + protocol);
-            /*
-             * Run the tests with direct and indirect buffers.
-             */
-            SSLSocketSSLEngineTemplate test =
-                new SSLSocketSSLEngineTemplate(protocol);
-            log("-------------------------------------");
-            log("Testing " + protocol + " for direct buffers ...");
-            test.runTest(true);
+        log("---------------------------------------");
+        log("Testing " + protocol + " for indirect buffers ...");
+        test.runTest(false);
 
-            log("---------------------------------------");
-            log("Testing " + protocol + " for indirect buffers ...");
-            test.runTest(false);
-        }
-
-        System.out.println("Test Passed.");
+        log("Test Passed.");
     }
 
     /*
@@ -213,6 +213,7 @@
      * sections of code.
      */
     private void runTest(boolean direct) throws Exception {
+        clientSocket = null;
         boolean serverClose = direct;
 
         // generates the server-side Socket
@@ -220,6 +221,7 @@
             serverSocket.setReuseAddress(false);
             serverSocket.bind(null);
             int port = serverSocket.getLocalPort();
+            log("Port: " + port);
             Thread thread = createClientThread(port, serverClose);
 
             createSSLEngine();
@@ -260,11 +262,18 @@
                     try {
                         len = is.read(inbound);
                         if (len == -1) {
-                            throw new Exception("Unexpected EOF");
+                            logSocketStatus(clientSocket);
+                            if (clientSocket.isClosed()
+                                    || clientSocket.isOutputShutdown()) {
+                                log("Client socket was closed or shutdown output");
+                                break;
+                            } else {
+                                throw new Exception("Unexpected EOF");
+                            }
                         }
                         cTOs.put(inbound, 0, len);
                     } catch (SocketTimeoutException ste) {
-                        // swallow.  Nothing yet, probably waiting on us.
+                        // swallow. Nothing yet, probably waiting on us.
                     }
 
                     cTOs.flip();
@@ -367,6 +376,8 @@
                 // client-side socket
                 try (SSLSocket sslSocket = (SSLSocket)sslc.getSocketFactory().
                             createSocket("localhost", port)) {
+                    clientSocket = sslSocket;
+
                     OutputStream os = sslSocket.getOutputStream();
                     InputStream is = sslSocket.getInputStream();
 
@@ -475,6 +486,15 @@
         return (engine.isOutboundDone() && engine.isInboundDone());
     }
 
+    private static void logSocketStatus(Socket socket) {
+        log("##### " + socket + " #####");
+        log("isBound: " + socket.isBound());
+        log("isConnected: " + socket.isConnected());
+        log("isClosed: " + socket.isClosed());
+        log("isInputShutdown: " + socket.isInputShutdown());
+        log("isOutputShutdown: " + socket.isOutputShutdown());
+    }
+
     /*
      * Logging code
      */
@@ -486,7 +506,7 @@
         }
         if (resultOnce) {
             resultOnce = false;
-            System.out.println("The format of the SSLEngineResult is: \n"
+            log("The format of the SSLEngineResult is: \n"
                     + "\t\"getStatus() / getHandshakeStatus()\" +\n"
                     + "\t\"bytesConsumed() / bytesProduced()\"\n");
         }
@@ -502,7 +522,11 @@
 
     private static void log(String str) {
         if (logging) {
-            System.out.println(str);
+            if (debug) {
+                System.err.println(str);
+            } else {
+                System.out.println(str);
+            }
         }
     }
 }
--- a/test/jdk/jdk/internal/loader/URLClassPath/JarClassPathFileEntry.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/jdk/internal/loader/URLClassPath/JarClassPathFileEntry.java	Wed Dec 11 11:13:41 2019 +0530
@@ -33,8 +33,8 @@
 
 /*
  * @test
- * @bug 8216401
- * @summary Test loading of JAR Class-Path entry with file: scheme
+ * @bug 8216401 8235361
+ * @summary Test classloading via JAR Class-Path entries
  * @library /test/lib
  *
  * @run main/othervm JarClassPathFileEntry
@@ -52,6 +52,19 @@
     private final static Path CONTEXT_JAR_PATH = Paths.get(TEST_CLASSES, "Context.jar");
 
     public static void main(String[] args) throws Throwable {
+        String fileScheme = "file:" + (IS_WINDOWS ? toUnixPath(OTHER_JAR_PATH.toString())
+                                                      :        OTHER_JAR_PATH.toString());
+        doTest(fileScheme);
+
+        if (IS_WINDOWS) {
+            // Relative URL encoding of absolute path, e.g. /C:\\path\\to\\file.jar
+            String driveLetter = "/" + OTHER_JAR_PATH;
+            doTest(driveLetter);
+        }
+    }
+
+    /* Load a class from Other.jar via the given Class-Path entry */
+    private static void doTest(String classPathEntry) throws Throwable {
         // Create Other.class in OTHER_DIR, off the default classpath
         byte klassbuf[] = InMemoryJavaCompiler.compile("Other",
                                                        "public class Other {}");
@@ -72,8 +85,6 @@
         Attributes attrs = mf.getMainAttributes();
         attrs.put(Attributes.Name.MANIFEST_VERSION, "1.0");
 
-        String classPathEntry = "file:" + (IS_WINDOWS ? toUnixPath(OTHER_JAR_PATH.toString())
-                                                      :            OTHER_JAR_PATH.toString());
         attrs.put(Attributes.Name.CLASS_PATH, classPathEntry);
 
         System.out.println("Creating Context.jar with Class-Path: " + classPathEntry);
--- a/test/jdk/sun/security/pkcs11/sslecc/JSSEServer.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/sun/security/pkcs11/sslecc/JSSEServer.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -52,6 +52,10 @@
         serverSocket = (SSLServerSocket)factory.createServerSocket(0);
         serverSocket.setSoTimeout(CipherTest.TIMEOUT);
         CipherTest.serverPort = serverSocket.getLocalPort();
+
+        // JDK-8190492: Enable all supported protocols on server side to test SSLv3
+        serverSocket.setEnabledProtocols(serverSocket.getSupportedProtocols());
+
         serverSocket.setEnabledCipherSuites(factory.getSupportedCipherSuites());
         serverSocket.setWantClientAuth(true);
     }
--- a/test/jdk/sun/security/ssl/ProtocolVersion/HttpsProtocols.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/sun/security/ssl/ProtocolVersion/HttpsProtocols.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 4671289
+ * @bug 4671289 8190492
  * @summary passing https.protocols from command line doesn't work.
  * @run main/othervm -Dhttps.protocols=SSLv3 HttpsProtocols
  * @author Brad Wetmore
@@ -88,6 +88,9 @@
         SSLServerSocket sslServerSocket =
             (SSLServerSocket) sslssf.createServerSocket(serverPort);
 
+        // Enable all supported protocols on server side to test SSLv3
+        sslServerSocket.setEnabledProtocols(sslServerSocket.getSupportedProtocols());
+
         serverPort = sslServerSocket.getLocalPort();
 
         /*
--- a/test/jdk/sun/security/ssl/SSLContextImpl/CustomizedDefaultProtocols.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/sun/security/ssl/SSLContextImpl/CustomizedDefaultProtocols.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -26,7 +26,7 @@
 
 /*
  * @test
- * @bug 7093640
+ * @bug 7093640 8190492
  * @summary Enable TLS 1.1 and TLS 1.2 by default in client side of SunJSSE
  * @run main/othervm -Djdk.tls.client.protocols="SSLv3,TLSv1,TLSv1.1"
  *      CustomizedDefaultProtocols
@@ -54,15 +54,15 @@
         TLS_CV_02("TLS",
                 new String[] {"SSLv3", "TLSv1", "TLSv1.1"}),
         TLS_CV_03("SSLv3",
-                new String[] {"SSLv3", "TLSv1"}),
+                new String[] {"TLSv1"}),
         TLS_CV_04("TLSv1",
-                new String[] {"SSLv3", "TLSv1"}),
+                new String[] {"TLSv1"}),
         TLS_CV_05("TLSv1.1",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1"}),
+                new String[] {"TLSv1", "TLSv1.1"}),
         TLS_CV_06("TLSv1.2",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"}),
+                new String[] {"TLSv1", "TLSv1.1", "TLSv1.2"}),
         TLS_CV_07("TLSv1.3",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
+                new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
         TLS_CV_08("Default",
                 new String[] {"SSLv3", "TLSv1", "TLSv1.1"});
 
@@ -70,6 +70,8 @@
         final String[] enabledProtocols;
         final static String[] supportedProtocols = new String[] {
                 "SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"};
+        final static String[] serverDefaultProtocols = new String[] {
+                "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"};
 
         ContextVersion(String contextVersion, String[] enabledProtocols) {
             this.contextVersion = contextVersion;
@@ -80,16 +82,17 @@
     private static boolean checkProtocols(String[] target, String[] expected) {
         boolean success = true;
         if (target.length == 0) {
-            System.out.println("\tError: No protocols");
+            System.out.println("\t\t\t*** Error: No protocols");
             success = false;
         }
 
         if (!protocolEquals(target, expected)) {
-            System.out.println("\tError: Expected to get protocols " +
+            System.out.println("\t\t\t*** Error: Expected to get protocols " +
                     Arrays.toString(expected));
             success = false;
         }
-        System.out.println("\t  Protocols found " + Arrays.toString(target));
+        System.out.println("\t\t\t  Protocols found " + Arrays.toString(target));
+        System.out.println("\t\t\t--> Protocol check passed!!");
 
         return success;
     }
@@ -114,10 +117,11 @@
     private static boolean checkCipherSuites(String[] target) {
         boolean success = true;
         if (target.length == 0) {
-            System.out.println("\tError: No cipher suites");
+            System.out.println("\t\t\t*** Error: No cipher suites");
             success = false;
         }
 
+        System.out.println("\t\t\t--> Cipher check passed!!");
         return success;
     }
 
@@ -128,7 +132,8 @@
 
         boolean failed = false;
         for (ContextVersion cv : ContextVersion.values()) {
-            System.out.println("Checking SSLContext of " + cv.contextVersion);
+            System.out.println("\n\nChecking SSLContext of " + cv.contextVersion);
+            System.out.println("============================");
             SSLContext context = SSLContext.getInstance(cv.contextVersion);
 
             // Default SSLContext is initialized automatically.
@@ -142,6 +147,7 @@
             //
             // Check default SSLParameters of SSLContext
             System.out.println("\tChecking default SSLParameters");
+            System.out.println("\t\tChecking SSLContext.getDefaultSSLParameters().getProtocols");
             SSLParameters parameters = context.getDefaultSSLParameters();
 
             String[] protocols = parameters.getProtocols();
@@ -151,7 +157,7 @@
             failed |= !checkCipherSuites(ciphers);
 
             // Check supported SSLParameters of SSLContext
-            System.out.println("\tChecking supported SSLParameters");
+            System.out.println("\t\tChecking supported SSLParameters");
             parameters = context.getSupportedSSLParameters();
 
             protocols = parameters.getProtocols();
@@ -166,7 +172,7 @@
             // Check SSLParameters of SSLEngine
             System.out.println();
             System.out.println("\tChecking SSLEngine of this SSLContext");
-            System.out.println("\tChecking SSLEngine.getSSLParameters()");
+            System.out.println("\t\tChecking SSLEngine.getSSLParameters()");
             SSLEngine engine = context.createSSLEngine();
             engine.setUseClientMode(true);
             parameters = engine.getSSLParameters();
@@ -177,20 +183,20 @@
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = engine.getEnabledProtocols();
             failed |= !checkProtocols(protocols, cv.enabledProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = engine.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = engine.getSupportedProtocols();
             failed |= !checkProtocols(protocols, cv.supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = engine.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
@@ -200,7 +206,7 @@
             // Check SSLParameters of SSLSocket
             System.out.println();
             System.out.println("\tChecking SSLSocket of this SSLContext");
-            System.out.println("\tChecking SSLSocket.getSSLParameters()");
+            System.out.println("\t\tChecking SSLSocket.getSSLParameters()");
             SocketFactory fac = context.getSocketFactory();
             SSLSocket socket = (SSLSocket)fac.createSocket();
             parameters = socket.getSSLParameters();
@@ -211,20 +217,20 @@
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = socket.getEnabledProtocols();
             failed |= !checkProtocols(protocols, cv.enabledProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = socket.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = socket.getSupportedProtocols();
             failed |= !checkProtocols(protocols, cv.supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = socket.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
@@ -234,39 +240,37 @@
             // Check SSLParameters of SSLServerSocket
             System.out.println();
             System.out.println("\tChecking SSLServerSocket of this SSLContext");
-            System.out.println("\tChecking SSLServerSocket.getSSLParameters()");
+            System.out.println("\t\tChecking SSLServerSocket.getSSLParameters()");
             SSLServerSocketFactory sf = context.getServerSocketFactory();
             SSLServerSocket ssocket = (SSLServerSocket)sf.createServerSocket();
             parameters = ssocket.getSSLParameters();
 
             protocols = parameters.getProtocols();
-            failed |= !checkProtocols(protocols, cv.supportedProtocols);
+            failed |= !checkProtocols(protocols, cv.serverDefaultProtocols);
 
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = ssocket.getEnabledProtocols();
-            failed |= !checkProtocols(protocols, cv.supportedProtocols);
+            failed |= !checkProtocols(protocols, cv.serverDefaultProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = ssocket.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = ssocket.getSupportedProtocols();
             failed |= !checkProtocols(protocols, cv.supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = ssocket.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
         }
 
         if (failed) {
             throw new Exception("Run into problems, see log for more details");
-        } else {
-            System.out.println("\t... Success");
         }
     }
 }
--- a/test/jdk/sun/security/ssl/SSLContextImpl/CustomizedServerDefaultProtocols.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/sun/security/ssl/SSLContextImpl/CustomizedServerDefaultProtocols.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -26,6 +26,7 @@
 
 /*
  * @test
+ * @bug 8196584 8190492
  * @summary Test jdk.tls.server.protocols with TLS
  * @run main/othervm -Djdk.tls.server.protocols="SSLv3,TLSv1,TLSv1.1"
  *      CustomizedServerDefaultProtocols
@@ -48,32 +49,34 @@
 
     final static String[] supportedProtocols = new String[]{
             "SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"};
+    final static String[] serverDefaultProtocols = new String[] {
+            "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"};
 
     enum ContextVersion {
         TLS_CV_01("SSL",
                 new String[]{"SSLv3", "TLSv1", "TLSv1.1"},
-                new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
+                new String[]{"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
         TLS_CV_02("TLS",
                 new String[]{"SSLv3", "TLSv1", "TLSv1.1"},
-                new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
+                new String[]{"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
         TLS_CV_03("SSLv3",
-                supportedProtocols,
-                new String[]{"SSLv3", "TLSv1"}),
+                serverDefaultProtocols,
+                new String[]{"TLSv1"}),
         TLS_CV_04("TLSv1",
-                supportedProtocols,
-                new String[]{"SSLv3", "TLSv1"}),
+                serverDefaultProtocols,
+                new String[]{"TLSv1"}),
         TLS_CV_05("TLSv1.1",
-                supportedProtocols,
-                new String[]{"SSLv3", "TLSv1", "TLSv1.1"}),
+                serverDefaultProtocols,
+                new String[]{"TLSv1", "TLSv1.1"}),
         TLS_CV_06("TLSv1.2",
-                supportedProtocols,
-                new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"}),
+                serverDefaultProtocols,
+                new String[]{"TLSv1", "TLSv1.1", "TLSv1.2"}),
         TLS_CV_07("TLSv1.3",
-                supportedProtocols,
-                new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
+                serverDefaultProtocols,
+                new String[]{"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
         TLS_CV_08("Default",
                 new String[]{"SSLv3", "TLSv1", "TLSv1.1"},
-                new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"});
+                new String[]{"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"});
 
         final String contextVersion;
         final String[] serverEnabledProtocols;
@@ -90,16 +93,18 @@
     private static boolean checkProtocols(String[] target, String[] expected) {
         boolean success = true;
         if (target.length == 0) {
-            System.out.println("\tError: No protocols");
+            System.out.println("\t\t\t*** Error: No protocols");
             success = false;
         }
 
         if (!protocolEquals(target, expected)) {
-            System.out.println("\tError: Expected to get protocols " +
+            System.out.println("\t\t\t*** Error: Expected to get protocols " +
                     Arrays.toString(expected));
             success = false;
         }
-        System.out.println("\t  Protocols found " + Arrays.toString(target));
+        System.out.println("\t\t\t  Protocols found " + Arrays.toString(target));
+        System.out.println("\t\t\t--> Protocol check passed!!");
+
         return success;
     }
 
@@ -123,10 +128,11 @@
     private static boolean checkCipherSuites(String[] target) {
         boolean success = true;
         if (target.length == 0) {
-            System.out.println("\tError: No cipher suites");
+            System.out.println("\t\t\t*** Error: No cipher suites");
             success = false;
         }
 
+        System.out.println("\t\t\t--> Cipher check passed!!");
         return success;
     }
 
@@ -145,7 +151,8 @@
         boolean failed = false;
 
         for (ContextVersion cv : ContextVersion.values()) {
-            System.out.println("Checking SSLContext of " + cv.contextVersion);
+            System.out.println("\n\nChecking SSLContext of " + cv.contextVersion);
+            System.out.println("============================");
             SSLContext context = SSLContext.getInstance(cv.contextVersion);
 
             // Default SSLContext is initialized automatically.
@@ -159,6 +166,7 @@
             //
             // Check default SSLParameters of SSLContext
             System.out.println("\tChecking default SSLParameters");
+            System.out.println("\t\tChecking SSLContext.getDefaultSSLParameters().getProtocols");
             SSLParameters parameters = context.getDefaultSSLParameters();
 
             String[] protocols = parameters.getProtocols();
@@ -168,7 +176,7 @@
             failed |= !checkCipherSuites(ciphers);
 
             // Check supported SSLParameters of SSLContext
-            System.out.println("\tChecking supported SSLParameters");
+            System.out.println("\t\tChecking supported SSLParameters");
             parameters = context.getSupportedSSLParameters();
 
             protocols = parameters.getProtocols();
@@ -183,7 +191,7 @@
             // Check SSLParameters of SSLEngine
             System.out.println();
             System.out.println("\tChecking SSLEngine of this SSLContext");
-            System.out.println("\tChecking SSLEngine.getSSLParameters()");
+            System.out.println("\t\tChecking SSLEngine.getSSLParameters()");
             SSLEngine engine = context.createSSLEngine();
             engine.setUseClientMode(true);
             parameters = engine.getSSLParameters();
@@ -194,20 +202,20 @@
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = engine.getEnabledProtocols();
             failed |= !checkProtocols(protocols, cv.clientEnabledProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = engine.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = engine.getSupportedProtocols();
             failed |= !checkProtocols(protocols, supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = engine.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
@@ -217,7 +225,7 @@
             // Check SSLParameters of SSLSocket
             System.out.println();
             System.out.println("\tChecking SSLSocket of this SSLContext");
-            System.out.println("\tChecking SSLSocket.getSSLParameters()");
+            System.out.println("\t\tChecking SSLSocket.getSSLParameters()");
             SocketFactory fac = context.getSocketFactory();
             SSLSocket socket = (SSLSocket) fac.createSocket();
             parameters = socket.getSSLParameters();
@@ -228,20 +236,20 @@
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLSocket.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLSocket.getEnabledProtocols()");
             protocols = socket.getEnabledProtocols();
             failed |= !checkProtocols(protocols, cv.clientEnabledProtocols);
 
-            System.out.println("\tChecking SSLSocket.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLSocket.getEnabledCipherSuites()");
             ciphers = socket.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLSocket.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLSocket.getSupportedProtocols()");
             protocols = socket.getSupportedProtocols();
             failed |= !checkProtocols(protocols, supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLSocket.getSupportedCipherSuites()");
+                    "\t\tChecking SSLSocket.getSupportedCipherSuites()");
             ciphers = socket.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
@@ -251,7 +259,7 @@
             // Check SSLParameters of SSLServerSocket
             System.out.println();
             System.out.println("\tChecking SSLServerSocket of this SSLContext");
-            System.out.println("\tChecking SSLServerSocket.getSSLParameters()");
+            System.out.println("\t\tChecking SSLServerSocket.getSSLParameters()");
             SSLServerSocketFactory sf = context.getServerSocketFactory();
             SSLServerSocket ssocket = (SSLServerSocket) sf.createServerSocket();
             parameters = ssocket.getSSLParameters();
@@ -262,27 +270,25 @@
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = ssocket.getEnabledProtocols();
             failed |= !checkProtocols(protocols, cv.serverEnabledProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = ssocket.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = ssocket.getSupportedProtocols();
             failed |= !checkProtocols(protocols, supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = ssocket.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
             if (failed) {
                 throw new Exception("Run into problems, see log for more details");
-            } else {
-                System.out.println("\t... Success");
             }
         }
     }
--- a/test/jdk/sun/security/ssl/SSLContextImpl/DefaultEnabledProtocols.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/sun/security/ssl/SSLContextImpl/DefaultEnabledProtocols.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -49,26 +49,28 @@
 public class DefaultEnabledProtocols {
     enum ContextVersion {
         TLS_CV_01("SSL",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
+                new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
         TLS_CV_02("TLS",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
+                new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
         TLS_CV_03("SSLv3",
-                new String[] {"SSLv3", "TLSv1"}),
+                new String[] {"TLSv1"}),
         TLS_CV_04("TLSv1",
-                new String[] {"SSLv3", "TLSv1"}),
+                new String[] {"TLSv1"}),
         TLS_CV_05("TLSv1.1",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1"}),
+                new String[] {"TLSv1", "TLSv1.1"}),
         TLS_CV_06("TLSv1.2",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"}),
+                new String[] {"TLSv1", "TLSv1.1", "TLSv1.2"}),
         TLS_CV_07("TLSv1.3",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
+                new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
         TLS_CV_08("Default",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"});
+                new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"});
 
         final String contextVersion;
         final String[] enabledProtocols;
         final static String[] supportedProtocols = new String[] {
                 "SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"};
+        final static String[] serverDefaultProtocols = new String[] {
+                "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"};
 
         ContextVersion(String contextVersion, String[] enabledProtocols) {
             this.contextVersion = contextVersion;
@@ -79,16 +81,17 @@
     private static boolean checkProtocols(String[] target, String[] expected) {
         boolean success = true;
         if (target.length == 0) {
-            System.out.println("\tError: No protocols");
+            System.out.println("\t\t\t*** Error: No protocols");
             success = false;
         }
 
         if (!protocolEquals(target, expected)) {
-            System.out.println("\tError: Expected to get protocols " +
+            System.out.println("\t\t\t*** Error: Expected to get protocols " +
                     Arrays.toString(expected));
             success = false;
         }
-        System.out.println("\t  Protocols found " + Arrays.toString(target));
+        System.out.println("\t\t\t  Protocols found " + Arrays.toString(target));
+        System.out.println("\t\t\t--> Protocol check passed!!");
 
         return success;
     }
@@ -107,13 +110,14 @@
             }
         }
 
+        System.out.println("\t\t\t--> Cipher check passed!!");
         return true;
     }
 
     private static boolean checkCipherSuites(String[] target) {
         boolean success = true;
         if (target.length == 0) {
-            System.out.println("\tError: No cipher suites");
+            System.out.println("\t\t\t*** Error: No cipher suites");
             success = false;
         }
 
@@ -127,7 +131,8 @@
 
         boolean failed = false;
         for (ContextVersion cv : ContextVersion.values()) {
-            System.out.println("Checking SSLContext of " + cv.contextVersion);
+            System.out.println("\n\nChecking SSLContext of " + cv.contextVersion);
+            System.out.println("============================");
             SSLContext context = SSLContext.getInstance(cv.contextVersion);
 
             // Default SSLContext is initialized automatically.
@@ -141,6 +146,7 @@
             //
             // Check default SSLParameters of SSLContext
             System.out.println("\tChecking default SSLParameters");
+            System.out.println("\t\tChecking SSLContext.getDefaultSSLParameters().getProtocols");
             SSLParameters parameters = context.getDefaultSSLParameters();
 
             String[] protocols = parameters.getProtocols();
@@ -150,7 +156,7 @@
             failed |= !checkCipherSuites(ciphers);
 
             // Check supported SSLParameters of SSLContext
-            System.out.println("\tChecking supported SSLParameters");
+            System.out.println("\t\tChecking SSLContext.getSupportedSSLParameters().getProtocols()");
             parameters = context.getSupportedSSLParameters();
 
             protocols = parameters.getProtocols();
@@ -165,7 +171,7 @@
             // Check SSLParameters of SSLEngine
             System.out.println();
             System.out.println("\tChecking SSLEngine of this SSLContext");
-            System.out.println("\tChecking SSLEngine.getSSLParameters()");
+            System.out.println("\t\tChecking SSLEngine.getSSLParameters()");
             SSLEngine engine = context.createSSLEngine();
             engine.setUseClientMode(true);
             parameters = engine.getSSLParameters();
@@ -176,20 +182,20 @@
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = engine.getEnabledProtocols();
             failed |= !checkProtocols(protocols, cv.enabledProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = engine.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = engine.getSupportedProtocols();
             failed |= !checkProtocols(protocols, cv.supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = engine.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
@@ -199,7 +205,7 @@
             // Check SSLParameters of SSLSocket
             System.out.println();
             System.out.println("\tChecking SSLSocket of this SSLContext");
-            System.out.println("\tChecking SSLSocket.getSSLParameters()");
+            System.out.println("\t\tChecking SSLSocket.getSSLParameters()");
             SocketFactory fac = context.getSocketFactory();
             SSLSocket socket = (SSLSocket)fac.createSocket();
             parameters = socket.getSSLParameters();
@@ -210,20 +216,20 @@
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = socket.getEnabledProtocols();
             failed |= !checkProtocols(protocols, cv.enabledProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = socket.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = socket.getSupportedProtocols();
             failed |= !checkProtocols(protocols, cv.supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = socket.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
@@ -233,39 +239,37 @@
             // Check SSLParameters of SSLServerSocket
             System.out.println();
             System.out.println("\tChecking SSLServerSocket of this SSLContext");
-            System.out.println("\tChecking SSLServerSocket.getSSLParameters()");
+            System.out.println("\t\tChecking SSLServerSocket.getSSLParameters()");
             SSLServerSocketFactory sf = context.getServerSocketFactory();
             SSLServerSocket ssocket = (SSLServerSocket)sf.createServerSocket();
             parameters = ssocket.getSSLParameters();
 
             protocols = parameters.getProtocols();
-            failed |= !checkProtocols(protocols, cv.supportedProtocols);
+            failed |= !checkProtocols(protocols, cv.serverDefaultProtocols);
 
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = ssocket.getEnabledProtocols();
-            failed |= !checkProtocols(protocols, cv.supportedProtocols);
+            failed |= !checkProtocols(protocols, cv.serverDefaultProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = ssocket.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = ssocket.getSupportedProtocols();
             failed |= !checkProtocols(protocols, cv.supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = ssocket.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
         }
 
         if (failed) {
             throw new Exception("Run into problems, see log for more details");
-        } else {
-            System.out.println("\t... Success");
         }
     }
 }
--- a/test/jdk/sun/security/ssl/SSLContextImpl/NoOldVersionContext.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/sun/security/ssl/SSLContextImpl/NoOldVersionContext.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -26,7 +26,7 @@
 
 /*
  * @test
- * @bug 7093640
+ * @bug 7093640 8190492
  * @summary Enable TLS 1.1 and TLS 1.2 by default in client side of SunJSSE
  * @run main/othervm -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"
  *      NoOldVersionContext
@@ -54,15 +54,15 @@
         TLS_CV_02("TLS",
                 new String[] {"TLSv1", "TLSv1.1", "TLSv1.2"}),
         TLS_CV_03("SSLv3",
-                new String[] {"SSLv3", "TLSv1"}),
+                new String[] {"TLSv1"}),
         TLS_CV_04("TLSv1",
-                new String[] {"SSLv3", "TLSv1"}),
+                new String[] {"TLSv1"}),
         TLS_CV_05("TLSv1.1",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1"}),
+                new String[] {"TLSv1", "TLSv1.1"}),
         TLS_CV_06("TLSv1.2",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"}),
+                new String[] {"TLSv1", "TLSv1.1", "TLSv1.2"}),
         TLS_CV_07("TLSv1.3",
-                new String[] {"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
+                new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}),
         TLS_CV_08("Default",
                 new String[] {"TLSv1", "TLSv1.1", "TLSv1.2"});
 
@@ -70,6 +70,8 @@
         final String[] enabledProtocols;
         final static String[] supportedProtocols = new String[] {
                 "SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"};
+        final static String[] serverDefaultProtocols = new String[] {
+                "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"};
 
         ContextVersion(String contextVersion, String[] enabledProtocols) {
             this.contextVersion = contextVersion;
@@ -80,14 +82,14 @@
     private static boolean checkProtocols(String[] target, String[] expected) {
         boolean success = true;
         if (target.length == 0) {
-            System.out.println("\tError: No protocols");
+            System.out.println("\t\t\t*** Error: No protocols");
             success = false;
         }
 
         if (!protocolEquals(target, expected)) {
-            System.out.println("\tError: Expected to get protocols " +
+            System.out.println("\t\t\t*** Error: Expected to get protocols " +
                     Arrays.toString(expected));
-            System.out.println("\tError: The actual protocols " +
+            System.out.println("\t\t\t*** Error: The actual protocols " +
                     Arrays.toString(target));
             success = false;
         }
@@ -109,16 +111,18 @@
             }
         }
 
+        System.out.println("\t\t\t--> Protocol check passed!!");
         return true;
     }
 
     private static boolean checkCipherSuites(String[] target) {
         boolean success = true;
         if (target.length == 0) {
-            System.out.println("\tError: No cipher suites");
+            System.out.println("\t\t\t*** Error: No cipher suites");
             success = false;
         }
 
+        System.out.println("\t\t\t--> Cipher check passed!!");
         return success;
     }
 
@@ -129,7 +133,8 @@
 
         boolean failed = false;
         for (ContextVersion cv : ContextVersion.values()) {
-            System.out.println("Checking SSLContext of " + cv.contextVersion);
+            System.out.println("\n\nChecking SSLContext of " + cv.contextVersion);
+            System.out.println("============================");
             SSLContext context = SSLContext.getInstance(cv.contextVersion);
 
             // Default SSLContext is initialized automatically.
@@ -143,6 +148,7 @@
             //
             // Check default SSLParameters of SSLContext
             System.out.println("\tChecking default SSLParameters");
+            System.out.println("\t\tChecking SSLContext.getDefaultSSLParameters().getProtocols");
             SSLParameters parameters = context.getDefaultSSLParameters();
 
             String[] protocols = parameters.getProtocols();
@@ -152,7 +158,7 @@
             failed |= !checkCipherSuites(ciphers);
 
             // Check supported SSLParameters of SSLContext
-            System.out.println("\tChecking supported SSLParameters");
+            System.out.println("\t\tChecking SSLContext.getSupportedSSLParameters().getProtocols()");
             parameters = context.getSupportedSSLParameters();
 
             protocols = parameters.getProtocols();
@@ -166,8 +172,8 @@
             //
             // Check SSLParameters of SSLEngine
             System.out.println();
-            System.out.println("\tChecking SSLEngine of this SSLContext");
-            System.out.println("\tChecking SSLEngine.getSSLParameters()");
+            System.out.println("\tChecking SSLEngine of this SSLContext - client mode");
+            System.out.println("\t\tChecking SSLEngine.getSSLParameters()");
             SSLEngine engine = context.createSSLEngine();
             engine.setUseClientMode(true);
             parameters = engine.getSSLParameters();
@@ -178,20 +184,20 @@
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = engine.getEnabledProtocols();
             failed |= !checkProtocols(protocols, cv.enabledProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = engine.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = engine.getSupportedProtocols();
             failed |= !checkProtocols(protocols, cv.supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = engine.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
@@ -201,7 +207,7 @@
             // Check SSLParameters of SSLSocket
             System.out.println();
             System.out.println("\tChecking SSLSocket of this SSLContext");
-            System.out.println("\tChecking SSLSocket.getSSLParameters()");
+            System.out.println("\t\tChecking SSLSocket.getSSLParameters()");
             SocketFactory fac = context.getSocketFactory();
             SSLSocket socket = (SSLSocket)fac.createSocket();
             parameters = socket.getSSLParameters();
@@ -212,20 +218,20 @@
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = socket.getEnabledProtocols();
             failed |= !checkProtocols(protocols, cv.enabledProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = socket.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = socket.getSupportedProtocols();
             failed |= !checkProtocols(protocols, cv.supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = socket.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
@@ -235,39 +241,37 @@
             // Check SSLParameters of SSLServerSocket
             System.out.println();
             System.out.println("\tChecking SSLServerSocket of this SSLContext");
-            System.out.println("\tChecking SSLServerSocket.getSSLParameters()");
+            System.out.println("\t\tChecking SSLServerSocket.getSSLParameters()");
             SSLServerSocketFactory sf = context.getServerSocketFactory();
             SSLServerSocket ssocket = (SSLServerSocket)sf.createServerSocket();
             parameters = ssocket.getSSLParameters();
 
             protocols = parameters.getProtocols();
-            failed |= !checkProtocols(protocols, cv.supportedProtocols);
+            failed |= !checkProtocols(protocols, cv.serverDefaultProtocols);
 
             ciphers = parameters.getCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getEnabledProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledProtocols()");
             protocols = ssocket.getEnabledProtocols();
-            failed |= !checkProtocols(protocols, cv.supportedProtocols);
+            failed |= !checkProtocols(protocols, cv.serverDefaultProtocols);
 
-            System.out.println("\tChecking SSLEngine.getEnabledCipherSuites()");
+            System.out.println("\t\tChecking SSLEngine.getEnabledCipherSuites()");
             ciphers = ssocket.getEnabledCipherSuites();
             failed |= !checkCipherSuites(ciphers);
 
-            System.out.println("\tChecking SSLEngine.getSupportedProtocols()");
+            System.out.println("\t\tChecking SSLEngine.getSupportedProtocols()");
             protocols = ssocket.getSupportedProtocols();
             failed |= !checkProtocols(protocols, cv.supportedProtocols);
 
             System.out.println(
-                    "\tChecking SSLEngine.getSupportedCipherSuites()");
+                    "\t\tChecking SSLEngine.getSupportedCipherSuites()");
             ciphers = ssocket.getSupportedCipherSuites();
             failed |= !checkCipherSuites(ciphers);
         }
 
         if (failed) {
             throw new Exception("Run into problems, see log for more details");
-        } else {
-            System.out.println("\t... Success");
         }
     }
 }
--- a/test/jdk/sun/security/ssl/SSLSocketImpl/InvalidateServerSessionRenegotiate.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/sun/security/ssl/SSLSocketImpl/InvalidateServerSessionRenegotiate.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -28,7 +28,7 @@
 
 /*
  * @test
- * @bug 4403428
+ * @bug 4403428 8190492
  * @summary Invalidating JSSE session on server causes SSLProtocolException
  * @run main/othervm InvalidateServerSessionRenegotiate SSLv3
  * @run main/othervm InvalidateServerSessionRenegotiate TLSv1
@@ -120,6 +120,12 @@
 
         SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
         sslSocket.addHandshakeCompletedListener(this);
+
+        // Enable all supported protocols on server side to test SSLv3
+        if ("SSLv3".equals(tlsProtocol)) {
+            sslSocket.setEnabledProtocols(sslSocket.getSupportedProtocols());
+        }
+
         InputStream sslIS = sslSocket.getInputStream();
         OutputStream sslOS = sslSocket.getOutputStream();
 
--- a/test/jdk/sun/security/ssl/SSLSocketImpl/NoImpactServerRenego.java	Tue Dec 10 10:44:09 2019 +0530
+++ b/test/jdk/sun/security/ssl/SSLSocketImpl/NoImpactServerRenego.java	Wed Dec 11 11:13:41 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -26,7 +26,7 @@
 
 /*
  * @test
- * @bug 7188658
+ * @bug 7188658 8190492
  * @summary Add possibility to disable client initiated renegotiation
  * @run main/othervm  -Djdk.tls.rejectClientInitiatedRenegotiation=true
  *      NoImpactServerRenego SSLv3
@@ -121,6 +121,12 @@
 
         SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
         sslSocket.addHandshakeCompletedListener(this);
+
+        // Enable all supported protocols on server side to test SSLv3
+        if ("SSLv3".equals(tlsProtocol)) {
+            sslSocket.setEnabledProtocols(sslSocket.getSupportedProtocols());
+        }
+
         InputStream sslIS = sslSocket.getInputStream();
         OutputStream sslOS = sslSocket.getOutputStream();