changeset 24800:7604b8c6b7df

Merge
author duke
date Wed, 05 Jul 2017 19:44:04 +0200
parents abd9a49d0b9c e397c0de8ddd
children 410bccbded9e
files hotspot/test/runtime/6929067/T.java hotspot/test/runtime/6929067/Test6929067.sh hotspot/test/runtime/6929067/invoke.c hotspot/test/runtime/InitialThreadOverflow/DoOverflow.java hotspot/test/runtime/InitialThreadOverflow/invoke.c hotspot/test/runtime/InitialThreadOverflow/testme.sh jdk/src/share/native/java/util/zip/zlib-1.2.5/ChangeLog jdk/src/share/native/java/util/zip/zlib-1.2.5/README jdk/src/share/native/java/util/zip/zlib-1.2.5/compress.c jdk/src/share/native/java/util/zip/zlib-1.2.5/crc32.h jdk/src/share/native/java/util/zip/zlib-1.2.5/deflate.c jdk/src/share/native/java/util/zip/zlib-1.2.5/deflate.h jdk/src/share/native/java/util/zip/zlib-1.2.5/gzclose.c jdk/src/share/native/java/util/zip/zlib-1.2.5/gzguts.h jdk/src/share/native/java/util/zip/zlib-1.2.5/gzlib.c jdk/src/share/native/java/util/zip/zlib-1.2.5/gzread.c jdk/src/share/native/java/util/zip/zlib-1.2.5/gzwrite.c jdk/src/share/native/java/util/zip/zlib-1.2.5/infback.c jdk/src/share/native/java/util/zip/zlib-1.2.5/inffast.c jdk/src/share/native/java/util/zip/zlib-1.2.5/inffast.h jdk/src/share/native/java/util/zip/zlib-1.2.5/inffixed.h jdk/src/share/native/java/util/zip/zlib-1.2.5/inflate.c jdk/src/share/native/java/util/zip/zlib-1.2.5/inflate.h jdk/src/share/native/java/util/zip/zlib-1.2.5/inftrees.c jdk/src/share/native/java/util/zip/zlib-1.2.5/inftrees.h jdk/src/share/native/java/util/zip/zlib-1.2.5/patches/ChangeLog_java jdk/src/share/native/java/util/zip/zlib-1.2.5/trees.c jdk/src/share/native/java/util/zip/zlib-1.2.5/trees.h jdk/src/share/native/java/util/zip/zlib-1.2.5/uncompr.c jdk/src/share/native/java/util/zip/zlib-1.2.5/zadler32.c jdk/src/share/native/java/util/zip/zlib-1.2.5/zconf.h jdk/src/share/native/java/util/zip/zlib-1.2.5/zcrc32.c jdk/src/share/native/java/util/zip/zlib-1.2.5/zlib.h jdk/src/share/native/java/util/zip/zlib-1.2.5/zutil.c jdk/src/share/native/java/util/zip/zlib-1.2.5/zutil.h jdk/test/demo/jvmti/mtrace/JFrameCreateTime.java jdk/test/demo/jvmti/mtrace/TraceJFrame.java nashorn/bin/checkintest.sh nashorn/bin/verbose_octane.bat nashorn/bin/verbose_octane.sh nashorn/src/jdk/nashorn/internal/codegen/Attr.java nashorn/src/jdk/nashorn/internal/codegen/FinalizeTypes.java nashorn/src/jdk/nashorn/internal/codegen/RangeAnalyzer.java nashorn/src/jdk/nashorn/internal/codegen/types/Range.java nashorn/src/jdk/nashorn/internal/ir/TemporarySymbols.java nashorn/src/jdk/nashorn/internal/runtime/DebugLogger.java nashorn/src/jdk/nashorn/internal/runtime/Logging.java nashorn/test/script/basic/JDK-8010697.js nashorn/test/script/basic/JDK-8010697.js.EXPECTED nashorn/test/script/basic/arraysIntKey.js nashorn/test/script/basic/arraysIntKey.js.EXPECTED nashorn/test/script/basic/ranges_disabled.js nashorn/test/script/basic/ranges_disabled.js.EXPECTED nashorn/test/script/basic/ranges_enabled.js nashorn/test/script/basic/ranges_enabled.js.EXPECTED nashorn/test/script/basic/ranges_payload.js nashorn/test/script/basic/runsunspider-eager.js nashorn/test/script/basic/runsunspider-lazy.js nashorn/test/script/basic/runsunspider-lazy.js.EXPECTED nashorn/test/script/maptests/property_delete.js
diffstat 1651 files changed, 57587 insertions(+), 36328 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags-top-repo	Thu Jun 05 19:38:17 2014 -0700
+++ b/.hgtags-top-repo	Wed Jul 05 19:44:04 2017 +0200
@@ -258,3 +258,4 @@
 5800456add07e1a68170a229fb5e27376f8875e5 jdk9-b13
 4e3aa9723e9972623e3dafc321b368e7db7e9b3b jdk9-b14
 b114474fb25af4e73cb7219f7c04bd8994da03a5 jdk9-b15
+cf22a728521f91a4692b433d39d730a0a1b23155 jdk9-b16
--- a/common/autoconf/configure	Thu Jun 05 19:38:17 2014 -0700
+++ b/common/autoconf/configure	Wed Jul 05 19:44:04 2017 +0200
@@ -49,7 +49,7 @@
 ###
 
 run_autogen_or_fail() {
-  if test "x`which autoconf 2> /dev/null`" = x; then
+  if test "x`which autoconf 2> /dev/null | grep -v '^no autoconf in'`" = x; then
     echo "Cannot locate autoconf, unable to correct situation."
     echo "Please install autoconf and run 'bash autogen.sh' to update the generated files."
     echo "Error: Cannot continue" 1>&2
@@ -80,7 +80,7 @@
 }
 
 check_hg_updates() {
-  if test "x`which hg 2> /dev/null`" != x; then
+  if test "x`which hg 2> /dev/null | grep -v '^no hg in'`" != x; then
     conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf`
     if test "x$conf_updated_autoconf_files" != x; then
       echo "Configure source code has been updated, checking time stamps"
--- a/corba/.hgtags	Thu Jun 05 19:38:17 2014 -0700
+++ b/corba/.hgtags	Wed Jul 05 19:44:04 2017 +0200
@@ -258,3 +258,4 @@
 088eec4c36f4d7f250fcd19c4969bf698e3d2cdc jdk9-b13
 a2b82f863ba95a596da555a4c1b871c404863e7e jdk9-b14
 e54022d0dd92106fff7f7fe670010cd7e6517ee3 jdk9-b15
+422ef9d29d84f571453f015c4cb8713c3af70ee4 jdk9-b16
--- a/hotspot/.hgtags	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/.hgtags	Wed Jul 05 19:44:04 2017 +0200
@@ -418,3 +418,4 @@
 456ad9c99133803d4e1433124c85a6fd141b9ac9 jdk9-b13
 bd333491bb6c012d7b606939406d0fa9a5ac7ffd jdk9-b14
 170f6d733d7aec062f743a6b8c1cce940a7a984a jdk9-b15
+b14e7c0b7d3ec04127f565cda1d84122e205680c jdk9-b16
--- a/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -1221,10 +1221,8 @@
   bool is_obj = (type == T_ARRAY || type == T_OBJECT);
   LIR_Opr offset = off.result();
 
-  if (data != dst) {
-    __ move(data, dst);
-    data = dst;
-  }
+  // Because we want a 2-arg form of xchg
+  __ move(data, dst);
 
   assert (!x->is_add() && (type == T_INT || (is_obj LP64_ONLY(&& UseCompressedOops))), "unexpected type");
   LIR_Address* addr;
@@ -1254,7 +1252,7 @@
     pre_barrier(ptr, LIR_OprFact::illegalOpr /* pre_val */,
                 true /* do_load */, false /* patch */, NULL);
   }
-  __ xchg(LIR_OprFact::address(addr), data, dst, tmp);
+  __ xchg(LIR_OprFact::address(addr), dst, dst, tmp);
   if (is_obj) {
     // Seems to be a precise address
     post_barrier(ptr, data);
--- a/hotspot/src/cpu/sparc/vm/copy_sparc.hpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/cpu/sparc/vm/copy_sparc.hpp	Wed Jul 05 19:44:04 2017 +0200
@@ -184,7 +184,7 @@
   assert(MinObjAlignmentInBytes >= BytesPerLong, "need alternate implementation");
 
   if (value == 0 && UseBlockZeroing &&
-      (count > (BlockZeroingLowLimit >> LogHeapWordSize))) {
+      (count > (size_t)(BlockZeroingLowLimit >> LogHeapWordSize))) {
    // Call it only when block zeroing is used
    ((_zero_Fn)StubRoutines::zero_aligned_words())(tohw, count);
   } else {
--- a/hotspot/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/CallSite.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/CallSite.java	Wed Jul 05 19:44:04 2017 +0200
@@ -231,6 +231,9 @@
         // identical call sites with the same method name/bci are
         // possible so we have to try them all until we find the late
         // inline call site that has a matching inline id.
+        if (calls == null) {
+            return null;
+        }
         CallSite site = sites.pop();
         for (CallSite c : calls) {
             if (c.matches(site)) {
@@ -250,6 +253,27 @@
         return null;
     }
 
+    public ArrayDeque<CallSite> findCallSite2(CallSite site) {
+        if (calls == null) {
+            return null;
+        }
+
+        for (CallSite c : calls) {
+            if (c.matches(site)) {
+                ArrayDeque<CallSite> stack = new ArrayDeque<CallSite>();
+                stack.push(c);
+                return stack;
+            } else {
+                ArrayDeque<CallSite> stack = c.findCallSite2(site);
+                if (stack != null) {
+                    stack.push(c);
+                    return stack;
+                }
+            }
+        }
+        return null;
+    }
+
     public long getInlineId() {
         return inlineId;
     }
--- a/hotspot/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/Compilation.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/Compilation.java	Wed Jul 05 19:44:04 2017 +0200
@@ -49,6 +49,12 @@
         this.id = id;
     }
 
+    void reset() {
+        call = new CallSite();
+        lateInlineCall = new CallSite();
+        phases = new ArrayList<Phase>(4);
+    }
+
     Phase getPhase(String s) {
         for (Phase p : getPhases()) {
             if (p.getName().equals(s)) {
@@ -212,10 +218,6 @@
         return phases;
     }
 
-    public void setPhases(ArrayList<Phase> phases) {
-        this.setPhases(phases);
-    }
-
     public String getFailureReason() {
         return failureReason;
     }
@@ -240,10 +242,6 @@
         return call;
     }
 
-    public void setCall(CallSite call) {
-        this.call = call;
-    }
-
     public CallSite getLateInlineCall() {
         return lateInlineCall;
     }
--- a/hotspot/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogParser.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogParser.java	Wed Jul 05 19:44:04 2017 +0200
@@ -395,6 +395,7 @@
             compile.setEnd(Double.parseDouble(search(atts, "stamp")));
             if (Integer.parseInt(search(atts, "success")) == 0) {
                 compile.setFailureReason(failureReason);
+                failureReason = null;
             }
         } else if (qname.equals("make_not_entrant")) {
             String id = makeId(atts);
@@ -451,6 +452,12 @@
             nmethods.put(id, nm);
             events.add(nm);
         } else if (qname.equals("parse")) {
+            if (failureReason != null && scopes.size() == 0 && !lateInlining) {
+                failureReason = null;
+                compile.reset();
+                site = compile.getCall();
+            }
+
             if (methodHandleSite != null) {
                 throw new InternalError("method handle site should have been replaced");
             }
@@ -529,6 +536,18 @@
 
             site = compile.getCall().findCallSite(thisCallScopes);
             if (site == null) {
+                System.out.println("call scopes:");
+                for (CallSite c : thisCallScopes) {
+                    System.out.println(c.getMethod() + " " + c.getBci() + " " + c.getInlineId());
+                }
+                CallSite c = thisCallScopes.getLast();
+                if (c.getInlineId() != 0) {
+                    System.out.println("Looking for call site in entire tree:");
+                    ArrayDeque<CallSite> stack = compile.getCall().findCallSite2(c);
+                    for (CallSite c2 : stack) {
+                        System.out.println(c2.getMethod() + " " + c2.getBci() + " " + c2.getInlineId());
+                    }
+                }
                 System.out.println(caller.getMethod() + " bci: " + bci);
                 throw new InternalError("couldn't find call site");
             }
--- a/hotspot/src/share/vm/c1/c1_LIR.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIR.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -1083,7 +1083,7 @@
 
 void LIR_OpArrayCopy::emit_code(LIR_Assembler* masm) {
   masm->emit_arraycopy(this);
-  masm->emit_code_stub(stub());
+  masm->append_code_stub(stub());
 }
 
 void LIR_OpUpdateCRC32::emit_code(LIR_Assembler* masm) {
@@ -1100,20 +1100,20 @@
 
 void LIR_OpAllocObj::emit_code(LIR_Assembler* masm) {
   masm->emit_alloc_obj(this);
-  masm->emit_code_stub(stub());
+  masm->append_code_stub(stub());
 }
 
 void LIR_OpBranch::emit_code(LIR_Assembler* masm) {
   masm->emit_opBranch(this);
   if (stub()) {
-    masm->emit_code_stub(stub());
+    masm->append_code_stub(stub());
   }
 }
 
 void LIR_OpConvert::emit_code(LIR_Assembler* masm) {
   masm->emit_opConvert(this);
   if (stub() != NULL) {
-    masm->emit_code_stub(stub());
+    masm->append_code_stub(stub());
   }
 }
 
@@ -1123,13 +1123,13 @@
 
 void LIR_OpAllocArray::emit_code(LIR_Assembler* masm) {
   masm->emit_alloc_array(this);
-  masm->emit_code_stub(stub());
+  masm->append_code_stub(stub());
 }
 
 void LIR_OpTypeCheck::emit_code(LIR_Assembler* masm) {
   masm->emit_opTypeCheck(this);
   if (stub()) {
-    masm->emit_code_stub(stub());
+    masm->append_code_stub(stub());
   }
 }
 
@@ -1144,7 +1144,7 @@
 void LIR_OpLock::emit_code(LIR_Assembler* masm) {
   masm->emit_lock(this);
   if (stub()) {
-    masm->emit_code_stub(stub());
+    masm->append_code_stub(stub());
   }
 }
 
--- a/hotspot/src/share/vm/c1/c1_LIR.hpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIR.hpp	Wed Jul 05 19:44:04 2017 +0200
@@ -1127,6 +1127,7 @@
   virtual void print_instr(outputStream* out) const   = 0;
   virtual void print_on(outputStream* st) const PRODUCT_RETURN;
 
+  virtual bool is_patching() { return false; }
   virtual LIR_OpCall* as_OpCall() { return NULL; }
   virtual LIR_OpJavaCall* as_OpJavaCall() { return NULL; }
   virtual LIR_OpLabel* as_OpLabel() { return NULL; }
@@ -1387,6 +1388,7 @@
     return (LIR_MoveKind)_flags;
   }
 
+  virtual bool is_patching() { return _patch != lir_patch_none; }
   virtual void emit_code(LIR_Assembler* masm);
   virtual LIR_Op1* as_Op1() { return this; }
   virtual const char * name() const PRODUCT_RETURN0;
@@ -1619,6 +1621,7 @@
   int       profiled_bci() const                 { return _profiled_bci;      }
   bool      should_profile() const               { return _should_profile;    }
 
+  virtual bool is_patching() { return _info_for_patch != NULL; }
   virtual void emit_code(LIR_Assembler* masm);
   virtual LIR_OpTypeCheck* as_OpTypeCheck() { return this; }
   void print_instr(outputStream* out) const PRODUCT_RETURN;
--- a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -58,7 +58,7 @@
     _masm->nop();
   }
   patch->install(_masm, patch_code, obj, info);
-  append_patching_stub(patch);
+  append_code_stub(patch);
 
 #ifdef ASSERT
   Bytecodes::Code code = info->scope()->method()->java_code_at_bci(info->stack()->bci());
@@ -131,11 +131,6 @@
 }
 
 
-void LIR_Assembler::append_patching_stub(PatchingStub* stub) {
-  _slow_case_stubs->append(stub);
-}
-
-
 void LIR_Assembler::check_codespace() {
   CodeSection* cs = _masm->code_section();
   if (cs->remaining() < (int)(NOT_LP64(1*K)LP64_ONLY(2*K))) {
@@ -144,7 +139,7 @@
 }
 
 
-void LIR_Assembler::emit_code_stub(CodeStub* stub) {
+void LIR_Assembler::append_code_stub(CodeStub* stub) {
   _slow_case_stubs->append(stub);
 }
 
@@ -442,7 +437,7 @@
 
 void LIR_Assembler::add_debug_info_for_null_check(int pc_offset, CodeEmitInfo* cinfo) {
   ImplicitNullCheckStub* stub = new ImplicitNullCheckStub(pc_offset, cinfo);
-  emit_code_stub(stub);
+  append_code_stub(stub);
 }
 
 void LIR_Assembler::add_debug_info_for_div0_here(CodeEmitInfo* info) {
@@ -451,7 +446,7 @@
 
 void LIR_Assembler::add_debug_info_for_div0(int pc_offset, CodeEmitInfo* cinfo) {
   DivByZeroStub* stub = new DivByZeroStub(pc_offset, cinfo);
-  emit_code_stub(stub);
+  append_code_stub(stub);
 }
 
 void LIR_Assembler::emit_rtcall(LIR_OpRTCall* op) {
--- a/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp	Wed Jul 05 19:44:04 2017 +0200
@@ -144,7 +144,7 @@
   // stubs
   void emit_slow_case_stubs();
   void emit_static_call_stub();
-  void emit_code_stub(CodeStub* op);
+  void append_code_stub(CodeStub* op);
   void add_call_info_here(CodeEmitInfo* info)                              { add_call_info(code_offset(), info); }
 
   // code patterns
--- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -2382,16 +2382,6 @@
   int arg_count = frame_map()->oop_map_arg_count();
   OopMap* map = new OopMap(frame_size, arg_count);
 
-  // Check if this is a patch site.
-  bool is_patch_info = false;
-  if (op->code() == lir_move) {
-    assert(!is_call_site, "move must not be a call site");
-    assert(op->as_Op1() != NULL, "move must be LIR_Op1");
-    LIR_Op1* move = (LIR_Op1*)op;
-
-    is_patch_info = move->patch_code() != lir_patch_none;
-  }
-
   // Iterate through active intervals
   for (Interval* interval = iw->active_first(fixedKind); interval != Interval::end(); interval = interval->next()) {
     int assigned_reg = interval->assigned_reg();
@@ -2406,7 +2396,7 @@
     // moves, any intervals which end at this instruction are included
     // in the oop map since we may safepoint while doing the patch
     // before we've consumed the inputs.
-    if (is_patch_info || op->id() < interval->current_to()) {
+    if (op->is_patching() || op->id() < interval->current_to()) {
 
       // caller-save registers must not be included into oop-maps at calls
       assert(!is_call_site || assigned_reg >= nof_regs || !is_caller_save(assigned_reg), "interval is in a caller-save register at a call -> register will be overwritten");
--- a/hotspot/src/share/vm/classfile/classLoaderData.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -274,6 +274,8 @@
   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
   Klass* old_value = _klasses;
   k->set_next_link(old_value);
+  // Make sure linked class is stable, since the class list is walked without a lock
+  OrderAccess::storestore();
   // link the new item into the list
   _klasses = k;
 
--- a/hotspot/src/share/vm/classfile/verifier.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/classfile/verifier.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -2036,7 +2036,7 @@
     while ((bcp + padding_offset) < aligned_bcp) {
       if(*(bcp + padding_offset) != 0) {
         verify_error(ErrorContext::bad_code(bci),
-                     "Nonzero padding byte in lookswitch or tableswitch");
+                     "Nonzero padding byte in lookupswitch or tableswitch");
         return;
       }
       padding_offset++;
--- a/hotspot/src/share/vm/compiler/compilerOracle.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/compiler/compilerOracle.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -307,6 +307,9 @@
   return (check_predicate(PrintCommand, method));
 }
 
+bool CompilerOracle::should_print_methods() {
+  return lists[PrintCommand] != NULL;
+}
 
 bool CompilerOracle::should_log(methodHandle method) {
   if (!LogCompilation)            return false;
--- a/hotspot/src/share/vm/compiler/compilerOracle.hpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/compiler/compilerOracle.hpp	Wed Jul 05 19:44:04 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, 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
@@ -73,6 +73,9 @@
   // For updating the oracle file
   static void append_comment_to_file(const char* message);
   static void append_exclude_to_file(methodHandle method);
+
+  // Tells whether there are any methods to print for print_method_statistics()
+  static bool should_print_methods();
 };
 
 #endif // SHARE_VM_COMPILER_COMPILERORACLE_HPP
--- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -1267,8 +1267,10 @@
 // This is a support of the JVMTI PopFrame interface.
 // Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument
 // and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters.
-// The dmh argument is a reference to a DirectMethoHandle that has a member name field.
-IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address dmh,
+// The member_name argument is a saved reference (in local#0) to the member_name.
+// For backward compatibility with some JDK versions (7, 8) it can also be a direct method handle.
+// FIXME: remove DMH case after j.l.i.InvokerBytecodeGenerator code shape is updated.
+IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address member_name,
                                                             Method* method, address bcp))
   Bytecodes::Code code = Bytecodes::code_at(method, bcp);
   if (code != Bytecodes::_invokestatic) {
@@ -1280,8 +1282,12 @@
   Symbol* mname = cpool->name_ref_at(cp_index);
 
   if (MethodHandles::has_member_arg(cname, mname)) {
-    oop member_name = java_lang_invoke_DirectMethodHandle::member((oop)dmh);
-    thread->set_vm_result(member_name);
+    oop member_name_oop = (oop) member_name;
+    if (java_lang_invoke_DirectMethodHandle::is_instance(member_name_oop)) {
+      // FIXME: remove after j.l.i.InvokerBytecodeGenerator code shape is updated.
+      member_name_oop = java_lang_invoke_DirectMethodHandle::member(member_name_oop);
+    }
+    thread->set_vm_result(member_name_oop);
   }
 IRT_END
 #endif // INCLUDE_JVMTI
--- a/hotspot/src/share/vm/memory/metaspace.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/memory/metaspace.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -3095,7 +3095,7 @@
 
 void Metaspace::global_initialize() {
   // Initialize the alignment for shared spaces.
-  int max_alignment = os::vm_page_size();
+  int max_alignment = os::vm_allocation_granularity();
   size_t cds_total = 0;
 
   MetaspaceShared::set_max_alignment(max_alignment);
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -1273,6 +1273,12 @@
 
 
 void InstanceKlass::methods_do(void f(Method* method)) {
+  // Methods aren't stable until they are loaded.  This can be read outside
+  // a lock through the ClassLoaderData for profiling
+  if (!is_loaded()) {
+    return;
+  }
+
   int len = methods()->length();
   for (int index = 0; index < len; index++) {
     Method* m = methods()->at(index);
--- a/hotspot/src/share/vm/opto/c2compiler.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/opto/c2compiler.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -155,6 +155,9 @@
       }
     }
 
+    // print inlining for last compilation only
+    C.dump_print_inlining();
+
     // No retry; just break the loop.
     break;
   }
--- a/hotspot/src/share/vm/opto/compile.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/opto/compile.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -672,6 +672,7 @@
                   _print_inlining_list(NULL),
                   _print_inlining_stream(NULL),
                   _print_inlining_idx(0),
+                  _print_inlining_output(NULL),
                   _preserve_jvm_state(0),
                   _interpreter_frame_size(0) {
   C = this;
@@ -978,6 +979,7 @@
     _print_inlining_list(NULL),
     _print_inlining_stream(NULL),
     _print_inlining_idx(0),
+    _print_inlining_output(NULL),
     _preserve_jvm_state(0),
     _allowed_reasons(0),
     _interpreter_frame_size(0) {
@@ -2207,7 +2209,7 @@
 
  } // (End scope of igvn; run destructor if necessary for asserts.)
 
-  dump_inlining();
+  process_print_inlining();
   // A method with only infinite loops has no edges entering loops from root
   {
     NOT_PRODUCT( TracePhase t2("graphReshape", &_t_graphReshaping, TimeCompiler); )
@@ -3868,7 +3870,7 @@
   assert(!_print_inlining || _print_inlining_stream->size() == 0, "loosing data");
 }
 
-void Compile::dump_inlining() {
+void Compile::process_print_inlining() {
   bool do_print_inlining = print_inlining() || print_intrinsics();
   if (do_print_inlining || log() != NULL) {
     // Print inlining message for candidates that we couldn't inline
@@ -3885,9 +3887,21 @@
     }
   }
   if (do_print_inlining) {
+    ResourceMark rm;
+    stringStream ss;
     for (int i = 0; i < _print_inlining_list->length(); i++) {
-      tty->print("%s", _print_inlining_list->adr_at(i)->ss()->as_string());
+      ss.print("%s", _print_inlining_list->adr_at(i)->ss()->as_string());
     }
+    size_t end = ss.size();
+    _print_inlining_output = NEW_ARENA_ARRAY(comp_arena(), char, end+1);
+    strncpy(_print_inlining_output, ss.base(), end+1);
+    _print_inlining_output[end] = 0;
+  }
+}
+
+void Compile::dump_print_inlining() {
+  if (_print_inlining_output != NULL) {
+    tty->print_raw(_print_inlining_output);
   }
 }
 
--- a/hotspot/src/share/vm/opto/compile.hpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/opto/compile.hpp	Wed Jul 05 19:44:04 2017 +0200
@@ -420,6 +420,7 @@
   stringStream* _print_inlining_stream;
   GrowableArray<PrintInliningBuffer>* _print_inlining_list;
   int _print_inlining_idx;
+  char* _print_inlining_output;
 
   // Only keep nodes in the expensive node list that need to be optimized
   void cleanup_expensive_nodes(PhaseIterGVN &igvn);
@@ -917,7 +918,8 @@
 
   void remove_useless_late_inlines(GrowableArray<CallGenerator*>* inlines, Unique_Node_List &useful);
 
-  void dump_inlining();
+  void process_print_inlining();
+  void dump_print_inlining();
 
   bool over_inlining_cutoff() const {
     if (!inlining_incrementally()) {
--- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -307,9 +307,9 @@
       !java_lang_Class::is_primitive(mirror)) {
     Klass* k = java_lang_Class::as_Klass(mirror);
     assert(k != NULL, "class for non-primitive mirror must exist");
-    *size_ptr = k->size() * wordSize;
+    *size_ptr = (jlong)k->size() * wordSize;
   } else {
-    *size_ptr = mirror->size() * wordSize;
+    *size_ptr = (jlong)mirror->size() * wordSize;
     }
   return JVMTI_ERROR_NONE;
 } /* end GetObjectSize */
--- a/hotspot/src/share/vm/prims/whitebox.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/prims/whitebox.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -33,9 +33,11 @@
 #include "prims/whitebox.hpp"
 #include "prims/wbtestmethods/parserTests.hpp"
 
+#include "runtime/thread.hpp"
 #include "runtime/arguments.hpp"
 #include "runtime/interfaceSupport.hpp"
 #include "runtime/os.hpp"
+
 #include "utilities/debug.hpp"
 #include "utilities/macros.hpp"
 #include "utilities/exceptions.hpp"
@@ -576,6 +578,15 @@
 WB_END
 
 
+WB_ENTRY(jlong, WB_GetThreadStackSize(JNIEnv* env, jobject o))
+  return (jlong) Thread::current()->stack_size();
+WB_END
+
+WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o))
+  JavaThread* t = JavaThread::current();
+  return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong) StackShadowPages * os::vm_page_size();
+WB_END
+
 //Some convenience methods to deal with objects from java
 int WhiteBox::offset_for_field(const char* field_name, oop object,
     Symbol* signature_symbol) {
@@ -690,6 +701,8 @@
   {CC"getCPUFeatures",     CC"()Ljava/lang/String;",  (void*)&WB_GetCPUFeatures     },
   {CC"getNMethod",         CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;",
                                                       (void*)&WB_GetNMethod         },
+  {CC"getThreadStackSize", CC"()J",                   (void*)&WB_GetThreadStackSize },
+  {CC"getThreadRemainingStackSize", CC"()J",          (void*)&WB_GetThreadRemainingStackSize },
 };
 
 #undef CC
--- a/hotspot/src/share/vm/runtime/arguments.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/runtime/arguments.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -1449,7 +1449,7 @@
   return true;
 }
 
-uintx Arguments::max_heap_for_compressed_oops() {
+size_t Arguments::max_heap_for_compressed_oops() {
   // Avoid sign flip.
   assert(OopEncodingHeapMax > (uint64_t)os::vm_page_size(), "Unusual page size");
   // We need to fit both the NULL page and the heap into the memory budget, while
--- a/hotspot/src/share/vm/runtime/java.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/runtime/java.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -120,7 +120,8 @@
 }
 
 void print_method_profiling_data() {
-  if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData)) {
+  if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData) &&
+     (PrintMethodData || CompilerOracle::should_print_methods())) {
     ResourceMark rm;
     HandleMark hm;
     collected_profiled_methods = new GrowableArray<Method*>(1024);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/runtime/sharedRuntimeMath.hpp	Wed Jul 05 19:44:04 2017 +0200
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#ifndef SHARE_VM_RUNTIME_SHAREDRUNTIMEMATH_HPP
+#define SHARE_VM_RUNTIME_SHAREDRUNTIMEMATH_HPP
+
+#include <math.h>
+
+// VM_LITTLE_ENDIAN is #defined appropriately in the Makefiles
+// [jk] this is not 100% correct because the float word order may different
+// from the byte order (e.g. on ARM FPA)
+#ifdef VM_LITTLE_ENDIAN
+# define __HI(x) *(1+(int*)&x)
+# define __LO(x) *(int*)&x
+#else
+# define __HI(x) *(int*)&x
+# define __LO(x) *(1+(int*)&x)
+#endif
+
+static double copysignA(double x, double y) {
+  __HI(x) = (__HI(x)&0x7fffffff)|(__HI(y)&0x80000000);
+  return x;
+}
+
+/*
+ * ====================================================
+ * Copyright (c) 1998 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Developed at SunSoft, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+ * scalbn (double x, int n)
+ * scalbn(x,n) returns x* 2**n  computed by  exponent
+ * manipulation rather than by actually performing an
+ * exponentiation or a multiplication.
+ */
+
+static const double
+two54   =  1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
+twom54  =  5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
+hugeX  = 1.0e+300,
+tiny   = 1.0e-300;
+
+static double scalbnA (double x, int n) {
+  int  k,hx,lx;
+  hx = __HI(x);
+  lx = __LO(x);
+  k = (hx&0x7ff00000)>>20;              /* extract exponent */
+  if (k==0) {                           /* 0 or subnormal x */
+    if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
+    x *= two54;
+    hx = __HI(x);
+    k = ((hx&0x7ff00000)>>20) - 54;
+    if (n< -50000) return tiny*x;       /*underflow*/
+  }
+  if (k==0x7ff) return x+x;             /* NaN or Inf */
+  k = k+n;
+  if (k >  0x7fe) return hugeX*copysignA(hugeX,x); /* overflow  */
+  if (k > 0)                            /* normal result */
+    {__HI(x) = (hx&0x800fffff)|(k<<20); return x;}
+  if (k <= -54) {
+    if (n > 50000)      /* in case integer overflow in n+k */
+      return hugeX*copysignA(hugeX,x);  /*overflow*/
+    else return tiny*copysignA(tiny,x); /*underflow*/
+  }
+  k += 54;                              /* subnormal result */
+  __HI(x) = (hx&0x800fffff)|(k<<20);
+  return x*twom54;
+}
+
+#endif // SHARE_VM_RUNTIME_SHAREDRUNTIMEMATH_HPP
--- a/hotspot/src/share/vm/runtime/sharedRuntimeTrans.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/runtime/sharedRuntimeTrans.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -43,78 +43,7 @@
 # pragma optimize ( "", off )
 #endif
 
-#include <math.h>
-
-// VM_LITTLE_ENDIAN is #defined appropriately in the Makefiles
-// [jk] this is not 100% correct because the float word order may different
-// from the byte order (e.g. on ARM)
-#ifdef VM_LITTLE_ENDIAN
-# define __HI(x) *(1+(int*)&x)
-# define __LO(x) *(int*)&x
-#else
-# define __HI(x) *(int*)&x
-# define __LO(x) *(1+(int*)&x)
-#endif
-
-#if !defined(AIX)
-double copysign(double x, double y) {
-  __HI(x) = (__HI(x)&0x7fffffff)|(__HI(y)&0x80000000);
-  return x;
-}
-#endif
-
-/*
- * ====================================================
- * Copyright (c) 1998 Oracle and/or its affiliates. All rights reserved.
- *
- * Developed at SunSoft, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/*
- * scalbn (double x, int n)
- * scalbn(x,n) returns x* 2**n  computed by  exponent
- * manipulation rather than by actually performing an
- * exponentiation or a multiplication.
- */
-
-static const double
-two54   =  1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
-  twom54  =  5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
-  hugeX   = 1.0e+300,
-  tiny   = 1.0e-300;
-
-#if !defined(AIX)
-double scalbn (double x, int n) {
-  int  k,hx,lx;
-  hx = __HI(x);
-  lx = __LO(x);
-  k = (hx&0x7ff00000)>>20;              /* extract exponent */
-  if (k==0) {                           /* 0 or subnormal x */
-    if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
-    x *= two54;
-    hx = __HI(x);
-    k = ((hx&0x7ff00000)>>20) - 54;
-    if (n< -50000) return tiny*x;       /*underflow*/
-  }
-  if (k==0x7ff) return x+x;             /* NaN or Inf */
-  k = k+n;
-  if (k >  0x7fe) return hugeX*copysign(hugeX,x); /* overflow  */
-  if (k > 0)                            /* normal result */
-    {__HI(x) = (hx&0x800fffff)|(k<<20); return x;}
-  if (k <= -54) {
-    if (n > 50000)      /* in case integer overflow in n+k */
-      return hugeX*copysign(hugeX,x);   /*overflow*/
-    else return tiny*copysign(tiny,x);  /*underflow*/
-  }
-  k += 54;                              /* subnormal result */
-  __HI(x) = (hx&0x800fffff)|(k<<20);
-  return x*twom54;
-}
-#endif
+#include "runtime/sharedRuntimeMath.hpp"
 
 /* __ieee754_log(x)
  * Return the logarithm of x
@@ -719,7 +648,7 @@
   z  = one-(r-z);
   j  = __HI(z);
   j += (n<<20);
-  if((j>>20)<=0) z = scalbn(z,n);       /* subnormal output */
+  if((j>>20)<=0) z = scalbnA(z,n);       /* subnormal output */
   else __HI(z) += (n<<20);
   return s*z;
 }
--- a/hotspot/src/share/vm/runtime/sharedRuntimeTrig.cpp	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/src/share/vm/runtime/sharedRuntimeTrig.cpp	Wed Jul 05 19:44:04 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, 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
@@ -63,63 +63,7 @@
 #define SAFEBUF
 #endif
 
-#include <math.h>
-
-// VM_LITTLE_ENDIAN is #defined appropriately in the Makefiles
-// [jk] this is not 100% correct because the float word order may different
-// from the byte order (e.g. on ARM)
-#ifdef VM_LITTLE_ENDIAN
-# define __HI(x) *(1+(int*)&x)
-# define __LO(x) *(int*)&x
-#else
-# define __HI(x) *(int*)&x
-# define __LO(x) *(1+(int*)&x)
-#endif
-
-static double copysignA(double x, double y) {
-  __HI(x) = (__HI(x)&0x7fffffff)|(__HI(y)&0x80000000);
-  return x;
-}
-
-/*
- * scalbn (double x, int n)
- * scalbn(x,n) returns x* 2**n  computed by  exponent
- * manipulation rather than by actually performing an
- * exponentiation or a multiplication.
- */
-
-static const double
-two54   =  1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
-twom54  =  5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
-hugeX  = 1.0e+300,
-tiny   = 1.0e-300;
-
-static double scalbnA (double x, int n) {
-  int  k,hx,lx;
-  hx = __HI(x);
-  lx = __LO(x);
-  k = (hx&0x7ff00000)>>20;              /* extract exponent */
-  if (k==0) {                           /* 0 or subnormal x */
-    if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
-    x *= two54;
-    hx = __HI(x);
-    k = ((hx&0x7ff00000)>>20) - 54;
-    if (n< -50000) return tiny*x;       /*underflow*/
-  }
-  if (k==0x7ff) return x+x;             /* NaN or Inf */
-  k = k+n;
-  if (k >  0x7fe) return hugeX*copysignA(hugeX,x); /* overflow  */
-  if (k > 0)                            /* normal result */
-    {__HI(x) = (hx&0x800fffff)|(k<<20); return x;}
-  if (k <= -54) {
-    if (n > 50000)      /* in case integer overflow in n+k */
-      return hugeX*copysignA(hugeX,x);  /*overflow*/
-    else return tiny*copysignA(tiny,x); /*underflow*/
-  }
-  k += 54;                              /* subnormal result */
-  __HI(x) = (hx&0x800fffff)|(k<<20);
-  return x*twom54;
-}
+#include "runtime/sharedRuntimeMath.hpp"
 
 /*
  * __kernel_rem_pio2(x,y,e0,nx,prec,ipio2)
--- a/hotspot/test/TEST.groups	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/TEST.groups	Wed Jul 05 19:44:04 2017 +0200
@@ -83,6 +83,7 @@
   runtime/RedefineObject/TestRedefineObject.java \
   runtime/XCheckJniJsig/XCheckJSig.java \
   serviceability/attach/AttachWithStalePidFile.java \
+  serviceability/jvmti/8036666/GetObjectLockCount.java \
   serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java \
   serviceability/dcmd/DynLibDcmdTest.java
 
@@ -134,9 +135,12 @@
   gc/parallelScavenge/TestDynShrinkHeap.java \
   runtime/InternalApi/ThreadCpuTimesDeadlock.java \
   serviceability/threads/TestFalseDeadLock.java \
+  serviceability/jvmti/GetObjectSizeOverflow.java \
+  serviceability/jvmti/TestRedefineWithUnresolvedClass.java \
   compiler/tiered/NonTieredLevelsTest.java \
   compiler/tiered/TieredLevelsTest.java \
-  compiler/intrinsics/bmi/verifycode
+  compiler/intrinsics/bmi/verifycode \
+  runtime/whitebox/WBStackSize.java
 
 # Compact 2 adds full VM tests
 compact2 = \
--- a/hotspot/test/compiler/5091921/Test7005594.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/compiler/5091921/Test7005594.java	Wed Jul 05 19:44:04 2017 +0200
@@ -25,7 +25,6 @@
 /**
  * @test
  * @bug 7005594
- * @ignore 7117034
  * @summary Array overflow not handled correctly with loop optimzations
  *
  * @run shell Test7005594.sh
--- a/hotspot/test/compiler/5091921/Test7005594.sh	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/compiler/5091921/Test7005594.sh	Wed Jul 05 19:44:04 2017 +0200
@@ -78,7 +78,7 @@
 
 ${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Test7005594.java
 
-${TESTJAVA}/bin/java ${TESTVMOPTS} -Xms1600m -XX:+IgnoreUnrecognizedVMOptions -XX:-ZapUnusedHeapArea -Xcomp -XX:CompileOnly=Test7005594.test Test7005594 > test.out 2>&1
+${TESTJAVA}/bin/java ${TESTVMOPTS} -Xmx1600m -Xms1600m -XX:+IgnoreUnrecognizedVMOptions -XX:-ZapUnusedHeapArea -Xcomp -XX:CompileOnly=Test7005594.test Test7005594 > test.out 2>&1
 
 result=$?
 
@@ -97,7 +97,7 @@
 fi
 
 # The test should pass when no enough space for object heap
-grep "Could not reserve enough space for object heap" test.out
+grep "Could not reserve enough space for .*object heap" test.out
 if [ $? = 0 ]
 then
   echo "Passed"
--- a/hotspot/test/compiler/arguments/BMICommandLineOptionTestBase.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/compiler/arguments/BMICommandLineOptionTestBase.java	Wed Jul 05 19:44:04 2017 +0200
@@ -25,6 +25,12 @@
 
 /**
  * Base class for all X86 bit manipulation related command line options.
+ *
+ * Note that this test intended to verify that VM could be launched with
+ * specific options and that values of these options processed correctly.
+ * In order to do that test launch a new VM with tested options, the same
+ * flavor-specific flag as one that was used for parent VM (-client, -server,
+ * -minimal, -graal) and '-version'.
  */
 public abstract class BMICommandLineOptionTestBase
               extends CPUSpecificCommandLineOptionTest {
@@ -58,10 +64,11 @@
                                         String supportedCPUFeatures[],
                                         String unsupportedCPUFeatures[]) {
         super(".*", supportedCPUFeatures, unsupportedCPUFeatures);
-            this.optionName = optionName;
-            this.warningMessage = warningMessage;
-            this.errorMessage = CommandLineOptionTest.
-                UNRECOGNIZED_OPTION_ERROR_FORMAT.format(optionName);
+        this.optionName = optionName;
+        this.warningMessage = warningMessage;
+        this.errorMessage = String.format(
+                CommandLineOptionTest.UNRECOGNIZED_OPTION_ERROR_FORMAT,
+                optionName);
     }
 
 }
--- a/hotspot/test/compiler/arguments/BMISupportedCPUTest.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/compiler/arguments/BMISupportedCPUTest.java	Wed Jul 05 19:44:04 2017 +0200
@@ -28,6 +28,12 @@
  * Test on bit manipulation related command line options,
  * that should be executed on CPU that supports all required
  * features.
+ *
+ * Note that this test intended to verify that VM could be launched with
+ * specific options and that values of these options processed correctly.
+ * In order to do that test launch a new VM with tested options, the same
+ * flavor-specific flag as one that was used for parent VM (-client, -server,
+ * -minimal, -graal) and '-version'.
  */
 public class BMISupportedCPUTest extends BMICommandLineOptionTestBase {
 
@@ -49,24 +55,38 @@
 
     @Override
     public void runTestCases() throws Throwable {
-        // verify that VM will succesfully start up whithout warnings
-        CommandLineOptionTest.
-            verifyJVMStartup("-XX:+" + optionName,
-                             null, new String[] { warningMessage },
-                             ExitCode.OK);
+        /*
+          Verify that VM will successfully start up without warnings.
+          VM will be launched with following flags:
+          -XX:+<tested option> -version
+        */
+        CommandLineOptionTest.verifySameJVMStartup(null,
+                new String[] { warningMessage }, ExitCode.OK,
+                CommandLineOptionTest.prepareBooleanFlag(optionName, true));
 
-        // verify that VM will succesfully start up whithout warnings
-        CommandLineOptionTest.
-            verifyJVMStartup("-XX:-" + optionName,
-                             null, new String[] { warningMessage },
-                             ExitCode.OK);
+        /*
+          Verify that VM will successfully start up without warnings.
+          VM will be launched with following flags:
+          -XX:-<tested option> -version
+        */
+        CommandLineOptionTest.verifySameJVMStartup(null,
+                new String[] { warningMessage }, ExitCode.OK,
+                CommandLineOptionTest.prepareBooleanFlag(optionName, false));
 
-        // verify that on appropriate CPU option in on by default
-        CommandLineOptionTest.verifyOptionValue(optionName, "true");
+        /*
+          Verify that on appropriate CPU option in on by default.
+          VM will be launched with following flags:
+          -version
+        */
+        CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true");
 
-        // verify that option could be explicitly turned off
-        CommandLineOptionTest.verifyOptionValue(optionName, "false",
-                                                "-XX:-" + optionName);
+        /*
+          Verify that option could be explicitly turned off.
+          VM will be launched with following flags:
+          -XX:-<tested option> -version
+        */
+        CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
+                CommandLineOptionTest.prepareBooleanFlag(optionName, false));
     }
 }
 
--- a/hotspot/test/compiler/arguments/BMIUnsupportedCPUTest.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/compiler/arguments/BMIUnsupportedCPUTest.java	Wed Jul 05 19:44:04 2017 +0200
@@ -28,6 +28,12 @@
  * Test on bit manipulation related command line options,
  * that should be executed on CPU that does not support
  * required features.
+ *
+ * Note that this test intended to verify that VM could be launched with
+ * specific options and that values of these options processed correctly.
+ * In order to do that test launch a new VM with tested options, the same
+ * flavor-specific flag as one that was used for parent VM (-client, -server,
+ * -minimal, -graal) and '-version'.
  */
 public class BMIUnsupportedCPUTest extends BMICommandLineOptionTestBase {
 
@@ -64,28 +70,38 @@
      */
     public void unsupportedX86CPUTestCases() throws Throwable {
 
-        // verify that VM will succesfully start up, but output will
-        // contain a warning
-        CommandLineOptionTest.
-            verifyJVMStartup("-XX:+" + optionName,
-                             new String[] { warningMessage },
-                             new String[] { errorMessage },
-                             ExitCode.OK);
+        /*
+          Verify that VM will successfully start up, but output will contain a
+          warning. VM will be launched with following options:
+          -XX:+<tested option> -version
+        */
+        CommandLineOptionTest.verifySameJVMStartup(
+                new String[] { warningMessage }, new String[] { errorMessage },
+                ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(
+                        optionName, true));
 
-        // verify that VM will succesfully startup without any warnings
-        CommandLineOptionTest.
-            verifyJVMStartup("-XX:-" + optionName,
-                             null,
-                             new String[] { warningMessage, errorMessage },
-                             ExitCode.OK);
+        /*
+          Verify that VM will successfully startup without any warnings.
+          VM will be launched with following options:
+          -XX:-<tested option> -version
+        */
+        CommandLineOptionTest.verifySameJVMStartup(null,
+                new String[] { warningMessage, errorMessage }, ExitCode.OK,
+                CommandLineOptionTest.prepareBooleanFlag(optionName, false));
 
-        // verify that on unsupported CPUs option is off by default
-        CommandLineOptionTest.verifyOptionValue(optionName, "false");
+        /*
+          Verify that on unsupported CPUs option is off by default.
+          VM will be launched with following options: -version
+        */
+        CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false");
 
-        // verify that on unsupported CPUs option will be off even if
-        // it was explicitly turned on by uset
-        CommandLineOptionTest.verifyOptionValue(optionName, "false",
-                                                     "-XX:+" + optionName);
+        /*
+          Verify that on unsupported CPUs option will be off even if
+          it was explicitly turned on by user. VM will be launched with
+          following options: -XX:+<tested option> -version
+        */
+        CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
+                CommandLineOptionTest.prepareBooleanFlag(optionName, true));
 
     }
 
@@ -97,18 +113,17 @@
      */
     public void unsupportedNonX86CPUTestCases() throws Throwable {
 
-        // verify that VM known nothing about tested option
-        CommandLineOptionTest.
-            verifyJVMStartup("-XX:+" + optionName,
-                             new String[] { errorMessage },
-                             null,
-                             ExitCode.FAIL);
+        /*
+          Verify that VM known nothing about tested option. VM will be launched
+          with following options: -XX:[+-]<tested option> -version
+        */
+        CommandLineOptionTest.verifySameJVMStartup(
+                new String[] { errorMessage }, null, ExitCode.FAIL,
+                CommandLineOptionTest.prepareBooleanFlag(optionName, true));
 
-        CommandLineOptionTest.
-            verifyJVMStartup("-XX:-" + optionName,
-                             new String[] { errorMessage },
-                             null,
-                             ExitCode.FAIL);
+        CommandLineOptionTest.verifySameJVMStartup(
+                new String[] { errorMessage }, null, ExitCode.FAIL,
+                CommandLineOptionTest.prepareBooleanFlag(optionName, false));
     }
 }
 
--- a/hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnSupportedCPU.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnSupportedCPU.java	Wed Jul 05 19:44:04 2017 +0200
@@ -40,7 +40,8 @@
 import com.oracle.java.testlibrary.cli.*;
 
 public class TestUseCountTrailingZerosInstructionOnSupportedCPU
-     extends BMISupportedCPUTest {
+        extends BMISupportedCPUTest {
+    private static final String DISABLE_BMI = "-XX:-UseBMI1Instructions";
 
     public TestUseCountTrailingZerosInstructionOnSupportedCPU() {
         super("UseCountTrailingZerosInstruction", TZCNT_WARNING, "bmi1");
@@ -51,18 +52,23 @@
 
         super.runTestCases();
 
-        // verify that option will be disabled if all BMI1 instuctions
-        // are explicitly disabled
-        CommandLineOptionTest.
-            verifyOptionValue("UseCountTrailingZerosInstruction", "false",
-                              "-XX:-UseBMI1Instructions");
+        /*
+          Verify that option will be disabled if all BMI1 instructions
+          are explicitly disabled. VM will be launched with following options:
+          -XX:-UseBMI1Instructions -version
+        */
+        CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
+                TestUseCountTrailingZerosInstructionOnSupportedCPU.DISABLE_BMI);
 
-        // verify that option could be turned on even if other BMI1
-        // instructions were turned off
-        CommandLineOptionTest.
-            verifyOptionValue("UseCountTrailingZerosInstruction", "true",
-                              "-XX:-UseBMI1Instructions",
-                              "-XX:+UseCountTrailingZerosInstruction");
+        /*
+          Verify that option could be turned on even if other BMI1
+          instructions were turned off. VM will be launched with following
+          options: -XX:-UseBMI1Instructions
+          -XX:+UseCountTrailingZerosInstruction -version
+        */
+        CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true",
+                TestUseCountTrailingZerosInstructionOnSupportedCPU.DISABLE_BMI,
+                CommandLineOptionTest.prepareBooleanFlag(optionName, true));
     }
 
     public static void main(String args[]) throws Throwable {
--- a/hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnUnsupportedCPU.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnUnsupportedCPU.java	Wed Jul 05 19:44:04 2017 +0200
@@ -25,7 +25,7 @@
  * @test
  * @bug 8031321
  * @summary Verify processing of UseCountTrailingZerosInstruction option
- *          on CPU without TZCNT instuction (BMI1 feature) support.
+ *          on CPU without TZCNT instruction (BMI1 feature) support.
  * @library /testlibrary /testlibrary/whitebox
  * @build TestUseCountTrailingZerosInstructionOnUnsupportedCPU
  *        BMIUnsupportedCPUTest
@@ -40,7 +40,8 @@
 import com.oracle.java.testlibrary.cli.*;
 
 public class TestUseCountTrailingZerosInstructionOnUnsupportedCPU
-     extends BMIUnsupportedCPUTest {
+        extends BMIUnsupportedCPUTest {
+    private static final String ENABLE_BMI = "-XX:+UseBMI1Instructions";
 
     public TestUseCountTrailingZerosInstructionOnUnsupportedCPU() {
         super("UseCountTrailingZerosInstruction", TZCNT_WARNING, "bmi1");
@@ -51,16 +52,24 @@
 
         super.unsupportedX86CPUTestCases();
 
-        // verify that option will not be turned on during
-        // UseBMI1Instuctions processing
-        CommandLineOptionTest.
-            verifyOptionValue("UseCountTrailingZerosInstruction", "false",
-                              "-XX:+UseBMI1Instructions");
+        /*
+          Verify that option will not be turned on during UseBMI1Instructions
+          processing. VM will be launched with following options:
+          -XX:+UseBMI1Instructions -version
+        */
+        CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
+                TestUseCountTrailingZerosInstructionOnUnsupportedCPU.
+                        ENABLE_BMI);
 
-        CommandLineOptionTest.
-            verifyOptionValue("UseCountTrailingZerosInstruction", "false",
-                              "-XX:+UseCountTrailingZerosInstruction",
-                              "-XX:+UseBMI1Instructions");
+        /*
+          VM will be launched with following options:
+          -XX:+UseCountTrailingZerosInstruction -XX:+UseBMI1Instructions
+          -version
+        */
+        CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
+                CommandLineOptionTest.prepareBooleanFlag(optionName, true),
+                TestUseCountTrailingZerosInstructionOnUnsupportedCPU.
+                        ENABLE_BMI);
     }
 
     public static void main(String args[]) throws Throwable {
--- a/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java	Wed Jul 05 19:44:04 2017 +0200
@@ -25,7 +25,7 @@
  * @test
  * @bug 8031752
  * @summary speculative traps need to be cleaned up at GC
- * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:+UseTypeSpeculation -XX:TypeProfileLevel=222 -XX:CompileCommand=exclude,java.lang.reflect.Method::invoke -XX:CompileCommand=exclude,sun.reflect.DelegatingMethodAccessorImpl::invoke -Xmx1M TestSpecTrapClassUnloading
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:+UseTypeSpeculation -XX:TypeProfileLevel=222 -XX:CompileCommand=exclude,java.lang.reflect.Method::invoke -XX:CompileCommand=exclude,sun.reflect.DelegatingMethodAccessorImpl::invoke -Xmx512M TestSpecTrapClassUnloading
  *
  */
 
@@ -45,7 +45,7 @@
         MemoryChunk other;
         long[] array;
         MemoryChunk(MemoryChunk other) {
-            other = other;
+            this.other = other;
             array = new long[1024 * 1024 * 1024];
         }
     }
--- a/hotspot/test/gc/parallelScavenge/TestDynShrinkHeap.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/gc/parallelScavenge/TestDynShrinkHeap.java	Wed Jul 05 19:44:04 2017 +0200
@@ -26,7 +26,7 @@
  * @bug 8016479
  * @summary Verify that the heap shrinks after full GC according to the current values of the Min/MaxHeapFreeRatio flags
  * @library /testlibrary
- * @run main/othervm -XX:+UseAdaptiveSizePolicyWithSystemGC -XX:+UseParallelGC -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 -verbose:gc TestDynShrinkHeap
+ * @run main/othervm -XX:+UseAdaptiveSizePolicyWithSystemGC -XX:+UseParallelGC -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 -Xmx1g -verbose:gc TestDynShrinkHeap
  */
 import com.oracle.java.testlibrary.DynamicVMOption;
 import java.lang.management.ManagementFactory;
@@ -41,7 +41,7 @@
     public static final String MAX_FREE_RATIO_FLAG_NAME = "MaxHeapFreeRatio";
 
     private static ArrayList<byte[]> list = new ArrayList<>(0);
-    private static final int M = 1024 * 1024; // to make heap more manageable by test code
+    private static final int LEN = 512 * 1024 + 1;
 
     public TestDynShrinkHeap() {
     }
@@ -69,12 +69,12 @@
     }
 
     private void eat() {
-        for (int i = 0; i < M; i++) {
+        for (int i = 0; i < LEN; i++) {
             list.add(new byte[1024]);
         }
-        MemoryUsagePrinter.printMemoryUsage("allocated " + M + " arrays");
+        MemoryUsagePrinter.printMemoryUsage("allocated " + LEN + " arrays");
 
-        list.subList(0, M / 2).clear();
+        list.subList(0, LEN / 2).clear();
         System.gc();
         MemoryUsagePrinter.printMemoryUsage("array halved");
     }
--- a/hotspot/test/runtime/6929067/T.java	Thu Jun 05 19:38:17 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-public class T
-{
-  public static boolean foo(boolean bar)
-  {
-    return bar;
-  }
-
-  public static void printIt()
-  {
-    System.out.println("Hello");
-  }
-}
--- a/hotspot/test/runtime/6929067/Test6929067.sh	Thu Jun 05 19:38:17 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-#!/bin/sh
-
-##
-## @test Test6929067.sh
-## @bug 6929067
-## @bug 8021296
-## @bug 8025519
-## @summary Stack guard pages should be removed when thread is detached
-## @run shell Test6929067.sh
-##
-
-if [ "${TESTSRC}" = "" ]
-then
-  TESTSRC=${PWD}
-  echo "TESTSRC not set.  Using "${TESTSRC}" as default"
-fi
-echo "TESTSRC=${TESTSRC}"
-## Adding common setup Variables for running shell tests.
-. ${TESTSRC}/../../test_env.sh
-
-if [ "${VM_OS}" != "linux" ]
-then
-  echo "Test only valid for Linux"
-  exit 0
-fi
-
-gcc_cmd=`which gcc`
-if [ "x$gcc_cmd" = "x" ]; then
-  echo "WARNING: gcc not found. Cannot execute test." 2>&1
-  exit 0;
-fi
-
-CFLAGS=-m${VM_BITS}
-
-LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE}:/usr/lib:$LD_LIBRARY_PATH
-export LD_LIBRARY_PATH
-
-cp ${TESTSRC}/*.java ${THIS_DIR}
-${COMPILEJAVA}/bin/javac *.java
-
-echo "Architecture: ${VM_CPU}"
-echo "Compilation flag: ${CFLAGS}"
-echo "VM type: ${VM_TYPE}"
-echo "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}"
-
-# Note pthread may not be found thus invoke creation will fail to be created.
-# Check to ensure you have a /usr/lib/libpthread.so if you don't please look
-# for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation.
-
-$gcc_cmd -DLINUX ${CFLAGS} -o invoke \
-    -I${TESTJAVA}/include -I${TESTJAVA}/include/linux \
-    -L${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE} \
-     ${TESTSRC}/invoke.c -ljvm -lpthread
-
-./invoke
-exit $?
--- a/hotspot/test/runtime/6929067/invoke.c	Thu Jun 05 19:38:17 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-#include <assert.h>
-#include <jni.h>
-#include <alloca.h>
-
-#include <pthread.h>
-
-union env_union
-{
-  void *void_env;
-  JNIEnv *jni_env;
-};
-
-union env_union tmp;
-JNIEnv* env;
-JavaVM* jvm;
-JavaVMInitArgs vm_args;
-JavaVMOption options[1];
-jclass class_id;
-jmethodID method_id;
-jint result;
-
-long product(unsigned long n, unsigned long m) {
-    if (m == 1) {
-      return n;
-    } else {
-      int *p = alloca(sizeof (int));
-      *p = n;
-      return product (n, m-1) + *p;
-    }
-}
-
-void *
-floobydust (void *p)
-{
-  (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
-  env = tmp.jni_env;
-
-  class_id = (*env)->FindClass (env, "T");
-  assert (class_id);
-
-  method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
-  assert (method_id);
-
-  (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
-
-  (*jvm)->DetachCurrentThread(jvm);
-
-  printf("%ld\n", product(5000,5000));
-
-  (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
-  env = tmp.jni_env;
-
-  class_id = (*env)->FindClass (env, "T");
-  assert (class_id);
-
-  method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
-  assert (method_id);
-
-  (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
-
-  (*jvm)->DetachCurrentThread(jvm);
-
-  printf("%ld\n", product(5000,5000));
-
-  return NULL;
-}
-
-int
-main (int argc, const char** argv)
-{
-  options[0].optionString = "-Xss320k";
-
-  vm_args.version = JNI_VERSION_1_2;
-  vm_args.ignoreUnrecognized = JNI_TRUE;
-  vm_args.options = options;
-  vm_args.nOptions = 1;
-
-  result = JNI_CreateJavaVM (&jvm, &tmp.void_env, &vm_args);
-  assert (result >= 0);
-
-  env = tmp.jni_env;
-
-  floobydust (NULL);
-
-  pthread_t thr;
-  pthread_create (&thr, NULL, floobydust, NULL);
-  pthread_join (thr, NULL);
-
-  return 0;
-}
--- a/hotspot/test/runtime/InitialThreadOverflow/DoOverflow.java	Thu Jun 05 19:38:17 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2013, 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.
- */
-
-public class DoOverflow {
-
-    static int count;
-
-    public void overflow() {
-        count+=1;
-        overflow();
-    }
-
-    public static void printIt() {
-        System.out.println("Going to overflow stack");
-        try {
-            new DoOverflow().overflow();
-        } catch(java.lang.StackOverflowError e) {
-            System.out.println("Overflow OK " + count);
-        }
-    }
-}
--- a/hotspot/test/runtime/InitialThreadOverflow/invoke.c	Thu Jun 05 19:38:17 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#include <assert.h>
-#include <jni.h>
-
-#include <pthread.h>
-
-JavaVM* jvm;
-
-void *
-floobydust (void *p) {
-  JNIEnv *env;
-  jclass class_id;
-  jmethodID method_id;
-
-  (*jvm)->AttachCurrentThread(jvm, (void**)&env, NULL);
-
-  class_id = (*env)->FindClass (env, "DoOverflow");
-  assert (class_id);
-
-  method_id = (*env)->GetStaticMethodID(env, class_id, "printIt", "()V");
-  assert (method_id);
-
-  (*env)->CallStaticVoidMethod(env, class_id, method_id, NULL);
-
-  (*jvm)->DetachCurrentThread(jvm);
-}
-
-int
-main (int argc, const char** argv) {
-  JavaVMOption options[1];
-  options[0].optionString = (char*) "-Xss320k";
-
-  JavaVMInitArgs vm_args;
-  vm_args.version = JNI_VERSION_1_2;
-  vm_args.ignoreUnrecognized = JNI_TRUE;
-  vm_args.options = options;
-  vm_args.nOptions = 1;
-
-  JNIEnv* env;
-  jint result = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
-  assert(result >= 0);
-
-  pthread_t thr;
-  pthread_create(&thr, NULL, floobydust, NULL);
-  pthread_join(thr, NULL);
-
-  floobydust(NULL);
-
-  return 0;
-}
--- a/hotspot/test/runtime/InitialThreadOverflow/testme.sh	Thu Jun 05 19:38:17 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-#!/bin/sh
-
-# Copyright (c) 2013 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 testme.sh
-# @bug 8009062
-# @summary Poor performance of JNI AttachCurrentThread after fix for 7017193
-# @compile DoOverflow.java
-# @run shell testme.sh
-
-set -x
-if [ "${TESTSRC}" = "" ]
-then
-  TESTSRC=${PWD}
-  echo "TESTSRC not set.  Using "${TESTSRC}" as default"
-fi
-echo "TESTSRC=${TESTSRC}"
-## Adding common setup Variables for running shell tests.
-. ${TESTSRC}/../../test_env.sh
-
-if [ "${VM_OS}" != "linux" ]
-then
-  echo "Test only valid for Linux"
-  exit 0
-fi
-
-gcc_cmd=`which gcc`
-if [ "x$gcc_cmd" = "x" ]; then
-    echo "WARNING: gcc not found. Cannot execute test." 2>&1
-    exit 0;
-fi
-
-CFLAGS="-m${VM_BITS}"
-
-LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE}:/usr/lib:$LD_LIBRARY_PATH
-export LD_LIBRARY_PATH
-
-cp ${TESTSRC}/invoke.c .
-
-# Copy the result of our @compile action:
-cp ${TESTCLASSES}/DoOverflow.class .
-
-echo "Architecture: ${VM_CPU}"
-echo "Compilation flag: ${CFLAGS}"
-echo "VM type: ${VM_TYPE}"
-echo "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}"
-
-# Note pthread may not be found thus invoke creation will fail to be created.
-# Check to ensure you have a /usr/lib/libpthread.so if you don't please look
-# for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation.
-
-$gcc_cmd -DLINUX ${CFLAGS} -o invoke \
-    -I${TESTJAVA}/include -I${TESTJAVA}/include/linux \
-    -L${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE} \
-    -ljvm -lpthread invoke.c
-
-./invoke
-exit $?
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/StackGuardPages/DoOverflow.java	Wed Jul 05 19:44:04 2017 +0200
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, 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.
+ */
+
+public class DoOverflow {
+
+    static int count;
+
+    public void overflow() {
+        count+=1;
+        overflow();
+    }
+
+    public static void printAlive() {
+      System.out.println("Java thread is alive.");
+    }
+
+    public static void printIt() {
+        System.out.println("Going to overflow stack");
+        try {
+            new DoOverflow().overflow();
+        } catch(java.lang.StackOverflowError e) {
+            System.out.println("Test PASSED. Got StackOverflowError at " + count + " iteration");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/StackGuardPages/invoke.c	Wed Jul 05 19:44:04 2017 +0200
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2010, 2014, 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.
+ *
+ */
+
+/* This code tests the fact that we actually remove stack guard page when calling
+ * JavaThread::exit() i.e. when detaching from current thread.
+ * We overflow the stack and check that we get access error because of a guard page.
+ * Than we detach from vm thread and overflow stack once again. This time we shouldn't
+ * get access error because stack guard page is removed
+ *
+ * Notice: due a complicated interaction of signal handlers, the test may crash.
+ * It's OK - don't file a bug.
+ */
+
+#include <assert.h>
+#include <jni.h>
+#include <alloca.h>
+#include <signal.h>
+#include <sys/mman.h>
+#include <stdlib.h>
+#include <sys/ucontext.h>
+#include <setjmp.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <errno.h>
+
+#include <pthread.h>
+
+JavaVM* _jvm;
+
+static jmp_buf  context;
+
+static int _last_si_code = -1;
+static int _failures = 0;
+static int _rec_count = 0;
+static int _kp_rec_count = 0;
+
+pid_t gettid() {
+  return (pid_t) syscall(SYS_gettid);
+}
+
+static void handler(int sig, siginfo_t *si, void *unused) {
+  _last_si_code = si->si_code;
+  printf("Got SIGSEGV(%d) at address: 0x%lx\n",si->si_code, (long) si->si_addr);
+  longjmp(context, 1);
+}
+
+void set_signal_handler() {
+  static char altstack[SIGSTKSZ];
+
+  stack_t ss = {
+    .ss_size = SIGSTKSZ,
+    .ss_flags = 0,
+    .ss_sp = altstack
+  };
+
+  struct sigaction sa = {
+    .sa_sigaction = handler,
+    .sa_flags = SA_ONSTACK | SA_SIGINFO | SA_RESETHAND
+  };
+
+  _last_si_code = -1;
+
+  sigaltstack(&ss, 0);
+  sigemptyset(&sa.sa_mask);
+  if (sigaction(SIGSEGV, &sa, NULL) == -1) {
+    fprintf(stderr, "Test ERROR. Can't set sigaction (%d)\n", errno);
+    exit(7);
+  }
+}
+
+void *run_java_overflow (void *p) {
+  JNIEnv *env;
+  jclass class_id;
+  jmethodID method_id;
+  int res;
+
+  res = (*_jvm)->AttachCurrentThread(_jvm, (void**)&env, NULL);
+  if (res != JNI_OK) {
+    fprintf(stderr, "Test ERROR. Can't attach to current thread\n");
+    exit(7);
+  }
+
+  class_id = (*env)->FindClass (env, "DoOverflow");
+  if (class_id == NULL) {
+    fprintf(stderr, "Test ERROR. Can't load class DoOverflow\n");
+    exit(7);
+  }
+
+  method_id = (*env)->GetStaticMethodID(env, class_id, "printIt", "()V");
+  if (method_id == NULL) {
+    fprintf(stderr, "Test ERROR. Can't find method DoOverflow.printIt\n");
+    exit(7);
+  }
+
+  (*env)->CallStaticVoidMethod(env, class_id, method_id, NULL);
+
+  res = (*_jvm)->DetachCurrentThread(_jvm);
+  if (res != JNI_OK) {
+    fprintf(stderr, "Test ERROR. Can't call detach from current thread\n");
+    exit(7);
+  }
+}
+
+void do_overflow(){
+  int *p = alloca(sizeof(int));
+  if (_kp_rec_count == 0 || _rec_count < _kp_rec_count) {
+      _rec_count ++;
+      do_overflow();
+  }
+}
+
+void *run_native_overflow(void *p) {
+  // Test that stack guard page is correctly set for initial and non initial thread
+  // and correctly removed for the initial thread
+  JNIEnv *env;
+  jclass class_id;
+  jmethodID method_id;
+  int res;
+
+  printf("run_native_overflow %ld\n", (long) gettid());
+
+  res = (*_jvm)->AttachCurrentThread(_jvm, (void **)&env, NULL);
+  if (res != JNI_OK) {
+    fprintf(stderr, "Test ERROR. Can't attach to current thread\n");
+    exit(7);
+  }
+
+  class_id = (*env)->FindClass (env, "DoOverflow");
+  if (class_id == NULL) {
+    fprintf(stderr, "Test ERROR. Can't load class DoOverflow\n");
+    exit(7);
+  }
+
+  method_id = (*env)->GetStaticMethodID (env, class_id, "printAlive", "()V");
+  if (method_id == NULL) {
+    fprintf(stderr, "Test ERROR. Can't find method DoOverflow.printAlive\n");
+    exit(7);
+  }
+
+  (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
+
+  set_signal_handler();
+  if (! setjmp(context)) {
+    do_overflow();
+  }
+
+  if (_last_si_code == SEGV_ACCERR) {
+    printf("Test PASSED. Got access violation accessing guard page at %d\n", _rec_count);
+  }
+
+  res = (*_jvm)->DetachCurrentThread(_jvm);
+  if (res != JNI_OK) {
+    fprintf(stderr, "Test ERROR. Can't call detach from current thread\n");
+    exit(7);
+  }
+
+  if (getpid() != gettid()) {
+    // For non-initial thread we don't unmap the region but call os::uncommit_memory and keep PROT_NONE
+    // so if host has enough swap space we will get the same SEGV with code SEGV_ACCERR(2) trying
+    // to access it as if the guard page is present.
+    // We have no way to check this, so bail out, marking test as succeeded
+    printf("Test PASSED. Not initial thread\n");
+    return NULL;
+  }
+
+  // Limit depth of recursion for second run. It can't exceed one for first run.
+  _kp_rec_count = _rec_count;
+  _rec_count = 0;
+
+  set_signal_handler();
+  if (! setjmp(context)) {
+    do_overflow();
+  }
+
+  if (_last_si_code == SEGV_ACCERR) {
+      ++ _failures;
+      fprintf(stderr,"Test FAILED. Stack guard page is still there at %d\n", _rec_count);
+  } else if (_last_si_code == -1) {
+      printf("Test PASSED. No stack guard page is present. Maximum recursion level reached at %d\n", _rec_count);
+  }
+  else{
+      printf("Test PASSED. No stack guard page is present. SIGSEGV(%d) at %d\n", _last_si_code, _rec_count);
+  }
+
+  return NULL;
+}
+
+void usage() {
+  fprintf(stderr, "Usage: invoke test_java_overflow\n");
+  fprintf(stderr, "       invoke test_native_overflow\n");
+  exit(7);
+}
+
+
+int main (int argc, const char** argv) {
+  JavaVMInitArgs vm_args;
+  JavaVMOption options[2];
+  JNIEnv* env;
+
+  printf("Test started with pid: %ld\n", (long) getpid());
+
+  options[0].optionString = "-Xint";
+  options[1].optionString = "-Xss320k";
+
+  vm_args.version = JNI_VERSION_1_2;
+  vm_args.ignoreUnrecognized = JNI_TRUE;
+  vm_args.options = options;
+  vm_args.nOptions = 2;
+
+  if (JNI_CreateJavaVM (&_jvm, (void **)&env, &vm_args) < 0 ) {
+    fprintf(stderr, "Test ERROR. Can't create JavaVM\n");
+    exit(7);
+  }
+
+  pthread_t thr;
+
+  if (argc > 1 && strcmp(argv[1], "test_java_overflow") == 0) {
+    printf("\nTesting JAVA_OVERFLOW\n");
+
+    printf("Testing stack guard page behaviour for other thread\n");
+    pthread_create (&thr, NULL, run_java_overflow, NULL);
+    pthread_join (thr, NULL);
+
+    printf("Testing stack guard page behaviour for initial thread\n");
+    run_java_overflow(NULL);
+    // This test crash on error
+    exit(0);
+  }
+
+  if (argc > 1 && strcmp(argv[1], "test_native_overflow") == 0) {
+    printf("\nTesting NATIVE_OVERFLOW\n");
+
+    printf("Testing stack guard page behaviour for other thread\n");
+    pthread_create (&thr, NULL, run_native_overflow, NULL);
+    pthread_join (thr, NULL);
+
+    printf("Testing stack guard page behaviour for initial thread\n");
+    run_native_overflow(NULL);
+
+    exit((_failures > 0) ? 1 : 0);
+  }
+
+  fprintf(stderr, "Test ERROR. Unknown parameter %s\n", ((argc > 1) ? argv[1] : "none"));
+  usage();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/StackGuardPages/testme.sh	Wed Jul 05 19:44:04 2017 +0200
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+#
+# @test testme.sh
+# @summary Stack guard pages should be installed correctly and removed when thread is detached
+# @run shell testme.sh
+#
+
+if [ "${TESTSRC}" = "" ]
+then
+  TESTSRC=${PWD}
+  echo "TESTSRC not set.  Using "${TESTSRC}" as default"
+fi
+echo "TESTSRC=${TESTSRC}"
+## Adding common setup Variables for running shell tests.
+. ${TESTSRC}/../../test_env.sh
+
+if [ "${VM_OS}" != "linux" ]
+then
+  echo "Test only valid for Linux"
+  exit 0
+fi
+
+gcc_cmd=`which gcc`
+if [ "x$gcc_cmd" = "x" ]; then
+  echo "WARNING: gcc not found. Cannot execute test." 2>&1
+  exit 0;
+fi
+
+CFLAGS=-m${VM_BITS}
+
+LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE}:${TESTJAVA}/lib/${VM_CPU}/${VM_TYPE}:/usr/lib:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH
+
+echo "Architecture: ${VM_CPU}"
+echo "Compilation flag: ${CFLAGS}"
+echo "VM type: ${VM_TYPE}"
+echo "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}"
+
+# Note pthread may not be found thus invoke creation will fail to be created.
+# Check to ensure you have a /usr/lib/libpthread.so if you don't please look
+# for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation.
+
+cp ${TESTSRC}/DoOverflow.java .
+${COMPILEJAVA}/bin/javac DoOverflow.java
+
+$gcc_cmd -DLINUX -g3 ${CFLAGS} -o invoke \
+    -I${TESTJAVA}/include -I${TESTJAVA}/include/linux \
+    -L${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE} \
+    -L${TESTJAVA}/lib/${VM_CPU}/${VM_TYPE} \
+     ${TESTSRC}/invoke.c -ljvm -lpthread
+
+if [ $? -ne 0 ] ; then
+    echo "Compile failed, Ignoring failed compilation and forcing the test to pass"
+    exit 0
+fi
+
+./invoke test_java_overflow
+./invoke test_native_overflow
+exit $?
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/whitebox/WBStackSize.java	Wed Jul 05 19:44:04 2017 +0200
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2014, 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 WBStackSize
+ * @summary verify that whitebox functions getThreadFullStackSize() and getThreadRemainingStackSize are working
+ * @library /testlibrary /testlibrary/whitebox
+ * @build WBStackSize
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xss512k WBStackSize
+ */
+
+/*
+ * The test may product a false failure if too big StackYellowPages/StackRedPages/ShackShadowPages
+ * VM options are specified. The proper test would retrieve the page size from VM and account for these options
+ * instead of check below:
+ *     Math.abs(actualStackSize - configStackSize) > configStackSize * 0.1
+ *
+ * Please file a test bug, if this is a problem.
+ */
+
+import com.sun.management.HotSpotDiagnosticMXBean;
+import sun.hotspot.WhiteBox;
+
+public class WBStackSize {
+
+    static final long K = 1024;
+
+    static final long MIN_STACK_SIZE = 8 * K;
+    static final long MAX_STACK_SIZE_ALLOCATED_IN_MAIN = 200 * K; // current value is about 130k on 64-bit platforms
+
+    static final WhiteBox wb = WhiteBox.getWhiteBox();
+
+    static long stackSizeOnOverflow = -1;
+
+    static int eatAllStack() {
+        return eatAllStack() * 2;
+    }
+
+    static void testStackOverflow() {
+
+        stackSizeOnOverflow = wb.getThreadRemainingStackSize();
+
+        if (stackSizeOnOverflow > MIN_STACK_SIZE) {
+
+            try {
+                testStackOverflow();
+            } catch (StackOverflowError e) {
+                // We caught SOE too early. The error will be reported in main()
+            }
+
+        } else {
+
+            try {
+                eatAllStack();
+                throw new RuntimeException("Haven't caught StackOverflowError at all");
+            } catch (StackOverflowError e) {
+                // OK: we caught the anticipated error
+            }
+        }
+    }
+
+    public static void main(String[] args) {
+        HotSpotDiagnosticMXBean bean = sun.management.ManagementFactoryHelper.getDiagnosticMXBean();
+        long configStackSize = Long.valueOf(bean.getVMOption("ThreadStackSize").getValue()) * K;
+
+        System.out.println("ThreadStackSize VM option: " + configStackSize);
+
+        long actualStackSize = wb.getThreadStackSize();
+        System.out.println("Full stack size: " + actualStackSize);
+
+        if (Math.abs(actualStackSize - configStackSize) > configStackSize * 0.1) {
+            throw new RuntimeException("getThreadFullStackSize value [" + actualStackSize
+                                     + "] should be within 90%..110% of the value returned by HotSpotDiagnosticMXBean");
+        }
+
+        long remainingStackSize = wb.getThreadRemainingStackSize();
+        System.out.println("Remaining stack size in main(): " + remainingStackSize);
+
+        // Up to 200k can be already allocated by VM
+        if (remainingStackSize > configStackSize
+                || (configStackSize > MAX_STACK_SIZE_ALLOCATED_IN_MAIN
+                && remainingStackSize < configStackSize - MAX_STACK_SIZE_ALLOCATED_IN_MAIN)) {
+
+            throw new RuntimeException("getThreadRemainingStackSize value [" + remainingStackSize
+                                     + "] should be at least ThreadStackSize value [" + configStackSize + "] minus ["
+                                     + MAX_STACK_SIZE_ALLOCATED_IN_MAIN + "]");
+        }
+
+        testStackOverflow();
+
+        if (stackSizeOnOverflow > MIN_STACK_SIZE) {
+            throw new RuntimeException("Caught StackOverflowError too early: when there were "
+                                     + stackSizeOnOverflow + " bytes in stack");
+        } else if (stackSizeOnOverflow < 0) {
+            throw new RuntimeException("Internal test error: stackRemainingSize < 0");
+        } else {
+            System.out.println("Caught StackOverflowError as expected");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/GetObjectSizeOverflow.java	Wed Jul 05 19:44:04 2017 +0200
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.io.PrintWriter;
+import com.oracle.java.testlibrary.*;
+
+/*
+ * Test to verify GetObjectSize does not overflow on a 600M element int[]
+ *
+ * @test
+ * @bug 8027230
+ * @library /testlibrary
+ * @build GetObjectSizeOverflowAgent
+ * @run main ClassFileInstaller GetObjectSizeOverflowAgent
+ * @run main GetObjectSizeOverflow
+ */
+public class GetObjectSizeOverflow {
+    public static void main(String[] args) throws Exception  {
+
+        if (!Platform.is64bit()) {
+            System.out.println("Test needs a 4GB heap and can only be run as a 64bit process, skipping.");
+            return;
+        }
+
+        PrintWriter pw = new PrintWriter("MANIFEST.MF");
+        pw.println("Premain-Class: GetObjectSizeOverflowAgent");
+        pw.close();
+
+        ProcessBuilder pb = new ProcessBuilder();
+        pb.command(new String[] { JDKToolFinder.getJDKTool("jar"), "cmf", "MANIFEST.MF", "agent.jar", "GetObjectSizeOverflowAgent.class"});
+        pb.start().waitFor();
+
+        ProcessBuilder pt = ProcessTools.createJavaProcessBuilder(true, "-Xmx4000m", "-javaagent:agent.jar",  "GetObjectSizeOverflowAgent");
+        OutputAnalyzer output = new OutputAnalyzer(pt.start());
+
+        if (output.getStdout().contains("Could not reserve enough space") || output.getStderr().contains("java.lang.OutOfMemoryError")) {
+            System.out.println("stdout: " + output.getStdout());
+            System.out.println("stderr: " + output.getStderr());
+            System.out.println("Test could not reserve or allocate enough space, skipping");
+            return;
+        }
+
+        output.stdoutShouldContain("GetObjectSizeOverflow passed");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/GetObjectSizeOverflowAgent.java	Wed Jul 05 19:44:04 2017 +0200
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.lang.instrument.*;
+
+public class GetObjectSizeOverflowAgent {
+
+    static Instrumentation instrumentation;
+
+    public static void premain(String agentArgs, Instrumentation instrumentation) {
+        GetObjectSizeOverflowAgent.instrumentation = instrumentation;
+    }
+
+    public static void main(String[] args) throws Exception {
+        int[] a = new int[600_000_000];
+        long size = instrumentation.getObjectSize(a);
+
+        if (size < 2_400_000_000L) {
+            throw new RuntimeException("Invalid size of array, expected >= 2400000000, got " + size);
+        }
+
+        System.out.println("GetObjectSizeOverflow passed");
+    }
+}
--- a/hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java	Wed Jul 05 19:44:04 2017 +0200
@@ -150,6 +150,8 @@
   public native int stressVirtualSpaceResize(long reservedSpaceSize, long magnitude, long iterations);
   public native void runMemoryUnitTests();
   public native void readFromNoaccessArea();
+  public native long getThreadStackSize();
+  public native long getThreadRemainingStackSize();
 
   // CPU features
   public native String getCPUFeatures();
--- a/jaxp/.hgtags	Thu Jun 05 19:38:17 2014 -0700
+++ b/jaxp/.hgtags	Wed Jul 05 19:44:04 2017 +0200
@@ -258,3 +258,4 @@
 5eaf717f6e36037a6d3744ffeee0e4c88e64a0d2 jdk9-b13
 32b3fc4bc7374a34d52b7f4e2391b4b4b0c084e8 jdk9-b14
 6bad71866c7598587860e0981b0b0e51ec8c0476 jdk9-b15
+a1461221b05d4620e4d7d1907e2a0282aaedf31c jdk9-b16
--- a/jaxws/.hgtags	Thu Jun 05 19:38:17 2014 -0700
+++ b/jaxws/.hgtags	Wed Jul 05 19:44:04 2017 +0200
@@ -261,3 +261,4 @@
 3d42204854c9f703e3ccdc8891248e73057713ab jdk9-b13
 02e58850b7062825308413d420f2b02c1f25a724 jdk9-b14
 e9780330017a6b464a385356d77e5136f9de8d09 jdk9-b15
+1e1a3b2215b7551d88e89d1ca8c1e1ebe3d3c0ab jdk9-b16
--- a/jdk/.hgtags	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/.hgtags	Wed Jul 05 19:44:04 2017 +0200
@@ -258,3 +258,4 @@
 c7c8002d02721e02131d104549ebeb8b379fb8d2 jdk9-b13
 5c7a17a81afd0906b53ee31d95a3211c96ff6b25 jdk9-b14
 4537360f09fe23ab339ee588747b657feb12d0c8 jdk9-b15
+ab7d2c565b0de5bee1361d282d4029371327fc9e jdk9-b16
--- a/jdk/make/Bundles.gmk	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/make/Bundles.gmk	Wed Jul 05 19:44:04 2017 +0200
@@ -74,19 +74,16 @@
   JDK_TARGET_LIST := $(subst $(JDK_IMAGE_DIR)/,$(JDK_BUNDLE_DIR)/Home/,$(JDK_FILE_LIST))
   JRE_TARGET_LIST := $(subst $(JRE_IMAGE_DIR)/,$(JRE_BUNDLE_DIR)/Home/,$(JRE_FILE_LIST))
 
-  # The old builds implementation of this did not preserve symlinks so
-  # make sure they are followed and the contents copied instead.
-  # To fix this, remove -L
   # Copy empty directories (jre/lib/applet).
   $(JDK_BUNDLE_DIR)/Home/%: $(JDK_IMAGE_DIR)/%
 	$(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@)
 	$(MKDIR) -p $(@D)
-	if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) -f -R -L '$<' '$@'; fi
+	if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) -f -R -P '$<' '$@'; fi
 
   $(JRE_BUNDLE_DIR)/Home/%: $(JRE_IMAGE_DIR)/%
 	$(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@)
 	$(MKDIR) -p $(@D)
-	if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) -f -R -L '$<' '$@'; fi
+	if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) -f -R -P '$<' '$@'; fi
 
   $(JDK_BUNDLE_DIR)/MacOS/libjli.dylib:
 	$(ECHO) Creating link $(patsubst $(OUTPUT_ROOT)/%,%,$@)
--- a/jdk/make/CompileJavaClasses.gmk	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/make/CompileJavaClasses.gmk	Wed Jul 05 19:44:04 2017 +0200
@@ -373,7 +373,7 @@
           JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
           SRC := $(JDK_OUTPUTDIR)/gensrc_ab/32bit, \
           BIN := $(JDK_OUTPUTDIR)/classes_ab/32bit, \
-          HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))
+          HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers_ab/32))
 
       $(BUILD_ACCESSBRIDGE_32): $(BUILD_JDK)
 
@@ -382,7 +382,7 @@
           JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
           SRC := $(JDK_OUTPUTDIR)/gensrc_ab/legacy, \
           BIN := $(JDK_OUTPUTDIR)/classes_ab/legacy, \
-          HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))
+          HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers_ab/legacy))
 
       $(BUILD_ACCESSBRIDGE_LEGACY): $(BUILD_JDK)
 
@@ -393,7 +393,7 @@
           JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
           SRC := $(JDK_OUTPUTDIR)/gensrc_ab/64bit, \
           BIN := $(JDK_OUTPUTDIR)/classes_ab/64bit, \
-          HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))
+          HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers_ab/64))
 
       $(BUILD_ACCESSBRIDGE_64): $(BUILD_JDK)
 
--- a/jdk/make/CompileLaunchers.gmk	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/make/CompileLaunchers.gmk	Wed Jul 05 19:44:04 2017 +0200
@@ -428,7 +428,7 @@
   UNPACKEXE_CFLAGS := -DSYSTEM_ZLIB
   UNPACKEXE_ZIPOBJS := -lz
 else
-  UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
+  UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.8
   UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \
       $(JDK_OUTPUTDIR)/objs/libzip/deflate$(OBJ_SUFFIX) \
       $(JDK_OUTPUTDIR)/objs/libzip/trees$(OBJ_SUFFIX) \
@@ -442,11 +442,6 @@
 
 endif
 
-ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
-  UNPACKEXE_CFLAGS += -xregs=no%appl
-  UNPACKEXE_LDFLAGS_solaris += -xmemalign=4s
-endif
-
 UNPACKEXE_LANG := C
 ifeq ($(OPENJDK_TARGET_OS), solaris)
   UNPACKEXE_LANG := C++
--- a/jdk/make/CreateJars.gmk	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/make/CreateJars.gmk	Wed Jul 05 19:44:04 2017 +0200
@@ -552,40 +552,53 @@
 
 ##########################################################################################
 
-SRC_ZIP_INCLUDES = \
-    com/sun/corba \
-    com/sun/image/codec/jpeg \
-    com/sun/imageio \
-    com/sun/java_cup \
-    com/sun/javadoc \
-    com/sun/java/swing \
-    com/sun/jmx \
-    com/sun/naming \
-    com/sun/org/apache \
-    com/sun/security/auth \
-    com/sun/security/jgss \
-    com/sun/source \
-    java \
-    javax/accessibility \
-    javax/annotation \
-    javax/imageio \
-    javax/lang \
-    javax/management \
-    javax/naming \
-    javax/print \
-    javax/rmi \
-    javax/script \
-    javax/security \
-    javax/sound \
-    javax/sql \
-    javax/swing \
-    javax/tools \
-    javax/xml \
-    org/ietf \
-    org/omg \
-    org/w3c/dom \
-    org/xml/sax \
-    #
+ifdef OPENJDK
+    SRC_ZIP_INCLUDES = \
+        com \
+        java \
+        javax \
+        jdk \
+        org \
+        sun \
+        #
+    SRC_ZIP_EXCLUDES =
+else
+    SRC_ZIP_INCLUDES = \
+        com/sun/corba \
+        com/sun/image/codec/jpeg \
+        com/sun/imageio \
+        com/sun/java_cup \
+        com/sun/javadoc \
+        com/sun/java/swing \
+        com/sun/jmx \
+        com/sun/naming \
+        com/sun/org/apache \
+        com/sun/security/auth \
+        com/sun/security/jgss \
+        com/sun/source \
+        java \
+        javax/accessibility \
+        javax/annotation \
+        javax/imageio \
+        javax/lang \
+        javax/management \
+        javax/naming \
+        javax/print \
+        javax/rmi \
+        javax/script \
+        javax/security \
+        javax/sound \
+        javax/sql \
+        javax/swing \
+        javax/tools \
+        javax/xml \
+        org/ietf \
+        org/omg \
+        org/w3c/dom \
+        org/xml/sax \
+        #
+    SRC_ZIP_EXCLUDES = javax/swing/beaninfo
+endif
 
 SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes
 SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gensrc
@@ -616,7 +629,7 @@
 $(eval $(call SetupZipArchive,BUILD_SRC_ZIP, \
     SRC := $(SRC_ZIP_SRCS) $(IMAGES_OUTPUTDIR)/src, \
     INCLUDES := $(SRC_ZIP_INCLUDES) launcher, \
-    EXCLUDES := javax/swing/beaninfo, \
+    EXCLUDES := $(SRC_ZIP_EXCLUDES), \
     SUFFIXES := .java .c .h, \
     ZIP := $(IMAGES_OUTPUTDIR)/src.zip, \
     EXTRA_DEPS := $(LAUNCHER_ZIP_SRC)))
--- a/jdk/make/Setup.gmk	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/make/Setup.gmk	Wed Jul 05 19:44:04 2017 +0200
@@ -27,7 +27,7 @@
 
 # To build with all warnings enabled, do the following:
 # make JAVAC_WARNINGS="-Xlint:all -Xmaxwarns 10000"
-JAVAC_WARNINGS := -Xlint:-unchecked,-deprecation,-overrides,auxiliaryclass,cast,classfile,dep-ann,divzero,empty,overloads,serial,static,try,varargs -Werror
+JAVAC_WARNINGS := -Xlint:-unchecked,-deprecation,-overrides,auxiliaryclass,cast,classfile,dep-ann,divzero,empty,fallthrough,overloads,serial,static,try,varargs -Werror
 
 # Any java code executed during a JDK build to build other parts of the JDK must be 
 # executed by the bootstrap JDK (probably with -Xbootclasspath/p: ) and for this 
--- a/jdk/make/lib/Awt2dLibraries.gmk	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/make/lib/Awt2dLibraries.gmk	Wed Jul 05 19:44:04 2017 +0200
@@ -1251,7 +1251,7 @@
   LIBSPLASHSCREEN_LDFLAGS_SUFFIX :=
 
   ifneq ($(USE_EXTERNAL_LIBZ), true)
-    LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
+    LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.8
     LIBSPLASHSCREEN_CFLAGS += $(ZLIB_CPPFLAGS)
   endif
 
--- a/jdk/make/lib/CoreLibraries.gmk	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/make/lib/CoreLibraries.gmk	Wed Jul 05 19:44:04 2017 +0200
@@ -231,9 +231,9 @@
 BUILD_LIBZIP_EXCLUDES :=
 ifeq ($(USE_EXTERNAL_LIBZ), true)
   LIBZ := -lz
-  LIBZIP_EXCLUDES += zlib-1.2.5
+  LIBZIP_EXCLUDES += zlib-1.2.8
 else
-  ZLIB_CPPFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
+  ZLIB_CPPFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.8
 endif
 
 BUILD_LIBZIP_REORDER :=
@@ -410,7 +410,7 @@
 endif
 
 ifneq ($(USE_EXTERNAL_LIBZ), true)
-  BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
+  BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.8
   LIBJLI_CFLAGS += $(ZLIB_CPPFLAGS)
   BUILD_LIBJLI_FILES += \
       inflate.c \
--- a/jdk/make/lib/PlatformLibraries.gmk	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/make/lib/PlatformLibraries.gmk	Wed Jul 05 19:44:04 2017 +0200
@@ -143,7 +143,8 @@
     define SetupAccessBridge
       # Parameter 1 Suffix
       # Parameter 2 Machine
-      # Parameter 3 ACCESSBRIDGE_ARCH_ suffix
+      # Parameter 3 ACCESSBRIDGE_ARCH_ suffix and name of directory where gensrc headers
+      #             are found.
 
       $(call SetupNativeCompilation,BUILD_JAWTACCESSBRIDGE$1, \
           LIBRARY = JAWTAccessBridge$1, \
@@ -153,7 +154,8 @@
           LANG := C++, \
           OPTIMIZATION := LOW, \
           CFLAGS := $(CFLAGS_JDKLIB) \
-              -DACCESSBRIDGE_ARCH_$3, \
+              -DACCESSBRIDGE_ARCH_$3 \
+              -I$(JDK_OUTPUTDIR)/gensrc_headers_ab/$3, \
           LDFLAGS := $(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
               winspool.lib jawt.lib comdlg32.lib advapi32.lib shell32.lib \
               ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
@@ -179,7 +181,8 @@
           LANG := C++, \
           OPTIMIZATION := LOW, \
           CFLAGS := $(CFLAGS_JDKLIB) \
-              -DACCESSBRIDGE_ARCH_$3, \
+              -DACCESSBRIDGE_ARCH_$3 \
+              -I$(JDK_OUTPUTDIR)/gensrc_headers_ab/$3, \
           LDFLAGS := $(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
               winspool.lib comdlg32.lib advapi32.lib shell32.lib \
               ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
@@ -204,7 +207,8 @@
           LANG := C++, \
           OPTIMIZATION := LOW, \
           CFLAGS := $(filter-out -MD, $(CFLAGS_JDKLIB)) -MT \
-              -DACCESSBRIDGE_ARCH_$3, \
+              -DACCESSBRIDGE_ARCH_$3 \
+              -I$(JDK_OUTPUTDIR)/gensrc_headers_ab/$3, \
           LDFLAGS := $(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
               winspool.lib comdlg32.lib advapi32.lib shell32.lib \
               ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
@@ -225,7 +229,7 @@
 
     ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
       $(eval $(call SetupAccessBridge,-32,I386,32))
-      $(eval $(call SetupAccessBridge,,I386,LEGACY))
+      $(eval $(call SetupAccessBridge,,I386,legacy))
     else
       $(eval $(call SetupAccessBridge,-64,X64,64))
     endif
--- a/jdk/make/profile-rtjar-includes.txt	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/make/profile-rtjar-includes.txt	Wed Jul 05 19:44:04 2017 +0200
@@ -88,7 +88,7 @@
     java/sql \
     javax/rmi/ssl \
     javax/sql \
-    javax/transaction \
+    javax/transaction/xa \
     javax/xml \
     org/w3c \
     org/xml/sax \
@@ -223,7 +223,8 @@
     javax/management/remote/rmi/_RMIConnection_Stub.class \
     javax/management/remote/rmi/_RMIServerImpl_Tie.class \
     javax/management/remote/rmi/_RMIServer_Stub.class \
-    javax/rmi/*.class
+    javax/rmi/*.class \
+    javax/transaction/*.class
 
 FULL_JRE_RTJAR_EXCLUDE_TYPES :=
 
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java	Wed Jul 05 19:44:04 2017 +0200
@@ -512,7 +512,7 @@
     }
     static String qualifiedStringValue(String s1, String s234) {
         // Qualification by dot must decompose uniquely.  Second string might already be qualified.
-        assert(s1.indexOf(".") < 0);
+        assert(s1.indexOf('.') < 0);
         return s1+"."+s234;
     }
 
--- a/jdk/src/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java	Wed Jul 05 19:44:04 2017 +0200
@@ -102,7 +102,7 @@
         }
         location = url.substring(addrStart, addrEnd);
 
-        int keyStart = location.indexOf("/");
+        int keyStart = location.indexOf('/');
         if (keyStart >= 0) {
             // Has key string
             if (keyStart == (location.length() -1)) {
--- a/jdk/src/share/classes/com/sun/jndi/rmi/registry/RegistryContext.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/jndi/rmi/registry/RegistryContext.java	Wed Jul 05 19:44:04 2017 +0200
@@ -336,7 +336,7 @@
         String url = "rmi://";
 
         // Enclose IPv6 literal address in '[' and ']'
-        url = (host.indexOf(":") > -1) ? url + "[" + host + "]" :
+        url = (host.indexOf(':') > -1) ? url + "[" + host + "]" :
                                          url + host;
         if (port > 0) {
             url += ":" + Integer.toString(port);
--- a/jdk/src/share/classes/com/sun/jndi/toolkit/url/GenericURLContext.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/jndi/toolkit/url/GenericURLContext.java	Wed Jul 05 19:44:04 2017 +0200
@@ -149,7 +149,7 @@
       * foo:rest/of/name                        foo:
       */
     protected String getURLPrefix(String url) throws NamingException {
-        int start = url.indexOf(":");
+        int start = url.indexOf(':');
 
         if (start < 0) {
             throw new OperationNotSupportedException("Invalid URL: " + url);
@@ -160,7 +160,7 @@
             start += 2;  // skip double slash
 
             // find last slash
-            int posn = url.indexOf("/", start);
+            int posn = url.indexOf('/', start);
             if (posn >= 0) {
                 start = posn;
             } else {
--- a/jdk/src/share/classes/com/sun/rmi/rmid/ExecOptionPermission.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/rmi/rmid/ExecOptionPermission.java	Wed Jul 05 19:44:04 2017 +0200
@@ -303,7 +303,7 @@
 
             offset = pname.length() - 1;
 
-            while ((last = pname.lastIndexOf(".", offset)) != -1) {
+            while ((last = pname.lastIndexOf('.', offset)) != -1) {
 
                 pname = pname.substring(0, last+1) + "*";
                 x = permissions.get(pname);
@@ -318,7 +318,7 @@
             pname = p.getName();
             offset = pname.length() - 1;
 
-            while ((last = pname.lastIndexOf("=", offset)) != -1) {
+            while ((last = pname.lastIndexOf('=', offset)) != -1) {
 
                 pname = pname.substring(0, last+1) + "*";
                 x = permissions.get(pname);
--- a/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java	Wed Jul 05 19:44:04 2017 +0200
@@ -6831,7 +6831,7 @@
             // table name else isolate table name.
 
             indexFrom = command.toLowerCase().indexOf("from");
-            indexComma = command.indexOf(",", indexFrom);
+            indexComma = command.indexOf(',', indexFrom);
 
             if(indexComma == -1) {
                 // implies only one table
--- a/jdk/src/share/classes/com/sun/rowset/JoinRowSetImpl.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/rowset/JoinRowSetImpl.java	Wed Jul 05 19:44:04 2017 +0200
@@ -910,7 +910,7 @@
 
         // now remove the last ","
         strWhereClause = strWhereClause.substring
-             (0, strWhereClause.lastIndexOf(","));
+             (0, strWhereClause.lastIndexOf(','));
 
         // Add from clause
         strWhereClause = strWhereClause.concat(" from ");
@@ -920,7 +920,7 @@
 
         //Remove the last ","
         strWhereClause = strWhereClause.substring
-             (0, strWhereClause.lastIndexOf(","));
+             (0, strWhereClause.lastIndexOf(','));
 
         // Add the where clause
         strWhereClause = strWhereClause.concat(" where ");
--- a/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlWriter.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlWriter.java	Wed Jul 05 19:44:04 2017 +0200
@@ -240,7 +240,7 @@
             // Remove the string after "@xxxx"
             // before writing it to the xml file.
             String strProviderInstance = (caller.getSyncProvider()).toString();
-            String strProvider = strProviderInstance.substring(0, (caller.getSyncProvider()).toString().indexOf("@"));
+            String strProvider = strProviderInstance.substring(0, (caller.getSyncProvider()).toString().indexOf('@'));
 
             propString("sync-provider-name", strProvider);
             propString("sync-provider-vendor", "Oracle Corporation");
--- a/jdk/src/share/classes/com/sun/rowset/internal/XmlReaderContentHandler.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/rowset/internal/XmlReaderContentHandler.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1147,7 +1147,7 @@
             if (nullValue) {
                 rs.setSyncProvider(null);
             } else {
-                String str = s.substring(0,s.indexOf("@")+1);
+                String str = s.substring(0,s.indexOf('@')+1);
                 rs.setSyncProvider(str);
             }
             break;
--- a/jdk/src/share/classes/com/sun/rowset/internal/XmlResolver.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/rowset/internal/XmlResolver.java	Wed Jul 05 19:44:04 2017 +0200
@@ -39,7 +39,7 @@
 public class XmlResolver implements EntityResolver {
 
         public InputSource resolveEntity(String publicId, String systemId) {
-           String schemaName = systemId.substring(systemId.lastIndexOf("/"));
+           String schemaName = systemId.substring(systemId.lastIndexOf('/'));
 
            if(systemId.startsWith("http://java.sun.com/xml/ns/jdbc")) {
                return new InputSource(this.getClass().getResourceAsStream(schemaName));
--- a/jdk/src/share/classes/com/sun/security/auth/module/JndiLoginModule.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/security/auth/module/JndiLoginModule.java	Wed Jul 05 19:44:04 2017 +0200
@@ -694,7 +694,7 @@
             throw new LoginException("Error: no CallbackHandler available " +
                 "to garner authentication information from the user");
 
-        String protocol = userProvider.substring(0, userProvider.indexOf(":"));
+        String protocol = userProvider.substring(0, userProvider.indexOf(':'));
 
         Callback[] callbacks = new Callback[2];
         callbacks[0] = new NameCallback(protocol + " "
--- a/jdk/src/share/classes/com/sun/security/auth/module/LdapLoginModule.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/security/auth/module/LdapLoginModule.java	Wed Jul 05 19:44:04 2017 +0200
@@ -400,7 +400,7 @@
 
         // Add any JNDI properties to the environment
         for (String key : options.keySet()) {
-            if (key.indexOf(".") > -1) {
+            if (key.indexOf('.') > -1) {
                 ldapEnvironment.put(key, options.get(key));
             }
         }
--- a/jdk/src/share/classes/com/sun/tools/example/debug/gui/CommandInterpreter.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/gui/CommandInterpreter.java	Wed Jul 05 19:44:04 2017 +0200
@@ -857,7 +857,7 @@
                 bpSpec = runtime.createClassLineBreakpoint(classId, lineNumber);
             } else {
                 // Try stripping method from class.method token.
-                int idot = token.lastIndexOf(".");
+                int idot = token.lastIndexOf('.');
                 if ( (idot <= 0) ||        /* No dot or dot in first char */
                      (idot >= token.length() - 1) ) { /* dot in last char */
                     return null;
--- a/jdk/src/share/classes/com/sun/tools/example/debug/tty/Commands.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/tools/example/debug/tty/Commands.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1079,7 +1079,7 @@
                 }
             } else {
                 // Try stripping method from class.method token.
-                int idot = token.lastIndexOf(".");
+                int idot = token.lastIndexOf('.');
                 if ( (idot <= 0) ||                     /* No dot or dot in first char */
                      (idot >= token.length() - 1) ) { /* dot in last char */
                     printBreakpointCommandUsage(atForm, inForm);
--- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java	Wed Jul 05 19:44:04 2017 +0200
@@ -67,7 +67,7 @@
                 continue;
             }
             String name = clazz.getName();
-            int pos = name.lastIndexOf(".");
+            int pos = name.lastIndexOf('.');
             String pkg;
             if (name.startsWith("[")) {         // Only in ancient heap dumps
                 pkg = "<Arrays>";
--- a/jdk/src/share/classes/java/applet/Applet.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/applet/Applet.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2014, 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
@@ -86,6 +86,7 @@
 
     /**
      * Read an applet from an object input stream.
+     * @param  s  an object input stream.
      * @exception HeadlessException if
      * <code>GraphicsEnvironment.isHeadless()</code> returns
      * <code>true</code>
--- a/jdk/src/share/classes/java/applet/AppletContext.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/applet/AppletContext.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2014, 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
@@ -152,7 +152,7 @@
      * For security reasons, mapping of streams and keys exists for each
      * codebase. In other words, applet from one codebase cannot access
      * the streams created by an applet from a different codebase
-     * <p>
+     *
      * @param key key with which the specified value is to be associated.
      * @param stream stream to be associated with the specified key. If this
      *               parameter is <code>null</code>, the specified key is removed
@@ -172,7 +172,7 @@
      * For security reasons, mapping of streams and keys exists for each
      * codebase. In other words, applet from one codebase cannot access
      * the streams created by an applet from a different codebase
-     * <p>
+     *
      * @return the stream to which this applet context maps the key
      * @param key key whose associated stream is to be returned.
      * @since 1.4
@@ -185,7 +185,7 @@
      * For security reasons, mapping of streams and keys exists for each
      * codebase. In other words, applet from one codebase cannot access
      * the streams created by an applet from a different codebase
-     * <p>
+     *
      * @return  an Iterator of all the names of the streams in this applet
      *          context.
      * @since 1.4
--- a/jdk/src/share/classes/java/awt/geom/Path2D.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/awt/geom/Path2D.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1926,9 +1926,9 @@
      * maintains, but it may contain no more precision either.
      * If the tradeoff of precision vs. storage size in the result is
      * important then the convenience constructors in the
-     * {@link Path2D.Float#Path2D.Float(Shape, AffineTransform) Path2D.Float}
+     * {@link Path2D.Float#Float(Shape, AffineTransform) Path2D.Float}
      * and
-     * {@link Path2D.Double#Path2D.Double(Shape, AffineTransform) Path2D.Double}
+     * {@link Path2D.Double#Double(Shape, AffineTransform) Path2D.Double}
      * subclasses should be used to make the choice explicit.
      *
      * @param at the {@code AffineTransform} used to transform a
--- a/jdk/src/share/classes/java/lang/Class.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/lang/Class.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1296,7 +1296,7 @@
         String simpleName = getSimpleBinaryName();
         if (simpleName == null) { // top level class
             simpleName = getName();
-            return simpleName.substring(simpleName.lastIndexOf(".")+1); // strip the package name
+            return simpleName.substring(simpleName.lastIndexOf('.')+1); // strip the package name
         }
         // According to JLS3 "Binary Compatibility" (13.1) the binary
         // name of non-package classes (not top level) is the binary
--- a/jdk/src/share/classes/java/lang/ClassLoader.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/lang/ClassLoader.java	Wed Jul 05 19:44:04 2017 +0200
@@ -2133,7 +2133,7 @@
                 return result.booleanValue();
 
             // Check for most specific package entry
-            int dotIndex = className.lastIndexOf(".");
+            int dotIndex = className.lastIndexOf('.');
             if (dotIndex < 0) { // default package
                 result = packageAssertionStatus.get(null);
                 if (result != null)
@@ -2144,7 +2144,7 @@
                 result = packageAssertionStatus.get(className);
                 if (result != null)
                     return result.booleanValue();
-                dotIndex = className.lastIndexOf(".", dotIndex-1);
+                dotIndex = className.lastIndexOf('.', dotIndex-1);
             }
 
             // Return the classloader default
--- a/jdk/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java	Wed Jul 05 19:44:04 2017 +0200
@@ -85,7 +85,7 @@
     private InvokerBytecodeGenerator(LambdaForm lambdaForm, int localsMapSize,
                                      String className, String invokerName, MethodType invokerType) {
         if (invokerName.contains(".")) {
-            int p = invokerName.indexOf(".");
+            int p = invokerName.indexOf('.');
             className = invokerName.substring(0, p);
             invokerName = invokerName.substring(p+1);
         }
--- a/jdk/src/share/classes/java/lang/invoke/LambdaForm.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/lang/invoke/LambdaForm.java	Wed Jul 05 19:44:04 2017 +0200
@@ -607,7 +607,7 @@
                 assert(m.getName().equals("interpret" + sig.substring(sig.indexOf('_'))));
                 LambdaForm form = new LambdaForm(sig);
                 form.vmentry = m;
-                mt.form().setCachedLambdaForm(MethodTypeForm.LF_COUNTER, form);
+                form = mt.form().setCachedLambdaForm(MethodTypeForm.LF_COUNTER, form);
                 // FIXME: get rid of PREPARED_FORMS; use MethodTypeForm cache only
                 forms.put(sig, form);
             }
--- a/jdk/src/share/classes/java/lang/invoke/LambdaMetafactory.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/lang/invoke/LambdaMetafactory.java	Wed Jul 05 19:44:04 2017 +0200
@@ -313,7 +313,8 @@
      * reference expression</em> features of the Java Programming Language.
      *
      * <p>This is the general, more flexible metafactory; a streamlined version
-     * is provided by {@link #altMetafactory(MethodHandles.Lookup, String, MethodType, Object...)}.
+     * is provided by {@link #metafactory(java.lang.invoke.MethodHandles.Lookup,
+     * String, MethodType, MethodType, MethodHandle, MethodType)}.
      * A general description of the behavior of this method is provided
      * {@link LambdaMetafactory above}.
      *
--- a/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java	Wed Jul 05 19:44:04 2017 +0200
@@ -692,8 +692,7 @@
 
         lform = new LambdaForm("guardWithCatch", lambdaType.parameterCount(), names);
 
-        basicType.form().setCachedLambdaForm(MethodTypeForm.LF_GWC, lform);
-        return lform;
+        return basicType.form().setCachedLambdaForm(MethodTypeForm.LF_GWC, lform);
     }
 
     static
--- a/jdk/src/share/classes/java/lang/invoke/MethodTypeForm.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/lang/invoke/MethodTypeForm.java	Wed Jul 05 19:44:04 2017 +0200
@@ -91,8 +91,10 @@
         return lambdaForms[which];
     }
 
-    public LambdaForm setCachedLambdaForm(int which, LambdaForm form) {
-        // Should we perform some sort of CAS, to avoid racy duplication?
+    synchronized public LambdaForm setCachedLambdaForm(int which, LambdaForm form) {
+        // Simulate a CAS, to avoid racy duplication of results.
+        LambdaForm prev = lambdaForms[which];
+        if (prev != null) return prev;
         return lambdaForms[which] = form;
     }
 
--- a/jdk/src/share/classes/java/lang/reflect/Executable.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/lang/reflect/Executable.java	Wed Jul 05 19:44:04 2017 +0200
@@ -633,7 +633,7 @@
                         getConstantPool(getDeclaringClass()),
                 this,
                 getDeclaringClass(),
-                getParameterTypes(),
+                getGenericParameterTypes(),
                 TypeAnnotation.TypeAnnotationTarget.METHOD_FORMAL_PARAMETER);
     }
 
--- a/jdk/src/share/classes/java/net/CookieManager.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/net/CookieManager.java	Wed Jul 05 19:44:04 2017 +0200
@@ -294,7 +294,7 @@
                             // the path is the directory of the page/doc
                             String path = uri.getPath();
                             if (!path.endsWith("/")) {
-                                int i = path.lastIndexOf("/");
+                                int i = path.lastIndexOf('/');
                                 if (i > 0) {
                                     path = path.substring(0, i + 1);
                                 } else {
@@ -364,7 +364,7 @@
 
 
     static private boolean isInPortList(String lst, int port) {
-        int i = lst.indexOf(",");
+        int i = lst.indexOf(',');
         int val = -1;
         while (i > 0) {
             try {
@@ -375,7 +375,7 @@
             } catch (NumberFormatException numberFormatException) {
             }
             lst = lst.substring(i+1);
-            i = lst.indexOf(",");
+            i = lst.indexOf(',');
         }
         if (!lst.isEmpty()) {
             try {
--- a/jdk/src/share/classes/java/net/InetAddress.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/net/InetAddress.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1138,7 +1138,7 @@
                 // This is supposed to be an IPv6 literal
                 // Check if a numeric or string zone id is present
                 int pos;
-                if ((pos=host.indexOf ("%")) != -1) {
+                if ((pos=host.indexOf ('%')) != -1) {
                     numericZone = checkNumericZone (host);
                     if (numericZone == -1) { /* remainder of string must be an ifname */
                         ifname = host.substring (pos+1);
--- a/jdk/src/share/classes/java/net/Socket.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/net/Socket.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1017,7 +1017,7 @@
         if (isClosed())
             throw new SocketException("Socket is closed");
         if (!on) {
-            getImpl().setOption(SocketOptions.SO_LINGER, new Boolean(on));
+            getImpl().setOption(SocketOptions.SO_LINGER, on);
         } else {
             if (linger < 0) {
                 throw new IllegalArgumentException("invalid value for SO_LINGER");
--- a/jdk/src/share/classes/java/net/SocketPermission.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/net/SocketPermission.java	Wed Jul 05 19:44:04 2017 +0200
@@ -777,7 +777,7 @@
                 // Literal IPv6 address
                 host = getName().substring(1, getName().indexOf(']'));
             } else {
-                int i = getName().indexOf(":");
+                int i = getName().indexOf(':');
                 if (i == -1)
                     host = getName();
                 else {
--- a/jdk/src/share/classes/java/net/SocksSocketImpl.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/net/SocksSocketImpl.java	Wed Jul 05 19:44:04 2017 +0200
@@ -368,7 +368,7 @@
             String host = epoint.getHostString();
             // IPv6 litteral?
             if (epoint.getAddress() instanceof Inet6Address &&
-                (!host.startsWith("[")) && (host.indexOf(":") >= 0)) {
+                (!host.startsWith("[")) && (host.indexOf(':') >= 0)) {
                 host = "[" + host + "]";
             }
             try {
@@ -688,7 +688,7 @@
             String host = saddr.getHostString();
             // IPv6 litteral?
             if (saddr.getAddress() instanceof Inet6Address &&
-                (!host.startsWith("[")) && (host.indexOf(":") >= 0)) {
+                (!host.startsWith("[")) && (host.indexOf(':') >= 0)) {
                 host = "[" + host + "]";
             }
             try {
--- a/jdk/src/share/classes/java/net/URI.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/net/URI.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1851,9 +1851,9 @@
             sb.append("//");
             if (authority.startsWith("[")) {
                 // authority should (but may not) contain an embedded IPv6 address
-                int end = authority.indexOf("]");
+                int end = authority.indexOf(']');
                 String doquote = authority, dontquote = "";
-                if (end != -1 && authority.indexOf(":") != -1) {
+                if (end != -1 && authority.indexOf(':') != -1) {
                     // the authority contains an IPv6 address
                     if (end == authority.length()) {
                         dontquote = authority;
@@ -1889,8 +1889,8 @@
              * because we must not quote a literal IPv6 address
              */
             if (opaquePart.startsWith("//[")) {
-                int end =  opaquePart.indexOf("]");
-                if (end != -1 && opaquePart.indexOf(":")!=-1) {
+                int end =  opaquePart.indexOf(']');
+                if (end != -1 && opaquePart.indexOf(':')!=-1) {
                     String doquote, dontquote;
                     if (end == opaquePart.length()) {
                         dontquote = opaquePart;
--- a/jdk/src/share/classes/java/security/AccessController.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/security/AccessController.java	Wed Jul 05 19:44:04 2017 +0200
@@ -592,14 +592,24 @@
             System.getSecurityManager() != null &&
             !callerPD.impliesCreateAccessControlContext())
         {
-            ProtectionDomain nullPD = new ProtectionDomain(null, null);
-            return new AccessControlContext(new ProtectionDomain[] { nullPD });
+            return getInnocuousAcc();
         } else {
             return new AccessControlContext(callerPD, combiner, parent,
                                             context, perms);
         }
     }
 
+    private static class AccHolder {
+        // An AccessControlContext with no granted permissions.
+        // Only initialized on demand when getInnocuousAcc() is called.
+        static final AccessControlContext innocuousAcc =
+            new AccessControlContext(new ProtectionDomain[] {
+                                     new ProtectionDomain(null, null) });
+    }
+    private static AccessControlContext getInnocuousAcc() {
+        return AccHolder.innocuousAcc;
+    }
+
     private static ProtectionDomain getCallerPD(final Class <?> caller) {
         ProtectionDomain callerPd = doPrivileged
             (new PrivilegedAction<ProtectionDomain>() {
--- a/jdk/src/share/classes/java/security/BasicPermission.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/security/BasicPermission.java	Wed Jul 05 19:44:04 2017 +0200
@@ -430,7 +430,7 @@
 
         offset = path.length()-1;
 
-        while ((last = path.lastIndexOf(".", offset)) != -1) {
+        while ((last = path.lastIndexOf('.', offset)) != -1) {
 
             path = path.substring(0, last+1) + "*";
             //System.out.println("check "+path);
--- a/jdk/src/share/classes/java/security/Provider.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/security/Provider.java	Wed Jul 05 19:44:04 2017 +0200
@@ -931,7 +931,7 @@
     }
 
     private String[] getTypeAndAlgorithm(String key) {
-        int i = key.indexOf(".");
+        int i = key.indexOf('.');
         if (i < 1) {
             if (debug != null) {
                 debug.println("Ignoring invalid entry in provider "
--- a/jdk/src/share/classes/java/security/Security.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/security/Security.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1114,7 +1114,7 @@
                     // implementation of an algorithm. We are only interested
                     // in entries which lead to the implementation
                     // classes.
-                    if (currentKey.indexOf(" ") < 0) {
+                    if (currentKey.indexOf(' ') < 0) {
                         result.add(currentKey.substring(
                                                 serviceName.length() + 1));
                     }
--- a/jdk/src/share/classes/java/util/PropertyPermission.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/util/PropertyPermission.java	Wed Jul 05 19:44:04 2017 +0200
@@ -546,7 +546,7 @@
 
         offset = name.length()-1;
 
-        while ((last = name.lastIndexOf(".", offset)) != -1) {
+        while ((last = name.lastIndexOf('.', offset)) != -1) {
 
             name = name.substring(0, last+1) + "*";
             //System.out.println("check "+name);
--- a/jdk/src/share/classes/java/util/jar/JarVerifier.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/util/jar/JarVerifier.java	Wed Jul 05 19:44:04 2017 +0200
@@ -276,7 +276,7 @@
 
                 // now we are parsing a signature block file
 
-                String key = uname.substring(0, uname.lastIndexOf("."));
+                String key = uname.substring(0, uname.lastIndexOf('.'));
 
                 if (signerCache == null)
                     signerCache = new ArrayList<>();
--- a/jdk/src/share/classes/java/util/logging/LogManager.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/util/logging/LogManager.java	Wed Jul 05 19:44:04 2017 +0200
@@ -779,7 +779,7 @@
 
             int ix = 1;
             for (;;) {
-                int ix2 = name.indexOf(".", ix);
+                int ix2 = name.indexOf('.', ix);
                 if (ix2 < 0) {
                     break;
                 }
@@ -802,7 +802,7 @@
             }
             LogNode node = root;
             while (name.length() > 0) {
-                int ix = name.indexOf(".");
+                int ix = name.indexOf('.');
                 String head;
                 if (ix > 0) {
                     head = name.substring(0, ix);
--- a/jdk/src/share/classes/java/util/logging/XMLFormatter.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/util/logging/XMLFormatter.java	Wed Jul 05 19:44:04 2017 +0200
@@ -174,7 +174,7 @@
         //  Check to see if the parameter was not a messagetext format
         //  or was not null or empty
         if (parameters != null && parameters.length != 0
-                && record.getMessage().indexOf("{") == -1 ) {
+                && record.getMessage().indexOf('{') == -1 ) {
             for (Object parameter : parameters) {
                 sb.append("  <param>");
                 try {
--- a/jdk/src/share/classes/java/util/zip/ZipInputStream.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/java/util/zip/ZipInputStream.java	Wed Jul 05 19:44:04 2017 +0200
@@ -319,7 +319,8 @@
         if (len > 0) {
             byte[] extra = new byte[len];
             readFully(extra, 0, len);
-            e.setExtra0(extra, true);
+            e.setExtra0(extra,
+                        e.csize == ZIP64_MAGICVAL || e.size == ZIP64_MAGICVAL);
         }
         return e;
     }
--- a/jdk/src/share/classes/javax/management/MBeanPermission.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/javax/management/MBeanPermission.java	Wed Jul 05 19:44:04 2017 +0200
@@ -290,7 +290,7 @@
 
         // Parse ObjectName
 
-        int openingBracket = name.indexOf("[");
+        int openingBracket = name.indexOf('[');
         if (openingBracket == -1) {
             // If "[on]" missing then ObjectName("*:*")
             //
@@ -329,7 +329,7 @@
 
         // Parse member
 
-        int poundSign = name.indexOf("#");
+        int poundSign = name.indexOf('#');
 
         if (poundSign == -1)
             setMember("*");
--- a/jdk/src/share/classes/javax/management/modelmbean/DescriptorSupport.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/javax/management/modelmbean/DescriptorSupport.java	Wed Jul 05 19:44:04 2017 +0200
@@ -329,7 +329,7 @@
                 inFld = false;
             } else if (inFld && inDesc) {
                 // want kw=value, eg, name="myname" value="myvalue"
-                int eq_separator = tok.indexOf("=");
+                int eq_separator = tok.indexOf('=');
                 if (eq_separator > 0) {
                     String kwPart = tok.substring(0,eq_separator);
                     String valPart = tok.substring(eq_separator+1);
@@ -458,7 +458,7 @@
             if ((fields[i] == null) || (fields[i].equals(""))) {
                 continue;
             }
-            int eq_separator = fields[i].indexOf("=");
+            int eq_separator = fields[i].indexOf('=');
             if (eq_separator < 0) {
                 // illegal if no = or is first character
                 if (MODELMBEAN_LOGGER.isLoggable(Level.FINEST)) {
--- a/jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java	Wed Jul 05 19:44:04 2017 +0200
@@ -934,7 +934,7 @@
         String opMethodName;
 
         // Parse for class name and method
-        int opSplitter = opName.lastIndexOf(".");
+        int opSplitter = opName.lastIndexOf('.');
         if (opSplitter > 0) {
             opClassName = opName.substring(0,opSplitter);
             opMethodName = opName.substring(opSplitter+1);
@@ -943,7 +943,7 @@
 
         /* Ignore anything after a left paren.  We keep this for
            compatibility but it isn't specified.  */
-        opSplitter = opMethodName.indexOf("(");
+        opSplitter = opMethodName.indexOf('(');
         if (opSplitter > 0)
             opMethodName = opMethodName.substring(0,opSplitter);
 
--- a/jdk/src/share/classes/javax/security/auth/PrivateCredentialPermission.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/javax/security/auth/PrivateCredentialPermission.java	Wed Jul 05 19:44:04 2017 +0200
@@ -495,7 +495,7 @@
 
         // perform new initialization from the permission name
 
-        if (getName().indexOf(" ") == -1 && getName().indexOf("\"") == -1) {
+        if (getName().indexOf(' ') == -1 && getName().indexOf('"') == -1) {
 
             // name only has a credential class specified
             credentialClass = getName();
--- a/jdk/src/share/classes/javax/security/sasl/Sasl.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/javax/security/sasl/Sasl.java	Wed Jul 05 19:44:04 2017 +0200
@@ -600,7 +600,7 @@
                     // implementation of an algorithm. We are only interested
                     // in entries which lead to the implementation
                     // classes.
-                    if (currentKey.indexOf(" ") < 0) {
+                    if (currentKey.indexOf(' ') < 0) {
                         String className = providers[i].getProperty(currentKey);
                         if (!classes.contains(className)) {
                             classes.add(className);
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/ClassWriter.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/ClassWriter.java	Wed Jul 05 19:44:04 2017 +0200
@@ -785,11 +785,29 @@
         if (innerClasses == null) {
             innerClasses = new ByteVector();
         }
-        ++innerClassesCount;
-        innerClasses.putShort(name == null ? 0 : newClass(name));
-        innerClasses.putShort(outerName == null ? 0 : newClass(outerName));
-        innerClasses.putShort(innerName == null ? 0 : newUTF8(innerName));
-        innerClasses.putShort(access);
+        // Sec. 4.7.6 of the JVMS states "Every CONSTANT_Class_info entry in the
+        // constant_pool table which represents a class or interface C that is
+        // not a package member must have exactly one corresponding entry in the
+        // classes array". To avoid duplicates we keep track in the intVal field
+        // of the Item of each CONSTANT_Class_info entry C whether an inner
+        // class entry has already been added for C (this field is unused for
+        // class entries, and changing its value does not change the hashcode
+        // and equality tests). If so we store the index of this inner class
+        // entry (plus one) in intVal. This hack allows duplicate detection in
+        // O(1) time.
+        Item nameItem = newClassItem(name);
+        if (nameItem.intVal == 0) {
+            ++innerClassesCount;
+            innerClasses.putShort(nameItem.index);
+            innerClasses.putShort(outerName == null ? 0 : newClass(outerName));
+            innerClasses.putShort(innerName == null ? 0 : newUTF8(innerName));
+            innerClasses.putShort(access);
+            nameItem.intVal = innerClassesCount;
+        } else {
+            // Compare the inner classes entry nameItem.intVal - 1 with the
+            // arguments of this method and throw an exception if there is a
+            // difference?
+        }
     }
 
     @Override
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/Frame.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/Frame.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1455,16 +1455,20 @@
                             | cw.getMergedType(t & BASE_VALUE, u & BASE_VALUE);
                 } else {
                     // if u and t are array types, but not with the same element
-                    // type, merge(u,t)=java/lang/Object
-                    v = OBJECT | cw.addType("java/lang/Object");
+                    // type, merge(u,t) = dim(u) - 1 | java/lang/Object
+                    int vdim = ELEMENT_OF + (u & DIM);
+                    v = vdim | OBJECT | cw.addType("java/lang/Object");
                 }
             } else if ((t & BASE_KIND) == OBJECT || (t & DIM) != 0) {
                 // if t is any other reference or array type, the merged type
-                // is Object, or min(dim(u), dim(t)) | java/lang/Object is u
-                // and t have different array dimensions
-                int tdim = t & DIM;
-                int udim = u & DIM;
-                v = (udim != tdim ? Math.min(tdim, udim) : 0) | OBJECT
+                // is min(udim, tdim) | java/lang/Object, where udim is the
+                // array dimension of u, minus 1 if u is an array type with a
+                // primitive element type (and similarly for tdim).
+                int tdim = (((t & DIM) == 0 || (t & BASE_KIND) == OBJECT) ? 0
+                        : ELEMENT_OF) + (t & DIM);
+                int udim = (((u & DIM) == 0 || (u & BASE_KIND) == OBJECT) ? 0
+                        : ELEMENT_OF) + (u & DIM);
+                v = Math.min(tdim, udim) | OBJECT
                         | cw.addType("java/lang/Object");
             } else {
                 // if t is any other type, merge(u,t)=TOP
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/Item.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/Item.java	Wed Jul 05 19:44:04 2017 +0200
@@ -230,6 +230,7 @@
      * @param strVal3
      *            third part of the value of this item.
      */
+    @SuppressWarnings("fallthrough")
     void set(final int type, final String strVal1, final String strVal2,
             final String strVal3) {
         this.type = type;
@@ -237,9 +238,10 @@
         this.strVal2 = strVal2;
         this.strVal3 = strVal3;
         switch (type) {
+        case ClassWriter.CLASS:
+            this.intVal = 0;     // intVal of a class must be zero, see visitInnerClass
         case ClassWriter.UTF8:
         case ClassWriter.STR:
-        case ClassWriter.CLASS:
         case ClassWriter.MTYPE:
         case ClassWriter.TYPE_NORMAL:
             hashCode = 0x7FFFFFFF & (type + strVal1.hashCode());
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/Label.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/Label.java	Wed Jul 05 19:44:04 2017 +0200
@@ -502,7 +502,7 @@
     void addToSubroutine(final long id, final int nbSubroutines) {
         if ((status & VISITED) == 0) {
             status |= VISITED;
-            srcAndRefPositions = new int[(nbSubroutines - 1) / 32 + 1];
+            srcAndRefPositions = new int[nbSubroutines / 32 + 1];
         }
         srcAndRefPositions[(int) (id >>> 32)] |= (int) id;
     }
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/MethodWriter.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/MethodWriter.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1430,6 +1430,14 @@
 
     @Override
     public void visitMaxs(final int maxStack, final int maxLocals) {
+        if (resize) {
+            // replaces the temporary jump opcodes introduced by Label.resolve.
+            if (ClassReader.RESIZE) {
+                resizeInstructions();
+            } else {
+                throw new RuntimeException("Method code too large!");
+            }
+        }
         if (ClassReader.FRAMES && compute == FRAMES) {
             // completes the control flow graph with exception handler blocks
             Handler handler = firstHandler;
@@ -1987,43 +1995,43 @@
                     stackMap.putByte(v);
                 }
             } else {
-                StringBuffer buf = new StringBuffer();
+                StringBuilder sb = new StringBuilder();
                 d >>= 28;
                 while (d-- > 0) {
-                    buf.append('[');
+                    sb.append('[');
                 }
                 if ((t & Frame.BASE_KIND) == Frame.OBJECT) {
-                    buf.append('L');
-                    buf.append(cw.typeTable[t & Frame.BASE_VALUE].strVal1);
-                    buf.append(';');
+                    sb.append('L');
+                    sb.append(cw.typeTable[t & Frame.BASE_VALUE].strVal1);
+                    sb.append(';');
                 } else {
                     switch (t & 0xF) {
                     case 1:
-                        buf.append('I');
+                        sb.append('I');
                         break;
                     case 2:
-                        buf.append('F');
+                        sb.append('F');
                         break;
                     case 3:
-                        buf.append('D');
+                        sb.append('D');
                         break;
                     case 9:
-                        buf.append('Z');
+                        sb.append('Z');
                         break;
                     case 10:
-                        buf.append('B');
+                        sb.append('B');
                         break;
                     case 11:
-                        buf.append('C');
+                        sb.append('C');
                         break;
                     case 12:
-                        buf.append('S');
+                        sb.append('S');
                         break;
                     default:
-                        buf.append('J');
+                        sb.append('J');
                     }
                 }
-                stackMap.putByte(7).putShort(cw.newClass(buf.toString()));
+                stackMap.putByte(7).putShort(cw.newClass(sb.toString()));
             }
         }
     }
@@ -2051,14 +2059,6 @@
         if (classReaderOffset != 0) {
             return 6 + classReaderLength;
         }
-        if (resize) {
-            // replaces the temporary jump opcodes introduced by Label.resolve.
-            if (ClassReader.RESIZE) {
-                resizeInstructions();
-            } else {
-                throw new RuntimeException("Method code too large!");
-            }
-        }
         int size = 8;
         if (code.length > 0) {
             if (code.length > 65536) {
@@ -2715,49 +2715,50 @@
             }
         }
 
-        // recomputes the stack map frames
-        if (frameCount > 0) {
-            if (compute == FRAMES) {
-                frameCount = 0;
-                stackMap = null;
-                previousFrame = null;
-                frame = null;
-                Frame f = new Frame();
-                f.owner = labels;
-                Type[] args = Type.getArgumentTypes(descriptor);
-                f.initInputFrame(cw, access, args, maxLocals);
-                visitFrame(f);
-                Label l = labels;
-                while (l != null) {
-                    /*
-                     * here we need the original label position. getNewOffset
-                     * must therefore never have been called for this label.
-                     */
-                    u = l.position - 3;
-                    if ((l.status & Label.STORE) != 0 || (u >= 0 && resize[u])) {
-                        getNewOffset(allIndexes, allSizes, l);
-                        // TODO update offsets in UNINITIALIZED values
-                        visitFrame(l.frame);
-                    }
-                    l = l.successor;
+        // updates the stack map frame labels
+        if (compute == FRAMES) {
+            Label l = labels;
+            while (l != null) {
+                /*
+                 * Detects the labels that are just after an IF instruction that
+                 * has been resized with the IFNOT GOTO_W pattern. These labels
+                 * are now the target of a jump instruction (the IFNOT
+                 * instruction). Note that we need the original label position
+                 * here. getNewOffset must therefore never have been called for
+                 * this label.
+                 */
+                u = l.position - 3;
+                if (u >= 0 && resize[u]) {
+                    l.status |= Label.TARGET;
                 }
-            } else {
-                /*
-                 * Resizing an existing stack map frame table is really hard.
-                 * Not only the table must be parsed to update the offets, but
-                 * new frames may be needed for jump instructions that were
-                 * inserted by this method. And updating the offsets or
-                 * inserting frames can change the format of the following
-                 * frames, in case of packed frames. In practice the whole table
-                 * must be recomputed. For this the frames are marked as
-                 * potentially invalid. This will cause the whole class to be
-                 * reread and rewritten with the COMPUTE_FRAMES option (see the
-                 * ClassWriter.toByteArray method). This is not very efficient
-                 * but is much easier and requires much less code than any other
-                 * method I can think of.
-                 */
-                cw.invalidFrames = true;
+                getNewOffset(allIndexes, allSizes, l);
+                l = l.successor;
+            }
+            // Update the offsets in the uninitialized types
+            for (i = 0; i < cw.typeTable.length; ++i) {
+                Item item = cw.typeTable[i];
+                if (item != null && item.type == ClassWriter.TYPE_UNINIT) {
+                    item.intVal = getNewOffset(allIndexes, allSizes, 0,
+                            item.intVal);
+                }
             }
+            // The stack map frames are not serialized yet, so we don't need
+            // to update them. They will be serialized in visitMaxs.
+        } else if (frameCount > 0) {
+            /*
+             * Resizing an existing stack map frame table is really hard. Not
+             * only the table must be parsed to update the offets, but new
+             * frames may be needed for jump instructions that were inserted by
+             * this method. And updating the offsets or inserting frames can
+             * change the format of the following frames, in case of packed
+             * frames. In practice the whole table must be recomputed. For this
+             * the frames are marked as potentially invalid. This will cause the
+             * whole class to be reread and rewritten with the COMPUTE_FRAMES
+             * option (see the ClassWriter.toByteArray method). This is not very
+             * efficient but is much easier and requires much less code than any
+             * other method I can think of.
+             */
+            cw.invalidFrames = true;
         }
         // updates the exception handler block labels
         Handler h = firstHandler;
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/Type.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/Type.java	Wed Jul 05 19:44:04 2017 +0200
@@ -585,11 +585,11 @@
         case DOUBLE:
             return "double";
         case ARRAY:
-            StringBuffer b = new StringBuffer(getElementType().getClassName());
+            StringBuilder sb = new StringBuilder(getElementType().getClassName());
             for (int i = getDimensions(); i > 0; --i) {
-                b.append("[]");
+                sb.append("[]");
             }
-            return b.toString();
+            return sb.toString();
         case OBJECT:
             return new String(buf, off, len).replace('/', '.');
         default:
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/commons/InstructionAdapter.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/commons/InstructionAdapter.java	Wed Jul 05 19:44:04 2017 +0200
@@ -1089,7 +1089,7 @@
     @Deprecated
     public void invokestatic(final String owner, final String name,
             final String desc) {
-        if (api < Opcodes.ASM5) {
+        if (api >= Opcodes.ASM5) {
             invokestatic(owner, name, desc, false);
             return;
         }
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/commons/Method.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/commons/Method.java	Wed Jul 05 19:44:04 2017 +0200
@@ -205,7 +205,7 @@
         }
         String returnType = method.substring(0, space);
         String methodName = method.substring(space + 1, start - 1).trim();
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append('(');
         int p;
         do {
@@ -229,7 +229,7 @@
             return type;
         }
 
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         int index = 0;
         while ((index = type.indexOf("[]", index) + 1) > 0) {
             sb.append('[');
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/commons/Remapper.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/commons/Remapper.java	Wed Jul 05 19:44:04 2017 +0200
@@ -147,17 +147,17 @@
         }
 
         Type[] args = Type.getArgumentTypes(desc);
-        StringBuffer s = new StringBuffer("(");
+        StringBuilder sb = new StringBuilder("(");
         for (int i = 0; i < args.length; i++) {
-            s.append(mapDesc(args[i].getDescriptor()));
+            sb.append(mapDesc(args[i].getDescriptor()));
         }
         Type returnType = Type.getReturnType(desc);
         if (returnType == Type.VOID_TYPE) {
-            s.append(")V");
-            return s.toString();
+            sb.append(")V");
+            return sb.toString();
         }
-        s.append(')').append(mapDesc(returnType.getDescriptor()));
-        return s.toString();
+        sb.append(')').append(mapDesc(returnType.getDescriptor()));
+        return sb.toString();
     }
 
     public Object mapValue(Object value) {
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/commons/SerialVersionUIDAdder.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/commons/SerialVersionUIDAdder.java	Wed Jul 05 19:44:04 2017 +0200
@@ -239,7 +239,9 @@
         if (computeSVUID) {
             this.name = name;
             this.access = access;
-            this.interfaces = Arrays.copyOf(interfaces, interfaces.length);
+            this.interfaces = new String[interfaces.length];
+            System.arraycopy(interfaces, 0, this.interfaces, 0,
+                    interfaces.length);
         }
 
         super.visit(version, access, name, signature, superName, interfaces);
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/tree/MethodNode.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/tree/MethodNode.java	Wed Jul 05 19:44:04 2017 +0200
@@ -351,7 +351,7 @@
     }
 
     @Override
-    @SuppressWarnings("serial") // Anonymous class
+    @SuppressWarnings("serial")
     public AnnotationVisitor visitAnnotationDefault() {
         return new AnnotationNode(new ArrayList<Object>(0) {
             @Override
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/tree/analysis/AnalyzerException.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/tree/analysis/AnalyzerException.java	Wed Jul 05 19:44:04 2017 +0200
@@ -66,7 +66,7 @@
  * @author Bing Ran
  * @author Eric Bruneton
  */
-@SuppressWarnings("serial") // implementation class
+@SuppressWarnings("serial")
 public class AnalyzerException extends Exception {
 
     public final AbstractInsnNode node;
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/tree/analysis/Frame.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/tree/analysis/Frame.java	Wed Jul 05 19:44:04 2017 +0200
@@ -754,14 +754,14 @@
      */
     @Override
     public String toString() {
-        StringBuffer b = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         for (int i = 0; i < getLocals(); ++i) {
-            b.append(getLocal(i));
+            sb.append(getLocal(i));
         }
-        b.append(' ');
+        sb.append(' ');
         for (int i = 0; i < getStackSize(); ++i) {
-            b.append(getStack(i).toString());
+            sb.append(getStack(i).toString());
         }
-        return b.toString();
+        return sb.toString();
     }
 }
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/util/ASMifier.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/util/ASMifier.java	Wed Jul 05 19:44:04 2017 +0200
@@ -206,7 +206,6 @@
         }
         text.add("import java.util.*;\n");
         text.add("import jdk.internal.org.objectweb.asm.*;\n");
-        text.add("import jdk.internal.org.objectweb.asm.attrs.*;\n");
         text.add("public class " + simpleName + "Dump implements Opcodes {\n\n");
         text.add("public static byte[] dump () throws Exception {\n\n");
         text.add("ClassWriter cw = new ClassWriter(0);\n");
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/util/CheckClassAdapter.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/util/CheckClassAdapter.java	Wed Jul 05 19:44:04 2017 +0200
@@ -298,26 +298,26 @@
         for (int j = 0; j < method.instructions.size(); ++j) {
             method.instructions.get(j).accept(mv);
 
-            StringBuffer s = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
             Frame<BasicValue> f = frames[j];
             if (f == null) {
-                s.append('?');
+                sb.append('?');
             } else {
                 for (int k = 0; k < f.getLocals(); ++k) {
-                    s.append(getShortName(f.getLocal(k).toString()))
+                    sb.append(getShortName(f.getLocal(k).toString()))
                             .append(' ');
                 }
-                s.append(" : ");
+                sb.append(" : ");
                 for (int k = 0; k < f.getStackSize(); ++k) {
-                    s.append(getShortName(f.getStack(k).toString()))
+                    sb.append(getShortName(f.getStack(k).toString()))
                             .append(' ');
                 }
             }
-            while (s.length() < method.maxStack + method.maxLocals + 1) {
-                s.append(' ');
+            while (sb.length() < method.maxStack + method.maxLocals + 1) {
+                sb.append(' ');
             }
             pw.print(Integer.toString(j + 100000).substring(1));
-            pw.print(" " + s + " : " + t.text.get(t.text.size() - 1));
+            pw.print(" " + sb + " : " + t.text.get(t.text.size() - 1));
         }
         for (int j = 0; j < method.tryCatchBlocks.size(); ++j) {
             method.tryCatchBlocks.get(j).accept(mv);
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/util/Textifier.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/util/Textifier.java	Wed Jul 05 19:44:04 2017 +0200
@@ -443,7 +443,7 @@
         }
 
         buf.append(tab);
-        appendAccess(access);
+        appendAccess(access & ~Opcodes.ACC_VOLATILE);
         if ((access & Opcodes.ACC_NATIVE) != 0) {
             buf.append("native ");
         }
--- a/jdk/src/share/classes/jdk/internal/org/objectweb/asm/version.txt	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/org/objectweb/asm/version.txt	Wed Jul 05 19:44:04 2017 +0200
@@ -1,12 +1,12 @@
 Path: .
-Working Copy Root Path: /hudson/jobs/objectweb-pull/workspace/asm-svn-2014-03-12
+Working Copy Root Path: /hudson/jobs/objectweb-pull/workspace/asm-svn-2014-05-27
 URL: file:///svnroot/asm/trunk/asm
 Repository Root: file:///svnroot/asm
 Repository UUID: 271bd773-ee82-43a6-9b2b-1890ed8ce7f9
-Revision: 1721
+Revision: 1748
 Node Kind: directory
 Schedule: normal
 Last Changed Author: ebruneton
-Last Changed Rev: 1721
-Last Changed Date: 2014-03-02 17:25:35 +0100 (Sun, 02 Mar 2014)
+Last Changed Rev: 1747
+Last Changed Date: 2014-05-24 10:22:13 +0200 (Sat, 24 May 2014)
 
--- a/jdk/src/share/classes/jdk/net/ExtendedSocketOptions.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/net/ExtendedSocketOptions.java	Wed Jul 05 19:44:04 2017 +0200
@@ -32,7 +32,7 @@
  * {@link java.net.StandardSocketOptions}. These options may be platform
  * specific.
  *
- * @since 1.9
+ * @since 1.8
  */
 @jdk.Exported
 public final class ExtendedSocketOptions {
--- a/jdk/src/share/classes/jdk/net/NetworkPermission.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/net/NetworkPermission.java	Wed Jul 05 19:44:04 2017 +0200
@@ -58,7 +58,7 @@
  *
  * @see jdk.net.ExtendedSocketOptions
  *
- * @since 1.9
+ * @since 1.8
  */
 
 @jdk.Exported
--- a/jdk/src/share/classes/jdk/net/SocketFlow.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/net/SocketFlow.java	Wed Jul 05 19:44:04 2017 +0200
@@ -43,7 +43,7 @@
  * When a security manager is installed, a {@link NetworkPermission}
  * is required to set or get this option.
  *
- * @since 1.9
+ * @since 1.8
  */
 @jdk.Exported
 public class SocketFlow {
@@ -66,7 +66,7 @@
      * one of these statuses, which reflect the state of socket's
      * flow.
      *
-     * @since 1.9
+     * @since 1.8
      */
     @jdk.Exported
     public enum Status {
--- a/jdk/src/share/classes/jdk/net/Sockets.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/net/Sockets.java	Wed Jul 05 19:44:04 2017 +0200
@@ -51,7 +51,7 @@
  * When a security manager is installed, some non-standard socket options
  * may require a security permission before being set or get.
  * The details are specified in {@link ExtendedSocketOptions}. No permission
- * is required for {@link java.net.StandardSocketOption}s.
+ * is required for {@link java.net.StandardSocketOptions}.
  *
  * @see java.nio.channels.NetworkChannel
  */
--- a/jdk/src/share/classes/jdk/net/package-info.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/jdk/net/package-info.java	Wed Jul 05 19:44:04 2017 +0200
@@ -27,7 +27,7 @@
  * Platform specific socket options for the {@code java.net} and {@code java.nio.channels}
  * socket classes.
  *
- * @since 1.9
+ * @since 1.8
  */
 
 @jdk.Exported
--- a/jdk/src/share/classes/sun/jvmstat/monitor/AbstractMonitor.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/jvmstat/monitor/AbstractMonitor.java	Wed Jul 05 19:44:04 2017 +0200
@@ -84,7 +84,7 @@
      * {@inheritDoc}
      */
     public String getBaseName() {
-        int baseIndex = name.lastIndexOf(".")+1;
+        int baseIndex = name.lastIndexOf('.') + 1;
         return name.substring(baseIndex);
     }
 
--- a/jdk/src/share/classes/sun/jvmstat/monitor/HostIdentifier.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/jvmstat/monitor/HostIdentifier.java	Wed Jul 05 19:44:04 2017 +0200
@@ -138,8 +138,8 @@
                 String frag = u.getFragment();
                 URI u2 = null;
 
-                int c1index = uriString.indexOf(":");
-                int c2index = uriString.lastIndexOf(":");
+                int c1index = uriString.indexOf(':');
+                int c2index = uriString.lastIndexOf(':');
                 if (c2index != c1index) {
                     /*
                      * this is the scheme:hostname:port case. Attempt to
--- a/jdk/src/share/classes/sun/management/StackTraceElementCompositeData.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/management/StackTraceElementCompositeData.java	Wed Jul 05 19:44:04 2017 +0200
@@ -68,7 +68,7 @@
             ste.getMethodName(),
             ste.getFileName(),
             new Integer(ste.getLineNumber()),
-            new Boolean(ste.isNativeMethod()),
+            ste.isNativeMethod(),
         };
         try {
             return new CompositeDataSupport(stackTraceElementCompositeType,
--- a/jdk/src/share/classes/sun/management/ThreadInfoCompositeData.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/management/ThreadInfoCompositeData.java	Wed Jul 05 19:44:04 2017 +0200
@@ -120,8 +120,8 @@
             new Long(threadInfo.getLockOwnerId()),
             threadInfo.getLockOwnerName(),
             stackTraceData,
-            new Boolean(threadInfo.isSuspended()),
-            new Boolean(threadInfo.isInNative()),
+                threadInfo.isSuspended(),
+                threadInfo.isInNative(),
             lockedMonitorsData,
             lockedSyncsData,
         };
--- a/jdk/src/share/classes/sun/management/VMOptionCompositeData.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/management/VMOptionCompositeData.java	Wed Jul 05 19:44:04 2017 +0200
@@ -59,7 +59,7 @@
         final Object[] vmOptionItemValues = {
             option.getName(),
             option.getValue(),
-            new Boolean(option.isWriteable()),
+            option.isWriteable(),
             option.getOrigin().toString(),
         };
 
--- a/jdk/src/share/classes/sun/management/snmp/jvminstr/NotificationTargetImpl.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/management/snmp/jvminstr/NotificationTargetImpl.java	Wed Jul 05 19:44:04 2017 +0200
@@ -70,8 +70,8 @@
 
         String addrStr;
         if (target.startsWith("[")) {
-            final int index = target.indexOf("]");
-            final int index2 = target.lastIndexOf(":");
+            final int index = target.indexOf(']');
+            final int index2 = target.lastIndexOf(':');
             if(index == -1)
                 throw new IllegalArgumentException("Host starts with [ but " +
                                                    "does not end with ]");
@@ -85,8 +85,8 @@
             if (addrStr.startsWith("["))
                 throw new IllegalArgumentException("More than one [[...]]");
         } else {
-            final int index = target.indexOf(":");
-            final int index2 = target.lastIndexOf(":");
+            final int index = target.indexOf(':');
+            final int index2 = target.lastIndexOf(':');
             if(index == -1) throw new
                 IllegalArgumentException("Missing port separator \":\"");
             addrStr = target.substring(0, index);
@@ -98,7 +98,7 @@
         address = InetAddress.getByName(addrStr);
 
         //THE CHECK SHOULD BE STRONGER!!!
-        final int index = target.lastIndexOf(":");
+        final int index = target.lastIndexOf(':');
 
         community = target.substring(index + 1, target.length());
 
--- a/jdk/src/share/classes/sun/misc/ExtensionInfo.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/misc/ExtensionInfo.java	Wed Jul 05 19:44:04 2017 +0200
@@ -273,8 +273,8 @@
         else
         {
             // Look for index of "." in the string
-            int sIdx = source.indexOf(".");
-            int tIdx = target.indexOf(".");
+            int sIdx = source.indexOf('.');
+            int tIdx = target.indexOf('.');
 
             if (sIdx == -1)
                 sIdx = source.length() - 1;
@@ -304,10 +304,10 @@
         String versionError = mf.format(args);
 
         // Look for "-" for pre-release
-        int prIndex = token.indexOf("-");
+        int prIndex = token.indexOf('-');
 
         // Look for "_" for patch release
-        int patchIndex = token.indexOf("_");
+        int patchIndex = token.indexOf('_');
 
         if (prIndex == -1 && patchIndex == -1)
         {
--- a/jdk/src/share/classes/sun/misc/JarIndex.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/misc/JarIndex.java	Wed Jul 05 19:44:04 2017 +0200
@@ -172,7 +172,7 @@
         if ((jarFiles = indexMap.get(fileName)) == null) {
             /* try the package name again */
             int pos;
-            if((pos = fileName.lastIndexOf("/")) != -1) {
+            if((pos = fileName.lastIndexOf('/')) != -1) {
                 jarFiles = indexMap.get(fileName.substring(0, pos));
             }
         }
@@ -195,7 +195,7 @@
     public void add(String fileName, String jarName) {
         String packageName;
         int pos;
-        if((pos = fileName.lastIndexOf("/")) != -1) {
+        if((pos = fileName.lastIndexOf('/')) != -1) {
             packageName = fileName.substring(0, pos);
         } else {
             packageName = fileName;
--- a/jdk/src/share/classes/sun/misc/URLClassPath.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/misc/URLClassPath.java	Wed Jul 05 19:44:04 2017 +0200
@@ -793,7 +793,7 @@
         boolean validIndex(final String name) {
             String packageName = name;
             int pos;
-            if((pos = name.lastIndexOf("/")) != -1) {
+            if((pos = name.lastIndexOf('/')) != -1) {
                 packageName = name.substring(0, pos);
             }
 
@@ -803,7 +803,7 @@
             while (enum_.hasMoreElements()) {
                 entry = enum_.nextElement();
                 entryName = entry.getName();
-                if((pos = entryName.lastIndexOf("/")) != -1)
+                if((pos = entryName.lastIndexOf('/')) != -1)
                     entryName = entryName.substring(0, pos);
                 if (entryName.equals(packageName)) {
                     return true;
@@ -900,7 +900,7 @@
                              */
                             JarIndex newIndex = newLoader.getIndex();
                             if(newIndex != null) {
-                                int pos = jarName.lastIndexOf("/");
+                                int pos = jarName.lastIndexOf('/');
                                 newIndex.merge(this.index, (pos == -1 ?
                                     null : jarName.substring(0, pos + 1)));
                             }
--- a/jdk/src/share/classes/sun/net/ftp/impl/FtpClient.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/net/ftp/impl/FtpClient.java	Wed Jul 05 19:44:04 2017 +0200
@@ -258,7 +258,7 @@
                     d = null;
                 }
                 if (d != null && time != null) {
-                    int c = time.indexOf(":");
+                    int c = time.indexOf(':');
                     now.setTime(d);
                     now.set(Calendar.HOUR, Integer.parseInt(time.substring(0, c)));
                     now.set(Calendar.MINUTE, Integer.parseInt(time.substring(c + 1)));
@@ -294,7 +294,7 @@
 
         public FtpDirEntry parseLine(String line) {
             String name = null;
-            int i = line.lastIndexOf(";");
+            int i = line.lastIndexOf(';');
             if (i > 0) {
                 name = line.substring(i + 1).trim();
                 line = line.substring(0, i);
@@ -305,7 +305,7 @@
             FtpDirEntry file = new FtpDirEntry(name);
             while (!line.isEmpty()) {
                 String s;
-                i = line.indexOf(";");
+                i = line.indexOf(';');
                 if (i > 0) {
                     s = line.substring(0, i);
                     line = line.substring(i + 1);
@@ -313,7 +313,7 @@
                     s = line;
                     line = "";
                 }
-                i = s.indexOf("=");
+                i = s.indexOf('=');
                 if (i > 0) {
                     String fact = s.substring(0, i);
                     String value = s.substring(i + 1);
--- a/jdk/src/share/classes/sun/net/spi/nameservice/dns/DNSNameService.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/net/spi/nameservice/dns/DNSNameService.java	Wed Jul 05 19:44:04 2017 +0200
@@ -325,7 +325,7 @@
             while (i.hasNext()) {
                 String parentDomain = i.next();
                 int start = 0;
-                while ((start = parentDomain.indexOf(".")) != -1
+                while ((start = parentDomain.indexOf('.')) != -1
                        && start < parentDomain.length() -1) {
                     try {
                         results = resolve(ctx, host+"."+parentDomain, ids, 0);
--- a/jdk/src/share/classes/sun/net/util/IPAddressUtil.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/net/util/IPAddressUtil.java	Wed Jul 05 19:44:04 2017 +0200
@@ -132,7 +132,7 @@
         byte[] dst = new byte[INADDR16SZ];
 
         int srcb_length = srcb.length;
-        int pc = src.indexOf ("%");
+        int pc = src.indexOf ('%');
         if (pc == srcb_length -1) {
             return null;
         }
--- a/jdk/src/share/classes/sun/net/www/ParseUtil.java	Thu Jun 05 19:38:17 2014 -0700
+++ b/jdk/src/share/classes/sun/net/www/ParseUtil.java	Wed Jul 05 19:44:04 2017 +0200
@@ -356,8 +356,8 @@
              * because we must not quote a literal IPv6 address
              */
             if (opaquePart.startsWith("//[")) {
-                int end =  opaquePart.indexOf("]");
-                if (end != -1 && opaquePart.indexOf(":")!=-1) {
+                int end =  opaquePart.indexOf(']');
+                if (end != -1 && opaquePart.indexOf(':')!=-1) {
                     String doquote, dontquote;