Merge metal-prototype-branch
authoraghaisas
Mon, 15 Jul 2019 14:31:28 +0530
branchmetal-prototype-branch
changeset 57471 db53417e25a6
parent 57469 c43fb5314415 (current diff)
parent 55676 901ab17af3ce (diff)
child 57472 5c986f86899e
Merge
--- a/.hgtags	Thu Jul 11 15:42:53 2019 +0530
+++ b/.hgtags	Mon Jul 15 14:31:28 2019 +0530
@@ -571,4 +571,5 @@
 e64383344f144217c36196c3c8a2df8f588a2af3 jdk-14+3
 1e95931e7d8fa7e3899340a9c7cb28dbea50c10c jdk-13+28
 19d0b382f0869f72d4381b54fa129f1c74b6e766 jdk-14+4
+3081f39a3d30d63b112098386ac2bb027c2b7223 jdk-13+29
 0f1e29c77e50c7da11d83df410026392c4d1a28c jdk-14+5
--- a/make/Docs.gmk	Thu Jul 11 15:42:53 2019 +0530
+++ b/make/Docs.gmk	Mon Jul 15 14:31:28 2019 +0530
@@ -553,7 +553,7 @@
   $(eval specs_bottom_rel_path := $(specs_bottom_rel_path)../) \
 )
 
-SPECS_TOP := $(if $(filter true, $(IS_DRAFT)), <div class="draft-header">$(DRAFT_TEXT)</div>)
+SPECS_TOP := $(if $(filter true, $(IS_DRAFT)), <header class="draft-header">$(DRAFT_TEXT)</header>)
 
 # For all html files in $module/share/specs directories, copy and add the
 # copyright footer.
@@ -595,7 +595,9 @@
             DEST := $(DOCS_OUTPUTDIR)/specs/, \
             CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \
             OPTIONS := -V include-before='$(SPECS_TOP)' -V include-after='$(SPECS_BOTTOM_$($m_$f_NOF_SUBDIRS))', \
-            REPLACEMENTS := @@VERSION_STRING@@ => $(VERSION_STRING), \
+            REPLACEMENTS := \
+		@@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION) ; \
+		@@VERSION_STRING@@ => $(VERSION_STRING), \
             POST_PROCESS := $(TOOL_FIXUPPANDOC), \
         )) \
         $(eval JDK_SPECS_TARGETS += $($($m_$f_NAME))) \
@@ -625,7 +627,10 @@
             DEST := $(DOCS_OUTPUTDIR)/specs/man, \
             FILTER := $(PANDOC_HTML_MANPAGE_FILTER), \
             CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \
-            REPLACEMENTS := @@VERSION_SHORT@@ => $(VERSION_SHORT), \
+            REPLACEMENTS := \
+		@@COPYRIGHT_YEAR@@ => $(COPYRIGHT_YEAR) ; \
+		@@VERSION_SHORT@@ => $(VERSION_SHORT) ; \
+		@@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION), \
             OPTIONS := --toc -V include-before='$(SPECS_TOP)' -V include-after='$(SPECS_BOTTOM_1)', \
             POST_PROCESS := $(TOOL_FIXUPPANDOC), \
             EXTRA_DEPS := $(PANDOC_HTML_MANPAGE_FILTER) \
--- a/make/Images.gmk	Thu Jul 11 15:42:53 2019 +0530
+++ b/make/Images.gmk	Mon Jul 15 14:31:28 2019 +0530
@@ -138,7 +138,7 @@
           -Xmx128M -Xms128M $(LOG_INFO), \
   ))
 
-  JDK_TARGETS += $(gen_cds_archive_jdk)
+  JRE_TARGETS += $(gen_cds_archive_jre)
 endif
 
 ################################################################################
--- a/make/data/docs-resources/resources/jdk-default.css	Thu Jul 11 15:42:53 2019 +0530
+++ b/make/data/docs-resources/resources/jdk-default.css	Mon Jul 15 14:31:28 2019 +0530
@@ -85,6 +85,8 @@
     margin-top: -1em;
 }
 
+a { text-decoration: none }
+
 a:link {
   color: #4A6782;
 }
--- a/make/launcher/LauncherCommon.gmk	Thu Jul 11 15:42:53 2019 +0530
+++ b/make/launcher/LauncherCommon.gmk	Mon Jul 15 14:31:28 2019 +0530
@@ -235,7 +235,10 @@
           FORMAT := man, \
           FILTER := $(PANDOC_TROFF_MANPAGE_FILTER), \
           POST_PROCESS := $(MAN_POST_PROCESS), \
-          REPLACEMENTS := @@VERSION_SHORT@@ => $(VERSION_SHORT), \
+          REPLACEMENTS := \
+		@@COPYRIGHT_YEAR@@ => $(COPYRIGHT_YEAR) ; \
+		@@VERSION_SHORT@@ => $(VERSION_SHORT) ; \
+		@@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION), \
           EXTRA_DEPS := $(PANDOC_TROFF_MANPAGE_FILTER) \
               $(PANDOC_TROFF_MANPAGE_FILTER_JAVASCRIPT), \
       ))
--- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp	Mon Jul 15 14:31:28 2019 +0530
@@ -173,6 +173,7 @@
   volatile_nonstatic_field(JavaThread,         _exception_oop,                                oop)                                   \
   volatile_nonstatic_field(JavaThread,         _exception_pc,                                 address)                               \
   volatile_nonstatic_field(JavaThread,         _is_method_handle_return,                      int)                                   \
+  volatile_nonstatic_field(JavaThread,         _doing_unsafe_access,                          bool)                                  \
   nonstatic_field(JavaThread,                  _osthread,                                     OSThread*)                             \
   nonstatic_field(JavaThread,                  _pending_deoptimization,                       int)                                   \
   nonstatic_field(JavaThread,                  _pending_failed_speculation,                   jlong)                                 \
--- a/src/hotspot/share/logging/logDecorations.cpp	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/hotspot/share/logging/logDecorations.cpp	Mon Jul 15 14:31:28 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 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
@@ -25,12 +25,14 @@
 #include "jvm.h"
 #include "logging/logConfiguration.hpp"
 #include "logging/logDecorations.hpp"
+#include "runtime/atomic.hpp"
+#include "runtime/orderAccess.hpp"
 #include "runtime/os.inline.hpp"
 #include "runtime/thread.inline.hpp"
 #include "services/management.hpp"
 
 jlong LogDecorations::_vm_start_time_millis = 0;
-const char* LogDecorations::_host_name = "";
+const char* volatile LogDecorations::_host_name = NULL;
 
 LogDecorations::LogDecorations(LogLevelType level, const LogTagSet &tagset, const LogDecorators &decorators)
     : _level(level), _tagset(tagset), _millis(-1) {
@@ -38,11 +40,23 @@
 }
 
 void LogDecorations::initialize(jlong vm_start_time) {
-  char buffer[1024];
-  if (os::get_host_name(buffer, sizeof(buffer))){
-    _host_name = os::strdup_check_oom(buffer);
+  _vm_start_time_millis = vm_start_time;
+}
+
+const char* LogDecorations::host_name() {
+  const char* host_name = OrderAccess::load_acquire(&_host_name);
+  if (host_name == NULL) {
+    char buffer[1024];
+    if (os::get_host_name(buffer, sizeof(buffer))) {
+      host_name = os::strdup_check_oom(buffer);
+      const char* old_value = Atomic::cmpxchg(host_name, &_host_name, (const char*)NULL);
+      if (old_value != NULL) {
+        os::free((void *) host_name);
+        host_name = old_value;
+      }
+    }
   }
-  _vm_start_time_millis = vm_start_time;
+  return host_name;
 }
 
 void LogDecorations::create_decorations(const LogDecorators &decorators) {
@@ -128,7 +142,7 @@
 }
 
 char* LogDecorations::create_hostname_decoration(char* pos) {
-  int written = jio_snprintf(pos, DecorationsBufferSize - (pos - _decorations_buffer), "%s", _host_name);
+  int written = jio_snprintf(pos, DecorationsBufferSize - (pos - _decorations_buffer), "%s", host_name());
   ASSERT_AND_RETURN(written, pos)
 }
 
--- a/src/hotspot/share/logging/logDecorations.hpp	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/hotspot/share/logging/logDecorations.hpp	Mon Jul 15 14:31:28 2019 +0530
@@ -38,8 +38,9 @@
   const LogTagSet& _tagset;
   jlong _millis;
   static jlong _vm_start_time_millis;
-  static const char* _host_name;
+  static const char* volatile _host_name;
 
+  const char* host_name();
   jlong java_millis();
   void create_decorations(const LogDecorators& decorators);
 
--- a/src/hotspot/share/oops/klassVtable.cpp	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/hotspot/share/oops/klassVtable.cpp	Mon Jul 15 14:31:28 2019 +0530
@@ -638,6 +638,7 @@
   Method* super_method = NULL;
   InstanceKlass *holder = NULL;
   Method* recheck_method =  NULL;
+  bool found_pkg_prvt_method = false;
   while (k != NULL) {
     // lookup through the hierarchy for a method with matching name and sign.
     super_method = InstanceKlass::cast(k)->lookup_method(name, signature);
@@ -659,6 +660,16 @@
         return false;
       // else keep looking for transitive overrides
       }
+      // If we get here then one of the super classes has a package private method
+      // that will not get overridden because it is in a different package.  But,
+      // that package private method does "override" any matching methods in super
+      // interfaces, so there will be no miranda vtable entry created.  So, set flag
+      // to TRUE for use below, in case there are no methods in super classes that
+      // this target method overrides.
+      assert(super_method->is_package_private(), "super_method must be package private");
+      assert(!superk->is_same_class_package(classloader(), classname),
+             "Must be different packages");
+      found_pkg_prvt_method = true;
     }
 
     // Start with lookup result and continue to search up, for versions supporting transitive override
@@ -669,6 +680,15 @@
     }
   }
 
+  // If found_pkg_prvt_method is set, then the ONLY matching method in the
+  // superclasses is package private in another package. That matching method will
+  // prevent a miranda vtable entry from being created. Because the target method can not
+  // override the package private method in another package, then it needs to be the root
+  // for its own vtable entry.
+  if (found_pkg_prvt_method) {
+     return true;
+  }
+
   // if the target method is public or protected it may have a matching
   // miranda method in the super, whose entry it should re-use.
   // Actually, to handle cases that javac would not generate, we need
@@ -676,7 +696,7 @@
   const InstanceKlass *sk = InstanceKlass::cast(super);
   if (sk->has_miranda_methods()) {
     if (sk->lookup_method_in_all_interfaces(name, signature, Klass::find_defaults) != NULL) {
-      return false;  // found a matching miranda; we do not need a new entry
+      return false; // found a matching miranda; we do not need a new entry
     }
   }
   return true; // found no match; we need a new entry
--- a/src/java.base/share/classes/javax/crypto/CipherSpi.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/java.base/share/classes/javax/crypto/CipherSpi.java	Mon Jul 15 14:31:28 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -761,78 +761,87 @@
                 + " bytes of space in output buffer");
         }
 
+        // detecting input and output buffer overlap may be tricky
+        // we can only write directly into output buffer when we
+        // are 100% sure it's safe to do so
+
         boolean a1 = input.hasArray();
         boolean a2 = output.hasArray();
         int total = 0;
-        byte[] inArray, outArray;
-        if (a2) { // output has an accessible byte[]
-            outArray = output.array();
-            int outPos = output.position();
-            int outOfs = output.arrayOffset() + outPos;
+
+        if (a1) { // input has an accessible byte[]
+            byte[] inArray = input.array();
+            int inOfs = input.arrayOffset() + inPos;
+
+            if (a2) { // output has an accessible byte[]
+                byte[] outArray = output.array();
+                int outPos = output.position();
+                int outOfs = output.arrayOffset() + outPos;
 
-            if (a1) { // input also has an accessible byte[]
-                inArray = input.array();
-                int inOfs = input.arrayOffset() + inPos;
+                // check array address and offsets and use temp output buffer
+                // if output offset is larger than input offset and
+                // falls within the range of input data
+                boolean useTempOut = false;
+                if (inArray == outArray &&
+                    ((inOfs < outOfs) && (outOfs < inOfs + inLen))) {
+                    useTempOut = true;
+                    outArray = new byte[outLenNeeded];
+                    outOfs = 0;
+                }
                 if (isUpdate) {
                     total = engineUpdate(inArray, inOfs, inLen, outArray, outOfs);
                 } else {
                     total = engineDoFinal(inArray, inOfs, inLen, outArray, outOfs);
                 }
+                if (useTempOut) {
+                    output.put(outArray, outOfs, total);
+                } else {
+                    // adjust output position manually
+                    output.position(outPos + total);
+                }
+                // adjust input position manually
                 input.position(inLimit);
-            } else { // input does not have accessible byte[]
-                inArray = new byte[getTempArraySize(inLen)];
-                do {
-                    int chunk = Math.min(inLen, inArray.length);
-                    if (chunk > 0) {
-                        input.get(inArray, 0, chunk);
-                    }
-                    int n;
-                    if (isUpdate || (inLen > chunk)) {
-                        n = engineUpdate(inArray, 0, chunk, outArray, outOfs);
-                    } else {
-                        n = engineDoFinal(inArray, 0, chunk, outArray, outOfs);
-                    }
-                    total += n;
-                    outOfs += n;
-                    inLen -= chunk;
-                } while (inLen > 0);
-            }
-            output.position(outPos + total);
-        } else { // output does not have an accessible byte[]
-            if (a1) { // but input has an accessible byte[]
-                inArray = input.array();
-                int inOfs = input.arrayOffset() + inPos;
+            } else { // output does not have an accessible byte[]
+                byte[] outArray = null;
                 if (isUpdate) {
                     outArray = engineUpdate(inArray, inOfs, inLen);
                 } else {
                     outArray = engineDoFinal(inArray, inOfs, inLen);
                 }
-                input.position(inLimit);
                 if (outArray != null && outArray.length != 0) {
                     output.put(outArray);
                     total = outArray.length;
                 }
-            } else { // input also does not have an accessible byte[]
-                inArray = new byte[getTempArraySize(inLen)];
-                do {
-                    int chunk = Math.min(inLen, inArray.length);
-                    if (chunk > 0) {
-                        input.get(inArray, 0, chunk);
-                    }
-                    int n;
-                    if (isUpdate || (inLen > chunk)) {
-                        outArray = engineUpdate(inArray, 0, chunk);
-                    } else {
-                        outArray = engineDoFinal(inArray, 0, chunk);
-                    }
-                    if (outArray != null && outArray.length != 0) {
-                        output.put(outArray);
-                        total += outArray.length;
-                    }
-                    inLen -= chunk;
-                } while (inLen > 0);
+                // adjust input position manually
+                input.position(inLimit);
+            }
+        } else { // input does not have an accessible byte[]
+            // have to assume the worst, since we have no way of determine
+            // if input and output overlaps or not
+            byte[] tempOut = new byte[outLenNeeded];
+            int outOfs = 0;
+
+            byte[] tempIn = new byte[getTempArraySize(inLen)];
+            do {
+                int chunk = Math.min(inLen, tempIn.length);
+                if (chunk > 0) {
+                    input.get(tempIn, 0, chunk);
+                }
+                int n;
+                if (isUpdate || (inLen > chunk)) {
+                    n = engineUpdate(tempIn, 0, chunk, tempOut, outOfs);
+                } else {
+                    n = engineDoFinal(tempIn, 0, chunk, tempOut, outOfs);
+                }
+                outOfs += n;
+                total += n;
+                inLen -= chunk;
+            } while (inLen > 0);
+            if (total > 0) {
+                output.put(tempOut, 0, total);
             }
         }
+
         return total;
     }
 
--- a/src/java.base/share/classes/sun/security/util/CurveDB.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/java.base/share/classes/sun/security/util/CurveDB.java	Mon Jul 15 14:31:28 2019 +0530
@@ -104,21 +104,10 @@
             if (namedCurve.getCurve().getField().getFieldSize() != fieldSize) {
                 continue;
             }
-            if (namedCurve.getCurve().equals(params.getCurve()) == false) {
-                continue;
-            }
-            if (namedCurve.getGenerator().equals(params.getGenerator()) ==
-                    false) {
-                continue;
+            if (ECUtil.equals(namedCurve, params)) {
+                // everything matches our named curve, return it
+                return namedCurve;
             }
-            if (namedCurve.getOrder().equals(params.getOrder()) == false) {
-                continue;
-            }
-            if (namedCurve.getCofactor() != params.getCofactor()) {
-                continue;
-            }
-            // everything matches our named curve, return it
-            return namedCurve;
         }
         // no match found
         return null;
--- a/src/java.base/share/classes/sun/security/util/ECUtil.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/java.base/share/classes/sun/security/util/ECUtil.java	Mon Jul 15 14:31:28 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -32,7 +32,7 @@
 import java.security.spec.*;
 import java.util.Arrays;
 
-public class ECUtil {
+public final class ECUtil {
 
     // Used by SunPKCS11 and SunJSSE.
     public static ECPoint decodePoint(byte[] data, EllipticCurve curve)
@@ -220,6 +220,21 @@
         return nameSpec.getName();
     }
 
+    public static boolean equals(ECParameterSpec spec1, ECParameterSpec spec2) {
+        if (spec1 == spec2) {
+            return true;
+        }
+
+        if (spec1 == null || spec2 == null) {
+            return false;
+        }
+        return (spec1.getCofactor() == spec2.getCofactor() &&
+                spec1.getOrder().equals(spec2.getOrder()) &&
+                spec1.getCurve().equals(spec2.getCurve()) &&
+                spec1.getGenerator().equals(spec2.getGenerator()));
+    }
+
+
     // Convert the concatenation R and S in into their DER encoding
     public static byte[] encodeSignature(byte[] signature) throws SignatureException {
 
--- a/src/java.base/share/classes/sun/security/util/SignatureUtil.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/java.base/share/classes/sun/security/util/SignatureUtil.java	Mon Jul 15 14:31:28 2019 +0530
@@ -28,6 +28,7 @@
 import java.io.IOException;
 import java.security.*;
 import java.security.spec.*;
+import java.util.Locale;
 import sun.security.rsa.RSAUtil;
 import jdk.internal.access.SharedSecrets;
 
@@ -74,14 +75,9 @@
             AlgorithmParameters params)
             throws ProviderException {
 
-        sigName = checkName(sigName);
+        sigName = checkName(sigName).toUpperCase(Locale.ENGLISH);
         AlgorithmParameterSpec paramSpec = null;
         if (params != null) {
-            if (sigName.toUpperCase().indexOf("RSA") == -1) {
-                throw new ProviderException
-                    ("Unrecognized algorithm for signature parameters " +
-                     sigName);
-            }
             // AlgorithmParameters.getAlgorithm() may returns oid if it's
             // created during DER decoding. Convert to use the standard name
             // before passing it to RSAUtil
@@ -93,7 +89,20 @@
                     throw new ProviderException(e);
                 }
             }
-            paramSpec = RSAUtil.getParamSpec(params);
+
+            if (sigName.indexOf("RSA") != -1) {
+                paramSpec = RSAUtil.getParamSpec(params);
+            } else if (sigName.indexOf("ECDSA") != -1) {
+                try {
+                    paramSpec = params.getParameterSpec(ECParameterSpec.class);
+                } catch (Exception e) {
+                    throw new ProviderException("Error handling EC parameters", e);
+                }
+            } else {
+                throw new ProviderException
+                    ("Unrecognized algorithm for signature parameters " +
+                     sigName);
+            }
         }
         return paramSpec;
     }
@@ -103,17 +112,31 @@
     public static AlgorithmParameterSpec getParamSpec(String sigName,
             byte[] paramBytes)
             throws ProviderException {
-        sigName = checkName(sigName);
+        sigName = checkName(sigName).toUpperCase(Locale.ENGLISH);
         AlgorithmParameterSpec paramSpec = null;
+
         if (paramBytes != null) {
-            if (sigName.toUpperCase().indexOf("RSA") == -1) {
+            if (sigName.indexOf("RSA") != -1) {
+                AlgorithmParameters params =
+                    createAlgorithmParameters(sigName, paramBytes);
+                paramSpec = RSAUtil.getParamSpec(params);
+            } else if (sigName.indexOf("ECDSA") != -1) {
+                try {
+                    Provider p = Signature.getInstance(sigName).getProvider();
+                    paramSpec = ECUtil.getECParameterSpec(p, paramBytes);
+                } catch (Exception e) {
+                    throw new ProviderException("Error handling EC parameters", e);
+                }
+                // ECUtil discards exception and returns null, so we need to check
+                // the returned value
+                if (paramSpec == null) {
+                    throw new ProviderException("Error handling EC parameters");
+                }
+            } else {
                 throw new ProviderException
                      ("Unrecognized algorithm for signature parameters " +
                       sigName);
             }
-            AlgorithmParameters params =
-                createAlgorithmParameters(sigName, paramBytes);
-            paramSpec = RSAUtil.getParamSpec(params);
         }
         return paramSpec;
     }
--- a/src/java.base/share/man/java.1	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/java.base/share/man/java.1	Mon Jul 15 14:31:28 2019 +0530
@@ -109,7 +109,7 @@
 .SH DESCRIPTION
 .PP
 The \f[CB]java\f[R] command starts a Java application.
-It does this by starting the Java Runtime Environment (JRE), loading the
+It does this by starting the Java Virtual Machine (JVM), loading the
 specified class, and calling that class\[aq]s \f[CB]main()\f[R] method.
 The method must be declared \f[CB]public\f[R] and \f[CB]static\f[R], it must
 not return any value, and it must accept a \f[CB]String\f[R] array as a
@@ -566,7 +566,7 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-disableassertions\f[R][\f[CB]:\f[R][\f[I]packagename\f[R]]...|\f[CB]:\f[R]\f[I]classname\f[R]] or \f[CB]\-da\\[\f[R]:\f[CB]\\[*packagename*\\]...|\f[R]:`\f[I]classname\f[R]]
+.B \f[CB]\-disableassertions\f[R][\f[CB]:\f[R][\f[I]packagename\f[R]]...|\f[CB]:\f[R]\f[I]classname\f[R]] or \f[CB]\-da\f[R][\f[CB]:\f[R][\f[I]packagename\f[R]]...|\f[CB]:\f[R]\f[I]classname\f[R]]
 Disables assertions.
 By default, assertions are disabled in all packages and classes.
 With no arguments, \f[CB]\-disableassertions\f[R] (\f[CB]\-da\f[R]) disables
@@ -606,7 +606,7 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-enableassertions\f[R][\f[CB]:\f[R][\f[I]packagename\f[R]]...|\f[CB]:\f[R]\f[I]classname\f[R]] or \f[CB]\-ea\\[\f[R]:\f[CB]\\[*packagename*\\]...|\f[R]:`\f[I]classname\f[R]]
+.B \f[CB]\-enableassertions\f[R][\f[CB]:\f[R][\f[I]packagename\f[R]]...|\f[CB]:\f[R]\f[I]classname\f[R]] or \f[CB]\-ea\f[R][\f[CB]:\f[R][\f[I]packagename\f[R]]...|\f[CB]:\f[R]\f[I]classname\f[R]]
 Enables assertions.
 By default, assertions are disabled in all packages and classes.
 With no arguments, \f[CB]\-enableassertions\f[R] (\f[CB]\-ea\f[R]) enables
@@ -659,6 +659,7 @@
 .TP
 .B \f[CB]\-javaagent:\f[R]\f[I]jarpath\f[R][\f[CB]=\f[R]\f[I]options\f[R]]
 Loads the specified Java programming language agent.
+See \f[CB]java.lang.instrument\f[R].
 .RS
 .RE
 .TP
@@ -718,12 +719,12 @@
 .RE
 .TP
 .B \f[CB]\-\-version\f[R]
-Prints product version to the error stream and exits.
+Prints product version to the output stream and exits.
 .RS
 .RE
 .TP
 .B \f[CB]\-version\f[R]
-Prints product version to the output stream and exits.
+Prints product version to the error stream and exits.
 .RS
 .RE
 .TP
@@ -747,7 +748,7 @@
 files after shell expansion, but before argument processing.
 Contents in the argument files are expanded because otherwise, they
 would be specified on the command line until the
-\f[CB]\-Xdisable\-\@files\f[R] option was encountered.
+\f[CB]\-\-disable\-\@files\f[R] option was encountered.
 .RS
 .PP
 The argument files can also contain the main class name and all options.
@@ -856,7 +857,7 @@
 .TP
 .B \f[CB]\-Xmn\f[R] \f[I]size\f[R]
 Sets the initial and maximum size (in bytes) of the heap for the young
-generation (nursery).
+generation (nursery) in the generational collectors.
 Append the letter \f[CB]k\f[R] or \f[CB]K\f[R] to indicate kilobytes,
 \f[CB]m\f[R] or \f[CB]M\f[R] to indicate megabytes, or \f[CB]g\f[R] or
 \f[CB]G\f[R] to indicate gigabytes.
@@ -866,8 +867,10 @@
 garbage collections are performed.
 If the size is too large, then only full garbage collections are
 performed, which can take a long time to complete.
-It is recommended that you keep the size for the young generation
-greater than 25% and less than 50% of the overall heap size.
+It is recommended that you do not set the size for the young generation
+for the G1 collector, and keep the size for the young generation greater
+than 25% and less than 50% of the overall heap size for other
+collectors.
 The following examples show how to set the initial and maximum size of
 young generation to 256 MB using various units:
 .RS
@@ -887,7 +890,7 @@
 .RE
 .TP
 .B \f[CB]\-Xms\f[R] \f[I]size\f[R]
-Sets the initial size (in bytes) of the heap.
+Sets the minimum and initial size (in bytes) of the heap.
 This value must be a multiple of 1024 and greater than 1 MB.
 Append the letter \f[CB]k\f[R] or \f[CB]K\f[R] to indicate kilobytes,
 \f[CB]m\f[R] or \f[CB]M\f[R] to indicate megabytes, \f[CB]g\f[R] or \f[CB]G\f[R]
@@ -904,16 +907,18 @@
 \f[R]
 .fi
 .PP
-If you don\[aq]t set this option, then the initial size is set as the
-sum of the sizes allocated for the old generation and the young
-generation.
+Instead of the \f[CB]\-Xms\f[R] option to set both the minimum and initial
+size of the heap, you can use \f[CB]\-XX:MinHeapSize\f[R] to set the
+minimum size and \f[CB]\-XX:InitialHeapSize\f[R] to set the initial size.
+.PP
+If you don\[aq]t set this option, the initial size is set as the sum of
+the sizes allocated for the old generation and the young generation.
 The initial size of the heap for the young generation can be set using
 the \f[CB]\-Xmn\f[R] option or the \f[CB]\-XX:NewSize\f[R] option.
 .RE
 .TP
 .B \f[CB]\-Xmx\f[R] \f[I]size\f[R]
-Specifies the maximum size (in bytes) of the memory allocation pool in
-bytes.
+Specifies the maximum size (in bytes) of the heap.
 This value must be a multiple of 1024 and greater than 2 MB.
 Append the letter \f[CB]k\f[R] or \f[CB]K\f[R] to indicate kilobytes,
 \f[CB]m\f[R] or \f[CB]M\f[R] to indicate megabytes, or \f[CB]g\f[R] or
@@ -1205,13 +1210,6 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-\-disable\-\@files\f[R]
-Can be used anywhere on the command line, including in an argument file,
-to prevent further \f[CB]\@\f[R]\f[I]filename\f[R] expansion.
-This option stops expanding \f[CB]\@\f[R]\-argfiles after the option.
-.RS
-.RE
-.TP
 .B \f[CB]\-\-source\f[R] \f[I]version\f[R]
 Sets the version of the source in source\-file mode.
 .RS
@@ -1392,32 +1390,13 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-XX:+FlightRecorder\f[R]
-Enables the use of Java Flight Recorder (JFR) during the runtime of the
-application.
-.RS
-.RS
-.PP
-\f[B]Note:\f[R] The \f[CB]\-XX:+FlightRecorder\f[R] option is no longer
-required to use JFR.
-This was a change made in JDK 8u40.
-.RE
-.RE
-.TP
-.B \f[CB]\-XX:FlightRecorderOptions=\f[R]\f[I]parameter\f[R]\f[CB]=\f[R]\f[I]value\f[R]
+.B \f[CB]\-XX:FlightRecorderOptions=\f[R]\f[I]parameter\f[R]\f[CB]=\f[R]\f[I]value\f[R] (or)\f[CB]\-XX:FlightRecorderOptions:\f[R]\f[I]parameter\f[R]\f[CB]=\f[R]\f[I]value\f[R]
 Sets the parameters that control the behavior of JFR.
 .RS
 .PP
 The following list contains the available JFR
 \f[I]parameter\f[R]\f[CB]=\f[R]\f[I]value\f[R] entries:
 .TP
-.B \f[CB]allow_threadbuffers_to_disk=\f[R]{\f[CB]true\f[R]|\f[CB]false\f[R]}
-Specifies whether thread buffers are written directly to disk if the
-buffer thread is blocked.
-By default, this parameter is disabled.
-.RS
-.RE
-.TP
 .B \f[CB]globalbuffersize=\f[R]\f[I]size\f[R]
 Specifies the total amount of primary memory used for data retention.
 The default value is based on the value specified for
@@ -1492,7 +1471,8 @@
 .TP
 .B \f[CB]threadbuffersize=\f[R]\f[I]size\f[R]
 Specifies the per\-thread local buffer size (in bytes).
-By default, the local buffer size is set to 8 kilobytes.
+By default, the local buffer size is set to 8 kilobytes, with a minimum
+value of 4 kilobytes.
 Overriding this parameter could reduce performance and is not
 recommended.
 .RS
@@ -2978,19 +2958,17 @@
 This sets various parameters to be optimal for long\-running jobs with
 intensive memory allocation, based on the configuration of the computer
 (RAM and CPU).
-By default, the option is disabled and the heap isn't optimized.
+By default, the option is disabled and the heap sizes are configured
+less aggressively.
 .RS
 .RE
 .TP
 .B \f[CB]\-XX:+AlwaysPreTouch\f[R]
-Enables touching of every page on the Java heap during JVM
-initialization.
-This gets all pages into memory before entering the \f[CB]main()\f[R]
-method.
-The option can be used in testing to simulate a long\-running system
-with all virtual memory mapped to physical memory.
-By default, this option is disabled and all pages are committed as JVM
-heap space fills.
+Requests the VM to touch every page on the Java heap after requesting it
+from the operating system and before handing memory out to the
+application.
+By default, this option is disabled and all pages are committed as the
+application uses the heap space.
 .RS
 .RE
 .TP
@@ -3026,12 +3004,10 @@
 .RS
 .PP
 The following example shows how to set the factor to 20%:
-.IP
-.nf
-\f[CB]
->\ \ \ `\-XX:CMSInitiatingOccupancyFraction=20`
-\f[R]
-.fi
+.RS
+.PP
+\f[CB]\-XX:CMSInitiatingOccupancyFraction=20\f[R]
+.RE
 .RE
 .TP
 .B \f[CB]\-XX:CMSIncrementalDutySafetyFactor=\f[R]\f[I]percent\f[R]
@@ -3095,11 +3071,14 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses\f[R]
-Enables invoking of concurrent GC by using the \f[CB]System.gc()\f[R]
-request and unloading of classes during the concurrent GC cycle.
-This option is disabled by default and can be enabled only with the
-deprecated \f[CB]\-XX:+UseConcMarkSweepGC\f[R] option.
+.B \f[CB]\-XX:G1AdaptiveIHOPNumInitialSamples=\f[R]\f[I]number\f[R]
+When \f[CB]\-XX:UseAdaptiveIHOP\f[R] is enabled, this option sets the
+number of completed marking cycles used to gather samples until G1
+adaptively determines the optimum value of
+\f[CB]\-XX:InitiatingHeapOccupancyPercent\f[R].
+Before, G1 uses the value of
+\f[CB]\-XX:InitiatingHeapOccupancyPercent\f[R] directly for this purpose.
+The default value is 3.
 .RS
 .RE
 .TP
@@ -3107,10 +3086,8 @@
 Sets the size of the regions into which the Java heap is subdivided when
 using the garbage\-first (G1) collector.
 The value is a power of 2 and can range from 1 MB to 32 MB.
-The goal is to have around 2048 regions based on the minimum Java heap
-size.
 The default region size is determined ergonomically based on the heap
-size.
+size with a goal of approximately 2048 regions.
 .RS
 .PP
 The following example sets the size of the subdivisions to 16 MB:
@@ -3137,8 +3114,6 @@
 .PP
 This is an experimental flag.
 This setting replaces the \f[CB]\-XX:DefaultMaxNewGenPercent\f[R] setting.
-.PP
-This setting isn\[aq]t available in Java HotSpot VM build 23 or earlier.
 .RE
 .TP
 .B \f[CB]\-XX:G1MixedGCCountTarget=\f[R]\f[I]number\f[R]
@@ -3148,8 +3123,6 @@
 The default is 8 mixed garbage collections.
 The goal for mixed collections is to be within this target number.
 .RS
-.PP
-This setting isn\[aq]t available in Java HotSpot VM build 23 or earlier.
 .RE
 .TP
 .B \f[CB]\-XX:G1MixedGCLiveThresholdPercent=\f[R]\f[I]percent\f[R]
@@ -3161,8 +3134,6 @@
 This is an experimental flag.
 This setting replaces the
 \f[CB]\-XX:G1OldCSetRegionLiveThresholdPercent\f[R] setting.
-.PP
-This setting isn\[aq]t available in Java HotSpot VM build 23 or earlier.
 .RE
 .TP
 .B \f[CB]\-XX:G1NewSizePercent=\f[R]\f[I]percent\f[R]
@@ -3173,8 +3144,6 @@
 .PP
 This is an experimental flag.
 This setting replaces the \f[CB]\-XX:DefaultMinNewGenPercent\f[R] setting.
-.PP
-This setting isn\[aq]t available in Java HotSpot VM build 23 or earlier.
 .RE
 .TP
 .B \f[CB]\-XX:G1OldCSetRegionThresholdPercent=\f[R]\f[I]percent\f[R]
@@ -3182,8 +3151,6 @@
 a mixed garbage collection cycle.
 The default is 10 percent of the Java heap.
 .RS
-.PP
-This setting isn\[aq]t available in Java HotSpot VM build 23 or earlier.
 .RE
 .TP
 .B \f[CB]\-XX:G1ReservePercent=\f[R]\f[I]percent\f[R]
@@ -3202,10 +3169,20 @@
 .RE
 .RE
 .TP
-.B \f[CB]\-XX:InitialHeapOccupancyPercent=\f[R]\f[I]percent\f[R]
-Sets the Java heap occupancy threshold that triggers a marking cycle.
-The default occupancy is 45 percent of the entire Java heap.
-.RS
+.B \f[CB]\-XX:+G1UseAdaptiveIHOP\f[R]
+Controls adaptive calculation of the old generation occupancy to start
+background work preparing for an old generation collection.
+If enabled, G1 uses \f[CB]\-XX:InitiatingHeapOccupancyPercent\f[R] for the
+first few times as specified by the value of
+\f[CB]\-XX:G1AdaptiveIHOPNumInitialSamples\f[R], and after that adaptively
+calculates a new optimum value for the initiating occupancy
+automatically.
+Otherwise, the old generation collection process always starts at the
+old generation occupancy determined by
+\f[CB]\-XX:InitiatingHeapOccupancyPercent\f[R].
+.RS
+.PP
+The default is enabled.
 .RE
 .TP
 .B \f[CB]\-XX:InitialHeapSize=\f[R]\f[I]size\f[R]
@@ -3276,15 +3253,18 @@
 .RE
 .TP
 .B \f[CB]\-XX:InitiatingHeapOccupancyPercent=\f[R]\f[I]percent\f[R]
-Sets the percentage of the heap occupancy (0 to 100) at which to start a
-concurrent GC cycle.
-It\[aq]s used by garbage collectors that trigger a concurrent GC cycle
-based on the occupancy of the entire heap, not just one of the
-generations (for example, the G1 garbage collector).
+Sets the percentage of the old generation occupancy (0 to 100) at which
+to start the first few concurrent marking cycles for the G1 garbage
+collector.
 .RS
 .PP
 By default, the initiating value is set to 45%.
-A value of 0 implies nonstop GC cycles.
+A value of 0 implies nonstop concurrent GC cycles from the beginning
+until G1 adaptively sets this value.
+.PP
+See also the \f[CB]\-XX:G1UseAdaptiveIHOP\f[R] and
+\f[CB]\-XX:G1AdaptiveIHOPNumInitialSamples\f[R] options.
+.PP
 The following example shows how to set the initiating heap occupancy to
 75%:
 .RS
@@ -3298,7 +3278,9 @@
 This is a soft goal, and the JVM will make its best effort to achieve
 it.
 The specified value doesn\[aq]t adapt to your heap size.
-By default, there\[aq]s no maximum pause time value.
+By default, for G1 the maximum pause time target is 200 milliseconds.
+The other generational collectors do not use a pause time goal by
+default.
 .RS
 .PP
 The following example shows how to set the maximum target pause time to
@@ -3332,13 +3314,6 @@
 \f[R]
 .fi
 .PP
-On Oracle Solaris 7 and Oracle Solaris 8 SPARC platforms, the upper
-limit for this value is approximately 4,000 MB minus overhead amounts.
-On Oracle Solaris 2.6 and x86 platforms, the upper limit is
-approximately 2,000 MB minus overhead amounts.
-On Linux platforms, the upper limit is approximately 2,000 MB minus
-overhead amounts.
-.PP
 The \f[CB]\-XX:MaxHeapSize\f[R] option is equivalent to \f[CB]\-Xmx\f[R].
 .RE
 .TP
@@ -3450,6 +3425,32 @@
 embedded applications.
 .RE
 .TP
+.B \f[CB]\-XX:MinHeapSize=\f[R]\f[I]size\f[R]
+Sets the minimum size (in bytes) of the memory allocation pool.
+This value must be either 0, or a multiple of 1024 and greater than 1
+MB.
+Append the letter \f[CB]k\f[R] or \f[CB]K\f[R] to indicate kilobytes,
+\f[CB]m\f[R] or \f[CB]M\f[R] to indicate megabytes, or \f[CB]g\f[R] or
+\f[CB]G\f[R] to indicate gigabytes.
+The default value is selected at run time based on the system
+configuration.
+.RS
+.PP
+The following examples show how to set the mimimum size of allocated
+memory to 6 MB using various units:
+.IP
+.nf
+\f[CB]
+\-XX:MinHeapSize=6291456
+\-XX:MinHeapSize=6144k
+\-XX:MinHeapSize=6m
+\f[R]
+.fi
+.PP
+If you set this option to 0, then the minimum size is set to the same
+value as the initial size.
+.RE
+.TP
 .B \f[CB]\-XX:NewRatio=\f[R]\f[I]ratio\f[R]
 Sets the ratio between young and old generation sizes.
 By default, this option is set to 2.
@@ -3493,23 +3494,13 @@
 .RE
 .TP
 .B \f[CB]\-XX:ParallelGCThreads=\f[R]\f[I]threads\f[R]
-Sets the value of the stop\-the\-world (STW) worker threads.
-This option sets the value of \f[I]threads\f[R] to the number of logical
-processors.
-The value of \f[I]threads\f[R] is the same as the number of logical
-processors up to a value of 8.
-.RS
-.PP
-If there are more than 8 logical processors, then this option sets the
-value of \f[I]threads\f[R] to approximately 5/8 of the logical
-processors.
-This works in most cases except for larger SPARC systems where the value
-of \f[I]threads\f[R] can be approximately 5/16 of the logical processors.
-.PP
-The default value depends on the number of CPUs available to the JVM.
-.PP
-For example, to set the number of threads for parallel GC to 2, specify
-the following option:
+Sets the number of the stop\-the\-world (STW) worker threads.
+The default value depends on the number of CPUs available to the JVM and
+the garbage collector selected.
+.RS
+.PP
+For example, to set the number of threads for G1 GC to 2, specify the
+following option:
 .RS
 .PP
 \f[CB]\-XX:ParallelGCThreads=2\f[R]
@@ -3749,6 +3740,22 @@
 To disable the use of TLABs, specify the option \f[CB]\-XX:\-UseTLAB\f[R].
 .RS
 .RE
+.TP
+.B \f[CB]\-XX:+UseZGC\f[R]
+Enables the use of the Z garbage collector.
+This garbage collector is best for providing lowest latency with large
+Java heaps at some throughput cost.
+This is an experimental garbage collector, you need to specify
+\f[CB]\-XX:+UnlockExperimentalVMOptions\f[R] before \f[CB]\-XX:+UseZGC\f[R]
+on the command line.
+.RS
+.PP
+Example:
+.RS
+.PP
+\f[CB]\-XX:+UnlockExperimentalVMOptions\ \-XX:+UseZGC\f[R]
+.RE
+.RE
 .SH DEPRECATED JAVA OPTIONS
 .PP
 These \f[CB]java\f[R] options are deprecated and might be removed in a
@@ -3788,6 +3795,13 @@
 .RS
 .RE
 .TP
+.B \f[CB]\-XX:+FlightRecorder\f[R]
+Enables the use of Java Flight Recorder (JFR) during the runtime of the
+application.
+Since JDK 8u40 this option has not been required to use JFR.
+.RS
+.RE
+.TP
 .B \f[CB]\-XX:+TraceClassLoading\f[R]
 Enables tracing of classes as they are loaded.
 By default, this option is disabled and classes aren\[aq]t traced.
@@ -3926,8 +3940,8 @@
 argument list just as they would be specified on the command line.
 .PP
 The \f[CB]java\f[R] launcher expands the argument file contents until it
-encounters the \f[CB]\-Xdisable\-\@files\f[R] option.
-You can use the \f[CB]\-Xdisable\-\@files\f[R] option anywhere on the
+encounters the \f[CB]\-\-disable\-\@files\f[R] option.
+You can use the \f[CB]\-\-disable\-\@files\f[R] option anywhere on the
 command line, including in an argument file, to stop \f[CB]\@\f[R]
 argument files expansion.
 .PP
@@ -5603,7 +5617,7 @@
 response times for your application:
 .RS
 .PP
-\f[CB]java\ \-XX:+UseG1GC\ \-Xms26g\ Xmx26g\ \-XX:MaxGCPauseMillis=500\f[R]
+\f[CB]java\ \-XX:+UseG1GC\ \-XX:MaxGCPauseMillis=100\f[R]
 .RE
 .SS Keeping the Java Heap Small and Reducing the Dynamic Footprint of
 Embedded Applications
--- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c	Mon Jul 15 14:31:28 2019 +0530
@@ -479,8 +479,7 @@
         fp_gtk_fixed_new = dl_symbol("gtk_fixed_new");
         fp_gtk_handle_box_new = dl_symbol("gtk_handle_box_new");
         fp_gtk_image_new = dl_symbol("gtk_image_new");
-        fp_gtk_hpaned_new = dl_symbol("gtk_hpaned_new");
-        fp_gtk_vpaned_new = dl_symbol("gtk_vpaned_new");
+        fp_gtk_paned_new = dl_symbol("gtk_paned_new");
         fp_gtk_scale_new = dl_symbol("gtk_scale_new");
         fp_gtk_hscrollbar_new = dl_symbol("gtk_hscrollbar_new");
         fp_gtk_vscrollbar_new = dl_symbol("gtk_vscrollbar_new");
@@ -1083,7 +1082,7 @@
         case SPLIT_PANE:
             if (init_result = (NULL == gtk3_widgets[_GTK_HPANED_TYPE]))
             {
-                gtk3_widgets[_GTK_HPANED_TYPE] = (*fp_gtk_hpaned_new)();
+                gtk3_widgets[_GTK_HPANED_TYPE] = (*fp_gtk_paned_new)(GTK_ORIENTATION_HORIZONTAL);
             }
             result = gtk3_widgets[_GTK_HPANED_TYPE];
             break;
@@ -1316,7 +1315,7 @@
         case VSPLIT_PANE_DIVIDER:
             if (init_result = (NULL == gtk3_widgets[_GTK_VPANED_TYPE]))
             {
-                gtk3_widgets[_GTK_VPANED_TYPE] = (*fp_gtk_vpaned_new)();
+                gtk3_widgets[_GTK_VPANED_TYPE] = (*fp_gtk_paned_new)(GTK_ORIENTATION_VERTICAL);
             }
             result = gtk3_widgets[_GTK_VPANED_TYPE];
             break;
@@ -1436,6 +1435,10 @@
             } else if (strcmp(detail, "option") == 0) {
                 path = createWidgetPath (NULL);
                 append_element(path, "radio");
+            } else if (strcmp(detail, "paned") == 0) {
+                path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
+                append_element(path, "paned");
+                append_element(path, "separator");
             } else {
                 path = createWidgetPath (fp_gtk_style_context_get_path (widget_context));
                 append_element(path, detail);
@@ -1834,22 +1837,30 @@
 {
     gtk3_widget = gtk3_get_widget(widget_type);
 
-    GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
-
-    fp_gtk_style_context_save (context);
+    GtkStyleContext* context = get_style(widget_type, detail);
 
     GtkStateFlags flags = get_gtk_flags(state_type);
     fp_gtk_style_context_set_state(context, GTK_STATE_FLAG_PRELIGHT);
 
-    if (detail != 0) {
+    if (detail != 0 && !(strcmp(detail, "paned") == 0)) {
         transform_detail_string(detail, context);
         fp_gtk_style_context_add_class (context, "handlebox_bin");
     }
 
-    fp_gtk_render_handle(context, cr, x, y, width, height);
-    fp_gtk_render_background(context, cr, x, y, width, height);
-
-    fp_gtk_style_context_restore (context);
+    if (!(strcmp(detail, "paned") == 0)) {
+        fp_gtk_render_handle(context, cr, x, y, width, height);
+        fp_gtk_render_background(context, cr, x, y, width, height);
+    } else {
+        if (orientation == GTK_ORIENTATION_VERTICAL) {
+            fp_gtk_render_handle(context, cr, x+width/2, y, 2, height);
+            fp_gtk_render_background(context, cr, x+width/2, y, 2, height);
+        } else {
+            fp_gtk_render_handle(context, cr, x, y+height/2, width, 2);
+            fp_gtk_render_background(context, cr, x, y+height/2, width, 2);
+        }
+    }
+
+    disposeOrRestoreContext(context);
 }
 
 static void gtk3_paint_hline(WidgetType widget_type, GtkStateType state_type,
--- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.h	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.h	Mon Jul 15 14:31:28 2019 +0530
@@ -163,6 +163,7 @@
 typedef void GtkProgressBar;
 typedef void GtkProgress;
 typedef void GtkWidgetPath;
+typedef void GtkPaned;
 
 /* Some real structures */
 typedef struct
@@ -503,8 +504,7 @@
 static GtkWidget* (*fp_gtk_entry_new)();
 static GtkWidget* (*fp_gtk_fixed_new)();
 static GtkWidget* (*fp_gtk_handle_box_new)();
-static GtkWidget* (*fp_gtk_hpaned_new)();
-static GtkWidget* (*fp_gtk_vpaned_new)();
+static GtkWidget* (*fp_gtk_paned_new)(GtkOrientation orientation);
 static GtkWidget* (*fp_gtk_scale_new)(GtkOrientation  orientation,
                                        GtkAdjustment* adjustment);
 static GtkWidget* (*fp_gtk_hscrollbar_new)(GtkAdjustment* adjustment);
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.java	Mon Jul 15 14:31:28 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -75,7 +75,7 @@
 /**
  * @author Jacek Ambroziak
  * @author Santiago Pericas-Geertsen
- * @LastModified: Nov 2017
+ * @LastModified: July 2019
  */
 public class MethodGenerator extends MethodGen
     implements com.sun.org.apache.xalan.internal.xsltc.compiler.Constants {
@@ -207,7 +207,7 @@
         _nextNode = new INVOKEINTERFACE(index, 1);
 
         _slotAllocator = new SlotAllocator();
-        _slotAllocator.initialize(getLocalVariableRegistry().getLocals(false));
+        _slotAllocator.initialize(getLocalVariableRegistry().getLocals());
         _allocatorInit = true;
     }
 
@@ -445,7 +445,7 @@
                     }
                 }
             } else {
-                _nameToLVGMap.remove(lvg);
+                _nameToLVGMap.remove(lvg.getName());
             }
         }
 
@@ -480,55 +480,31 @@
         }
 
         /**
-         * <p>Gets all {@link LocalVariableGen} objects for this method.</p>
-         * <p>When the <code>includeRemoved</code> argument has the value
-         * <code>false</code>, this method replaces uses of
-         * {@link MethodGen#getLocalVariables()} which has
+         * Gets all {@link LocalVariableGen} objects.
+         * This method replaces {@link MethodGen#getLocalVariables()} which has
          * a side-effect of setting the start and end range for any
-         * <code>LocalVariableGen</code> if either was <code>null</code>.  That
+         * {@code LocalVariableGen} if either was {@code null}.  That
          * side-effect causes problems for outlining of code in XSLTC.
-         * @param includeRemoved Specifies whether all local variables ever
-         * declared should be returned (<code>true</code>) or only those not
-         * removed (<code>false</code>)
-         * @return an array of <code>LocalVariableGen</code> containing all the
+         *
+         * @return an array of {@code LocalVariableGen} containing all the
          * local variables
          */
         @SuppressWarnings("unchecked")
-        protected LocalVariableGen[] getLocals(boolean includeRemoved) {
+        private LocalVariableGen[] getLocals() {
             LocalVariableGen[] locals = null;
             List<LocalVariableGen> allVarsEverDeclared = new ArrayList<>();
 
-            if (includeRemoved) {
-                int slotCount = allVarsEverDeclared.size();
-
-                for (int i = 0; i < slotCount; i++) {
-                    Object slotEntries = _variables.get(i);
-                    if (slotEntries != null) {
-                        if (slotEntries instanceof ArrayList) {
-                            List<LocalVariableGen> slotList =
-                                    (List<LocalVariableGen>)slotEntries;
-
-                            for (int j = 0; j < slotList.size(); j++) {
-                                allVarsEverDeclared.add(slotList.get(i));
-                            }
-                        } else {
-                            allVarsEverDeclared.add((LocalVariableGen)slotEntries);
+            for (Map.Entry<String, Object> nameVarsPair : _nameToLVGMap.entrySet()) {
+                Object vars = nameVarsPair.getValue();
+                if (vars != null) {
+                    if (vars instanceof ArrayList) {
+                        List<LocalVariableGen> varsList =
+                                (List<LocalVariableGen>) vars;
+                        for (int i = 0; i < varsList.size(); i++) {
+                            allVarsEverDeclared.add(varsList.get(i));
                         }
-                    }
-                }
-            } else {
-                for (Map.Entry<String, Object> nameVarsPair : _nameToLVGMap.entrySet()) {
-                    Object vars = nameVarsPair.getValue();
-                    if (vars != null) {
-                        if (vars instanceof ArrayList) {
-                            List<LocalVariableGen> varsList =
-                                    (List<LocalVariableGen>) vars;
-                            for (int i = 0; i < varsList.size(); i++) {
-                                allVarsEverDeclared.add(varsList.get(i));
-                            }
-                        } else {
-                            allVarsEverDeclared.add((LocalVariableGen)vars);
-                        }
+                    } else {
+                        allVarsEverDeclared.add((LocalVariableGen)vars);
                     }
                 }
             }
--- a/src/jdk.compiler/share/man/javac.1	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.compiler/share/man/javac.1	Mon Jul 15 14:31:28 2019 +0530
@@ -21,147 +21,140 @@
 .\"
 .\" Automatically generated by Pandoc 2.3.1
 .\"
-.TH "JAVAC" "1" "2018" "JDK 13" "JDK Commands"
+.TH "JAVAC" "1" "2019" "JDK 13" "JDK Commands"
 .hy
 .SH NAME
 .PP
-javac \- read Java class and interface definitions and compile them into
-bytecode and class files
+javac \- read Java declarations and compile them into class files
 .SH SYNOPSIS
 .PP
-\f[CB]javac\f[R] [\f[I]options\f[R]] [\f[I]sourcefiles\f[R]]
+\f[CB]javac\f[R] [\f[I]options\f[R]] [\f[I]sourcefiles\-or\-classnames\f[R]]
 .TP
 .B \f[I]options\f[R]
 Command\-line options.
-See \f[B]Overview of javac Options\f[R].
 .RS
 .RE
 .TP
-.B \f[I]sourcefiles\f[R]
-One or more source files to be compiled (such as \f[CB]MyClass.java\f[R])
-or processed for annotations (such as \f[CB]MyPackage.MyClass\f[R]).
+.B \f[I]sourcefiles\-or\-classnames\f[R]
+Source files to be compiled (for example, \f[CB]Shape.java\f[R]) or the
+names of previously compiled classes to be processed for annotations
+(for example, \f[CB]geometry.MyShape\f[R]).
 .RS
 .RE
 .SH DESCRIPTION
 .PP
-The \f[CB]javac\f[R] command reads class and interface definitions,
-written in the Java programming language, and compiles them into
-bytecode class files.
-The \f[CB]javac\f[R] command can also process annotations in Java source
-files and classes.
+The \f[CB]javac\f[R] command reads \f[I]source files\f[R] that contain
+module, package and type declarations written in the Java programming
+language, and compiles them into \f[I]class files\f[R] that run on the
+Java Virtual Machine.
+.PP
+The \f[CB]javac\f[R] command can also \f[B]process annotations\f[R] in Java
+source files and classes.
 .PP
-A new launcher environment variable, \f[CB]JDK_JAVAC_OPTIONS\f[R], was
-introduced in JDK 9 that prepended its content to the command line to
-\f[CB]javac\f[R] .
-See \f[B]Using JDK_JAVAC_OPTIONS Environment Variable\f[R].
+Source files must have a file name extension of \f[CB]\&.java\f[R].
+Class files have a file name extension of \f[CB]\&.class\f[R].
+Both source and class files normally have file names that identify the
+contents.
+For example, a class called \f[CB]Shape\f[R] would be declared in a source
+file called \f[CB]Shape.java\f[R], and compiled into a class file called
+\f[CB]Shape.class\f[R].
 .PP
-There are two ways to pass source code file names to \f[CB]javac\f[R].
+There are two ways to specify source files to \f[CB]javac\f[R]:
 .IP \[bu] 2
-For a small number of source files, you can list the file names on the
+For a small number of source files, you can list their file names on the
 command line.
 .IP \[bu] 2
 For a large number of source files, you can use the
-\f[CB]\@\f[R]\f[I]filename\f[R] option on the \f[CB]javac\f[R] command line
-to include a file that lists the source file names.
+\f[CB]\@\f[R]\f[I]filename\f[R] option on the command line to specify an
+\f[I]argument file\f[R] that lists their file names.
 See \f[B]Standard Options\f[R] for a description of the option and
-\f[B]javac Command\-Line Argument Files\f[R] for a description of
+\f[B]Command\-Line Argument Files\f[R] for a description of
 \f[CB]javac\f[R] argument files.
 .PP
-Source code file names must have \f[CB]\&.java\f[R] suffixes, class file
-names must have \f[CB]\&.class\f[R] suffixes, and both source and class
-files must have root names that identify the class.
-For example, a class called \f[CB]MyClass\f[R] would be written in a
-source file called \f[CB]MyClass.java\f[R] and compiled into a bytecode
-class file called \f[CB]MyClass.class\f[R].
+The order of source files specified on the command line or in an
+argument file is not important.
+\f[CB]javac\f[R] will compile the files together, as a group, and will
+automatically resolve any dependencies between the declarations in the
+various source files.
 .PP
-Inner class definitions produce additional class files.
-These class files have names that combine the inner and outer class
-names, such as \f[CB]MyClass$MyInnerClass.class\f[R].
+\f[CB]javac\f[R] expects that source files are arranged in one or more
+directory hierarchies on the file system, described in \f[B]Arrangement
+of Source Code\f[R].
 .PP
-You should arrange the source files in a directory tree that reflects
-their package tree.
-For example:
-.IP \[bu] 2
-\f[B]Oracle Solaris, Linux, and OS X:\f[R] If all of your source files
-are in \f[CB]/workspace\f[R], then put the source code for
-\f[CB]com.mysoft.mypack.MyClass\f[R] in
-\f[CB]/workspace/com/mysoft/mypack/MyClass.java\f[R].
-.IP \[bu] 2
-\f[B]Windows:\f[R] If all of your source files are in
-\f[CB]\\workspace\f[R], then put the source code for
-\f[CB]com.mysoft.mypack.MyClass\f[R] in
-\f[CB]\\workspace\\com\\mysoft\\mypack\\MyClass.java\f[R].
+To compile a source file, \f[CB]javac\f[R] needs to find the declaration
+of every class or interface that is used, extended, or implemented by
+the code in the source file.
+This lets \f[CB]javac\f[R] check that the code has the right to access
+those classes and interfaces.
+Rather than specifying the source files of those classes and interfaces
+explicitly, you can use command\-line options to tell \f[CB]javac\f[R]
+where to search for their source files.
+If you have compiled those source files previously, you can use options
+to tell \f[CB]javac\f[R] where to search for the corresponding class
+files.
+The options, which all have names ending in "path", are described in
+\f[B]Standard Options\f[R], and further described in \f[B]Configuring a
+Compilation\f[R] and \f[B]Searching for Module, Package and Type
+Declarations\f[R].
 .PP
-By default, the compiler puts each class file in the same directory as
-its source file.
-You can specify a separate destination directory with the \f[CB]\-d\f[R]
-option described in \f[B]Standard Options\f[R].
-.SH PROGRAMMATIC INTERFACE
-.PP
-The \f[CB]javac\f[R] command supports the new Java Compiler API defined by
-the classes and interfaces in the \f[CB]javax.tools\f[R] package.
-.SH IMPLICITLY LOADED SOURCE FILES
-.PP
-To compile a set of source files, the compiler might need to implicitly
-load additional source files.
-See \f[B]Searching for Types\f[R].
-Such files are currently not subject to annotation processing.
-By default, the compiler gives a warning when annotation processing
-occurs and any implicitly loaded source files are compiled.
-The \f[CB]\-implicit\f[R] option provides a way to suppress the warning.
-.SH USING JDK_JAVAC_OPTIONS ENVIRONMENT VARIABLE
+By default, \f[CB]javac\f[R] compiles each source file to a class file in
+the same directory as the source file.
+However, it is recommended to specify a separate destination directory
+with the \f[CB]\-d\f[R] option described in \f[B]Standard Options\f[R].
 .PP
-The content of the \f[CB]JDK_JAVAC_OPTIONS\f[R] environment variable,
-separated by white\-spaces ( ) or white\-space characters (\f[CB]\\n\f[R],
-\f[CB]\\t\f[R], \f[CB]\\r\f[R], or \f[CB]\\f\f[R]) is prepended to the command
-line arguments passed to \f[CB]javac\f[R] as a list of arguments.
-.PP
-The encoding requirement for the environment variable is the same as the
-\f[CB]javac\f[R] command line on the system.
-\f[CB]JDK_JAVAC_OPTIONS\f[R] environment variable content is treated in
-the same manner as that specified in the command line.
+Command\-line \f[B]options\f[R] and \f[B]environment variables\f[R] also
+control how \f[CB]javac\f[R] performs various tasks:
+.IP \[bu] 2
+Compiling code to run on earlier releases of the JDK.
+.IP \[bu] 2
+Compiling code to run under a debugger.
+.IP \[bu] 2
+Checking for stylistic issues in Java source code.
+.IP \[bu] 2
+Checking for problems in \f[CB]javadoc\f[R] comments
+(\f[CB]/**\ ...\ */\f[R]).
+.IP \[bu] 2
+Processing annotations in source files and class files.
+.IP \[bu] 2
+Upgrading and patching modules in the compile\-time environment.
 .PP
-Single quotes (\f[CB]\[aq]\f[R]) or double quotes (\f[CB]"\f[R]) can be used
-to enclose arguments that\ contain whitespace characters.
-All content between the open quote and the first matching close quote
-are preserved by simply removing the pair of quotes.
-In case a matching quote is not found, the launcher will abort with an
-error message.
-\f[CB]\@\f[R]\f[I]files\f[R] are supported as they are specified in the
-command line.
-However, as in \f[CB]\@\f[R]\f[I]files\f[R], use of a wildcard is not
-supported.
+\f[CB]javac\f[R] supports \f[B]Compiling for Earlier Releases Of The
+Platform\f[R] and can also be invoked from Java code using one of a
+number of \f[B]APIs\f[R]
+.SH OPTIONS
 .PP
-\f[B]Examples of quoting arguments containing white spaces:\f[R]
-.RS
+\f[CB]javac\f[R] provides \f[B]standard options\f[R], and \f[B]extra
+options\f[R] that are either non\-standard or are for advanced use.
 .PP
-\f[CB]export\ JDK_JAVAC_OPTIONS=\[aq]\@"C:\\white\ spaces\\argfile"\[aq]\f[R]
-.RE
-.RS
-.PP
-\f[CB]export\ JDK_JAVAC_OPTIONS=\[aq]"\@C:\\white\ spaces\\argfile"\[aq]\f[R]
-.RE
-.RS
-.PP
-\f[CB]export\ JDK_JAVAC_OPTIONS=\[aq]\@C:\\"white\ spaces"\\argfile\[aq]\f[R]
-.RE
-.SH OVERVIEW OF JAVAC OPTIONS
+Some options take one or more arguments.
+If an argument contains spaces or other whitespace characters, the value
+should be quoted according to the conventions of the environment being
+used to invoke javac.
+If the option begins with a single dash (\f[CB]\-\f[R]) the argument
+should either directly follow the option name, or should be separated
+with a colon (\f[CB]:\f[R]) or whitespace, depending on the option.
+If the option begins with a double dash (\f[CB]\-\-\f[R]), the argument
+may be separated either by whitespace or by an equals (\f[CB]=\f[R])
+character with no additional whitespace.
+For example,
+.IP
+.nf
+\f[CB]
+\-Aname="J.\ Duke"
+\-proc:only
+\-d\ myDirectory
+\-\-module\-version\ 3
+\-\-module\-version=3
+\f[R]
+.fi
 .PP
-The compiler has sets of standard options, and cross\-compilation
-options that are supported on the current development environment.
-The compiler also has a set of nonstandard options that are specific to
-the current virtual machine and compiler implementations but are subject
-to change in the future.
-The nonstandard options begin with \f[CB]\-X\f[R] .
-The different sets of \f[CB]javac\f[R] options are described in the
-following sections:
-.IP \[bu] 2
-\f[B]Standard Options\f[R]
-.IP \[bu] 2
-\f[B]Cross\-Compilation Options for javac\f[R]
-.IP \[bu] 2
-\f[B]Extra Options\f[R]
-.SH STANDARD OPTIONS
+In the following lists of options, an argument of \f[I]path\f[R]
+represents a search path, composed of a list of file system locations
+separated by the platform path separator character, (semicolon
+\f[CB];\f[R] on Windows, or colon \f[CB]:\f[R] on other systems.) Depending
+on the option, the file system locations may be directories, JAR files
+or JMOD files.
+.SS Standard Options
 .TP
 .B \f[CB]\@\f[R]\f[I]filename\f[R]
 Reads options and file names from a file.
@@ -170,13 +163,13 @@
 (except \f[CB]\-J\f[R] options).
 This lets you to create \f[CB]javac\f[R] commands of any length on any
 operating system.
-See \f[B]javac Command\-Line Argument Files\f[R].
+See \f[B]Command\-Line Argument Files\f[R].
 .RS
 .RE
 .TP
 .B \f[CB]\-A\f[R]\f[I]key\f[R][\f[CB]=\f[R]\f[I]value\f[R]]
 Specifies options to pass to annotation processors.
-These options aren\[aq]t interpreted by \f[CB]javac\f[R] directly, but are
+These options are not interpreted by \f[CB]javac\f[R] directly, but are
 made available for use by individual processors.
 The \f[I]key\f[R] value should be one or more identifiers separated by a
 dot (\f[CB]\&.\f[R]).
@@ -194,11 +187,11 @@
 Overrides the location of the bootstrap class files.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
+\f[B]Note:\f[R] This can only be used when compiling for releases prior
+to JDK 9.
+As applicable, see the descriptions in \f[CB]\-\-release\f[R],
+\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
+For JDK 9 or later, see \f[CB]\-\-system\f[R].
 .RE
 .TP
 .B \f[CB]\-\-class\-path\f[R] \f[I]path\f[R], \f[CB]\-classpath\f[R] \f[I]path\f[R], or \f[CB]\-cp\f[R] \f[I]path\f[R]
@@ -207,41 +200,48 @@
 environment variable.
 .RS
 .IP \[bu] 2
-If \f[CB]\-\-class\-path\f[R], \f[CB]\-classpath\f[R], or \f[CB]\-cp\f[R]
-aren\[aq]t specified, then the user class path is the current directory.
+If \f[CB]\-\-class\-path\f[R], \f[CB]\-classpath\f[R], or \f[CB]\-cp\f[R] are
+not specified, then the user class path is the value of the
+\f[CB]CLASSPATH\f[R] environment variable, if that is set, or else the
+current directory.
 .IP \[bu] 2
-If the \f[CB]\-sourcepath\f[R] option isn\[aq]t specified, then the user
-class path is also searched for source files.
+If not compiling code for modules, if the \f[CB]\-\-source\-path\f[R] or
+\-sourcepath` option is not specified, then the user class path is also
+searched for source files.
 .IP \[bu] 2
-If the \f[CB]\-processorpath\f[R] option isn\[aq]t specified, then the
-class path is also searched for annotation processors.
+If the \f[CB]\-processorpath\f[R] option is not specified, then the class
+path is also searched for annotation processors.
 .RE
 .TP
 .B \f[CB]\-d\f[R] \f[I]directory\f[R]
-Sets the destination directory for class files.
+Sets the destination directory (or \f[I]class output directory\f[R]) for
+class files.
 If a class is part of a package, then \f[CB]javac\f[R] puts the class file
-in a subdirectory that reflects the package name and creates directories
-as needed.
-For example:
+in a subdirectory that reflects the module name (if appropriate) and
+package name.
+The directory, and any necessary subdirectories, will be created if they
+do not already exist.
 .RS
-.IP \[bu] 2
-\f[B]Oracle Solaris, Linux, and OS X:\f[R] If you specify
-\f[CB]\-d\ /home/myclasses\f[R] and the class is called
-\f[CB]com.mypackage.MyClass\f[R], then the class file is
-\f[CB]/home/myclasses/com/mypackage/MyClass.class\f[R].
-.IP \[bu] 2
-\f[B]Windows:\f[R] If you specify \f[CB]\-d\ C:\\myclasses\f[R] and the
-class is called \f[CB]com.mypackage.MyClass\f[R], then the class file is
-\f[CB]C:\\myclasses\\com\\mypackage\\MyClass.class\f[R].
 .PP
-If the \f[CB]\-d\f[R] option isn\[aq]t specified, then \f[CB]javac\f[R] puts
+If the \f[CB]\-d\f[R] option is not specified, then \f[CB]javac\f[R] puts
 each class file in the same directory as the source file from which it
 was generated.
 .PP
-\f[B]Note:\f[R]
+Except when compiling code for multiple modules, the contents of the
+class output directory will be organized in a package hierarchy.
+When compiling code for multiple modules, the contents of the output
+directory will be organized in a module hierarchy, with the contents of
+each module in a separate subdirectory, each organized as a package
+hierarchy.
 .PP
-The directory specified by the \f[CB]\-d\f[R] option isn\[aq]t
-automatically added to your user class path.
+\f[B]Note:\f[R] When compiling code for one or more modules, the class
+output directory will automatically be checked when searching for
+previously compiled classes.
+When not compiling for modules, for backwards compatibility, the
+directory is \f[I]not\f[R] automatically checked for previously compiled
+classes, and so it is recommended to specify the class output directory
+as one of the locations on the user class path, using the
+\f[CB]\-\-class\-path\f[R] option or one of its alternate forms.
 .RE
 .TP
 .B \f[CB]\-deprecation\f[R]
@@ -265,7 +265,7 @@
 .B \f[CB]\-encoding\f[R] \f[I]encoding\f[R]
 Specifies character encoding used by source files, such as EUC\-JP and
 UTF\-8.
-If the \f[CB]\-encoding\f[R] option isn\[aq]t specified, then the platform
+If the \f[CB]\-encoding\f[R] option is not specified, then the platform
 default converter is used.
 .RS
 .RE
@@ -274,30 +274,29 @@
 Overrides the location of the endorsed standards path.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
+\f[B]Note:\f[R] This can only be used when compiling for releases prior
+to JDK 9.
+As applicable, see the descriptions in \f[CB]\-\-release\f[R],
+\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
 .RE
 .TP
 .B \f[CB]\-extdirs\f[R] \f[I]directories\f[R]
 Overrides the location of the installed extensions.
-The \f[CB]directories\f[R] variable is a colon\-separated list of
-directories.
+\f[CB]directories\f[R] is a list of directories, separated by the platform
+path separator (\f[CB];\f[R] on Windows, and \f[CB]:\f[R] otherwise).
 Each JAR file in the specified directories is searched for class files.
 All JAR files found become part of the class path.
 .RS
 .PP
-If you are cross\-compiling, then this option specifies the directories
-that contain the extension classes.
-See \f[B]Cross\-Compilation Options for javac\f[R].
+If you are compiling for a release of the platform that supports the
+Extension Mechanism, then this option specifies the directories that
+contain the extension classes.
+See [Compiling for Other Releases of the Platform].
 .PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
+\f[B]Note:\f[R] This can only be used when compiling for releases prior
+to JDK 9.
+As applicable, see the descriptions in \f[CB]\-\-release\f[R],
+\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
 .RE
 .TP
 .B \f[CB]\-g\f[R]
@@ -329,22 +328,23 @@
 .RE
 .TP
 .B \f[CB]\-g:none\f[R]
-Doesn\[aq]t generate debugging information.
+Does not generate debugging information.
 .RS
 .RE
 .TP
 .B \f[CB]\-h\f[R] \f[I]directory\f[R]
-Specfies where to place generated native header files.
+Specifies where to place generated native header files.
 .RS
 .PP
 When you specify this option, a native header file is generated for each
 class that contains native methods or that has one or more constants
 annotated with the \f[B]\f[BC]java.lang.annotation.Native\f[B]\f[R]
-[https://docs.oracle.com/javase/10/docs/api/java/lang/annotation/Native.html]
 annotation.
 If the class is part of a package, then the compiler puts the native
-header file in a subdirectory that reflects the package name and creates
-directories as needed.
+header file in a subdirectory that reflects the module name (if
+appropriate) and package name.
+The directory, and any necessary subdirectories, will be created if they
+do not already exist.
 .RE
 .TP
 .B \f[CB]\-\-help\f[R], \f[CB]\-help\f[R] or \f[CB]\-?\f[R]
@@ -353,7 +353,7 @@
 .RE
 .TP
 .B \f[CB]\-\-help\-extra\f[R] or \f[CB]\-X\f[R]
-Prints the help for extra options.
+Prints a synopsis of the set of extra options.
 .RS
 .RE
 .TP
@@ -366,13 +366,13 @@
 .IP \[bu] 2
 \f[CB]\-implicit:none\f[R] \-\-\- Suppresses class file generation.
 .PP
-If this option isn\[aq]t specified, then the default automatically
+If this option is not specified, then the default automatically
 generates class files.
 In this case, the compiler issues a warning if any class files are
 generated when also doing annotation processing.
-The warning isn\[aq]t issued when the \f[CB]\-implicit\f[R] option is
+The warning is not issued when the \f[CB]\-implicit\f[R] option is
 explicitly set.
-See \f[B]Searching for Types\f[R].
+See \f[B]Searching for Module, Package and Type Declarations\f[R].
 .RE
 .TP
 .B \f[CB]\-J\f[R]\f[I]option\f[R]
@@ -381,14 +381,13 @@
 For example, \f[CB]\-J\-Xms48m\f[R] sets the startup memory to 48 MB.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-The \f[CB]CLASSPATH\f[R] environment variable, \f[CB]\-classpath\f[R]
-option, \f[CB]\-bootclasspath\f[R] option, and \f[CB]\-extdirs\f[R] option
-don\[aq]t specify the classes used to run \f[CB]javac\f[R].
+\f[B]Note:\f[R] The \f[CB]CLASSPATH\f[R] environment variable,
+\f[CB]\-classpath\f[R] option, \f[CB]\-bootclasspath\f[R] option, and
+\f[CB]\-extdirs\f[R] option do not specify the classes used to run
+\f[CB]javac\f[R].
 Trying to customize the compiler implementation with these options and
-variables is risky and often doesn\[aq]t accomplish what you want.
-If you must customize the complier implementation, then use the
+variables is risky and often does not accomplish what you want.
+If you must customize the compiler implementation, then use the
 \f[CB]\-J\f[R] option to pass options through to the underlying Java
 launcher.
 .RE
@@ -398,8 +397,9 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-\-module\f[R] \f[I]module\-name\f[R] or \f[CB]\-m\f[R] \f[I]module\-name\f[R]
-Compiles only the specified module and checks time stamps.
+.B \f[CB]\-\-module\f[R] \f[I]module\-name\f[R] (\f[CB],\f[R]\f[I]module\-name\f[R])* or \f[CB]\-m\f[R] \f[I]module\-name\f[R] (\f[CB],\f[R]\f[I]module\-name\f[R])*
+Compiles those source files in the named modules that are newer than the
+corresponding files in the output directory.
 .RS
 .RE
 .TP
@@ -409,7 +409,9 @@
 .RE
 .TP
 .B \f[CB]\-\-module\-source\-path\f[R] \f[I]module\-source\-path\f[R]
-Specifies where to find input source files for multiple modules.
+Specifies where to find source files when compiling code in multiple
+modules.
+See [Compilation Modes] and \f[B]The Module Source Path Option\f[R].
 .RS
 .RE
 .TP
@@ -455,7 +457,7 @@
 .TP
 .B \f[CB]\-\-processor\-path\f[R] \f[I]path\f[R] or \f[CB]\-processorpath\f[R] \f[I]path\f[R]
 Specifies where to find annotation processors.
-If this option isn\[aq]t used, then the class path is searched for
+If this option is not used, then the class path is searched for
 processors.
 .RS
 .RE
@@ -464,63 +466,67 @@
 Checks that the API used is available in the specified profile.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
+\f[B]Note:\f[R] This can only be used when compiling for releases prior
+to JDK 9.
+As applicable, see the descriptions in \f[CB]\-\-release\f[R],
+\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
 .RE
 .TP
 .B \f[CB]\-\-release\f[R] \f[I]release\f[R]
 Compiles source code according to the rules of the Java programming
-language for the specified Java SE release, generating class files
-suitable for that release.
-Additionally, compiles source code against the API of the specified Java
-SE release and the API supported by the corresponding JDK release.
-The supported values of \f[I]release\f[R] are the current Java SE release
-and a limited number of previous releases.
-The exact set of supported values is given in the command\-line help.
+language for the specified Java SE release, generating class files which
+target that release.
+Source code is compiled against the combined Java SE and JDK API for the
+specified release.
 .RS
 .PP
-The API of a Java SE release consists of the \f[CB]java.*\f[R],
-\f[CB]javax.*\f[R], and \f[CB]org.*\f[R] packages that are exported by Java
-SE modules in the release.
+The supported values of \f[I]release\f[R] are the current Java SE release
+and a limited number of previous releases, detailed in the command\-line
+help.
+.PP
+For the current release, the Java SE API consists of the
+\f[CB]java.*\f[R], \f[CB]javax.*\f[R], and \f[CB]org.*\f[R] packages that are
+exported by the Java SE modules in the release; the JDK API consists of
+the \f[CB]com.*\f[R] and \f[CB]jdk.*\f[R] packages that are exported by the
+JDK modules in the release, plus the \f[CB]javax.*\f[R] packages that are
+exported by standard, but non\-Java SE, modules in the release.
 .PP
-The API supported by a JDK release consists of the \f[CB]com.*\f[R] and
-\f[CB]jdk.*\f[R] packages that are exported by JDK modules in the release,
-plus the \f[CB]javax.*\f[R] packages that are exported by standard, but
-non\-Java SE, modules in the release.
+For previous releases, the Java SE API and the JDK API are as defined in
+that release.
 .PP
-\f[B]Note:\f[R]
+\f[B]Note:\f[R] When using \f[CB]\-\-release\f[R], you cannot also use the
+\f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] or
+\f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options.
 .PP
-The \f[CB]\-\-add\-exports\f[R] option cannot be used to enlarge the set
-of packages exported by the Java SE and JDK API.
+\f[B]Note:\f[R] When using \f[CB]\-\-release\f[R] to specify a release that
+supports the Java Platform Module System, the \f[CB]\-\-add\-exports\f[R]
+option cannot be used to enlarge the set of packages exported by the
+Java SE, JDK, and standard modules in the specified release.
 .RE
 .TP
 .B \f[CB]\-s\f[R] \f[I]directory\f[R]
 Specifies the directory used to place the generated source files.
 If a class is part of a package, then the compiler puts the source file
-in a subdirectory that reflects the package name and creates directories
-as needed.
-For example:
+in a subdirectory that reflects the module name (if appropriate) and
+package name.
+The directory, and any necessary subdirectories, will be created if they
+do not already exist.
 .RS
-.IP \[bu] 2
-\f[B]Oracle Solaris, Linux, and OS X:\f[R] If you specify
-\f[CB]\-s\ /home/mysrc\f[R] and the class is called
-\f[CB]com.mypackage.MyClass\f[R], then the source file is put in
-\f[CB]/home/mysrc/com/mypackage/MyClass.java\f[R].
-.IP \[bu] 2
-\f[B]Windows:\f[R] If you specify \f[CB]\-s\ C:\\mysrc\f[R] and the class
-is called \f[CB]com.mypackage.MyClass\f[R], then the source file is put in
-\f[CB]C:\\mysrc\\com\\mypackage\\MyClass.java\f[R].
+.PP
+Except when compiling code for multiple modules, the contents of the
+source output directory will be organized in a package hierarchy.
+When compiling code for multiple modules, the contents of the source
+output directory will be organized in a module hierarchy, with the
+contents of each module in a separate subdirectory, each organized as a
+package hierarchy.
 .RE
 .TP
 .B \f[CB]\-\-source\f[R] \f[I]release\f[R] or \f[CB]\-source\f[R] \f[I]release\f[R]
 Compiles source code according to the rules of the Java programming
 language for the specified Java SE release.
 The supported values of \f[I]release\f[R] are the current Java SE release
-and a limited number of previous releases.
-The exact set of supported values is given in the command\-line help.
+and a limited number of previous releases, detailed in the command\-line
+help.
 .RS
 .PP
 If the option is not specified, the default is to compile source code
@@ -529,21 +535,14 @@
 .RE
 .TP
 .B \f[CB]\-\-source\-path\f[R] \f[I]path\f[R] or \f[CB]\-sourcepath\f[R] \f[I]path\f[R]
-Specifies where to find input source files.
-This is the source code path used to search for class or interface
-definitions.
-As with the user class path, source path entries are separated by colons
-(\f[CB]:\f[R]) on Oracle Solaris and semicolons (\f[CB];\f[R]) on Windows.
-They can be directories, JAR archives, or ZIP archives.
-If packages are used, then the local path name within the directory or
-archive must reflect the package name.
+Specifies where to find source files.
+Except when compiling multiple modules together, this is the source code
+path used to search for class or interface definitions.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-Classes found through the class path might be recompiled when their
-source files are also found.
-See \f[B]Searching for Types\f[R].
+\f[B]Note:\f[R] Classes found through the class path might be recompiled
+when their source files are also found.
+See \f[B]Searching for Module, Package and Type Declarations\f[R].
 .RE
 .TP
 .B \f[CB]\-\-system\f[R] \f[I]jdk\f[R] | \f[CB]none\f[R]
@@ -555,15 +554,13 @@
 Generates \f[CB]class\f[R] files suitable for the specified Java SE
 release.
 The supported values of \f[I]release\f[R] are the current Java SE release
-and a limited number of previous releases.
-The exact set of supported values is given in the command\-line help.
+and a limited number of previous releases, detailed in the command\-line
+help.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-It is an error to specify a value for \f[I]release\f[R] that is lower
-than the the release for which the source code is being compiled.
-(See \f[CB]\-\-source\f[R]).
+\f[B]Note:\f[R] The target release must be equal to or higher than the
+source release.
+(See \f[CB]\-\-source\f[R].)
 .RE
 .TP
 .B \f[CB]\-\-upgrade\-module\-path\f[R] \f[I]path\f[R]
@@ -587,23 +584,7 @@
 Terminates compilation when warnings occur.
 .RS
 .RE
-.SH CROSS\-COMPILATION OPTIONS FOR JAVAC
-.PP
-By default, for releases prior to JDK 9, classes were compiled against
-the bootstrap classes of the platform that shipped with
-the\f[CB]javac\f[R] command.
-But \f[CB]javac\f[R] also supports cross\-compiling, in which classes are
-compiled against bootstrap classes of a different Java platform
-implementation.
-It\[aq]s important to use the \f[CB]\-bootclasspath\f[R] and
-\f[CB]\-extdirs\f[R] options when cross\-compiling.
-.PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
-.SH EXTRA OPTIONS
+.SS Extra Options
 .TP
 .B \f[CB]\-\-add\-exports\f[R] \f[I]module\f[R]\f[CB]/\f[R]\f[I]package\f[R]\f[CB]=\f[R]\f[I]other\-module\f[R](\f[CB],\f[R]\f[I]other\-module\f[R])*
 Specifies a package to be considered as exported from its defining
@@ -628,22 +609,20 @@
 Overrides the location of the endorsed standards path.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
+\f[B]Note:\f[R] This can only be used when compiling for releases prior
+to JDK 9.
+As applicable, see the descriptions in \f[CB]\-\-release\f[R],
+\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
 .RE
 .TP
 .B \f[CB]\-Djava.ext.dirs=\f[R]\f[I]dirs\f[R]
 Overrides the location of installed extensions.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
+\f[B]Note:\f[R] This can only be used when compiling for releases prior
+to JDK 9.
+As applicable, see the descriptions in \f[CB]\-\-release\f[R],
+\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
 .RE
 .TP
 .B \f[CB]\-\-doclint\-format\f[R] [\f[CB]html4\f[R]|\f[CB]html5\f[R]]
@@ -651,7 +630,7 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-\-patch\-module\f[R] \f[I]module\f[R]\f[CB]=\f[R]\f[I]file\f[R](\f[CB]:\f[R]\f[I]file\f[R])*
+.B \f[CB]\-\-patch\-module\f[R] \f[I]module\f[R]\f[CB]=\f[R]\f[I]path\f[R]
 Overrides or augments a module with classes and resources in JAR files
 or directories.
 .RS
@@ -661,33 +640,30 @@
 Overrides the location of the bootstrap class files.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
+\f[B]Note:\f[R] This can only be used when compiling for releases prior
+to JDK 9.
+As applicable, see the descriptions in \f[CB]\-\-release\f[R],
+\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
 .RE
 .TP
 .B \f[CB]\-Xbootclasspath/a:\f[R]\f[I]path\f[R]
 Adds a suffix to the bootstrap class path.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
+\f[B]Note:\f[R] This can only be used when compiling for releases prior
+to JDK 9.
+As applicable, see the descriptions in \f[CB]\-\-release\f[R],
+\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
 .RE
 .TP
 .B \f[CB]\-Xbootclasspath/p:\f[R]\f[I]path\f[R]
 Adds a prefix to the bootstrap class path.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-This can only be used when compiling for versions prior to JDK 9.
-As applicable, see the descriptions in\ \f[CB]\-\-release\f[R],
-\f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details.
+\f[B]Note:\f[R] This can only be used when compiling for releases prior
+to JDK 9.
+As applicable, see the descriptions in \f[CB]\-\-release\f[R],
+\f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details.
 .RE
 .TP
 .B \f[CB]\-Xdiags:\f[R][\f[CB]compact\f[R], \f[CB]verbose\f[R]]
@@ -745,7 +721,7 @@
 .RE
 .PP
 The following option enables all groups of checks for all access levels,
-except it won\[aq]t check for HTML errors for classes and members that
+except it will not check for HTML errors for classes and members that
 have the access level of package and higher (which includes package,
 protected and public):
 .RS
@@ -802,7 +778,7 @@
 \f[CB]fallthrough\f[R]: Warns about the falling through from one case of a
 switch statement to the next.
 .IP \[bu] 2
-\f[CB]finally\f[R]: Warns about \f[CB]finally\f[R] clauses that don\[aq]t
+\f[CB]finally\f[R]: Warns about \f[CB]finally\f[R] clauses that do not
 terminate normally.
 .IP \[bu] 2
 \f[CB]module\f[R]: Warns about the module system\-related issues.
@@ -833,7 +809,7 @@
 \f[CB]requires\-transitive\-automatic\f[R]: Warns about automatic modules
 in requires transitive.
 .IP \[bu] 2
-\f[CB]serial\f[R]: Warns about the serializable classes that don\[aq]t
+\f[CB]serial\f[R]: Warns about the serializable classes that do not
 provide a serial version ID.
 Also warns about access to non\-public members from a serializable
 element.
@@ -882,15 +858,13 @@
 .B \f[CB]legacy\f[R]
 Generates a \f[CB]package\-info.class\f[R] file only if
 \f[CB]package\-info.java\f[R] contains annotations.
-This option doesn\[aq]t generate a \f[CB]package\-info.class\f[R] file if
+This option does not generate a \f[CB]package\-info.class\f[R] file if
 \f[CB]package\-info.java\f[R] contains only comments.
 .RS
 .PP
-\f[B]Note:\f[R]
-.PP
-A \f[CB]package\-info.class\f[R] file might be generated but be empty if
-all the annotations in the \f[CB]package\-info.java\f[R] file have
-\f[CB]RetentionPolicy.SOURCE\f[R].
+\f[B]Note:\f[R] A \f[CB]package\-info.class\f[R] file might be generated
+but be empty if all the annotations in the \f[CB]package\-info.java\f[R]
+file have \f[CB]RetentionPolicy.SOURCE\f[R].
 .RE
 .TP
 .B \f[CB]nonempty\f[R]
@@ -903,6 +877,11 @@
 .TP
 .B \f[CB]\-Xplugin:\f[R]\f[I]name\f[R] \f[I]args\f[R]
 Specifies the name and optional arguments for a plug\-in to be run.
+If \f[I]args\f[R] are provided, \f[I]name\f[R] and \f[I]args\f[R] should be
+quoted or otherwise escape the whitespace characters between the name
+and all the arguments.
+For details on the API for a plugin, see the API documentation for
+\f[B]jdk.compiler/com.sun.source.util.Plugin\f[R].
 .RS
 .RE
 .TP
@@ -910,7 +889,7 @@
 Specifies which file to read when both a source file and class file are
 found for an implicitly compiled class using one of the following
 options.
-See \f[B]Searching for Types\f[R].
+See \f[B]Searching for Module, Package and Type Declarations\f[R].
 .RS
 .IP \[bu] 2
 \f[CB]\-Xprefer:newer\f[R]: Reads the newer of the source or class files
@@ -925,7 +904,7 @@
 .B \f[CB]\-Xprint\f[R]
 Prints a textual representation of specified types for debugging
 purposes.
-This doesn\[aq]t perform annotation processing or compilation.
+This does not perform annotation processing or compilation.
 The format of the output could change.
 .RS
 .RE
@@ -947,10 +926,56 @@
 By default, compiler messages go to \f[CB]System.err\f[R].
 .RS
 .RE
-.SH JAVAC COMMAND\-LINE ARGUMENT FILES
+.SH ENVIRONMENT VARIABLES
+.SS CLASSPATH
+.PP
+If the \f[CB]\-\-class\-path\f[R] option or any of its alternate forms are
+not specified, the class path will default to the value of the
+\f[CB]CLASSPATH\f[R] environment variable if it is set.
+However, it is recommended that this environment variable should
+\f[I]not\f[R] be set, and that the \f[CB]\-\-class\-path\f[R] option should
+be used to provide an explicit value for the class path when one is
+required.
+.SS JDK_JAVAC_OPTIONS
+.PP
+The content of the \f[CB]JDK_JAVAC_OPTIONS\f[R] environment variable,
+separated by white\-spaces ( ) or white\-space characters (\f[CB]\\n\f[R],
+\f[CB]\\t\f[R], \f[CB]\\r\f[R], or \f[CB]\\f\f[R]) is prepended to the command
+line arguments passed to \f[CB]javac\f[R] as a list of arguments.
+.PP
+The encoding requirement for the environment variable is the same as the
+\f[CB]javac\f[R] command line on the system.
+\f[CB]JDK_JAVAC_OPTIONS\f[R] environment variable content is treated in
+the same manner as that specified in the command line.
 .PP
-An argument file can include \f[CB]javac\f[R] options and source file
-names in any combination.
+Single quotes (\f[CB]\[aq]\f[R]) or double quotes (\f[CB]"\f[R]) can be used
+to enclose arguments that contain whitespace characters.
+All content between the open quote and the first matching close quote
+are preserved by simply removing the pair of quotes.
+In case a matching quote is not found, the launcher will abort with an
+error message.
+\f[CB]\@\f[R]\f[I]files\f[R] are supported as they are specified in the
+command line.
+However, as in \f[CB]\@\f[R]\f[I]files\f[R], use of a wildcard is not
+supported.
+.PP
+\f[B]Examples of quoting arguments containing white spaces:\f[R]
+.RS
+.PP
+\f[CB]export\ JDK_JAVAC_OPTIONS=\[aq]\@"C:\\white\ spaces\\argfile"\[aq]\f[R]
+.RE
+.RS
+.PP
+\f[CB]export\ JDK_JAVAC_OPTIONS=\[aq]"\@C:\\white\ spaces\\argfile"\[aq]\f[R]
+.RE
+.RS
+.PP
+\f[CB]export\ JDK_JAVAC_OPTIONS=\[aq]\@C:\\"white\ spaces"\\argfile\[aq]\f[R]
+.RE
+.SH COMMAND\-LINE ARGUMENT FILES
+.PP
+An argument file can include command\-line options and source file names
+in any combination.
 The arguments within a file can be separated by spaces or new line
 characters.
 If a file name contains embedded spaces, then put the whole file name in
@@ -958,19 +983,19 @@
 .PP
 File names within an argument file are relative to the current
 directory, not to the location of the argument file.
-Wildcards (*) aren\[aq]t allowed in these lists (such as for specifying
-\f[CB]*.java\f[R]).
-Use of the at sign (\f[CB]\@\f[R]) to recursively interpret files
-isn\[aq]t supported.
-The \f[CB]\-J\f[R] options aren\[aq]t supported because they\[aq]re passed
-to the launcher, which doesn\[aq]t support argument files.
+Wildcards (\f[CB]*\f[R]) are not allowed in these lists (such as for
+specifying \f[CB]*.java\f[R]).
+Use of the at sign (\f[CB]\@\f[R]) to recursively interpret files is not
+supported.
+The \f[CB]\-J\f[R] options are not supported because they\[aq]re passed to
+the launcher, which does not support argument files.
 .PP
 When executing the \f[CB]javac\f[R] command, pass in the path and name of
 each argument file with the at sign (\f[CB]\@\f[R]) leading character.
 When the \f[CB]javac\f[R] command encounters an argument beginning with
 the at sign (\f[CB]\@\f[R]), it expands the contents of that file into the
 argument list.
-.SH EXAMPLES OF USING JAVAC \@FILENAME
+.SS Examples of Using javac \@filename
 .TP
 .B Single Argument File
 You could use a single argument file named \f[CB]argfile\f[R] to hold all
@@ -993,7 +1018,7 @@
 .PP
 Create a file named \f[CB]options\f[R] that contains the following:
 .PP
-\f[B]Oracle Solaris, Linux, and OS X:\f[R]
+\f[B]Oracle Solaris, Linux, and macOS:\f[R]
 .IP
 .nf
 \f[CB]
@@ -1040,6 +1065,845 @@
 \f[CB]javac\ \@path1/options\ \@path2/classes\f[R]
 .RE
 .RE
+.SH ARRANGEMENT OF SOURCE CODE
+.PP
+In the Java language, classes and interfaces can be organized into
+packages, and packages can be organized into modules.
+\f[CB]javac\f[R] expects that the physical arrangement of source files in
+directories of the file system will mirror the organization of classes
+into packages, and packages into modules.
+.PP
+It is a widely adopted convention that module names and package names
+begin with a lower\-case letter, and that class names begin with an
+upper\-case letter.
+.SS Arrangement of Source Code for a Package
+.PP
+When classes and interfaces are organized into a package, the package is
+represented as a directory, and any subpackages are represented as
+subdirectories.
+.PP
+For example:
+.IP \[bu] 2
+The package \f[CB]p\f[R] is represented as a directory called \f[CB]p\f[R].
+.IP \[bu] 2
+The package \f[CB]p.q\f[R] \-\- that is, the subpackage \f[CB]q\f[R] of
+package \f[CB]p\f[R] \-\- is represented as the subdirectory \f[CB]q\f[R] of
+directory \f[CB]p\f[R].
+The directory tree representing package \f[CB]p.q\f[R] is therefore
+\f[CB]p\\q\f[R] on Windows, and \f[CB]p/q\f[R] on other systems.
+.IP \[bu] 2
+The package \f[CB]p.q.r\f[R] is represented as the directory tree
+\f[CB]p\\q\\r\f[R] (on Windows) or \f[CB]p/q/r\f[R] (on other systems).
+.PP
+Within a directory or subdirectory, \f[CB]\&.java\f[R] files represent
+classes and interfaces in the corresponding package or subpackage.
+.PP
+For example:
+.IP \[bu] 2
+The class \f[CB]X\f[R] declared in package \f[CB]p\f[R] is represented by
+the file \f[CB]X.java\f[R] in the \f[CB]p\f[R] directory.
+.IP \[bu] 2
+The class \f[CB]Y\f[R] declared in package \f[CB]p.q\f[R] is represented by
+the file \f[CB]Y.java\f[R] in the \f[CB]q\f[R] subdirectory of directory
+\f[CB]p\f[R].
+.IP \[bu] 2
+The class \f[CB]Z\f[R] declared in package \f[CB]p.q.r\f[R] is represented
+by the file \f[CB]Z.java\f[R] in the \f[CB]r\f[R] subdirectory of
+\f[CB]p\\q\f[R] (on Windows) or \f[CB]p/q\f[R] (on other systems).
+.PP
+In some situations, it is convenient to split the code into separate
+directories, each structured as described above, and the aggregate list
+of directories specified to \f[CB]javac\f[R].
+.SS Arrangement of Source Code for a Module
+.PP
+In the Java language, a module is a set of packages designed for reuse.
+In addition to \f[CB]\&.java\f[R] files for classes and interfaces, each
+module has a source file called \f[CB]module\-info.java\f[R] which:
+.IP "1." 3
+declares the module\[aq]s name;
+.IP "2." 3
+lists the packages exported by the module (to allow reuse by other
+modules);
+.IP "3." 3
+lists other modules required by the module (to reuse their exported
+packages).
+.PP
+When packages are organized into a module, the module is represented by
+one or more directories representing the packages in the module, one of
+which contains the \f[CB]module\-info.java\f[R] file.
+It may be convenient, but it is not required, to use a single directory,
+named after the module, to contain the \f[CB]module\-info.java\f[R] file
+alongside the directory tree which represents the packages in the module
+(i.e., the \f[I]package hierarchy\f[R] described above).
+The exact arrangement of source code for a module is typically dictated
+by the conventions adopted by a development environment (IDE) or build
+system.
+.PP
+For example:
+.IP \[bu] 2
+The module \f[CB]a.b.c\f[R] may be represented by the directory
+\f[CB]a.b.c\f[R], on all systems.
+.IP \[bu] 2
+The module\[aq]s declaration is represented by the file
+\f[CB]module\-info.java\f[R] in the \f[CB]a.b.c\f[R] directory.
+.IP \[bu] 2
+If the module contains package \f[CB]p.q.r\f[R], then the \f[CB]a.b.c\f[R]
+directory contains the directory tree \f[CB]p\\q\\r\f[R] (on Windows) or
+\f[CB]p/q/r\f[R] (on other systems).
+.PP
+The development environment may prescribe some directory hierarchy
+between the directory named for the module and the source files to be
+read by \f[CB]javac\f[R].
+.PP
+For example:
+.IP \[bu] 2
+The module \f[CB]a.b.c\f[R] may be represented by the directory
+\f[CB]a.b.c\f[R]
+.IP \[bu] 2
+The module\[aq]s declaration and the module\[aq]s packages may be in
+some subdirectory of \f[CB]a.b.c\f[R], such as \f[CB]src\\main\\java\f[R]
+(on Windows) or \f[CB]src/main/java\f[R] (on other systems).
+.SH CONFIGURING A COMPILATION
+.PP
+This section describes how to configure \f[CB]javac\f[R] to perform a
+basic compilation.
+.PP
+See \f[B]Configuring the Module System\f[R] for additional details for
+use when compiling for a release of the platform that supports modules.
+.SS Source Files
+.IP \[bu] 2
+Specify the source files to be compiled on the command line.
+.PP
+If there are no compilation errors, the corresponding class files will
+be placed in the \f[B]output directory\f[R].
+.PP
+Some systems may limit the amount you can put on a command line; to work
+around those limits, you can use \f[B]argument files\f[R].
+.PP
+When compiling code for modules, you can also specify source files
+indirectly, by using the \f[CB]\-\-module\f[R] or \f[CB]\-m\f[R] option; see
+\f[B]Standard Options\f[R].
+.SS Output Directory
+.IP \[bu] 2
+Use the \f[CB]\-d\f[R] option to specify an output directory in which to
+put the compiled class files.
+.PP
+This will normally be organized in a \f[B]package hierarchy\f[R], unless
+you are compiling source code from multiple modules, in which case it
+will be organized as a \f[B]module hierarchy\f[R].
+.PP
+When the compilation has been completed, if you are compiling one or
+more modules, you can place the output directory on the module path for
+the Java \f[B]launcher\f[R]; otherwise, you can place the place the
+output directory on the class path for the Java launcher.
+.SS Precompiled Code
+.PP
+The code to be compiled may refer to libraries beyond what is provided
+by the platform.
+If so, you must place these libraries on the class path or module path.
+If the library code is not in a module, place it on the class path; if
+it is in a module, place it on the module path.
+.IP \[bu] 2
+Use the \f[CB]\-\-class\-path\f[R] option to specify libraries to be
+placed on the class path.
+Locations on the class path should be organized in a \f[B]package
+hierarchy\f[R].
+You can also use alternate forms of the option: \f[CB]\-classpath\f[R] or
+\f[CB]\-cp\f[R].
+.IP \[bu] 2
+Use the \f[CB]\-\-module\-path\f[R] option to specify libraries to be
+placed on the module path.
+Locations on the module path should either be modules or directories of
+modules.
+You can also use an alternate form of the option: \f[CB]\-p\f[R].
+.RS 2
+.PP
+See \f[B]Configuring the Module System\f[R] for details on how to modify
+the default configuration of library modules.
+.RE
+.PP
+\f[B]Note\f[R]: the options for the class path and module path are not
+mutually exclusive, although it is not common to specify the class path
+when compiling code for one or more modules.
+.SS Additional Source Files
+.PP
+The code to be compiled may refer to types in additional source files
+that are not specified on the command line.
+If so, you must put those source files on either the source path or
+module path.
+You can only specify one of these options: if you are not compiling code
+for a module, or if you are only compiling code for a single module, use
+the source path; if you are compiling code for multiple modules, use the
+module source path.
+.IP \[bu] 2
+Use the \f[CB]\-\-source\-path\f[R] option to specify the locations of
+additional source files that may be read by javac.
+Locations on the source path should be organized in a \f[B]package
+hierarchy\f[R].
+You can also use an alternate form of the option: \f[CB]\-sourcepath\f[R].
+.IP \[bu] 2
+Use the \f[CB]\-\-module\-source\-path\f[R] option one or more times to
+specify the location of additional source files in different modules
+that may be read by javac, or when compiling source files in multiple
+modules.
+You can either specify the locations for each module
+\f[B]individually\f[R], or you can organize the source files so that you
+can specify the locations all \f[B]together\f[R].
+For more details, see \f[B]The Module Source Path Option\f[R].
+.PP
+If you want to be able to refer to types in additional source files but
+do not want them to be compiled, use the \f[CB]\-implicit\f[R] option.
+.PP
+\f[B]Note\f[R]: if you are compiling code for multiple modules, you must
+always specify a module source path, and all source files specified on
+the command line must be in one of the directories on the module source
+path, or in a subdirectory thereof.
+.SS Example of Compiling Multiple Source Files
+.PP
+This example compiles the \f[CB]Aloha.java\f[R], \f[CB]GutenTag.java\f[R],
+\f[CB]Hello.java\f[R], and \f[CB]Hi.java\f[R] source files in the
+\f[CB]greetings\f[R] package.
+.PP
+\f[B]Oracle Solaris, Linux, and macOS:\f[R]
+.IP
+.nf
+\f[CB]
+%\ javac\ greetings/*.java
+%\ ls\ greetings
+Aloha.class\ \ \ \ \ \ \ \ \ GutenTag.class\ \ \ \ \ \ Hello.class\ \ \ \ \ \ \ \ \ Hi.class
+Aloha.java\ \ \ \ \ \ \ \ \ \ GutenTag.java\ \ \ \ \ \ \ Hello.java\ \ \ \ \ \ \ \ \ \ Hi.java
+\f[R]
+.fi
+.PP
+\f[B]Windows:\f[R]
+.IP
+.nf
+\f[CB]
+C:\\>javac\ greetings\\*.java
+C:\\>dir\ greetings
+Aloha.class\ \ \ \ \ \ \ \ \ GutenTag.class\ \ \ \ \ \ Hello.class\ \ \ \ \ \ \ \ \ Hi.class
+Aloha.java\ \ \ \ \ \ \ \ \ \ GutenTag.java\ \ \ \ \ \ \ Hello.java\ \ \ \ \ \ \ \ \ \ Hi.java
+\f[R]
+.fi
+.SS Example of Specifying a User Class Path
+.PP
+After changing one of the source files in the previous example,
+recompile it:
+.PP
+\f[B]Oracle Solaris, Linux, and macOS:\f[R]
+.IP
+.nf
+\f[CB]
+pwd
+/examples
+javac\ greetings/Hi.java
+\f[R]
+.fi
+.PP
+\f[B]Windows:\f[R]
+.IP
+.nf
+\f[CB]
+C:\\>cd
+\\examples
+C:\\>javac\ greetings\\Hi.java
+\f[R]
+.fi
+.PP
+Because \f[CB]greetings.Hi\f[R] refers to other classes in the
+\f[CB]greetings\f[R] package, the compiler needs to find these other
+classes.
+The previous example works because the default user class path is the
+directory that contains the package directory.
+If you want to recompile this file without concern for which directory
+you are in, then add the examples directory to the user class path by
+setting \f[CB]CLASSPATH\f[R].
+This example uses the \f[CB]\-classpath\f[R] option.
+.PP
+\f[B]Oracle Solaris, Linux, and macOS:\f[R]
+.RS
+.PP
+\f[CB]javac\ \-classpath\ /examples\ /examples/greetings/Hi.java\f[R]
+.RE
+.PP
+\f[B]Windows:\f[R]
+.RS
+.PP
+\f[CB]C:\\>javac\ \-classpath\ \\examples\ \\examples\\greetings\\Hi.java\f[R]
+.RE
+.PP
+If you change \f[CB]greetings.Hi\f[R] to use a banner utility, then that
+utility also needs to be accessible through the user class path.
+.PP
+\f[B]Oracle Solaris, Linux, and macOS:\f[R]
+.IP
+.nf
+\f[CB]
+javac\ \-classpath\ /examples:/lib/Banners.jar\ \\
+\ \ \ \ \ \ \ \ \ \ \ \ /examples/greetings/Hi.java
+\f[R]
+.fi
+.PP
+\f[B]Windows:\f[R]
+.IP
+.nf
+\f[CB]
+C:\\>javac\ \-classpath\ \\examples;\\lib\\Banners.jar\ ^
+\ \ \ \ \ \ \ \ \ \ \ \ \\examples\\greetings\\Hi.java
+\f[R]
+.fi
+.PP
+To execute a class in the \f[CB]greetings\f[R] package, the program needs
+access to the \f[CB]greetings\f[R] package, and to the classes that the
+\f[CB]greetings\f[R] classes use.
+.PP
+\f[B]Oracle Solaris, Linux, and macOS:\f[R]
+.RS
+.PP
+\f[CB]java\ \-classpath\ /examples:/lib/Banners.jar\ greetings.Hi\f[R]
+.RE
+.PP
+\f[B]Windows:\f[R]
+.RS
+.PP
+\f[CB]C:\\>java\ \-classpath\ \\examples;\\lib\\Banners.jar\ greetings.Hi\f[R]
+.RE
+.SH CONFIGURING THE MODULE SYSTEM
+.PP
+If you want to include additional modules in your compilation, use the
+\f[CB]\-\-add\-modules\f[R] option.
+This may be necessary when you are compiling code that is not in a
+module, or which is in an automatic module, and the code refers to API
+in the additional modules.
+.PP
+If you want to restrict the set of modules in your compilation, use the
+\f[CB]\-\-limit\-modules\f[R] option.
+This may be useful if you want to ensure that the code you are compiling
+is capable of running on a system with a limited set of modules
+installed.
+.PP
+If you want to break encapsulation and specify that additional packages
+should be considered as exported from a module, use the
+\f[CB]\-\-add\-exports\f[R] option.
+This may be useful when performing white\-box testing; relying on access
+to internal API in production code is strongly discouraged.
+.PP
+If you want to specify that additional packages should be considered as
+required by a module, use the \f[CB]\-\-add\-reads\f[R] option.
+This may be useful when performing white\-box testing; relying on access
+to internal API in production code is strongly discouraged.
+.PP
+You can patch additional content into any module using the
+\f[CB]\-\-patch\-module\f[R] option.
+See [Patching a Module] for more details.
+.SH SEARCHING FOR MODULE, PACKAGE AND TYPE DECLARATIONS
+.PP
+To compile a source file, the compiler often needs information about a
+module or type, but the declaration is not in the source files specified
+on the command line.
+.PP
+\f[CB]javac\f[R] needs type information for every class or interface used,
+extended, or implemented in the source file.
+This includes classes and interfaces not explicitly mentioned in the
+source file, but that provide information through inheritance.
+.PP
+For example, when you create a subclass of \f[CB]java.awt.Window\f[R], you
+are also using the ancestor classes of \f[CB]Window\f[R]:
+\f[CB]java.awt.Container\f[R], \f[CB]java.awt.Component\f[R], and
+\f[CB]java.lang.Object\f[R].
+.PP
+When compiling code for a module, the compiler also needs to have
+available the declaration of that module.
+.PP
+A successful search may produce a class file, a source file, or both.
+If both are found, then you can use the \f[CB]\-Xprefer\f[R] option to
+instruct the compiler which to use; see \f[B]Extra Options\f[R].
+.PP
+If a search finds and uses a source file, then by default \f[CB]javac\f[R]
+compiles that source file.
+This behavior can be altered with \f[CB]\-implicit\f[R]; see \f[B]Standard
+Options\f[R].
+.PP
+The compiler might not discover the need for some type information until
+after annotation processing completes.
+When the type information is found in a source file and no
+\f[CB]\-implicit\f[R] option is specified, the compiler gives a warning
+that the file is being compiled without being subject to annotation
+processing.
+To disable the warning, either specify the file on the command line (so
+that it will be subject to annotation processing) or use the
+\f[CB]\-implicit\f[R] option to specify whether or not class files should
+be generated for such source files.
+.PP
+The way that \f[CB]javac\f[R] locates the declarations of those types
+depends on whether the reference exists within code for a module or not.
+.SS Searching Package Oriented Paths
+.PP
+When searching for a source or class file on a path composed of package
+oriented locations, \f[CB]javac\f[R] will check each location on the path
+in turn for the possible presence of the file.
+The first occurrence of a particular file shadows (hides) any subsequent
+occurrences of like\-named files.
+This shadowing does not affect any search for any files with a different
+name.
+This can be convenient when searching for source files, which may be
+grouped in different locations, such as shared code, platform\-specific
+code and generated code.
+It can also be useful when injecting alternate versions of a class file
+into a package, to debugging or other instrumentation reasons.
+But, it can also be dangerous, such as when putting incompatible
+different versions of a library on the class path.
+.SS Searching Module Oriented Paths
+.PP
+Prior to scanning any module paths for any package or type declarations,
+\f[CB]javac\f[R] will lazily scan the following paths and locations to
+determine the modules that will be used in the compilation.
+.IP \[bu] 2
+The module source path (see the \f[CB]\-\-module\-source\-path\f[R]
+option)
+.IP \[bu] 2
+The path for upgradeable modules (see the
+\f[CB]\-\-upgrade\-module\-path\f[R] option)
+.IP \[bu] 2
+The system modules (see the \f[CB]\-\-system\f[R] option)
+.IP \[bu] 2
+The user module path ( see the \f[CB]\-\-module\-path\f[R] option)
+.PP
+For any module, the first occurrence of the module during the scan
+completely shadows (hides) any subsequent appearance of a like\-named
+module.
+While locating the modules, \f[CB]javac\f[R] is able to determine the
+packages exported by the module and to associate with each module a
+package oriented path for the contents of the module.
+For any previously compiled module, this path will typically be a single
+entry for either a directory or a file that provides an internal
+directory\-like hierarchy, such as a JAR file.
+Thus, when searching for a type that is in a package that is known to be
+exported by a module, \f[CB]javac\f[R] can locate the declaration directly
+and efficiently.
+.SS Searching for the Declaration of a Module
+.PP
+If the module has been previously compiled, the module declaration is
+located in a file named \f[CB]module\-info.class\f[R] in the root of the
+package hierarchy for the content of the module.
+.PP
+If the module is one of those currently being compiled, the module
+declaration will be either the file named \f[CB]module\-info.class\f[R] in
+the root of the package hierarchy for the module in the class output
+directory, or the file named \f[CB]module\-info.java\f[R] in one of the
+locations on the source path or one the module source path for the
+module.
+.SS Searching for the Declaration of a Type When the Reference is not in
+a Module
+.PP
+When searching for a type that is referenced in code that is not in a
+module, \f[CB]javac\f[R] will look in the following places:
+.IP \[bu] 2
+The platform classes (or the types in exported packages of the platform
+modules) (This is for compiled class files only.)
+.IP \[bu] 2
+Types in exported packages of any modules on the module path, if
+applicable.
+(This is for compiled class files only.)
+.IP \[bu] 2
+Types in packages on the class path and/or source path:
+.RS 2
+.IP \[bu] 2
+If both are specified, \f[CB]javac\f[R] looks for compiled class files on
+the class path and for source files on the source path.
+.IP \[bu] 2
+If the class path is specified, but not source path, \f[CB]javac\f[R]
+looks for both compiled class files and source files on the class path.
+.IP \[bu] 2
+If the class path is not specified, it defaults to the current
+directory.
+.RE
+.PP
+When looking for a type on the class path and/or source path, if both a
+compiled class file and a source file are found, the most recently
+modified file will be used by default.
+If the source file is newer, it will be compiled and will may override
+any previously compiled version of the file.
+You can use the \f[CB]\-Xprefer\f[R] option to override the default
+behavior.
+.SS Searching for the Declaration of a Type When the Reference is in a
+Module
+.PP
+When searching for a type that is referenced in code in a module,
+\f[CB]javac\f[R] will examine the declaration of the enclosing module to
+determine if the type is in a package that is exported from another
+module that is readable by the enclosing module.
+If so, \f[CB]javac\f[R] will simply and directly go to the definition of
+that module to find the definition of the required type.
+Unless the module is another of the modules being compiled,
+\f[CB]javac\f[R] will only look for compiled class files files.
+In other words, \f[CB]javac\f[R] will not look for source files in
+platform modules or modules on the module path.
+.PP
+If the type being referenced is not in some other readable module,
+\f[CB]javac\f[R] will examine the module being compiled to try and find
+the declaration of the type.
+\f[CB]javac\f[R] will look for the declaration of the type as follows:
+.IP \[bu] 2
+Source files specified on the command line or on the source path or
+module source path.
+.IP \[bu] 2
+Previously compiled files in the output directory.
+.SH DIRECTORY HIERARCHIES
+.PP
+\f[CB]javac\f[R] generally assumes that source files and compiled class
+files will be organized in a file system directory hierarchy or in a
+type of file that supports in an internal directory hierarchy, such as a
+JAR file.
+Three different kinds of hierarchy are supported: a \f[I]package
+hierarchy\f[R], a \f[I]module hierarchy\f[R], and a \f[I]module source
+hierarchy\f[R].
+.PP
+While \f[CB]javac\f[R] is fairly relaxed about the organization of source
+code, beyond the expectation that source will be organized in one or
+package hierarchies, and can generally accomodate organizations
+prescribed by development environments and build tools, Java tools in
+general, and \f[CB]javac\f[R] and the Java launcher in particular, are
+more stringent regarding the organization of compiled class files, and
+will be organized in package hierarchies or module hierarchies, as
+appropriate.
+.PP
+The location of these hierarchies are specified to \f[CB]javac\f[R] with
+command\-line options, whose names typically end in "path", like
+\f[CB]\-\-source\-path\f[R] or \f[CB]\-\-class\-path\f[R].
+Also as a general rule, path options whose name includes the word
+\f[CB]module\f[R], like \f[CB]\-\-module\-path\f[R], are used to specify
+module hierarchies, although some module\-related path options allow a
+package hierarchy to be specified on a per\-module basis.
+All other path options are used to specify package hierarchies.
+.SS Package Hierarchy
+.PP
+In a package hierarchy, directories and subdirectories are used to
+represent the component parts of the package name, with the source file
+or compiled class file for a type being stored as a file with an
+extension of \f[CB]\&.java\f[R] or \f[CB]\&.class\f[R] in the most nested
+directory.
+.PP
+For example, in a package hierarchy, the source file for a class
+\f[CB]com.example.MyClass\f[R] will be stored in the file
+\f[I]com/example/MyClass.java\f[R]
+.SS Module Hierarchy
+.PP
+In a module hierarchy, the first level of directories are named for the
+modules in the hierarchy; within each of those directories the contents
+of the module are organized in package hierarchies.
+.PP
+For example, in a module hierarchy, the compiled class file for a type
+called \f[CB]com.example.MyClass\f[R] in a module called
+\f[CB]my.library\f[R] will be stored in
+\f[I]my.library/com/example/MyClass.class\f[R].
+.PP
+The various output directories used by \f[CB]javac\f[R] (the class output
+directory, the source output directory, and native header output
+directory) will all be organized in a module hierarchy when multiple
+modules are being compiled.
+.SS Module Source Hierarchy
+.PP
+Although the source for each individual module should always be
+organized in a package hierarchy, it may be convenient to group those
+hierarchies into a module source hierarchy.
+This is similar to a module hierarchy, except that there may be
+intervening directories between the directory for the module and the
+directory that is the root of the package hierarchy for the source code
+of the module.
+.PP
+For example, in a module source hierarchy, the source file for a type
+called \f[CB]com.example.MyClass\f[R] in a module called
+\f[CB]my.library\f[R] may be stored in a file such as
+\f[I]my.library/src/main/java/com/example/MyClass.java\f[R].
+.SH THE MODULE SOURCE PATH OPTION
+.PP
+The \f[CB]\-\-module\-source\-path\f[R] option has two forms: a
+\f[I]module\-specific form\f[R], in which a package path is given for
+each module containing code to be compiled, and a
+\f[I]module\-pattern\f[R] form, in which the source path for each module
+is specified by a pattern.
+The module\-specific form is generally simpler to use when only a small
+number of modules are involved; the module\-pattern form may be more
+convenient when the number of modules is large and the modules are
+organized in a regular manner that can be described by a pattern.
+.PP
+Multiple instances of the \f[CB]\-\-module\-source\-path\f[R] option may
+be given, each one using either the module\-pattern form or the
+module\-specific form, subject to the following limitations:
+.IP \[bu] 2
+the module\-pattern form may be used at most once
+.IP \[bu] 2
+the module\-specific form may be used at most once for any given module
+.PP
+If the module\-specific form is used for any module, the associated
+search path overrides any path that might otherwise have been inferred
+from the module\-pattern form.
+.SS Module\-specific form
+.PP
+The module\-specific form allows an explicit search path to be given for
+any specific module.
+This form is:
+.IP \[bu] 2
+\f[CB]\-\-module\-source\-path\f[R]
+\f[I]module\-name\f[R]\f[CB]=\f[R]\f[I]file\-path\f[R]
+(\f[I]path\-separator\f[R] \f[I]file\-path\f[R])*
+.PP
+The path separator character is \f[CB];\f[R] on Windows, and \f[CB]:\f[R]
+otherwise.
+.PP
+\f[B]Note:\f[R] this is similar to the form used for the
+\f[CB]\-\-patch\-module\f[R] option.
+.SS Module\-pattern form
+.PP
+The module\-pattern form allows a concise specification of the module
+source path for any number of modules organized in regular manner.
+.IP \[bu] 2
+\f[CB]\-\-module\-source\-path\f[R] \f[I]pattern\f[R]
+.PP
+The pattern is defined by the following rules, which are applied in
+order:
+.IP \[bu] 2
+The argument is considered to be a series of segments separated by the
+path separator character (\f[CB];\f[R] on Windows, and \f[CB]:\f[R]
+otherwise).
+.IP \[bu] 2
+Each segment containing curly braces of the form
+.RS 2
+.IP
+.nf
+\f[CB]
+string1{alt1\ (\ ,alt2\ )*\ }\ string2
+\f[R]
+.fi
+.PP
+is considered to be replaced by a series of segments formed by
+"expanding" the braces:
+.IP
+.nf
+\f[CB]
+string1\ alt1\ string2
+string1\ alt2\ string2
+and\ so\ on...
+\f[R]
+.fi
+.PP
+The braces may be nested.
+.PP
+This rule is applied for all such usages of braces.
+.RE
+.IP \[bu] 2
+Each segment must have at most one asterisk (\f[CB]*\f[R]).
+If a segment does not contain an asterisk, it is considered to be as
+though the file separator character and an asterisk are appended.
+.RS 2
+.PP
+For any module \f[I]M\f[R], the source path for that module is formed
+from the series of segments obtained by substituting the module name
+\f[I]M\f[R] for the asterisk in each segment.
+.PP
+\f[B]Note\f[R]: in this context, the asterisk is just used as a special
+marker, to denote the position in the path of the module name.
+It should not be confused with the use of \f[CB]*\f[R] as a file name
+wildcard character, as found on most operating systems.
+.RE
+.SH PATCHING MODULES
+.PP
+javac allows any content, whether in source or compiled form, to be
+patched into any module using the \f[CB]\-\-patch\-module\f[R] option.
+You may want to do this to compile alternative implementations of a
+class to be patched at runtime into a JVM, or to inject additional
+classes into the module, such as when testing.
+.PP
+The form of the option is:
+.IP \[bu] 2
+\f[CB]\-\-patch\-module\f[R]
+\f[I]module\-name\f[R]\f[CB]=\f[R]\f[I]file\-path\f[R]
+(\f[I]path\-separator\f[R] \f[I]file\-path\f[R] )*
+.PP
+The path separator character is \f[CB];\f[R] on Windows, and \f[CB]:\f[R]
+otherwise.
+The paths given for the module must specify the root of a package
+hierarchy for the contents of the module
+.PP
+The option may be given at most once for any given module.
+Any content on the path will hide any like\-named content later in the
+path and in the patched module.
+.PP
+When patching source code into more than one module, the
+\f[CB]\-\-module\-source\-path\f[R] must also be used, so that the output
+directory is organized in a module hierarchy, and capable of holding the
+compiled class files for the modules being compiled.
+.SH ANNOTATION PROCESSING
+.PP
+The \f[CB]javac\f[R] command provides direct support for annotation
+processing.
+.PP
+The API for annotation processors is defined in the
+\f[CB]javax.annotation.processing\f[R] and \f[CB]javax.lang.model\f[R]
+packages and subpackages.
+.SS How Annotation Processing Works
+.PP
+Unless annotation processing is disabled with the \f[CB]\-proc:none\f[R]
+option, the compiler searches for any annotation processors that are
+available.
+The search path can be specified with the \f[CB]\-processorpath\f[R]
+option.
+If no path is specified, then the user class path is used.
+Processors are located by means of service provider\-configuration files
+named \f[CB]META\-INF/services/javax.annotation.processing\f[R].
+Processor on the search path.
+Such files should contain the names of any annotation processors to be
+used, listed one per line.
+Alternatively, processors can be specified explicitly, using the
+\f[CB]\-processor\f[R] option.
+.PP
+After scanning the source files and classes on the command line to
+determine what annotations are present, the compiler queries the
+processors to determine what annotations they process.
+When a match is found, the processor is called.
+A processor can claim the annotations it processes, in which case no
+further attempt is made to find any processors for those annotations.
+After all of the annotations are claimed, the compiler does not search
+for additional processors.
+.PP
+If any processors generate new source files, then another round of
+annotation processing occurs: Any newly generated source files are
+scanned, and the annotations processed as before.
+Any processors called on previous rounds are also called on all
+subsequent rounds.
+This continues until no new source files are generated.
+.PP
+After a round occurs where no new source files are generated, the
+annotation processors are called one last time, to give them a chance to
+complete any remaining work.
+Finally, unless the \f[CB]\-proc:only\f[R] option is used, the compiler
+compiles the original and all generated source files.
+.PP
+If you use an annotation processor that generates additional source
+files to be included in the compilation, you can specify a default
+module to be used for the newly generated files, for use when a module
+declaration is not also generated.
+In this case, use the \f[CB]\-\-default\-module\-for\-created\-files\f[R]
+option.
+.SS Compilation Environment and Runtime Environment.
+.PP
+The declarations in source files and previously compiled class files are
+analyzed by \f[CB]javac\f[R] in a \f[I]compilation environment\f[R] that is
+distinct from the \f[I]runtime environment\f[R] used to execute
+\f[CB]javac\f[R] itself.
+Although there is a deliberate similarity between many \f[CB]javac\f[R]
+options and like\-named options for the Java \f[B]launcher\f[R], such as
+\f[CB]\-\-class\-path\f[R], \f[CB]\-\-module\-path\f[R] and so on, it is
+important to understand that in general the \f[CB]javac\f[R] options just
+affect the environment in which the source files are compiled, and do
+not affect the operation of \f[CB]javac\f[R] itself.
+.PP
+The distinction between the compilation environment and runtime
+environment is significant when it comes to using annotation processors.
+Although annotations processors process elements (declarations) that
+exist in the compilation environment, the annotation processor itself is
+executed in the runtime environment.
+If an annotation processor has dependencies on libraries that are not in
+modules, the libraries can be placed, along with the annotation
+processor itself, on the processor path.
+(See the \f[CB]\-\-processor\-path\f[R] option.) If the annotation
+processor and its dependencies are in modules, you should use the
+processor module path instead.
+(See the \f[CB]\-\-processor\-module\-path\f[R] option.) When those are
+insufficient, it may be necessary to provide further configuration of
+the runtime environment.
+This can be done in two ways:
+.IP "1." 3
+If \f[CB]javac\f[R] is invoked from the command line, options can be
+passed to the underlying runtime by prefixing the option with
+\f[CB]\-J\f[R].
+(See the \f[CB]\-J\f[R] option.)
+.IP "2." 3
+You can start an instance of a Java Virtual Machine directly and use
+command line options and API to configure an environment in which
+\f[CB]javac\f[R] can be invoked via one of its \f[B]APIs\f[R].
+.SH COMPILING FOR EARLIER RELEASES OF THE PLATFORM
+.PP
+\f[CB]javac\f[R] can compile code that is to be used on other releases of
+the platform, using either the \f[CB]\-\-release\f[R] option, or the
+\f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] and
+\f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options, together with additional
+options to specify the platform classes.
+.PP
+Depending on the desired platform release, there are some restrictions
+on some of the options that can be used.
+.IP \[bu] 2
+When compiling for JDK 8 and earlier releases, you cannot use any option
+that is intended for use with the module system.
+This includes all of the following options:
+.RS 2
+.IP \[bu] 2
+\f[CB]\-\-module\-source\-path\f[R], \f[CB]\-\-upgrade\-module\-path\f[R],
+\f[CB]\-\-system\f[R], \f[CB]\-\-module\-path\f[R],
+\f[CB]\-\-add\-modules\f[R], \f[CB]\-\-add\-exports\f[R],
+\f[CB]\-\-add\-opens\f[R], \f[CB]\-\-add\-reads\f[R],
+\f[CB]\-\-limit\-modules\f[R], \f[CB]\-\-patch\-module\f[R]
+.PP
+If you use the \f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] or
+\f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options, you should also set the
+appropriate platform classes using the boot class path family of
+options.
+.RE
+.IP \[bu] 2
+When compiling for JDK 9 and later releases, you cannot use any option
+that is intended to configure the boot class path.
+This includes all of the following options:
+.RS 2
+.IP \[bu] 2
+\f[CB]\-Xbootclasspath/p:\f[R], \f[CB]\-Xbootclasspath\f[R],
+\f[CB]\-Xbootclasspath/a:\f[R], \f[CB]\-endorseddirs\f[R],
+\f[CB]\-Djava.endorsed.dirs\f[R], \f[CB]\-extdirs\f[R],
+\f[CB]\-Djava.ext.dirs\f[R], \f[CB]\-profile\f[R]
+.PP
+If you use the \f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] or
+\f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options, you should also set the
+appropriate platform classes using the \f[CB]\-\-system\f[R] option to
+give the location of an appropriate installed release of JDK.
+.RE
+.PP
+When using the \f[CB]\-\-release\f[R] option, only the supported
+documented API for that release may be used; you cannot use any options
+to break encapsulation to access any internal classes.
+.SH APIS
+.PP
+The \f[CB]javac\f[R] compiler can be invoked using an API in three
+different ways:
+.TP
+.B The \f[B]Java Compiler API\f[R]
+This provides the most flexible way to invoke the compiler, including
+the ability to compile source files provided in memory buffers or other
+non\-standard file systems.
+.RS
+.RE
+.TP
+.B The \f[B]ToolProvider API\f[R]
+A \f[CB]ToolProvider\f[R] for \f[CB]javac\f[R] can be obtained by calling
+\f[CB]ToolProvider.findFirst("javac")\f[R].
+This returns an object with the equivalent functionality of the
+command\-line tool.
+.RS
+.PP
+\f[B]Note\f[R]: This API should not be confused with the like\-named API
+in the \f[B]\f[BC]javax.tools\f[B]\f[R] package.
+.RE
+.TP
+.B The \f[CB]javac\f[R] \f[B]Legacy API\f[R]
+This API is retained for backward compatibility only.
+All new code should use either the Java Compiler API or the ToolProvider
+API.
+.RS
+.RE
+.PP
+\f[B]Note:\f[R] All other classes and methods found in a package with
+names that start with \f[CB]com.sun.tools.javac\f[R] (subpackages of
+\f[CB]com.sun.tools.javac\f[R]) are strictly internal and subject to
+change at any time.
 .SH EXAMPLES OF USING \-XLINT KEYS
 .TP
 .B \f[CB]cast\f[R]
@@ -1074,8 +1938,8 @@
 .TP
 .B \f[CB]dep\-ann\f[R]
 Warns about items that are documented with the \f[CB]\@deprecated\f[R]
-Javadoc comment, but don\[aq]t have the \f[CB]\@Deprecated\f[R]
-annotation, for example:
+Javadoc comment, but do not have the \f[CB]\@Deprecated\f[R] annotation,
+for example:
 .RS
 .IP
 .nf
@@ -1117,10 +1981,11 @@
 Checks the switch blocks for fall\-through cases and provides a warning
 message for any that are found.
 Fall\-through cases are cases in a switch block, other than the last
-case in the block, whose code doesn\[aq]t include a break statement,
-allowing code execution to fall through from that case to the next case.
+case in the block, whose code does not include a \f[CB]break\f[R]
+statement, allowing code execution to fall through from that case to the
+next case.
 For example, the code following the case 1 label in this switch block
-doesn\[aq]t end with a break statement:
+does not end with a \f[CB]break\f[R] statement:
 .RS
 .IP
 .nf
@@ -1141,8 +2006,8 @@
 .RE
 .TP
 .B \f[CB]finally\f[R]
-Warns about \f[CB]finally\f[R] clauses that can\[aq]t be completed
-normally, for example:
+Warns about \f[CB]finally\f[R] clauses that cannot be completed normally,
+for example:
 .RS
 .IP
 .nf
@@ -1172,7 +2037,7 @@
 .TP
 .B \f[CB]options\f[R]
 Warns about issues that related to the use of command\-line options.
-See \f[B]Cross\-Compilation Options for javac\f[R].
+See \f[B]Compiling for Earlier Releases of the Platform\f[R].
 .RS
 .RE
 .TP
@@ -1218,12 +2083,12 @@
 Warns about invalid path elements and nonexistent path directories on
 the command line (with regard to the class path, the source path, and
 other paths).
-Such warnings can\[aq]t be suppressed with the
-\f[CB]\@SuppressWarnings\f[R] annotation.
+Such warnings cannot be suppressed with the \f[CB]\@SuppressWarnings\f[R]
+annotation.
 For example:
 .RS
 .IP \[bu] 2
-\f[B]Oracle Solaris, Linux, and OS X:\f[R]
+\f[B]Oracle Solaris, Linux, and macOS:\f[R]
 \f[CB]javac\ \-Xlint:path\ \-classpath\ /nonexistentpath\ Example.java\f[R]
 .IP \[bu] 2
 \f[B]Windows:\f[R]
@@ -1233,8 +2098,8 @@
 .B \f[CB]processing\f[R]
 Warns about issues related to annotation processing.
 The compiler generates this warning when you have a class that has an
-annotation, and you use an annotation processor that can\[aq]t handle
-that type of exception.
+annotation, and you use an annotation processor that cannot handle that
+type of exception.
 For example, the following is a simple annotation processor:
 .RS
 .PP
@@ -1306,7 +2171,7 @@
 \f[CB]void\ countElements(List\ l)\ {\ ...\ }\f[R]
 .RE
 .PP
-The following example doesn\[aq]t generate a \f[CB]rawtypes\f[R] warning:
+The following example does not generate a \f[CB]rawtypes\f[R] warning:
 .RS
 .PP
 \f[CB]void\ countElements(List<?>\ l)\ {\ ...\ }\f[R]
@@ -1354,7 +2219,7 @@
 \f[R]
 .fi
 .PP
-If a serializable class doesn\[aq]t explicitly declare a field named
+If a serializable class does not explicitly declare a field named
 \f[CB]serialVersionUID\f[R], then the serialization runtime environment
 calculates a default \f[CB]serialVersionUID\f[R] value for that class
 based on various aspects of the class, as described in the Java Object
@@ -1372,8 +2237,7 @@
 .RE
 .TP
 .B \f[CB]static\f[R]
-Warns about issues relating to the use of statics variables, for
-example:
+Warns about issues relating to the use of static variables, for example:
 .RS
 .IP
 .nf
@@ -1409,8 +2273,7 @@
 Warns about issues relating to the use of \f[CB]try\f[R] blocks, including
 try\-with\-resources statements.
 For example, a warning is generated for the following statement because
-the resource \f[CB]ac\f[R] declared in the \f[CB]try\f[R] block isn\[aq]t
-used:
+the resource \f[CB]ac\f[R] declared in the \f[CB]try\f[R] block is not used:
 .RS
 .IP
 .nf
@@ -1440,10 +2303,9 @@
 \f[CB]List<String>\f[R].
 When the \f[CB]List\f[R] referenced by \f[CB]l\f[R] is assigned to
 \f[CB]ls\f[R], the compiler generates an unchecked warning.
-At compile time, the compiler and JVM can\[aq]t determine whether
+At compile time, the compiler and JVM cannot determine whether
 \f[CB]l\f[R] refers to a \f[CB]List<String>\f[R] type.
-In this case, \f[CB]l\f[R] doesn\[aq]t refer to a \f[CB]List<String>\f[R]
-type.
+In this case, \f[CB]l\f[R] does not refer to a \f[CB]List<String>\f[R] type.
 As a result, heap pollution occurs.
 .PP
 A heap pollution situation occurs when the \f[CB]List\f[R] object
@@ -1452,7 +2314,7 @@
 type, \f[CB]List<String>\f[R].
 However, the compiler still allows this assignment.
 It must allow this assignment to preserve backward compatibility with
-releases of Java SE that don\[aq]t support generics.
+releases of Java SE that do not support generics.
 Because of type erasure, \f[CB]List<Number>\f[R] and \f[CB]List<String>\f[R]
 both become \f[CB]List\f[R].
 Consequently, the compiler allows the assignment of the object
@@ -1477,7 +2339,7 @@
 \f[R]
 .fi
 .PP
-A non\-reifiable type is a type whose type information isn\[aq]t fully
+A non\-reifiable type is a type whose type information is not fully
 available at runtime.
 .PP
 The compiler generates the following warning for the definition of the
@@ -1491,8 +2353,8 @@
 .PP
 When the compiler encounters a varargs method, it translates the
 \f[CB]varargs\f[R] formal parameter into an array.
-However, the Java programming language doesn\[aq]t permit the creation
-of arrays of parameterized types.
+However, the Java programming language does not permit the creation of
+arrays of parameterized types.
 In the method \f[CB]ArrayBuilder.addToList\f[R], the compiler translates
 the \f[CB]varargs\f[R] formal parameter \f[CB]T...\f[R] elements to the
 formal parameter \f[CB]T[]\f[R] elements, an array.
@@ -1500,274 +2362,3 @@
 \f[CB]varargs\f[R] formal parameter to \f[CB]Object[]\f[R] elements.
 Consequently, there\[aq]s a possibility of heap pollution.
 .RE
-.SH EXAMPLE OF COMPILING BY PROVIDING COMMAND\-LINE ARGUMENTS
-.PP
-To compile as though providing command\-line arguments, use the
-following syntax:
-.RS
-.PP
-\f[CB]JavaCompiler\ javac\ =\ ToolProvider.getSystemJavaCompiler();\f[R]
-.RE
-.PP
-The example writes diagnostics to the standard output stream and returns
-the exit code that \f[CB]javac\f[R] command would give when called from
-the command line.
-.PP
-You can use other methods in the \f[CB]javax.tools.JavaCompiler\f[R]
-interface to handle diagnostics, control where files are read from and
-written to, and more.
-.SH OLD INTERFACE
-.PP
-\f[B]Note:\f[R]
-.PP
-This API is retained for backward compatibility only.
-All new code should use the Java Compiler API.
-.PP
-The \f[CB]com.sun.tools.javac.Main\f[R] class provides two static methods
-to call the compiler from a program:
-.IP
-.nf
-\f[CB]
-public\ static\ int\ compile(String[]\ args);
-public\ static\ int\ compile(String[]\ args,\ PrintWriter\ out);
-\f[R]
-.fi
-.PP
-The \f[CB]args\f[R] parameter represents any of the command\-line
-arguments that would typically be passed to the compiler.
-.PP
-The \f[CB]out\f[R] parameter indicates where the compiler diagnostic
-output is directed.
-.PP
-The \f[CB]return\f[R] value is equivalent to the \f[CB]exit\f[R] value from
-\f[CB]javac\f[R].
-.PP
-\f[B]Note:\f[R]
-.PP
-All other classes and methods found in a package with names that start
-with \f[CB]com.sun.tools.javac\f[R] (subpackages of
-\f[CB]com.sun.tools.javac\f[R]) are strictly internal and subject to
-change at any time.
-.SH EXAMPLE OF COMPILING MULTIPLE SOURCE FILES
-.PP
-This example compiles the \f[CB]Aloha.java\f[R], \f[CB]GutenTag.java\f[R],
-\f[CB]Hello.java\f[R], and \f[CB]Hi.java\f[R] source files in the
-\f[CB]greetings\f[R] package.
-.PP
-\f[B]Oracle Solaris, Linux, and OS X:\f[R]
-.IP
-.nf
-\f[CB]
-%\ javac\ greetings/*.java
-%\ ls\ greetings
-Aloha.class\ \ \ \ \ \ \ \ \ GutenTag.class\ \ \ \ \ \ Hello.class\ \ \ \ \ \ \ \ \ Hi.class
-Aloha.java\ \ \ \ \ \ \ \ \ \ GutenTag.java\ \ \ \ \ \ \ Hello.java\ \ \ \ \ \ \ \ \ \ Hi.java
-\f[R]
-.fi
-.PP
-\f[B]Windows:\f[R]
-.IP
-.nf
-\f[CB]
-C:\\>javac\ greetings\\*.java
-C:\\>dir\ greetings
-Aloha.class\ \ \ \ \ \ \ \ \ GutenTag.class\ \ \ \ \ \ Hello.class\ \ \ \ \ \ \ \ \ Hi.class
-Aloha.java\ \ \ \ \ \ \ \ \ \ GutenTag.java\ \ \ \ \ \ \ Hello.java\ \ \ \ \ \ \ \ \ \ Hi.java
-\f[R]
-.fi
-.SH EXAMPLE OF SPECIFYING A USER CLASS PATH
-.PP
-After changing one of the source files in the previous example,
-recompile it:
-.PP
-\f[B]Oracle Solaris, Linux, and OS X:\f[R]
-.IP
-.nf
-\f[CB]
-pwd
-/examples
-javac\ greetings/Hi.java
-\f[R]
-.fi
-.PP
-\f[B]Windows:\f[R]
-.IP
-.nf
-\f[CB]
-C:\\>cd
-\\examples
-C:\\>javac\ greetings\\Hi.java
-\f[R]
-.fi
-.PP
-Because \f[CB]greetings.Hi\f[R] refers to other classes in the
-\f[CB]greetings\f[R] package, the compiler needs to find these other
-classes.
-The previous example works because the default user class path is the
-directory that contains the package directory.
-If you want to recompile this file without concern for which directory
-you are in, then add the examples directory to the user class path by
-setting \f[CB]CLASSPATH\f[R].
-This example uses the \f[CB]\-classpath\f[R] option.
-.PP
-\f[B]Oracle Solaris, Linux, and OS X:\f[R]
-.RS
-.PP
-\f[CB]javac\ \-classpath\ /examples\ /examples/greetings/Hi.java\f[R]
-.RE
-.PP
-\f[B]Windows:\f[R]
-.RS
-.PP
-\f[CB]C:\\>javac\ \-classpath\ \\examples\ \\examples\\greetings\\Hi.java\f[R]
-.RE
-.PP
-If you change \f[CB]greetings.Hi\f[R] to use a banner utility, then that
-utility also needs to be accessible through the user class path.
-.PP
-\f[B]Oracle Solaris, Linux, and OS X:\f[R]
-.IP
-.nf
-\f[CB]
-javac\ \-classpath\ /examples:/lib/Banners.jar\ \\
-\ \ \ \ \ \ \ \ \ \ \ \ /examples/greetings/Hi.java
-\f[R]
-.fi
-.PP
-\f[B]Windows:\f[R]
-.IP
-.nf
-\f[CB]
-C:\\>javac\ \-classpath\ \\examples;\\lib\\Banners.jar\ ^
-\ \ \ \ \ \ \ \ \ \ \ \ \\examples\\greetings\\Hi.java
-\f[R]
-.fi
-.PP
-To execute a class in the \f[CB]greetings\f[R] package, the program needs
-access to the \f[CB]greetings\f[R] package, and to the classes that the
-\f[CB]greetings\f[R] classes use.
-.PP
-\f[B]Oracle Solaris, Linux, and OS X:\f[R]
-.RS
-.PP
-\f[CB]java\ \-classpath\ /examples:/lib/Banners.jar\ greetings.Hi\f[R]
-.RE
-.PP
-\f[B]Windows:\f[R]
-.RS
-.PP
-\f[CB]C:\\>java\ \-classpath\ \\examples;\\lib\\Banners.jar\ greetings.Hi\f[R]
-.RE
-.PP
-The \f[CB]\-source\ 1.7\f[R] option specifies that release 1.7 (or 7) of
-the Java programming language must be used to compile OldCode.java.
-The \f[CB]\-target\ 1.7\f[R] option ensures that the generated class files
-are compatible with JVM 1.7.
-.SH ANNOTATION PROCESSING
-.PP
-The \f[CB]javac\f[R] command provides direct support for annotation
-processing, superseding the need for the separate annotation processing
-command, \f[CB]apt\f[R].
-.PP
-The API for annotation processors is defined in the
-\f[CB]javax.annotation.processing\f[R] and \f[CB]javax.lang.model\f[R]
-packages and subpackages.
-.SS How Annotation Processing Works
-.PP
-Unless annotation processing is disabled with the \f[CB]\-proc:none\f[R]
-option, the compiler searches for any annotation processors that are
-available.
-The search path can be specified with the \f[CB]\-processorpath\f[R]
-option.
-If no path is specified, then the user class path is used.
-Processors are located by means of service provider\-configuration files
-named \f[CB]META\-INF/services/javax.annotation.processing\f[R].
-Processor on the search path.
-Such files should contain the names of any annotation processors to be
-used, listed one per line.
-Alternatively, processors can be specified explicitly, using the
-\f[CB]\-processor\f[R] option.
-.PP
-After scanning the source files and classes on the command line to
-determine what annotations are present, the compiler queries the
-processors to determine what annotations they process.
-When a match is found, the processor is called.
-A processor can claim the annotations it processes, in which case no
-further attempt is made to find any processors for those annotations.
-After all of the annotations are claimed, the compiler does not search
-for additional processors.
-.PP
-If any processors generate new source files, then another round of
-annotation processing occurs: Any newly generated source files are
-scanned, and the annotations processed as before.
-Any processors called on previous rounds are also called on all
-subsequent rounds.
-This continues until no new source files are generated.
-.PP
-After a round occurs where no new source files are generated, the
-annotation processors are called one last time, to give them a chance to
-complete any remaining work.
-Finally, unless the \f[CB]\-proc:only\f[R] option is used, the compiler
-compiles the original and all generated source files.
-.SH SEARCHING FOR TYPES
-.PP
-To compile a source file, the compiler often needs information about a
-type, but the type definition is not in the source files specified on
-the command line.
-.PP
-The compiler needs type information for every class or interface used,
-extended, or implemented in the source file.
-This includes classes and interfaces not explicitly mentioned in the
-source file, but that provide information through inheritance.
-.PP
-For example, when you create a subclass of \f[CB]java.awt.Window\f[R], you
-are also using the ancestor classes of \f[CB]Window\f[R]:
-\f[CB]java.awt.Container\f[R], \f[CB]java.awt.Component\f[R], and
-\f[CB]java.lang.Object\f[R].
-.PP
-When the compiler needs type information, it searches for a source file
-or class file that defines the type.
-The compiler searches for class files first in the bootstrap and
-extension classes, then in the user class path (which by default is the
-current directory).
-The user class path is defined by setting the \f[CB]CLASSPATH\f[R]
-environment variable or by using the \f[CB]\-classpath\f[R] option.
-.PP
-If you set the \f[CB]\-sourcepath\f[R] option, then the compiler searches
-the indicated path for source files.
-Otherwise, the compiler searches the user class path for both class
-files and source files.
-.PP
-You can specify different bootstrap or extension classes with the
-\f[CB]\-bootclasspath\f[R] and the \f[CB]\-extdirs\f[R] options.
-See \f[B]Cross\-Compilation Options for javac\f[R].
-.PP
-A successful type search may produce a class file, a source file, or
-both.
-If both are found, then you can use the \f[CB]\-Xprefer\f[R] option to
-instruct the compiler which to use.
-If \f[CB]newer\f[R] is specified, then the compiler uses the newer of the
-two files.
-If \f[CB]source\f[R] is specified, the compiler uses the source file.
-The default is \f[CB]newer\f[R].
-.PP
-If a type search finds a source file for a required type, either by
-itself, or as a result of the setting for the \f[CB]\-Xprefer\f[R] option,
-then the compiler reads the source file to get the information it needs.
-By default the compiler also compiles the source file.
-You can use the \f[CB]\-implicit\f[R] option to specify the behavior.
-If \f[CB]none\f[R] is specified, then no class files are generated for the
-source file.
-If \f[CB]class\f[R] is specified, then class files are generated for the
-source file.
-.PP
-The compiler might not discover the need for some type information until
-after annotation processing completes.
-When the type information is found in a source file and no
-\f[CB]\-implicit\f[R] option is specified, the compiler gives a warning
-that the file is being compiled without being subject to annotation
-processing.
-To disable the warning, either specify the file on the command line (so
-that it will be subject to annotation processing) or use the
-\f[CB]\-implicit\f[R] option to specify whether or not class files should
-be generated for such source files.
--- a/src/jdk.crypto.ec/share/classes/sun/security/ec/ECDSASignature.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.crypto.ec/share/classes/sun/security/ec/ECDSASignature.java	Mon Jul 15 14:31:28 2019 +0530
@@ -72,6 +72,9 @@
     // public key, if initialized for verifying
     private ECPublicKey publicKey;
 
+    // signature parameters
+    private ECParameterSpec sigParams = null;
+
     // The format. true for the IEEE P1363 format. false (default) for ASN.1
     private final boolean p1363Format;
 
@@ -279,10 +282,14 @@
     @Override
     protected void engineInitVerify(PublicKey publicKey)
     throws InvalidKeyException {
-        this.publicKey = (ECPublicKey) ECKeyFactory.toECKey(publicKey);
+        ECPublicKey key = (ECPublicKey) ECKeyFactory.toECKey(publicKey);
+        if (!isCompatible(this.sigParams, key.getParams())) {
+            throw new InvalidKeyException("Key params does not match signature params");
+        }
 
         // Should check that the supplied key is appropriate for signature
         // algorithm (e.g. P-256 for SHA256withECDSA)
+        this.publicKey = key;
         this.privateKey = null;
         resetDigest();
     }
@@ -298,10 +305,14 @@
     @Override
     protected void engineInitSign(PrivateKey privateKey, SecureRandom random)
     throws InvalidKeyException {
-        this.privateKey = (ECPrivateKey) ECKeyFactory.toECKey(privateKey);
+        ECPrivateKey key = (ECPrivateKey) ECKeyFactory.toECKey(privateKey);
+        if (!isCompatible(this.sigParams, key.getParams())) {
+            throw new InvalidKeyException("Key params does not match signature params");
+        }
 
         // Should check that the supplied key is appropriate for signature
         // algorithm (e.g. P-256 for SHA256withECDSA)
+        this.privateKey = key;
         this.publicKey = null;
         this.random = random;
         resetDigest();
@@ -354,6 +365,16 @@
         needsReset = true;
     }
 
+    private static boolean isCompatible(ECParameterSpec sigParams,
+            ECParameterSpec keyParams) {
+        if (sigParams == null) {
+            // no restriction on key param
+            return true;
+        }
+        return ECUtil.equals(sigParams, keyParams);
+    }
+
+
     private byte[] signDigestImpl(ECDSAOperations ops, int seedBits,
         byte[] digest, ECPrivateKeyImpl privImpl, SecureRandom random)
         throws SignatureException {
@@ -495,9 +516,16 @@
     @Override
     protected void engineSetParameter(AlgorithmParameterSpec params)
     throws InvalidAlgorithmParameterException {
-        if (params != null) {
+        if (params != null && !(params instanceof ECParameterSpec)) {
             throw new InvalidAlgorithmParameterException("No parameter accepted");
         }
+        ECKey key = (this.privateKey == null? this.publicKey : this.privateKey);
+        if ((key != null) && !isCompatible((ECParameterSpec)params, key.getParams())) {
+            throw new InvalidAlgorithmParameterException
+                ("Signature params does not match key params");
+        }
+
+        sigParams = (ECParameterSpec) params;
     }
 
     // get parameter, not supported. See JCA doc
@@ -510,7 +538,17 @@
 
     @Override
     protected AlgorithmParameters engineGetParameters() {
-        return null;
+        if (sigParams == null) {
+            return null;
+        }
+        try {
+            AlgorithmParameters ap = AlgorithmParameters.getInstance("EC");
+            ap.init(sigParams);
+            return ap;
+        } catch (Exception e) {
+            // should never happen
+            throw new ProviderException("Error retrieving EC parameters", e);
+        }
     }
 
     /**
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java	Mon Jul 15 14:31:28 2019 +0530
@@ -344,6 +344,7 @@
     public final int threadIsMethodHandleReturnOffset = getFieldOffset("JavaThread::_is_method_handle_return", Integer.class, "int");
     public final int threadObjectResultOffset = getFieldOffset("JavaThread::_vm_result", Integer.class, "oop");
     public final int jvmciCountersThreadOffset = getFieldOffset("JavaThread::_jvmci_counters", Integer.class, "jlong*");
+    public final int doingUnsafeAccessOffset = getFieldOffset("JavaThread::_doing_unsafe_access", Integer.class, "bool", Integer.MAX_VALUE);
     public final int javaThreadReservedStackActivationOffset = versioned.javaThreadReservedStackActivationOffset;
 
     public boolean requiresReservedStackCheck(List<ResolvedJavaMethod> methods) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java	Mon Jul 15 14:31:28 2019 +0530
@@ -175,7 +175,7 @@
                 registerGHASHPlugins(invocationPlugins, config, metaAccess, foreignCalls);
                 registerCounterModePlugins(invocationPlugins, config, replacementBytecodeProvider);
                 registerBase64Plugins(invocationPlugins, config, metaAccess, foreignCalls);
-                registerUnsafePlugins(invocationPlugins, replacementBytecodeProvider);
+                registerUnsafePlugins(invocationPlugins, config, replacementBytecodeProvider);
                 StandardGraphBuilderPlugins.registerInvocationPlugins(metaAccess, snippetReflection, invocationPlugins, replacementBytecodeProvider, true, false);
                 registerArrayPlugins(invocationPlugins, replacementBytecodeProvider);
                 registerStringPlugins(invocationPlugins, replacementBytecodeProvider);
@@ -276,15 +276,16 @@
         r.registerMethodSubstitution(ReflectionSubstitutions.class, "getClassAccessFlags", Class.class);
     }
 
-    private static void registerUnsafePlugins(InvocationPlugins plugins, BytecodeProvider replacementBytecodeProvider) {
+    private static void registerUnsafePlugins(InvocationPlugins plugins, GraalHotSpotVMConfig config, BytecodeProvider replacementBytecodeProvider) {
         Registration r;
         if (JavaVersionUtil.JAVA_SPEC <= 8) {
             r = new Registration(plugins, Unsafe.class, replacementBytecodeProvider);
         } else {
             r = new Registration(plugins, "jdk.internal.misc.Unsafe", replacementBytecodeProvider);
         }
-        r.registerMethodSubstitution(HotSpotUnsafeSubstitutions.class, HotSpotUnsafeSubstitutions.copyMemoryName, "copyMemory", Receiver.class, Object.class, long.class, Object.class, long.class,
-                        long.class);
+        String substituteMethodName = config.doingUnsafeAccessOffset != Integer.MAX_VALUE ? "copyMemoryGuarded" : "copyMemory";
+        r.registerMethodSubstitution(HotSpotUnsafeSubstitutions.class, HotSpotUnsafeSubstitutions.copyMemoryName, substituteMethodName, Receiver.class, Object.class, long.class, Object.class,
+                        long.class, long.class);
     }
 
     private static final LocationIdentity INSTANCE_KLASS_CONSTANTS = NamedLocationIdentity.immutable("InstanceKlass::_constants");
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotUnsafeSubstitutions.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotUnsafeSubstitutions.java	Mon Jul 15 14:31:28 2019 +0530
@@ -24,12 +24,17 @@
 
 package org.graalvm.compiler.hotspot.meta;
 
+import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfig.INJECTED_VMCONFIG;
+import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.doingUnsafeAccessOffset;
+
 import org.graalvm.compiler.api.replacements.ClassSubstitution;
 import org.graalvm.compiler.api.replacements.MethodSubstitution;
 import org.graalvm.compiler.hotspot.HotSpotBackend;
+import org.graalvm.compiler.hotspot.nodes.CurrentJavaThreadNode;
 import org.graalvm.compiler.nodes.ComputeObjectAddressNode;
 import org.graalvm.compiler.serviceprovider.JavaVersionUtil;
 import org.graalvm.compiler.word.Word;
+import jdk.internal.vm.compiler.word.LocationIdentity;
 import jdk.internal.vm.compiler.word.WordFactory;
 
 @ClassSubstitution(className = {"jdk.internal.misc.Unsafe", "sun.misc.Unsafe"})
@@ -43,6 +48,24 @@
         Word srcAddr = WordFactory.unsigned(ComputeObjectAddressNode.get(srcBase, srcOffset));
         Word dstAddr = WordFactory.unsigned(ComputeObjectAddressNode.get(destBase, destOffset));
         Word size = WordFactory.signed(bytes);
+
         HotSpotBackend.unsafeArraycopy(srcAddr, dstAddr, size);
     }
+
+    @SuppressWarnings("unused")
+    @MethodSubstitution(value = "copyMemory", isStatic = false)
+    static void copyMemoryGuarded(Object receiver, Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes) {
+        Word srcAddr = WordFactory.unsigned(ComputeObjectAddressNode.get(srcBase, srcOffset));
+        Word dstAddr = WordFactory.unsigned(ComputeObjectAddressNode.get(destBase, destOffset));
+        Word size = WordFactory.signed(bytes);
+        Word javaThread = CurrentJavaThreadNode.get();
+        int offset = doingUnsafeAccessOffset(INJECTED_VMCONFIG);
+        LocationIdentity any = LocationIdentity.any();
+
+        /* Set doingUnsafeAccess to guard and handle unsafe memory access failures */
+        javaThread.writeByte(offset, (byte) 1, any);
+        HotSpotBackend.unsafeArraycopy(srcAddr, dstAddr, size);
+        /* Reset doingUnsafeAccess */
+        javaThread.writeByte(offset, (byte) 0, any);
+    }
 }
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotReplacementsUtil.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotReplacementsUtil.java	Mon Jul 15 14:31:28 2019 +0530
@@ -187,6 +187,14 @@
         return config.verifyOops;
     }
 
+    /**
+     * @see GraalHotSpotVMConfig#doingUnsafeAccessOffset
+     */
+    @Fold
+    public static int doingUnsafeAccessOffset(@InjectedParameter GraalHotSpotVMConfig config) {
+        return config.doingUnsafeAccessOffset;
+    }
+
     public static final LocationIdentity EXCEPTION_OOP_LOCATION = NamedLocationIdentity.mutable("ExceptionOop");
 
     /**
--- a/src/jdk.javadoc/share/man/javadoc.1	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.javadoc/share/man/javadoc.1	Mon Jul 15 14:31:28 2019 +0530
@@ -447,13 +447,13 @@
 See \f[I]Extra Options\f[R] in \f[B]javac\f[R] for the detailed
 descriptions of using these options:
 .IP \[bu] 2
-\f[CB]\-add\-exports\f[R]
+\f[CB]\-\-add\-exports\f[R]
 .IP \[bu] 2
 \f[CB]\-\-add\-reads\f[R]
 .IP \[bu] 2
 \f[CB]\-\-patch\-module\f[R]
 .IP \[bu] 2
-\f[CB]\-\-Xmaxerrs\f[R]
+\f[CB]\-Xmaxerrs\f[R]
 .IP \[bu] 2
 \f[CB]\-Xmaxwarns\f[R]
 .PP
--- a/src/jdk.jdeps/share/man/javap.1	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.jdeps/share/man/javap.1	Mon Jul 15 14:31:28 2019 +0530
@@ -131,8 +131,8 @@
 .RE
 .TP
 .B \f[CB]\-sysinfo\f[R]
-Shows system information (path, size, date, MD5 hash) of the class being
-processed.
+Shows system information (path, size, date, SHA\-256 hash) of the class
+being processed.
 .RS
 .RE
 .TP
@@ -169,6 +169,11 @@
 .RS
 .RE
 .TP
+.B \f[CB]\-\-multi\-release\f[R] \f[I]version\f[R]
+Specifies the version to select in multi\-release JAR files.
+.RS
+.RE
+.TP
 .B \f[CB]\-J\f[R]\f[I]option\f[R]
 Passes the specified option to the JVM.
 For example:
--- a/src/jdk.jdeps/share/man/jdeps.1	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.jdeps/share/man/jdeps.1	Mon Jul 15 14:31:28 2019 +0530
@@ -63,6 +63,11 @@
 \f[CB]\-dotoutput\f[R] option).
 .SH POSSIBLE OPTIONS
 .TP
+.B \f[CB]\-?\f[R] or \f[CB]\-h\f[R] or \f[CB]\-\-help\f[R]
+Prints the help message.
+.RS
+.RE
+.TP
 .B \f[CB]\-dotoutput\f[R] \f[I]dir\f[R] or \f[CB]\-\-dot\-output\f[R] \f[I]dir\f[R]
 Specifies the destination directory for DOT file output.
 If this option is specified, then the \f[CB]jdeps\f[R]command generates
@@ -296,7 +301,7 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-R\f[R] or \f[CB]\-recursive\f[R]
+.B \f[CB]\-R\f[R] or \f[CB]\-\-recursive\f[R]
 Recursively traverses all run\-time dependences.
 The \f[CB]\-R\f[R] option implies \f[CB]\-filter:none\f[R].
 If \f[CB]\-p\f[R], \f[CB]\-e\f[R], or \f[CB]\-f\f[R] options are specified,
@@ -309,7 +314,7 @@
 .RS
 .RE
 .TP
-.B \f[CB]\-I\f[R] or \f[CB]\-inverse\f[R]
+.B \f[CB]\-I\f[R] or \f[CB]\-\-inverse\f[R]
 Analyzes the dependences per other given options and then finds all
 artifacts that directly and indirectly depend on the matching nodes.
 This is equivalent to the inverse of the compile\-time view analysis and
--- a/src/jdk.jlink/share/man/jlink.1	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.jlink/share/man/jlink.1	Mon Jul 15 14:31:28 2019 +0530
@@ -379,9 +379,7 @@
 The following command is similar to the one that creates a runtime image
 named \f[CB]greetingsapp\f[R], except that it will link the modules
 resolved from root modules with service binding; see the
-\f[B]\f[BC]Configuration.resolveAndBind\f[B]\f[R]
-[https://docs.oracle.com/javase/10/docs/api/java/lang/module/Configuration.html#resolveAndBind\-java.lang.module.ModuleFinder\-java.util.List\-java.lang.module.ModuleFinder\-java.util.Collection\-]
-method.
+\f[B]\f[BC]Configuration.resolveAndBind\f[B]\f[R] method.
 .IP
 .nf
 \f[CB]
--- a/src/jdk.jlink/share/man/jmod.1	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.jlink/share/man/jmod.1	Mon Jul 15 14:31:28 2019 +0530
@@ -148,13 +148,10 @@
 .IP \[bu] 2
 \f[CB]regex:\f[R]\f[I]regex\-pattern\f[R]
 .PP
-See the \f[B]\f[BC]FileSystem.getPathMatcher\f[B]\f[R]
-[https://docs.oracle.com/javase/10/docs/api/java/nio/file/FileSystem.html#getPathMatcher\-java.lang.String\-]
-method for the syntax of \f[I]glob\-pattern\f[R].
-See the \f[B]\f[BC]Pattern\f[B]\f[R]
-[https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html]
-class for the syntax of \f[I]regex\-pattern\f[R], which represents a
-regular expression.
+See the \f[B]\f[BC]FileSystem.getPathMatcher\f[B]\f[R] method for the
+syntax of \f[I]glob\-pattern\f[R].
+See the \f[B]\f[BC]Pattern\f[B]\f[R] class for the syntax of
+\f[I]regex\-pattern\f[R], which represents a regular expression.
 .RE
 .TP
 .B \f[CB]\-\-hash\-modules\f[R] \f[I]regex\-pattern\f[R]
--- a/src/jdk.rmic/share/man/rmic.1	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.rmic/share/man/rmic.1	Mon Jul 15 14:31:28 2019 +0530
@@ -46,12 +46,12 @@
 .RE
 .SH DESCRIPTION
 .PP
-\f[B]Deprecation Note:\f[R] The \f[CB]rmic\f[R] tool has been deprecated and
-is subject to removal in a future release. Support for static
-generation of Java Remote Method Protocol (JRMP) stubs and skeletons
-has been deprecated. Applications should use dynamically generated
-JRMP stubs, eliminating the need to use the \f[CB]rmic\f[R] tool for
-JRMP-based applications.
+\f[B]Deprecation Note:\f[R] The rmic tool has been deprecated and is
+subject to removal in a future release.
+Support for static generation of Java Remote Method Protocol (JRMP)
+stubs and skeletons has been deprecated.
+Applications should use dynamically generated JRMP stubs, eliminating
+the need to use the rmic tool for JRMP\-based applications.
 .PP
 The \f[CB]rmic\f[R] compiler generates stub and skeleton class files using
 the JRMP.
--- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/doubleconv/Bignum.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/doubleconv/Bignum.java	Mon Jul 15 14:31:28 2019 +0530
@@ -76,13 +76,10 @@
     // grow. There are no checks if the stack-allocated space is sufficient.
     static final int kBigitCapacity = kMaxSignificantBits / kBigitSize;
 
-    private final int[] bigits_ = new int[kBigitCapacity];
-    // A vector backed by bigits_buffer_. This way accesses to the array are
-    // checked for out-of-bounds errors.
-    // Vector<int> bigits_;
     private int used_digits_;
     // The Bignum's value equals value(bigits_) * 2^(exponent_ * kBigitSize).
     private int exponent_;
+    private final int[] bigits_ = new int[kBigitCapacity];
 
     Bignum() {}
 
@@ -124,7 +121,9 @@
     void assignUInt16(final char value) {
         assert (kBigitSize >= 16);
         zero();
-        if (value == 0) return;
+        if (value == 0) {
+            return;
+        }
 
         ensureCapacity(1);
         bigits_[0] = value;
@@ -136,7 +135,9 @@
         final  int kUInt64Size = 64;
 
         zero();
-        if (value == 0) return;
+        if (value == 0) {
+            return;
+        }
 
         final int needed_bigits = kUInt64Size / kBigitSize + 1;
         ensureCapacity(needed_bigits);
@@ -521,26 +522,27 @@
         mask >>>= 2;
         long this_value = base;
 
-        boolean delayed_multipliciation = false;
+        boolean delayed_multiplication = false;
         final long max_32bits = 0xFFFFFFFFL;
         while (mask != 0 && this_value <= max_32bits) {
             this_value = this_value * this_value;
             // Verify that there is enough space in this_value to perform the
             // multiplication.  The first bit_size bits must be 0.
             if ((power_exponent & mask) != 0) {
+                assert bit_size > 0;
                 final long base_bits_mask =
                         ~((1L << (64 - bit_size)) - 1);
                 final boolean high_bits_zero = (this_value & base_bits_mask) == 0;
                 if (high_bits_zero) {
                     this_value *= base;
                 } else {
-                    delayed_multipliciation = true;
+                    delayed_multiplication = true;
                 }
             }
             mask >>>= 1;
         }
         assignUInt64(this_value);
-        if (delayed_multipliciation) {
+        if (delayed_multiplication) {
             multiplyByUInt32(base);
         }
 
@@ -681,7 +683,7 @@
     }
 
 
-    int bigitAt(final int index) {
+    int bigitOrZero(final int index) {
         if (index >= bigitLength()) return 0;
         if (index < exponent_) return 0;
         return bigits_[index - exponent_];
@@ -696,8 +698,8 @@
         if (bigit_length_a < bigit_length_b) return -1;
         if (bigit_length_a > bigit_length_b) return +1;
         for (int i = bigit_length_a - 1; i >= Math.min(a.exponent_, b.exponent_); --i) {
-            final int bigit_a = a.bigitAt(i);
-            final int bigit_b = b.bigitAt(i);
+            final int bigit_a = a.bigitOrZero(i);
+            final int bigit_b = b.bigitOrZero(i);
             if (bigit_a < bigit_b) return -1;
             if (bigit_a > bigit_b) return +1;
             // Otherwise they are equal up to this digit. Try the next digit.
@@ -726,9 +728,9 @@
         // Starting at min_exponent all digits are == 0. So no need to compare them.
         final int min_exponent = Math.min(Math.min(a.exponent_, b.exponent_), c.exponent_);
         for (int i = c.bigitLength() - 1; i >= min_exponent; --i) {
-            final int int_a = a.bigitAt(i);
-            final int int_b = b.bigitAt(i);
-            final int int_c = c.bigitAt(i);
+            final int int_a = a.bigitOrZero(i);
+            final int int_b = b.bigitOrZero(i);
+            final int int_c = c.bigitOrZero(i);
             final int sum = int_a + int_b;
             if (sum > int_c + borrow) {
                 return +1;
--- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/doubleconv/FixedDtoa.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/doubleconv/FixedDtoa.java	Mon Jul 15 14:31:28 2019 +0530
@@ -286,7 +286,8 @@
                 fractionals -= (long) (digit) << point;
             }
             // If the first bit after the point is set we have to round up.
-            if (((fractionals >>> (point - 1)) & 1) == 1) {
+            assert (fractionals == 0 || point - 1 >= 0);
+            if ((fractionals != 0) && ((fractionals >>> (point - 1)) & 1) == 1) {
                 roundUp(buffer);
             }
         } else {  // We need 128 bits.
--- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/doubleconv/IeeeDouble.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/doubleconv/IeeeDouble.java	Mon Jul 15 14:31:28 2019 +0530
@@ -115,7 +115,7 @@
     }
 
     static double previousDouble(final long d64) {
-        if (d64 == (kInfinity | kSignMask)) return -longToDouble(kInfinity);
+        if (d64 == (kInfinity | kSignMask)) return -Infinity();
         if (sign(d64) < 0) {
             return longToDouble(d64 + 1);
         } else {
--- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Options.properties	Thu Jul 11 15:42:53 2019 +0530
+++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Options.properties	Mon Jul 15 14:31:28 2019 +0530
@@ -288,7 +288,7 @@
     name="--optimistic-types",                                                                           \
     short_name="-ot",                                                                                    \
     desc="Use optimistic type assumptions with deoptimizing recompilation. This makes the compiler try, for any program symbol whose type cannot be proven at compile time, to type it as narrow and primitive as possible. If the runtime encounters an error because symbol type is too narrow, a wider method will be generated until steady stage is reached. While this produces as optimal Java Bytecode as possible, erroneous type guesses will lead to longer warmup. Optimistic typing is currently enabled by default, but can be disabled for faster startup performance.",                     \
-    default=true                                                                                         \
+    default=false                                                                                         \
 }
 
 nashorn.option.parse.only = {       \
--- a/test/hotspot/jtreg/runtime/TLS/testtls.sh	Thu Jul 11 15:42:53 2019 +0530
+++ b/test/hotspot/jtreg/runtime/TLS/testtls.sh	Mon Jul 15 14:31:28 2019 +0530
@@ -43,5 +43,10 @@
 
 # Test 1) Run with stack size adjusted for TLS
 ${TESTNATIVEPATH}/stack-tls -add_tls || exit $?
-# Test 2) Run with no stack size adjustment
-${TESTNATIVEPATH}/stack-tls || exit $?
+
+# Test 2) Run with no stack size adjustment and expect failure.
+#
+# Potential failures include StackOverflowError, thread creation failures,
+# crashes, and etc. The test case can be used to demonstrate the TLS issue
+# but is excluded from running in regular testing.
+#${TESTNATIVEPATH}/stack-tls || exit $?
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/VtableTests/VTableTest.java	Mon Jul 15 14:31:28 2019 +0530
@@ -0,0 +1,50 @@
+/*
+ * 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 8226798
+ * @summary Check that the vTable for class C gets set up without causing
+ *          an assertion failure.
+ * @compile pkg/A.java
+ * @run main VTableTest
+ */
+
+public class VTableTest {
+
+    interface Intf {
+        public default void m() { }
+        public default void unusedButNeededToReproduceIssue() { }
+    }
+
+    static class B extends pkg.A implements Intf {
+    }
+
+    static class C extends B {
+        public void m() { System.out.println("In C.m()"); }
+    }
+
+    public static void main(String[] args) {
+        new C().m();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/VtableTests/pkg/A.java	Mon Jul 15 14:31:28 2019 +0530
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+package pkg;
+
+public class A {
+    void m() { }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/serviceability/sa/sadebugd/TEST.properties	Mon Jul 15 14:31:28 2019 +0530
@@ -0,0 +1,24 @@
+#
+# 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.
+#
+
+exclusiveAccess.dirs=.
--- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java	Mon Jul 15 14:31:28 2019 +0530
@@ -26,6 +26,7 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.lang.invoke.*;
 import java.util.*;
 import nsk.share.gc.gp.array.*;
 import nsk.share.gc.gp.string.*;
@@ -194,6 +195,36 @@
             return eatMemory(stresser, gp, initialFactor, minMemoryChunk, factor, OOM_TYPE.ANY);
         }
 
+         static int numberOfOOMEs = 0;
+
+         /**
+          * Minimal wrapper of the main implementation. Catches any OOM
+          * that might be thrown when rematerializing Objects when deoptimizing.
+          *
+          * It is Important that the impl is not inlined.
+          */
+
+         public static int eatMemory(ExecutionController stresser, GarbageProducer gp, long initialFactor, long minMemoryChunk, long factor, OOM_TYPE type) {
+            try {
+               // Using a methodhandle invoke of eatMemoryImpl to prevent inlining of it
+               MethodHandles.Lookup lookup = MethodHandles.lookup();
+               MethodType mt = MethodType.methodType(
+                     int.class,
+                     ExecutionController.class,
+                     GarbageProducer.class,
+                     long.class,
+                     long.class,
+                     long.class,
+                     OOM_TYPE.class);
+               MethodHandle eat = lookup.findStatic(GarbageUtils.class, "eatMemoryImpl", mt);
+               return (int) eat.invoke(stresser, gp, initialFactor, minMemoryChunk, factor, type);
+            } catch (OutOfMemoryError e) {
+               return numberOfOOMEs++;
+            } catch (Throwable t) {
+               throw new RuntimeException(t);
+            }
+         }
+
         /**
          * Eat memory using given garbage producer.
          *
@@ -211,8 +242,9 @@
          * @param type of OutOfMemory Exception: Java heap space or Metadata space
          * @return number of OOME occured
          */
-        public static int eatMemory(ExecutionController stresser, GarbageProducer gp, long initialFactor, long minMemoryChunk, long factor, OOM_TYPE type) {
-                int numberOfOOMEs = 0;
+
+         public static int eatMemoryImpl(ExecutionController stresser, GarbageProducer gp, long initialFactor, long minMemoryChunk, long factor, OOM_TYPE type) {
+                numberOfOOMEs = 0;
                 try {
                         byte[] someMemory = new byte[200000]; //200 Kb
                         try {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/crypto/CipherSpi/CipherByteBufferOverwriteTest.java	Mon Jul 15 14:31:28 2019 +0530
@@ -0,0 +1,191 @@
+/*
+ * 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 8181386
+ * @summary CipherSpi ByteBuffer to byte array conversion fails for
+ *          certain data overlap conditions
+ * @run main CipherByteBufferOverwriteTest 0 false
+ * @run main CipherByteBufferOverwriteTest 0 true
+ * @run main CipherByteBufferOverwriteTest 4 false
+ * @run main CipherByteBufferOverwriteTest 4 true
+ */
+
+import java.security.spec.AlgorithmParameterSpec;
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+
+public class CipherByteBufferOverwriteTest {
+
+    private static final boolean DEBUG = false;
+
+    private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";
+
+    // must be larger than the temp array size, i.e. 4096, hardcoded in
+    // javax.crypto.CipherSpi class
+    private static final int PLAINTEXT_SIZE = 8192;
+    // leave room for padding
+    private static final int CIPHERTEXT_BUFFER_SIZE = PLAINTEXT_SIZE + 32;
+
+    private static final SecretKey KEY = new SecretKeySpec(new byte[16], "AES");
+    private static final AlgorithmParameterSpec PARAMS =
+            new IvParameterSpec(new byte[16]);
+
+    private static ByteBuffer inBuf;
+    private static ByteBuffer outBuf;
+
+    private enum BufferType {
+        ALLOCATE, DIRECT, WRAP;
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        int offset = Integer.parseInt(args[0]);
+        boolean useRO = Boolean.parseBoolean(args[1]);
+
+        // an all-zeros plaintext is the easiest way to demonstrate the issue,
+        // but it fails with any plaintext, of course
+        byte[] expectedPT = new byte[PLAINTEXT_SIZE];
+        byte[] buf = new byte[offset + CIPHERTEXT_BUFFER_SIZE];
+        System.arraycopy(expectedPT, 0, buf, 0, PLAINTEXT_SIZE);
+
+        // generate expected cipher text using byte[] methods
+        Cipher c = Cipher.getInstance(TRANSFORMATION);
+        c.init(Cipher.ENCRYPT_MODE, KEY, PARAMS);
+        byte[] expectedCT = c.doFinal(expectedPT);
+
+        // Test#1: against ByteBuffer generated with allocate(int) call
+        prepareBuffers(BufferType.ALLOCATE, useRO, buf.length,
+                buf, 0, PLAINTEXT_SIZE, offset);
+
+        runTest(offset, expectedPT, expectedCT);
+        System.out.println("\tALLOCATE: passed");
+
+        // Test#2: against direct ByteBuffer
+        prepareBuffers(BufferType.DIRECT, useRO, buf.length,
+                buf, 0, PLAINTEXT_SIZE, offset);
+        System.out.println("\tDIRECT: passed");
+
+        runTest(offset, expectedPT, expectedCT);
+
+        // Test#3: against ByteBuffer wrapping existing array
+        prepareBuffers(BufferType.WRAP, useRO, buf.length,
+                buf, 0, PLAINTEXT_SIZE, offset);
+
+        runTest(offset, expectedPT, expectedCT);
+        System.out.println("\tWRAP: passed");
+
+        System.out.println("All Tests Passed");
+    }
+
+    private static void prepareBuffers(BufferType type,
+            boolean useRO, int bufSz, byte[] in, int inOfs, int inLen,
+            int outOfs) {
+        switch (type) {
+            case ALLOCATE:
+                outBuf = ByteBuffer.allocate(bufSz);
+                inBuf = outBuf.slice();
+                inBuf.put(in, inOfs, inLen);
+                inBuf.rewind();
+                inBuf.limit(inLen);
+                outBuf.position(outOfs);
+                break;
+            case DIRECT:
+                outBuf = ByteBuffer.allocateDirect(bufSz);
+                inBuf = outBuf.slice();
+                inBuf.put(in, inOfs, inLen);
+                inBuf.rewind();
+                inBuf.limit(inLen);
+                outBuf.position(outOfs);
+                break;
+            case WRAP:
+                if (in.length < bufSz) {
+                    throw new RuntimeException("ERROR: Input buffer too small");
+                }
+                outBuf = ByteBuffer.wrap(in);
+                inBuf = ByteBuffer.wrap(in, inOfs, inLen);
+                outBuf.position(outOfs);
+                break;
+        }
+        if (useRO) {
+            inBuf = inBuf.asReadOnlyBuffer();
+        }
+        if (DEBUG) {
+            System.out.println("inBuf, pos = " + inBuf.position() +
+                ", capacity = " + inBuf.capacity() +
+                ", limit = " + inBuf.limit() +
+                ", remaining = " + inBuf.remaining());
+            System.out.println("outBuf, pos = " + outBuf.position() +
+                ", capacity = " + outBuf.capacity() +
+                ", limit = " + outBuf.limit() +
+                ", remaining = " + outBuf.remaining());
+        }
+    }
+
+    private static void runTest(int ofs, byte[] expectedPT, byte[] expectedCT)
+            throws Exception {
+
+        Cipher c = Cipher.getInstance(TRANSFORMATION);
+        c.init(Cipher.ENCRYPT_MODE, KEY, PARAMS);
+        int ciphertextSize = c.doFinal(inBuf, outBuf);
+
+        // read out the encrypted result
+        outBuf.position(ofs);
+        byte[] finalCT = new byte[ciphertextSize];
+        if (DEBUG) {
+            System.out.println("runTest, ciphertextSize = " + ciphertextSize);
+            System.out.println("runTest, ofs = " + ofs +
+                ", remaining = " + finalCT.length +
+                ", limit = " + outBuf.limit());
+        }
+        outBuf.get(finalCT);
+
+        if (!Arrays.equals(finalCT, expectedCT)) {
+            throw new Exception("ERROR: Ciphertext does not match");
+        }
+
+        // now do decryption
+        outBuf.position(ofs);
+        outBuf.limit(ofs + ciphertextSize);
+
+        c.init(Cipher.DECRYPT_MODE, KEY, PARAMS);
+        ByteBuffer finalPTBuf = ByteBuffer.allocate(
+                c.getOutputSize(outBuf.remaining()));
+        c.doFinal(outBuf, finalPTBuf);
+
+        // read out the decrypted result
+        finalPTBuf.flip();
+        byte[] finalPT = new byte[finalPTBuf.remaining()];
+        finalPTBuf.get(finalPT);
+
+        if (!Arrays.equals(finalPT, expectedPT)) {
+            throw new Exception("ERROR: Plaintext does not match");
+        }
+    }
+}
+
--- a/test/jdk/sun/net/www/protocol/file/DirPermissionDenied.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/test/jdk/sun/net/www/protocol/file/DirPermissionDenied.java	Mon Jul 15 14:31:28 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -90,8 +90,12 @@
     }
 
     @AfterTest
-    public void tearDown() throws IOException {
+    public void tearDown() throws Throwable {
+        // add read permission to ensure the dir removable
+        ProcessTools.executeCommand("chmod", "733", TEST_DIR.toString())
+                    .outputTo(System.out)
+                    .errorTo(System.out)
+                    .shouldHaveExitValue(0);
         FileUtils.deleteFileIfExistsWithRetry(TEST_DIR);
     }
 }
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/x509/X509CertImpl/ECSigParamsVerifyWithCert.java	Mon Jul 15 14:31:28 2019 +0530
@@ -0,0 +1,91 @@
+/*
+ * 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 8225745
+ * @summary Ensure ECDSA certificates with signature algorithm parameters
+ *          can be verified successfully
+ * @run main ECSigParamsVerifyWithCert
+ */
+import java.io.*;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+
+public class ECSigParamsVerifyWithCert {
+
+    // ECDSA certificate with non-null signature parameters, i.e.
+    // Signature Algorithm: SHA256withECDSA, params unparsed,
+    // OID = 1.2.840.10045.4.3.2
+    private static String ecEntityWithSigParamsStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIICXjCCAfmgAwIBAgIIHzREzASpiTowFAYIKoZIzj0EAwIGCCqGSM49AwEHMGAx\n" +
+        "IzAhBgNVBAMMGkNvcmRhIE5vZGUgSW50ZXJtZWRpYXRlIENBMQswCQYDVQQKDAJS\n" +
+        "MzEOMAwGA1UECwwFY29yZGExDzANBgNVBAcMBkxvbmRvbjELMAkGA1UEBhMCVUsw\n" +
+        "HhcNMTgwNjI1MDAwMDAwWhcNMjcwNTIwMDAwMDAwWjAxMQswCQYDVQQGEwJHQjEP\n" +
+        "MA0GA1UEBwwGTG9uZG9uMREwDwYDVQQKDAhNZWdhQ29ycDBZMBMGByqGSM49AgEG\n" +
+        "CCqGSM49AwEHA0IABG2VjWPPFnGVka3G9++Sz/GPRkAkht4BDoYTlkRz8hpwr4iu\n" +
+        "fU6NlReirLOB4LBLZcmp16xm4RYsN5ouTS7Z3wKjgcEwgb4wHQYDVR0OBBYEFBnY\n" +
+        "sikYpaSL9U8FUygbqN3sIvMOMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgGG\n" +
+        "MCMGA1UdJQQcMBoGCCsGAQUFBwMBBggrBgEFBQcDAgYEVR0lADARBgorBgEEAYOK\n" +
+        "YgEBBAMCAQQwRwYDVR0eAQH/BD0wO6A3MDWkMzAxMQswCQYDVQQGEwJHQjEPMA0G\n" +
+        "A1UEBwwGTG9uZG9uMREwDwYDVQQKDAhNZWdhQ29ycKEAMBQGCCqGSM49BAMCBggq\n" +
+        "hkjOPQMBBwNJADBGAiEAos+QzgwwH2hfOtrlLncHnoT2YXXHP4q5h01T2DRmjcMC\n" +
+        "IQDa3xZz7CkyyNO1+paAthiNVIlGwwnl4UxuYMwkAiWACw==\n" +
+        "-----END CERTIFICATE-----\n";
+
+    // ECDSA certificate with only signature algorithm oid, no parameters, i.e.
+    // Signature Algorithm: SHA256withECDSA, OID = 1.2.840.10045.4.3.2
+    private static String ecSigner =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIICETCCAbigAwIBAgIIaHr3YTnjT8YwCgYIKoZIzj0EAwIwWDEbMBkGA1UEAwwS\n" +
+        "Q29yZGEgTm9kZSBSb290IENBMQswCQYDVQQKDAJSMzEOMAwGA1UECwwFY29yZGEx\n" +
+        "DzANBgNVBAcMBkxvbmRvbjELMAkGA1UEBhMCVUswHhcNMTcwNTIyMDAwMDAwWhcN\n" +
+        "MjcwNTIwMDAwMDAwWjBgMSMwIQYDVQQDDBpDb3JkYSBOb2RlIEludGVybWVkaWF0\n" +
+        "ZSBDQTELMAkGA1UECgwCUjMxDjAMBgNVBAsMBWNvcmRhMQ8wDQYDVQQHDAZMb25k\n" +
+        "b24xCzAJBgNVBAYTAlVLMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEA8veoCbh\n" +
+        "ZmazlyIFWjExBd8ru5OYdFW9Z9ZD5BVg/dswdKC4dlHMHe/sQ4TxFmkYNqf7DTTt\n" +
+        "ePtdHT7Eb1LGYKNkMGIwHQYDVR0OBBYEFOvuLjAVKUCuGZge2G/jfX8HosITMAsG\n" +
+        "A1UdDwQEAwIBhjAjBgNVHSUEHDAaBggrBgEFBQcDAQYIKwYBBQUHAwIGBFUdJQAw\n" +
+        "DwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNHADBEAiB6wr47tuC71qi6+FbY\n" +
+        "XYDTvK+QmAi5ywkFc95I9fPLaQIgIM+nNNQ50NwK610h3bG37XC2tGu+A7Dhtt2Q\n" +
+        "4nDqu30=\n" +
+        "-----END CERTIFICATE-----\n";
+
+    public static void main(String[] args) throws Exception {
+        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+        ByteArrayInputStream is
+                = new ByteArrayInputStream(ecEntityWithSigParamsStr.getBytes());
+        X509Certificate ecEntityWithSigParams = (X509Certificate)certFactory.generateCertificate(is);
+        is = new ByteArrayInputStream(ecSigner.getBytes());
+        X509Certificate ecSigner = (X509Certificate)certFactory.generateCertificate(is);
+
+        try {
+            ecEntityWithSigParams.verify(ecSigner.getPublicKey());
+            System.out.println("Test Passed: EC Cert verified");
+        } catch (Exception e) {
+            System.out.println("Failed, cannot verify EC certificate with sig params");
+            throw e;
+        }
+    }
+}
--- a/test/nashorn/script/nosecurity/logcoverage.js	Thu Jul 11 15:42:53 2019 +0530
+++ b/test/nashorn/script/nosecurity/logcoverage.js	Mon Jul 15 14:31:28 2019 +0530
@@ -27,7 +27,7 @@
  *
  * @test
  * @fork
- * @option -Dnashorn.debug=true
+ * @option -Dnashorn.debug=true -ot=true
  */
 
 /*
@@ -98,8 +98,8 @@
     print("check ok!");
 }
 
-str = runScriptEngine(["--log=codegen,compiler=finest,methodhandles=finest,fields=finest"], __DIR__ + "../basic/NASHORN-19.js");
-str += runScriptEngine(["--log=codegen,compiler=finest,methodhandles=finest,fields=finest"], __DIR__ + "../basic/varargs.js");
+str = runScriptEngine(["--log=codegen,compiler=finest,methodhandles=finest,fields=finest", "-ot=true"], __DIR__ + "../basic/NASHORN-19.js");
+str += runScriptEngine(["--log=codegen,compiler=finest,methodhandles=finest,fields=finest", "-ot=true"], __DIR__ + "../basic/varargs.js");
 
 check(str, methodsCalled);
 check(str, ['return', 'get', 'set', '[fields]']);
--- a/test/nashorn/src/jdk/nashorn/internal/runtime/doubleconv/test/BignumDtoaTest.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/test/nashorn/src/jdk/nashorn/internal/runtime/doubleconv/test/BignumDtoaTest.java	Mon Jul 15 14:31:28 2019 +0530
@@ -69,7 +69,7 @@
 import static org.testng.Assert.assertTrue;
 
 /**
- * FastDtoa tests
+ * BignumDtoa tests
  */
 @SuppressWarnings("javadoc")
 public class BignumDtoaTest {
@@ -220,6 +220,11 @@
         assertEquals(299, buffer.getDecimalPoint());
         buffer.reset();
 
+        DoubleConversion.bignumDtoa(1e-23, DtoaMode.SHORTEST, 0, buffer);
+        assertEquals("1", buffer.getRawDigits());
+        assertEquals(-22, buffer.getDecimalPoint());
+        buffer.reset();
+
         final long smallest_normal64 = 0x0010000000000000L;
         double v = Double.longBitsToDouble(smallest_normal64);
         DoubleConversion.bignumDtoa(v, DtoaMode.SHORTEST, 0, buffer);
--- a/test/nashorn/src/jdk/nashorn/internal/runtime/doubleconv/test/FixedDtoaTest.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/test/nashorn/src/jdk/nashorn/internal/runtime/doubleconv/test/FixedDtoaTest.java	Mon Jul 15 14:31:28 2019 +0530
@@ -624,6 +624,11 @@
         assertEquals("1000000000000000128", buffer.getRawDigits());
         assertEquals(19, buffer.getDecimalPoint());
         buffer.reset();
+
+        assertTrue(DoubleConversion.fixedDtoa(2.10861548515811875e+15, 17, buffer));
+        assertEquals("210861548515811875", buffer.getRawDigits());
+        assertEquals(16, buffer.getDecimalPoint());
+        buffer.reset();
     }
 
 
--- a/test/nashorn/src/jdk/nashorn/internal/runtime/doubleconv/test/IeeeDoubleTest.java	Thu Jul 11 15:42:53 2019 +0530
+++ b/test/nashorn/src/jdk/nashorn/internal/runtime/doubleconv/test/IeeeDoubleTest.java	Mon Jul 15 14:31:28 2019 +0530
@@ -41,7 +41,11 @@
 import static org.testng.Assert.assertTrue;
 
 /**
- * Ieee class tests
+ * IeeeDouble tests
+ *
+ * @test
+ * @modules jdk.scripting.nashorn/jdk.nashorn.internal.runtime.doubleconv:open
+ * @run testng jdk.nashorn.internal.runtime.doubleconv.test.IeeeDoubleTest
  */
 @SuppressWarnings({"unchecked", "javadoc"})
 public class IeeeDoubleTest {