OpenJDK / jdk / jdk10
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;