Merge
authorjjg
Fri, 11 Jan 2019 11:42:23 -0800
changeset 53287 6b963dd96b5e
parent 53286 5fa71cce89eb (current diff)
parent 53285 fa2f191e72f5 (diff)
child 53288 f0490430ef7a
Merge
--- a/.hgtags	Fri Jan 11 11:32:00 2019 -0800
+++ b/.hgtags	Fri Jan 11 11:42:23 2019 -0800
@@ -529,3 +529,4 @@
 7d4397b43fa305806160785a4c7210600d59581a jdk-12+24
 7496df94b3b79f3da53925d2d137317715f11d97 jdk-12+25
 de9fd809bb475401aad188eab2264226788aad81 jdk-12+26
+f15d443f97318e9b40e6f451e327ff69ed4ec361 jdk-12+27
--- a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -269,7 +269,7 @@
       // when called via a c2i.
 
       // Pass initial_caller_sp to framemanager.
-      __ mr(R21_tmp1, R1_SP);
+      __ mr(R21_sender_SP, R1_SP);
 
       // Do a light-weight C-call here, r_new_arg_entry holds the address
       // of the interpreter entry point (frame manager or native entry)
--- a/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -532,14 +532,8 @@
   // these parameters the pre-barrier does not generate
   // the load of the previous value.
 
-  // Restore caller sp for c2i case.
-#ifdef ASSERT
-  __ ld(R9_ARG7, 0, R1_SP);
-  __ ld(R10_ARG8, 0, R21_sender_SP);
-  __ cmpd(CCR0, R9_ARG7, R10_ARG8);
-  __ asm_assert_eq("backlink", 0x544);
-#endif // ASSERT
-  __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started.
+  // Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted).
+  __ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0);
 
   __ blr();
 
@@ -835,8 +829,13 @@
   assert(StubRoutines::throw_StackOverflowError_entry() != NULL, "generated in wrong order");
   __ load_const_optimized(Rscratch1, (StubRoutines::throw_StackOverflowError_entry()), R0);
   __ mtctr(Rscratch1);
-  // Restore caller_sp.
+  // Restore caller_sp (c2i adapter may exist, but no shrinking of interpreted caller frame).
 #ifdef ASSERT
+  Label frame_not_shrunk;
+  __ cmpld(CCR0, R1_SP, R21_sender_SP);
+  __ ble(CCR0, frame_not_shrunk);
+  __ stop("frame shrunk", 0x546);
+  __ bind(frame_not_shrunk);
   __ ld(Rscratch1, 0, R1_SP);
   __ ld(R0, 0, R21_sender_SP);
   __ cmpd(CCR0, R0, Rscratch1);
@@ -1155,15 +1154,6 @@
     }
   }
 
-  // Pop c2i arguments (if any) off when we return.
-#ifdef ASSERT
-  __ ld(R9_ARG7, 0, R1_SP);
-  __ ld(R10_ARG8, 0, R21_sender_SP);
-  __ cmpd(CCR0, R9_ARG7, R10_ARG8);
-  __ asm_assert_eq("backlink", 0x545);
-#endif // ASSERT
-  __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started.
-
   if (use_instruction) {
     switch (kind) {
       case Interpreter::java_lang_math_sqrt: __ fsqrt(F1_RET, F1);          break;
@@ -1188,6 +1178,8 @@
     __ restore_LR_CR(R0);
   }
 
+  // Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted).
+  __ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0);
   __ blr();
 
   __ flush();
@@ -1843,8 +1835,8 @@
     StubRoutines::ppc64::generate_load_crc_table_addr(_masm, table);
     __ kernel_crc32_singleByte(crc, data, dataLen, table, tmp, true);
 
-    // Restore caller sp for c2i case and return.
-    __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started.
+    // Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted).
+    __ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0);
     __ blr();
 
     // Generate a vanilla native entry as the slow path.
@@ -1931,8 +1923,8 @@
     // code compactness.
     __ kernel_crc32_1word(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, tc3, true);
 
-    // Restore caller sp for c2i case and return.
-    __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started.
+    // Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted).
+    __ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0);
     __ blr();
 
     // Generate a vanilla native entry as the slow path.
@@ -2019,8 +2011,8 @@
     // code compactness.
     __ kernel_crc32_1word(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, tc3, false);
 
-    // Restore caller sp for c2i case and return.
-    __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started.
+    // Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted).
+    __ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0);
     __ blr();
 
     BLOCK_COMMENT("} CRC32C_update{Bytes|DirectByteBuffer}");
--- a/src/hotspot/share/ci/ciEnv.hpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/ci/ciEnv.hpp	Fri Jan 11 11:42:23 2019 -0800
@@ -46,6 +46,7 @@
 
   friend class CompileBroker;
   friend class Dependencies;  // for get_object, during logging
+  friend class PrepareExtraDataClosure;
 
 private:
   Arena*           _arena;       // Alias for _ciEnv_arena except in init_shared_objects()
@@ -188,6 +189,10 @@
     }
   }
 
+  ciMetadata* cached_metadata(Metadata* o) {
+    return _factory->cached_metadata(o);
+  }
+
   ciInstance* get_instance(oop o) {
     if (o == NULL) return NULL;
     return get_object(o)->as_instance();
--- a/src/hotspot/share/ci/ciMethodData.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/ci/ciMethodData.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -78,10 +78,81 @@
   _parameters = NULL;
 }
 
+// Check for entries that reference an unloaded method
+class PrepareExtraDataClosure : public CleanExtraDataClosure {
+  MethodData*            _mdo;
+  uint64_t               _safepoint_counter;
+  GrowableArray<Method*> _uncached_methods;
+
+public:
+  PrepareExtraDataClosure(MethodData* mdo)
+    : _mdo(mdo),
+      _safepoint_counter(SafepointSynchronize::safepoint_counter()),
+      _uncached_methods()
+  { }
+
+  bool is_live(Method* m) {
+    if (!m->method_holder()->is_loader_alive()) {
+      return false;
+    }
+    if (CURRENT_ENV->cached_metadata(m) == NULL) {
+      // Uncached entries need to be pre-populated.
+      _uncached_methods.append(m);
+    }
+    return true;
+  }
+
+  bool has_safepointed() {
+    return SafepointSynchronize::safepoint_counter() != _safepoint_counter;
+  }
+
+  bool finish() {
+    if (_uncached_methods.length() == 0) {
+      // Preparation finished iff all Methods* were already cached.
+      return true;
+    }
+    // Holding locks through safepoints is bad practice.
+    MutexUnlocker mu(_mdo->extra_data_lock());
+    for (int i = 0; i < _uncached_methods.length(); ++i) {
+      if (has_safepointed()) {
+        // The metadata in the growable array might contain stale
+        // entries after a safepoint.
+        return false;
+      }
+      Method* method = _uncached_methods.at(i);
+      // Populating ciEnv caches may cause safepoints due
+      // to taking the Compile_lock with safepoint checks.
+      (void)CURRENT_ENV->get_method(method);
+    }
+    return false;
+  }
+};
+
+void ciMethodData::prepare_metadata() {
+  MethodData* mdo = get_MethodData();
+
+  for (;;) {
+    ResourceMark rm;
+    PrepareExtraDataClosure cl(mdo);
+    mdo->clean_extra_data(&cl);
+    if (cl.finish()) {
+      // When encountering uncached metadata, the Compile_lock might be
+      // acquired when creating ciMetadata handles, causing safepoints
+      // which requires a new round of preparation to clean out potentially
+      // new unloading metadata.
+      return;
+    }
+  }
+}
+
 void ciMethodData::load_extra_data() {
   MethodData* mdo = get_MethodData();
-
   MutexLocker ml(mdo->extra_data_lock());
+  // Deferred metadata cleaning due to concurrent class unloading.
+  prepare_metadata();
+  // After metadata preparation, there is no stale metadata,
+  // and no safepoints can introduce more stale metadata.
+  NoSafepointVerifier no_safepoint;
 
   // speculative trap entries also hold a pointer to a Method so need to be translated
   DataLayout* dp_src  = mdo->extra_data_base();
@@ -94,7 +165,7 @@
     // New traps in the MDO may have been added since we copied the
     // data (concurrent deoptimizations before we acquired
     // extra_data_lock above) or can be removed (a safepoint may occur
-    // in the translate_from call below) as we translate the copy:
+    // in the prepare_metadata call above) as we translate the copy:
     // update the copy as we go.
     int tag = dp_src->tag();
     if (tag != DataLayout::arg_info_data_tag) {
@@ -105,11 +176,7 @@
     case DataLayout::speculative_trap_data_tag: {
       ciSpeculativeTrapData data_dst(dp_dst);
       SpeculativeTrapData   data_src(dp_src);
-
-      { // During translation a safepoint can happen or VM lock can be taken (e.g., Compile_lock).
-        MutexUnlocker ml(mdo->extra_data_lock());
-        data_dst.translate_from(&data_src);
-      }
+      data_dst.translate_from(&data_src);
       break;
     }
     case DataLayout::bit_data_tag:
--- a/src/hotspot/share/ci/ciMethodData.hpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/ci/ciMethodData.hpp	Fri Jan 11 11:42:23 2019 -0800
@@ -475,6 +475,7 @@
     return (address) _data;
   }
 
+  void prepare_metadata();
   void load_extra_data();
   ciProfileData* bci_to_extra_data(int bci, ciMethod* m, bool& two_free_slots);
 
--- a/src/hotspot/share/ci/ciObjectFactory.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/ci/ciObjectFactory.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -266,6 +266,24 @@
 }
 
 // ------------------------------------------------------------------
+// ciObjectFactory::cached_metadata
+//
+// Get the ciMetadata corresponding to some Metadata. If the ciMetadata has
+// already been created, it is returned. Otherwise, null is returned.
+ciMetadata* ciObjectFactory::cached_metadata(Metadata* key) {
+  ASSERT_IN_VM;
+
+  bool found = false;
+  int index = _ci_metadata->find_sorted<Metadata*, ciObjectFactory::metadata_compare>(key, found);
+
+  if (!found) {
+    return NULL;
+  }
+  return _ci_metadata->at(index)->as_metadata();
+}
+
+
+// ------------------------------------------------------------------
 // ciObjectFactory::get_metadata
 //
 // Get the ciMetadata corresponding to some Metadata. If the ciMetadata has
--- a/src/hotspot/share/ci/ciObjectFactory.hpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/ci/ciObjectFactory.hpp	Fri Jan 11 11:42:23 2019 -0800
@@ -100,6 +100,7 @@
   // Get the ciObject corresponding to some oop.
   ciObject* get(oop key);
   ciMetadata* get_metadata(Metadata* key);
+  ciMetadata* cached_metadata(Metadata* key);
   ciSymbol* get_symbol(Symbol* key);
 
   // Get the ciSymbol corresponding to one of the vmSymbols.
--- a/src/hotspot/share/classfile/systemDictionaryShared.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/classfile/systemDictionaryShared.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -503,26 +503,33 @@
 Handle SystemDictionaryShared::get_shared_protection_domain(Handle class_loader,
                                                             ModuleEntry* mod, TRAPS) {
   ClassLoaderData *loader_data = mod->loader_data();
-  Handle protection_domain;
   if (mod->shared_protection_domain() == NULL) {
     Symbol* location = mod->location();
     if (location != NULL) {
-      Handle url_string = java_lang_String::create_from_symbol(
-                                 location, CHECK_(protection_domain));
+      Handle location_string = java_lang_String::create_from_symbol(
+                                     location, CHECK_NH);
+      Handle url;
       JavaValue result(T_OBJECT);
-      Klass* classLoaders_klass =
-        SystemDictionary::jdk_internal_loader_ClassLoaders_klass();
-      JavaCalls::call_static(&result, classLoaders_klass, vmSymbols::toFileURL_name(),
+      if (location->starts_with("jrt:/")) {
+        url = JavaCalls::construct_new_instance(SystemDictionary::URL_klass(),
+                                                vmSymbols::string_void_signature(),
+                                                location_string, CHECK_NH);
+      } else {
+        Klass* classLoaders_klass =
+          SystemDictionary::jdk_internal_loader_ClassLoaders_klass();
+        JavaCalls::call_static(&result, classLoaders_klass, vmSymbols::toFileURL_name(),
                                vmSymbols::toFileURL_signature(),
-                               url_string, CHECK_(protection_domain));
-      Handle url = Handle(THREAD, (oop)result.get_jobject());
+                               location_string, CHECK_NH);
+        url = Handle(THREAD, (oop)result.get_jobject());
+      }
 
-      Handle pd = get_protection_domain_from_classloader(class_loader, url, THREAD);
+      Handle pd = get_protection_domain_from_classloader(class_loader, url,
+                                                         CHECK_NH);
       mod->set_shared_protection_domain(loader_data, pd);
     }
   }
 
-  protection_domain = Handle(THREAD, mod->shared_protection_domain());
+  Handle protection_domain(THREAD, mod->shared_protection_domain());
   assert(protection_domain.not_null(), "sanity");
   return protection_domain;
 }
--- a/src/hotspot/share/code/nmethod.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/code/nmethod.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -1159,6 +1159,19 @@
   }
 }
 
+void nmethod::unlink_from_method(bool acquire_lock) {
+  // We need to check if both the _code and _from_compiled_code_entry_point
+  // refer to this nmethod because there is a race in setting these two fields
+  // in Method* as seen in bugid 4947125.
+  // If the vep() points to the zombie nmethod, the memory for the nmethod
+  // could be flushed and the compiler and vtable stubs could still call
+  // through it.
+  if (method() != NULL && (method()->code() == this ||
+                           method()->from_compiled_entry() == verified_entry_point())) {
+    method()->clear_code(acquire_lock);
+  }
+}
+
 /**
  * Common functionality for both make_not_entrant and make_zombie
  */
@@ -1246,17 +1259,7 @@
     JVMCI_ONLY(maybe_invalidate_installed_code());
 
     // Remove nmethod from method.
-    // We need to check if both the _code and _from_compiled_code_entry_point
-    // refer to this nmethod because there is a race in setting these two fields
-    // in Method* as seen in bugid 4947125.
-    // If the vep() points to the zombie nmethod, the memory for the nmethod
-    // could be flushed and the compiler and vtable stubs could still call
-    // through it.
-    if (method() != NULL && (method()->code() == this ||
-                             method()->from_compiled_entry() == verified_entry_point())) {
-      HandleMark hm;
-      method()->clear_code(false /* already owns Patching_lock */);
-    }
+    unlink_from_method(false /* already owns Patching_lock */);
   } // leave critical region under Patching_lock
 
 #ifdef ASSERT
--- a/src/hotspot/share/code/nmethod.hpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/code/nmethod.hpp	Fri Jan 11 11:42:23 2019 -0800
@@ -376,6 +376,8 @@
 
   int   comp_level() const                        { return _comp_level; }
 
+  void unlink_from_method(bool acquire_lock);
+
   // Support for oops in scopes and relocs:
   // Note: index 0 is reserved for null.
   oop   oop_at(int index) const;
--- a/src/hotspot/share/gc/shared/barrierSet.hpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/gc/shared/barrierSet.hpp	Fri Jan 11 11:42:23 2019 -0800
@@ -275,11 +275,7 @@
     template <typename T>
     static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
                                       arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
-                                      size_t length) {
-      return Raw::oop_arraycopy(src_obj, src_offset_in_bytes, src_raw,
-                                dst_obj, dst_offset_in_bytes, dst_raw,
-                                length);
-    }
+                                      size_t length);
 
     // Off-heap oop accesses. These accessors get resolved when
     // IN_HEAP is not set (e.g. when using the NativeAccess API), it is
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shared/barrierSet.inline.hpp	Fri Jan 11 11:42:23 2019 -0800
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef SHARE_VM_GC_SHARED_BARRIERSET_INLINE_HPP
+#define SHARE_VM_GC_SHARED_BARRIERSET_INLINE_HPP
+
+#include "gc/shared/barrierSet.hpp"
+#include "oops/accessDecorators.hpp"
+#include "oops/arrayOop.hpp"
+#include "oops/compressedOops.inline.hpp"
+#include "oops/objArrayOop.inline.hpp"
+#include "oops/oop.hpp"
+
+template <DecoratorSet decorators, typename BarrierSetT>
+template <typename T>
+inline bool BarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
+                                                                                      arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
+                                                                                      size_t length) {
+  T* src = arrayOopDesc::obj_offset_to_raw(src_obj, src_offset_in_bytes, src_raw);
+  T* dst = arrayOopDesc::obj_offset_to_raw(dst_obj, dst_offset_in_bytes, dst_raw);
+
+  if (!HasDecorator<decorators, ARRAYCOPY_CHECKCAST>::value) {
+    // Covariant, copy without checks
+    return Raw::oop_arraycopy(NULL, 0, src, NULL, 0, dst, length);
+  }
+
+  // Copy each element with checking casts
+  Klass* const dst_klass = objArrayOop(dst_obj)->element_klass();
+  for (const T* const end = src + length; src < end; src++, dst++) {
+    const T elem = *src;
+    if (!oopDesc::is_instanceof_or_null(CompressedOops::decode(elem), dst_klass)) {
+      return false;
+    }
+    *dst = elem;
+  }
+
+  return true;
+}
+
+#endif // SHARE_VM_GC_SHARED_BARRIERSET_INLINE_HPP
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -983,7 +983,7 @@
   Node* c = new ProjNode(call,TypeFunc::Control);
   c = igvn.transform(c);
   Node* m = new ProjNode(call, TypeFunc::Memory);
-  c = igvn.transform(m);
+  m = igvn.transform(m);
 
   Node* dest = ac->in(ArrayCopyNode::Dest);
   assert(dest->is_AddP(), "bad input");
--- a/src/hotspot/share/gc/z/zBarrierSetNMethod.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/gc/z/zBarrierSetNMethod.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -42,6 +42,11 @@
   }
 
   if (nm->is_unloading()) {
+    // We don't need to take the lock when unlinking nmethods from
+    // the Method, because it is only concurrently unlinked by
+    // the entry barrier, which acquires the per nmethod lock.
+    nm->unlink_from_method(false /* acquire_lock */);
+
     // We can end up calling nmethods that are unloading
     // since we clear compiled ICs lazily. Returning false
     // will re-resovle the call and update the compiled IC.
--- a/src/hotspot/share/gc/z/zNMethodTable.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/gc/z/zNMethodTable.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -611,15 +611,20 @@
       return;
     }
 
+    ZLocker<ZReentrantLock> locker(ZNMethodTable::lock_for_nmethod(nm));
+
     if (nm->is_unloading()) {
       // Unlinking of the dependencies must happen before the
       // handshake separating unlink and purge.
       nm->flush_dependencies(false /* delete_immediately */);
+
+      // We don't need to take the lock when unlinking nmethods from
+      // the Method, because it is only concurrently unlinked by
+      // the entry barrier, which acquires the per nmethod lock.
+      nm->unlink_from_method(false /* acquire_lock */);
       return;
     }
 
-    ZLocker<ZReentrantLock> locker(ZNMethodTable::lock_for_nmethod(nm));
-
     // Heal oops and disarm
     ZNMethodOopClosure cl;
     ZNMethodTable::entry_oops_do(entry, &cl);
--- a/src/hotspot/share/oops/access.inline.hpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/oops/access.inline.hpp	Fri Jan 11 11:42:23 2019 -0800
@@ -25,6 +25,7 @@
 #ifndef SHARE_OOPS_ACCESS_INLINE_HPP
 #define SHARE_OOPS_ACCESS_INLINE_HPP
 
+#include "gc/shared/barrierSet.inline.hpp"
 #include "gc/shared/barrierSetConfig.inline.hpp"
 #include "oops/access.hpp"
 #include "oops/accessBackend.inline.hpp"
--- a/src/hotspot/share/oops/instanceKlass.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/oops/instanceKlass.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -2186,6 +2186,7 @@
   for (int m = 0; m < methods()->length(); m++) {
     MethodData* mdo = methods()->at(m)->method_data();
     if (mdo != NULL) {
+      MutexLockerEx ml(SafepointSynchronize::is_at_safepoint() ? NULL : mdo->extra_data_lock());
       mdo->clean_method_data(/*always_clean*/false);
     }
   }
--- a/src/hotspot/share/oops/methodData.cpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/oops/methodData.cpp	Fri Jan 11 11:42:23 2019 -0800
@@ -1653,11 +1653,6 @@
   }
 }
 
-class CleanExtraDataClosure : public StackObj {
-public:
-  virtual bool is_live(Method* m) = 0;
-};
-
 // Check for entries that reference an unloaded method
 class CleanExtraDataKlassClosure : public CleanExtraDataClosure {
   bool _always_clean;
--- a/src/hotspot/share/oops/methodData.hpp	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/hotspot/share/oops/methodData.hpp	Fri Jan 11 11:42:23 2019 -0800
@@ -1943,7 +1943,11 @@
 // adjusted in the event of a change in control flow.
 //
 
-class CleanExtraDataClosure;
+class CleanExtraDataClosure : public StackObj {
+public:
+  virtual bool is_live(Method* m) = 0;
+};
+
 
 class MethodData : public Metadata {
   friend class VMStructs;
@@ -2116,11 +2120,12 @@
   static bool profile_parameters_jsr292_only();
   static bool profile_all_parameters();
 
-  void clean_extra_data(CleanExtraDataClosure* cl);
   void clean_extra_data_helper(DataLayout* dp, int shift, bool reset = false);
   void verify_extra_data_clean(CleanExtraDataClosure* cl);
 
 public:
+  void clean_extra_data(CleanExtraDataClosure* cl);
+
   static int header_size() {
     return sizeof(MethodData)/wordSize;
   }
--- a/src/java.base/share/classes/java/lang/Class.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/java.base/share/classes/java/lang/Class.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -3420,8 +3420,8 @@
         StringBuilder sb = new StringBuilder();
         sb.append(getName() + "." + name + "(");
         if (argTypes != null) {
-            Stream.of(argTypes).map(c -> {return (c == null) ? "null" : c.getName();}).
-                collect(Collectors.joining(","));
+            sb.append(Stream.of(argTypes).map(c -> {return (c == null) ? "null" : c.getName();}).
+                      collect(Collectors.joining(",")));
         }
         sb.append(")");
         return sb.toString();
--- a/src/java.base/share/classes/java/lang/String.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/java.base/share/classes/java/lang/String.java	Fri Jan 11 11:42:23 2019 -0800
@@ -2813,8 +2813,7 @@
      * lines are then concatenated and returned.
      * <p>
      * If {@code n > 0} then {@code n} spaces (U+0020) are inserted at the
-     * beginning of each line. {@link String#isBlank() Blank lines} are
-     * unaffected.
+     * beginning of each line.
      * <p>
      * If {@code n < 0} then up to {@code n}
      * {@link Character#isWhitespace(int) white space characters} are removed
@@ -2849,7 +2848,7 @@
                                              : lines();
         if (n > 0) {
             final String spaces = " ".repeat(n);
-            stream = stream.map(s -> s.isBlank() ? s : spaces + s);
+            stream = stream.map(s -> spaces + s);
         } else if (n == Integer.MIN_VALUE) {
             stream = stream.map(s -> s.stripLeading());
         } else if (n < 0) {
--- a/src/java.base/share/classes/java/lang/invoke/VarHandle.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/java.base/share/classes/java/lang/invoke/VarHandle.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1865,35 +1865,6 @@
     }
 
     /**
-     * Compare this {@linkplain VarHandle} with another object for equality.
-     * Two {@linkplain VarHandle}s are considered equal if they both describe the
-     * same instance field, both describe the same static field, both describe
-     * array elements for arrays with the same component type, or both describe
-     * the same component of an off-heap structure.
-     *
-     * @param o the other object
-     * @return Whether this {@linkplain VarHandle} is equal to the other object
-     */
-    @Override
-    public final boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        VarHandle that = (VarHandle) o;
-        return accessModeType(AccessMode.GET).equals(that.accessModeType(AccessMode.GET)) &&
-               internalEquals(that);
-    }
-
-    abstract boolean internalEquals(VarHandle vh);
-
-    @Override
-    public final int hashCode() {
-        return 31 * accessModeType(AccessMode.GET).hashCode() + internalHashCode();
-    }
-
-    abstract int internalHashCode();
-
-    /**
      * Returns a compact textual description of this {@linkplain VarHandle},
      * including the type of variable described, and a description of its coordinates.
      *
--- a/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -64,17 +64,6 @@
         }
 
         @Override
-        final boolean internalEquals(VarHandle vh) {
-            FieldInstanceReadOnly that = (FieldInstanceReadOnly) vh;
-            return fieldOffset == that.fieldOffset;
-        }
-
-        @Override
-        final int internalHashCode() {
-            return Long.hashCode(fieldOffset);
-        }
-
-        @Override
         public Optional<VarHandleDesc> describeConstable() {
             var receiverTypeRef = receiverType.describeConstable();
             var fieldTypeRef = {#if[Object]?fieldType:$type$.class}.describeConstable();
@@ -350,17 +339,6 @@
         }
 
         @Override
-        final boolean internalEquals(VarHandle vh) {
-            FieldStaticReadOnly that = (FieldStaticReadOnly) vh;
-            return base == that.base && fieldOffset == that.fieldOffset;
-        }
-
-        @Override
-        final int internalHashCode() {
-            return 31 * Long.hashCode(fieldOffset) + base.hashCode();
-        }
-
-        @Override
         public Optional<VarHandleDesc> describeConstable() {
             var fieldTypeRef = {#if[Object]?fieldType:$type$.class}.describeConstable();
             if (!fieldTypeRef.isPresent())
@@ -640,20 +618,6 @@
         }
 
         @Override
-        final boolean internalEquals(VarHandle vh) {
-            // Equality of access mode types of AccessMode.GET is sufficient for
-            // equality checks
-            return true;
-        }
-
-        @Override
-        final int internalHashCode() {
-            // The hash code of the access mode types of AccessMode.GET is
-            // sufficient for hash code generation
-            return 0;
-        }
-
-        @Override
         public Optional<VarHandleDesc> describeConstable() {
             var arrayTypeRef = {#if[Object]?arrayType:$type$[].class}.describeConstable();
             if (!arrayTypeRef.isPresent())
--- a/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -67,17 +67,6 @@
             super(form);
             this.be = be;
         }
-
-        @Override
-        final boolean internalEquals(VarHandle vh) {
-            ByteArrayViewVarHandle that = (ByteArrayViewVarHandle) vh;
-            return be == that.be;
-        }
-
-        @Override
-        final int internalHashCode() {
-            return Boolean.hashCode(be);
-        }
     }
 
     static final class ArrayHandle extends ByteArrayViewVarHandle {
--- a/src/java.naming/share/classes/com/sun/jndi/ldap/ext/StartTlsResponseImpl.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/java.naming/share/classes/com/sun/jndi/ldap/ext/StartTlsResponseImpl.java	Fri Jan 11 11:42:23 2019 -0800
@@ -288,7 +288,8 @@
      */
     public void setConnection(Connection ldapConnection, String hostname) {
         this.ldapConnection = ldapConnection;
-        this.hostname = (hostname != null) ? hostname : ldapConnection.host;
+        this.hostname = (hostname == null || hostname.isEmpty())
+            ? ldapConnection.host : hostname;
         originalInputStream = ldapConnection.inStream;
         originalOutputStream = ldapConnection.outStream;
     }
--- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java	Fri Jan 11 11:42:23 2019 -0800
@@ -185,7 +185,7 @@
             it.set(current);
         }
 
-        historyLoad = Instant.now();
+        historyLoad = Instant.MIN;
         loadHistory.forEach(line -> reader.getHistory().add(historyLoad, line));
 
         in = reader;
--- a/test/hotspot/jtreg/ProblemList.txt	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/hotspot/jtreg/ProblemList.txt	Fri Jan 11 11:42:23 2019 -0800
@@ -85,7 +85,6 @@
 
 runtime/appcds/javaldr/GCSharedStringsDuringDump.java 8208778 macosx-x64
 runtime/appcds/javaldr/GCDuringDump.java 8208778 macosx-x64
-runtime/appcds/jigsaw/classpathtests/EmptyClassInBootClassPath.java 8213299 generic-all
 runtime/CompressedOops/UseCompressedOops.java 8079353 generic-all
 runtime/handshake/HandshakeWalkSuspendExitTest.java 8214174 generic-all
 runtime/RedefineTests/RedefineRunningMethods.java 8208778 macosx-x64
--- a/test/hotspot/jtreg/compiler/interpreter/TestVerifyStackAfterDeopt.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/hotspot/jtreg/compiler/interpreter/TestVerifyStackAfterDeopt.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,7 @@
  * @bug 8209825
  * @summary Checks VerifyStack after deoptimization of array allocation slow call
  * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:TieredStopAtLevel=1
+ *                   -XX:AllocatePrefetchLines=1 -XX:AllocateInstancePrefetchLines=1 -XX:AllocatePrefetchStepSize=16 -XX:AllocatePrefetchDistance=1
  *                   -XX:MinTLABSize=1k -XX:TLABSize=1k
  *                   -XX:+DeoptimizeALot -XX:+VerifyStack
  *                   compiler.interpreter.TestVerifyStackAfterDeopt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/epsilon/TestArraycopyCheckcast.java	Fri Jan 11 11:42:23 2019 -0800
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test TestArraycopyCheckcast
+ * @key gc
+ * @requires vm.gc.Epsilon & !vm.graal.enabled
+ * @summary Epsilon is able to handle checkcasted array copies
+ * @library /test/lib
+ * @bug 8215724
+ *
+ * @run main/othervm -Xmx1g                                        -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
+ * @run main/othervm -Xmx1g -Xint                                  -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp                         -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:TieredStopAtLevel=1 -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
+ * @run main/othervm -Xmx1g -Xbatch -Xcomp -XX:-TieredCompilation  -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC TestArraycopyCheckcast
+ */
+
+import java.util.Random;
+
+public class TestArraycopyCheckcast {
+
+  static int COUNT = Integer.getInteger("count", 1000);
+
+  public static void main(String[] args) throws Exception {
+    Object[] src = new Object[COUNT];
+    Object[] dst = new B[COUNT];
+
+    // Test 1. Copy nulls, should succeed
+    try {
+      System.arraycopy(src, 0, dst, 0, COUNT);
+    } catch (ArrayStoreException e) {
+      throw new IllegalStateException("Should have completed");
+    }
+
+    // Test 2. Copying incompatible type, should fail
+    for (int c = 0; c < COUNT; c++) {
+      src[c] = new A();
+    }
+
+    try {
+      System.arraycopy(src, 0, dst, 0, COUNT);
+      throw new IllegalStateException("Should have failed with ArrayStoreException");
+    } catch (ArrayStoreException e) {
+      // Expected
+    }
+
+    // Test 3. Copying compatible type, should succeeded
+    for (int c = 0; c < COUNT; c++) {
+      src[c] = new C();
+    }
+
+    try {
+      System.arraycopy(src, 0, dst, 0, COUNT);
+    } catch (ArrayStoreException e) {
+      throw new IllegalStateException("Should have completed");
+    }
+
+    for (int c = 0; c < COUNT; c++) {
+      if (src[c] != dst[c]) {
+        throw new IllegalStateException("Copy failed at index " + c);
+      }
+    }
+  }
+
+  static class A {}
+  static class B extends A {}
+  static class C extends B {}
+}
--- a/test/hotspot/jtreg/runtime/appcds/ProtectionDomain.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/hotspot/jtreg/runtime/appcds/ProtectionDomain.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,25 +48,24 @@
          TestCommon.list("ProtDomain",
                          "ProtDomainBOther",
                          "java/util/Dictionary",
-                         "sun/tools/javac/Main",
+                         "com/sun/tools/javac/Main",
                          "jdk/nio/zipfs/ZipInfo",
                          "java/net/URL",
                          "sun/rmi/rmic/Main",
                          "com/sun/jndi/dns/DnsName"));
 
-    OutputAnalyzer output;
-
     // First class is loaded from CDS, second class is loaded from JAR
-    output = TestCommon.exec(appJar, "ProtDomain");
-    TestCommon.checkExec(output, "Protection Domains match");
+    TestCommon.run("-cp", appJar, "ProtDomain")
+        .assertNormalExit("Protection Domains match");
 
     // First class is loaded from JAR, second class is loaded from CDS
-    output = TestCommon.exec(appJar, "ProtDomainB");
-    TestCommon.checkExec(output, "Protection Domains match");
+    TestCommon.run("-cp", appJar, "ProtDomainB")
+        .assertNormalExit("Protection Domains match");
 
     // Test ProtectionDomain for application and extension module classes from the
     // "modules" jimage
-    output = TestCommon.exec(appJar, "JimageClassProtDomain");
-    output.shouldNotContain("Failed: Protection Domains do not match");
+    TestCommon.run("-cp", appJar, "JimageClassProtDomain")
+        .assertNormalExit(output -> output.shouldNotContain(
+                          "Failed: Protection Domains do not match"));
   }
 }
--- a/test/hotspot/jtreg/runtime/appcds/test-classes/JimageClassProtDomain.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/JimageClassProtDomain.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,7 +37,7 @@
               "java.util.Dictionary", "java.util.ServiceConfigurationError"},
 
              {"Loading shared app module class first",
-              "sun.tools.javac.Main", "sun.tools.javac.BatchParser"},
+              "com.sun.tools.javac.Main", "com.sun.tools.javac.code.Symbol"},
 
              {"Loading shared ext module class first",
               "jdk.nio.zipfs.ZipInfo", "jdk.nio.zipfs.ZipPath"},
@@ -46,7 +46,7 @@
               "java.net.HttpCookie", "java.net.URL"},
 
              {"Loading non-shared app module class first",
-              "sun.rmi.rmic.RMIGenerator", "sun.rmi.rmic.Main"},
+              "com.sun.tools.sjavac.Util", "com.sun.tools.sjavac.Main"},
 
              {"Loading non-shared ext module class first",
               "com.sun.jndi.dns.Resolver", "com.sun.jndi.dns.DnsName"}};
@@ -61,13 +61,16 @@
         Class c1 = Class.forName(shared);
         Class c2 = Class.forName(nonShared);
         if (c1.getProtectionDomain() != c2.getProtectionDomain()) {
-            System.out.println("Failed: Protection Domains do not match!");
             System.out.println(c1.getProtectionDomain());
             System.out.println(c1.getProtectionDomain().getCodeSource());
             System.out.println(c2.getProtectionDomain());
             System.out.println(c2.getProtectionDomain().getCodeSource());
-            System.exit(1);
+            throw new RuntimeException("Failed: Protection Domains do not match!");
         } else {
+            System.out.println(c1.getProtectionDomain());
+            System.out.println(c1.getProtectionDomain().getCodeSource());
+            System.out.println(c2.getProtectionDomain());
+            System.out.println(c2.getProtectionDomain().getCodeSource());
             System.out.println("Passed: Protection Domains match.");
         }
     }
--- a/test/hotspot/jtreg/runtime/appcds/test-classes/ProtDomain.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ProtDomain.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,8 +42,7 @@
     if (mine == his) {
       System.out.println("Protection Domains match");
     } else {
-      System.out.println("Protection Domains do not match!");
-      System.exit(1);
+      throw new RuntimeException("Protection Domains do not match!");
     }
   }
 }
--- a/test/hotspot/jtreg/runtime/appcds/test-classes/ProtDomainB.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ProtDomainB.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,8 +42,7 @@
     if (mine == his) {
       System.out.println("Protection Domains match");
     } else {
-      System.out.println("Protection Domains do not match!");
-      System.exit(1);
+      throw new RuntimeException("Protection Domains do not match!");
     }
   }
 }
--- a/test/jdk/ProblemList.txt	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/ProblemList.txt	Fri Jan 11 11:42:23 2019 -0800
@@ -583,7 +583,6 @@
 java/nio/file/WatchService/LotsOfCancels.java                   8188039 solaris-all Solaris 11
 java/nio/file/WatchService/LotsOfEvents.java                    7158947 solaris-all Solaris 11
 
-sun/nio/cs/OLD/TestIBMDB.java                                   8211841 aix-ppc64
 
 ############################################################################
 
--- a/test/jdk/java/lang/String/Indent.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/String/Indent.java	Fri Jan 11 11:42:23 2019 -0800
@@ -67,7 +67,7 @@
                         Stream<String> stream = input.lines();
                         if (adjust > 0) {
                             final String spaces = " ".repeat(adjust);
-                            stream = stream.map(s -> s.isBlank() ? s : spaces + s);
+                            stream = stream.map(s -> spaces + s);
                         } else if (adjust < 0) {
                             stream = stream.map(s -> s.substring(Math.min(-adjust, indexOfNonWhitespace(s))));
                         }
--- a/test/jdk/java/lang/constant/CondyDescTest.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/constant/CondyDescTest.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -67,7 +67,6 @@
 
     private void testVarHandleDesc(DynamicConstantDesc<VarHandle> r, VarHandle vh) throws ReflectiveOperationException  {
         testSymbolicDesc(r);
-        assertEquals(r.resolveConstantDesc(LOOKUP), vh);
         assertEquals(vh.describeConstable().orElseThrow(), r);
     }
 
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -141,8 +141,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessByte.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessByte.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -141,8 +141,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessChar.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessChar.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -141,8 +141,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -141,8 +141,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessFloat.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessFloat.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -141,8 +141,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -141,8 +141,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessLong.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessLong.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -141,8 +141,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessShort.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessShort.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -141,8 +141,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessString.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestAccessString.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -143,8 +143,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -93,8 +93,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -93,8 +93,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -93,8 +93,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -93,8 +93,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsLong.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsLong.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -93,8 +93,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -93,8 +93,6 @@
             for (int j = 0; j < vhs1.length; j++) {
                 if (i == j) {
                     assertEquals(vhs1[i], vhs1[i]);
-                    assertEquals(vhs1[i], vhs2[i]);
-                    assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
                 }
                 else {
                     assertNotEquals(vhs1[i], vhs1[j]);
--- a/test/jdk/jdk/jfr/event/gc/detailed/TestPromotionEventWithG1.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/jdk/jfr/event/gc/detailed/TestPromotionEventWithG1.java	Fri Jan 11 11:42:23 2019 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, 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
@@ -35,7 +35,8 @@
  *           & vm.opt.ExplicitGCInvokesConcurrent != true
  * @library /test/lib /test/jdk
  * @run main/othervm -Xmx32m -Xms32m -Xmn12m -XX:+UseG1GC -XX:-UseStringDeduplication -XX:MaxTenuringThreshold=5 -XX:InitialTenuringThreshold=5 jdk.jfr.event.gc.detailed.TestPromotionEventWithG1
- * @run main/othervm -Xmx32m -Xms32m -Xmn12m -XX:+UseG1GC -XX:-UseStringDeduplication -XX:MaxTenuringThreshold=5 -XX:InitialTenuringThreshold=5 -XX:MinTLABSize=576 -XX:TLABSize=576 jdk.jfr.event.gc.detailed.TestPromotionEventWithG1
+ * @run main/othervm -Xmx32m -Xms32m -Xmn12m -XX:AllocatePrefetchLines=1 -XX:AllocateInstancePrefetchLines=1 -XX:AllocatePrefetchStepSize=16 -XX:AllocatePrefetchDistance=1 -XX:+UseG1GC
+  *                  -XX:-UseStringDeduplication -Xlog:os+cpu=info -XX:MaxTenuringThreshold=5 -XX:InitialTenuringThreshold=5 -XX:MinTLABSize=768 -XX:TLABSize=768 jdk.jfr.event.gc.detailed.TestPromotionEventWithG1
  */
 public class TestPromotionEventWithG1 {
 
--- a/test/jdk/sun/nio/cs/OLD/IBM1383_OLD.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/sun/nio/cs/OLD/IBM1383_OLD.java	Fri Jan 11 11:42:23 2019 -0800
@@ -31,7 +31,7 @@
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.CharacterCodingException;
-import sun.nio.cs.HistoricallyNamedCharset;
+import sun.nio.cs.*;
 import sun.nio.cs.ext.*;
 
 
--- a/test/jdk/sun/nio/cs/OLD/IBM942_OLD.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/sun/nio/cs/OLD/IBM942_OLD.java	Fri Jan 11 11:42:23 2019 -0800
@@ -31,7 +31,7 @@
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.CharacterCodingException;
-import sun.nio.cs.HistoricallyNamedCharset;
+import sun.nio.cs.*;
 import sun.nio.cs.ext.*;
 
 
--- a/test/jdk/sun/nio/cs/OLD/IBM943_OLD.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/sun/nio/cs/OLD/IBM943_OLD.java	Fri Jan 11 11:42:23 2019 -0800
@@ -30,7 +30,7 @@
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.CharacterCodingException;
-import sun.nio.cs.HistoricallyNamedCharset;
+import sun.nio.cs.*;
 import sun.nio.cs.ext.*;
 
 
--- a/test/jdk/sun/nio/cs/OLD/IBM950_OLD.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/sun/nio/cs/OLD/IBM950_OLD.java	Fri Jan 11 11:42:23 2019 -0800
@@ -30,7 +30,7 @@
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.CharacterCodingException;
-import sun.nio.cs.HistoricallyNamedCharset;
+import sun.nio.cs.*;
 import sun.nio.cs.ext.*;
 
 
--- a/test/jdk/sun/nio/cs/OLD/IBM970_OLD.java	Fri Jan 11 11:32:00 2019 -0800
+++ b/test/jdk/sun/nio/cs/OLD/IBM970_OLD.java	Fri Jan 11 11:42:23 2019 -0800
@@ -33,8 +33,7 @@
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-import sun.nio.cs.Surrogate;
+import sun.nio.cs.*;
 import sun.nio.cs.ext.*;