# HG changeset patch # User duke # Date 1499277000 -7200 # Node ID acabdf6da9db09dd0d3ae1ecc673c2448ac9435d # Parent 376a52c9540cf10b5d82721accffd0b863e977da# Parent 1c53a8dd22ed631d0d19069f3d0ebede04f667e8 Merge diff -r 376a52c9540c -r acabdf6da9db .hgtags-top-repo --- a/.hgtags-top-repo Sun Jun 15 08:41:57 2014 -0700 +++ b/.hgtags-top-repo Wed Jul 05 19:50:00 2017 +0200 @@ -264,3 +264,4 @@ 75a08df650eb3126bab0c4d15241f5886162393c jdk9-b19 ee4fd72b2ec3d92497f37163352f294aa695c6fb jdk9-b20 9052803f4d01feda28b3d65f2b64dd457d21c7b6 jdk9-b21 +8e4bdab4c362aadde2d321f968cd503a2f779e2f jdk9-b22 diff -r 376a52c9540c -r acabdf6da9db common/autoconf/hotspot-spec.gmk.in --- a/common/autoconf/hotspot-spec.gmk.in Sun Jun 15 08:41:57 2014 -0700 +++ b/common/autoconf/hotspot-spec.gmk.in Wed Jul 05 19:50:00 2017 +0200 @@ -69,8 +69,8 @@ # Yet another name for arch used for an extra subdir below the jvm lib. # Uses i386 and amd64, instead of x86 and x86_64. LIBARCH=$(OPENJDK_TARGET_CPU_LEGACY_LIB) -# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of x86 and x86_64. -ARCH=$(OPENJDK_TARGET_CPU_LEGACY) +# Set the cpu architecture +ARCH=$(OPENJDK_TARGET_CPU_ARCH) # Legacy setting for building for a 64 bit machine. # If yes then this expands to _LP64:=1 @LP64@ diff -r 376a52c9540c -r acabdf6da9db corba/.hgtags --- a/corba/.hgtags Sun Jun 15 08:41:57 2014 -0700 +++ b/corba/.hgtags Wed Jul 05 19:50:00 2017 +0200 @@ -264,3 +264,4 @@ eecc1b6adc7e193d00a0641eb0963add5a4c06e8 jdk9-b19 87f36eecb1665012d01c5cf102494e591c943ea6 jdk9-b20 3615a4e7f0542ca7552ad6454b742c73ee211d8e jdk9-b21 +ddc07abf4307855c0dc904cc5c96cc764023a930 jdk9-b22 diff -r 376a52c9540c -r acabdf6da9db get_source.sh --- a/get_source.sh Sun Jun 15 08:41:57 2014 -0700 +++ b/get_source.sh Wed Jul 05 19:50:00 2017 +0200 @@ -25,11 +25,34 @@ # questions. # +to_stderr() { + echo "$@" >&2 +} + +error() { + to_stderr "ERROR: $1" + exit ${2:-126} +} + +warning() { + to_stderr "WARNING: $1" +} + +version_field() { + # rev is typically omitted for minor and major releases + field=`echo ${1}.0 | cut -f ${2} -d .` + if expr 1 + $field >/dev/null 2> /dev/null; then + echo $field + else + echo -1 + fi +} + # Version check # required reqdmajor=1 -reqdminor=5 +reqdminor=4 reqdrev=0 # requested @@ -37,34 +60,39 @@ rqstminor=6 rqstrev=3 + # installed -hgwhere="`which hg 2> /dev/null | grep -v '^no hg in '`" +hgwhere="`command -v hg`" if [ "x$hgwhere" = "x" ]; then - echo "ERROR: Could not locate Mercurial command" >&2 - exit 126 + error "Could not locate Mercurial command" fi -hgversion="`hg --version 2> /dev/null | sed -n -e 's@^Mercurial Distributed SCM (version \(.*\))\$@\1@p'`" +hgversion="`hg --version 2> /dev/null | sed -n -e 's@^Mercurial Distributed SCM (version \([^+]*\).*)\$@\1@p'`" if [ "x${hgversion}" = "x" ] ; then - echo "ERROR: Could not determine Mercurial version" >&2 - exit 126 + error "Could not determine Mercurial version of $hgwhere" fi -hgmajor="`echo $hgversion | cut -f 1 -d .`" -hgminor="`echo $hgversion | cut -f 2 -d .`" -hgrev="`echo $hgversion.0 | cut -f 3 -d .`" # rev is omitted for minor and major releases +hgmajor="`version_field $hgversion 1`" +hgminor="`version_field $hgversion 2`" +hgrev="`version_field $hgversion 3`" + +if [ $hgmajor -eq -1 -o $hgminor -eq -1 -o $hgrev -eq -1 ] ; then + error "Could not determine Mercurial version of $hgwhere from \"$hgversion\"" +fi + # Require if [ $hgmajor -lt $reqdmajor -o \( $hgmajor -eq $reqdmajor -a $hgminor -lt $reqdminor \) -o \( $hgmajor -eq $reqdmajor -a $hgminor -eq $reqdminor -a $hgrev -lt $reqdrev \) ] ; then - echo "ERROR: Mercurial version $reqdmajor.$reqdminor.$reqdrev or later is required. $hgwhere is version $hgversion" >&2 - exit 126 + error "Mercurial version $reqdmajor.$reqdminor.$reqdrev or later is required. $hgwhere is version $hgversion" fi + # Request if [ $hgmajor -lt $rqstmajor -o \( $hgmajor -eq $rqstmajor -a $hgminor -lt $rqstminor \) -o \( $hgmajor -eq $rqstmajor -a $hgminor -eq $rqstminor -a $hgrev -lt $rqstrev \) ] ; then - echo "WARNING: Mercurial version $rqstmajor.$rqstminor.$rqstrev or later is recommended. $hgwhere is version $hgversion" >&2 + warning "Mercurial version $rqstmajor.$rqstminor.$rqstrev or later is recommended. $hgwhere is version $hgversion" fi + # Get clones of all absent nested repositories (harmless if already exist) sh ./common/bin/hgforest.sh clone "$@" || exit $? diff -r 376a52c9540c -r acabdf6da9db hotspot/.hgtags --- a/hotspot/.hgtags Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/.hgtags Wed Jul 05 19:50:00 2017 +0200 @@ -424,3 +424,4 @@ d4cffb3ae6213c66c7522ebffe0349360a45f0ef jdk9-b19 c1af79d122ec9f715fa29312b5e91763f3a4dfc4 jdk9-b20 17b4a5e831b398738feedb0afe75245744510153 jdk9-b21 +518d1fcc0799494f013e00e0a94a91b6f212d54f jdk9-b22 diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/G1YCType.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/G1YCType.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,45 @@ +/* + * 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. + * + */ + +package sun.jvm.hotspot.gc_interface; + +//These definitions should be kept in sync with the definitions in the HotSpot +//code. + +public enum G1YCType { + Normal ("Normal"), + InitialMark ("Initial Mark"), + DuringMark ("During Mark"), + Mixed ("Mixed"), + G1YCTypeEndSentinel ("Unknown"); + + private final String value; + + G1YCType(String val) { + this.value = val; + } + public String value() { + return value; + } +} diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCCause.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCCause.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,69 @@ +/* + * 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. + * + */ + +package sun.jvm.hotspot.gc_interface; + +//These definitions should be kept in sync with the definitions in the HotSpot code. + +public enum GCCause { + _java_lang_system_gc ("System.gc()"), + _full_gc_alot ("FullGCAlot"), + _scavenge_alot ("ScavengeAlot"), + _allocation_profiler ("Allocation Profiler"), + _jvmti_force_gc ("JvmtiEnv ForceGarbageCollection"), + _gc_locker ("GCLocker Initiated GC"), + _heap_inspection ("Heap Inspection Initiated GC"), + _heap_dump ("Heap Dump Initiated GC"), + + _no_gc ("No GC"), + _no_cause_specified ("Unknown GCCause"), + _allocation_failure ("Allocation Failure"), + + _tenured_generation_full ("Tenured Generation Full"), + _metadata_GC_threshold ("Metadata GC Threshold"), + + _cms_generation_full ("CMS Generation Full"), + _cms_initial_mark ("CMS Initial Mark"), + _cms_final_remark ("CMS Final Remark"), + _cms_concurrent_mark ("CMS Concurrent Mark"), + + _old_generation_expanded_on_last_scavenge ("Old Generation Expanded On Last Scavenge"), + _old_generation_too_full_to_scavenge ("Old Generation Too Full To Scavenge"), + _adaptive_size_policy ("Ergonomics"), + + _g1_inc_collection_pause ("G1 Evacuation Pause"), + _g1_humongous_allocation ("G1 Humongous Allocation"), + + _last_ditch_collection ("Last ditch collection"), + _last_gc_cause ("ILLEGAL VALUE - last gc cause - ILLEGAL VALUE"); + + private final String value; + + GCCause(String val) { + this.value = val; + } + public String value() { + return value; + } +} diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCName.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCName.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,50 @@ +/* + * 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. + * + */ + +package sun.jvm.hotspot.gc_interface; + +//These definitions should be kept in sync with the definitions in the HotSpot code. + +public enum GCName { + ParallelOld ("ParallelOld"), + SerialOld ("SerialOld"), + PSMarkSweep ("PSMarkSweep"), + ParallelScavenge ("ParallelScavenge"), + DefNew ("DefNew"), + ParNew ("ParNew"), + G1New ("G1New"), + ConcurrentMarkSweep ("ConcurrentMarkSweep"), + G1Old ("G1Old"), + GCNameEndSentinel ("GCNameEndSentinel"); + + private final String value; + + GCName(String val) { + this.value = val; + } + public String value() { + return value; + } +} + diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCWhen.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCWhen.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,45 @@ +/* + * 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. + * + */ + +package sun.jvm.hotspot.gc_interface; + +//These definitions should be kept in sync with the definitions in the HotSpot code. + +public enum GCWhen { + BeforeGC ("Before GC"), + AfterGC ("After GC"), + GCWhenEndSentinel ("GCWhenEndSentinel"); + + private final String value; + + GCWhen(String val) { + this.value = val; + } + public String value() { + return value; + } +} + + + diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/ReferenceType.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/ReferenceType.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,45 @@ +/* + * 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. + * + */ + +package sun.jvm.hotspot.gc_interface; + +//These definitions should be kept in sync with the definitions in the HotSpot code. + +public enum ReferenceType { + REF_NONE ("None reference"), // Regular class + REF_OTHER ("Other reference"), // Subclass of java/lang/ref/Reference, but not subclass of one of the classes below + REF_SOFT ("Soft reference"), // Subclass of java/lang/ref/SoftReference + REF_WEAK ("Weak reference"), // Subclass of java/lang/ref/WeakReference + REF_FINAL ("Final reference"), // Subclass of java/lang/ref/FinalReference + REF_PHANTOM ("Phantom reference"); // Subclass of java/lang/ref/PhantomReference + + private final String value; + + ReferenceType(String val) { + this.value = val; + } + public String value() { + return value; + } +} diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java Wed Jul 05 19:50:00 2017 +0200 @@ -56,6 +56,12 @@ private static AddressField narrowKlassBaseField; private static CIntegerField narrowKlassShiftField; + public enum NARROW_OOP_MODE { + UnscaledNarrowOop, + ZeroBasedNarrowOop, + HeapBasedNarrowOop + } + static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -94,7 +100,17 @@ public Universe() { } - + public static String narrowOopModeToString(NARROW_OOP_MODE mode) { + switch (mode) { + case UnscaledNarrowOop: + return "32-bits Oops"; + case ZeroBasedNarrowOop: + return "zero based Compressed Oops"; + case HeapBasedNarrowOop: + return "Compressed Oops with base"; + } + return ""; + } public CollectedHeap heap() { try { return (CollectedHeap) heapConstructor.instantiateWrapperFor(collectedHeapField.getValue()); diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java Wed Jul 05 19:50:00 2017 +0200 @@ -55,6 +55,7 @@ layoutHelper = new IntField(type.getJIntField("_layout_helper"), 0); name = type.getAddressField("_name"); accessFlags = new CIntField(type.getCIntegerField("_access_flags"), 0); + traceIDField = type.getField("_trace_id"); subklass = new MetadataField(type.getAddressField("_subklass"), 0); nextSibling = new MetadataField(type.getAddressField("_next_sibling"), 0); @@ -86,6 +87,7 @@ private static CIntField accessFlags; private static MetadataField subklass; private static MetadataField nextSibling; + private static sun.jvm.hotspot.types.Field traceIDField; private Address getValue(AddressField field) { return addr.getAddressAt(field.getOffset()); @@ -106,6 +108,7 @@ public AccessFlags getAccessFlagsObj(){ return new AccessFlags(getAccessFlags()); } public Klass getSubklassKlass() { return (Klass) subklass.getValue(this); } public Klass getNextSiblingKlass() { return (Klass) nextSibling.getValue(this); } + public long traceID() { return traceIDField.getJLong(addr); } // computed access flags - takes care of inner classes etc. // This is closer to actual source level than getAccessFlags() etc. diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java Wed Jul 05 19:50:00 2017 +0200 @@ -54,6 +54,8 @@ private static OopField threadNameField; private static OopField threadGroupField; private static LongField threadEETopField; + //tid field is new since 1.5 + private static LongField threadTIDField; // threadStatus field is new since 1.5 private static IntField threadStatusField; // parkBlocker field is new since 1.6 @@ -220,6 +222,7 @@ threadNameField = (OopField) k.findField("name", "[C"); threadGroupField = (OopField) k.findField("group", "Ljava/lang/ThreadGroup;"); threadEETopField = (LongField) k.findField("eetop", "J"); + threadTIDField = (LongField) k.findField("tid", "J"); threadStatusField = (IntField) k.findField("threadStatus", "I"); threadParkBlockerField = (OopField) k.findField("parkBlocker", "Ljava/lang/Object;"); @@ -268,6 +271,15 @@ return VM.getVM().getThreads().createJavaThreadWrapper(addr); } + public static long threadOopGetTID(Oop threadOop) { + initThreadFields(); + if (threadTIDField != null) { + return threadTIDField.getValue(threadOop); + } else { + return 0; + } + } + /** returns value of java.lang.Thread.threadStatus field */ public static int threadOopGetThreadStatus(Oop threadOop) { initThreadFields(); diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/CompilerPhaseType.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/CompilerPhaseType.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,67 @@ +/* + * 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. + * + */ + +package sun.jvm.hotspot.opto; + +//These definitions should be kept in sync with the definitions in the HotSpot code. + +public enum CompilerPhaseType { + PHASE_BEFORE_STRINGOPTS ("Before StringOpts"), + PHASE_AFTER_STRINGOPTS ("After StringOpts"), + PHASE_BEFORE_REMOVEUSELESS ("Before RemoveUseless"), + PHASE_AFTER_PARSING ("After Parsing"), + PHASE_ITER_GVN1 ("Iter GVN 1"), + PHASE_PHASEIDEAL_BEFORE_EA ("PhaseIdealLoop before EA"), + PHASE_ITER_GVN_AFTER_EA ("Iter GVN after EA"), + PHASE_ITER_GVN_AFTER_ELIMINATION ("Iter GVN after eliminating allocations and locks"), + PHASE_PHASEIDEALLOOP1 ("PhaseIdealLoop 1"), + PHASE_PHASEIDEALLOOP2 ("PhaseIdealLoop 2"), + PHASE_PHASEIDEALLOOP3 ("PhaseIdealLoop 3"), + PHASE_CPP1 ("PhaseCPP 1"), + PHASE_ITER_GVN2 ("Iter GVN 2"), + PHASE_PHASEIDEALLOOP_ITERATIONS ("PhaseIdealLoop iterations"), + PHASE_OPTIMIZE_FINISHED ("Optimize finished"), + PHASE_GLOBAL_CODE_MOTION ("Global code motion"), + PHASE_FINAL_CODE ("Final Code"), + PHASE_AFTER_EA ("After Escape Analysis"), + PHASE_BEFORE_CLOOPS ("Before CountedLoop"), + PHASE_AFTER_CLOOPS ("After CountedLoop"), + PHASE_BEFORE_BEAUTIFY_LOOPS ("Before beautify loops"), + PHASE_AFTER_BEAUTIFY_LOOPS ("After beautify loops"), + PHASE_BEFORE_MATCHING ("Before Matching"), + PHASE_INCREMENTAL_INLINE ("Incremental Inline"), + PHASE_INCREMENTAL_BOXING_INLINE ("Incremental Boxing Inline"), + PHASE_END ("End"), + PHASE_FAILURE ("Failure"), + PHASE_NUM_TYPES ("Number of Phase Types"); + + private final String value; + + CompilerPhaseType(String val) { + this.value = val; + } + public String value() { + return value; + } +} diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Flags.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Flags.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,48 @@ +/* + * 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. + * + */ + +package sun.jvm.hotspot.runtime; + +//These definitions should be kept in sync with the definitions in the HotSpot code. + +public enum Flags { + // value origin + DEFAULT ("Default"), + COMMAND_LINE ("Command line"), + ENVIRON_VAR ("Environment variable"), + CONFIG_FILE ("Config file"), + MANAGEMENT ("Management"), + ERGONOMIC ("Ergonomic"), + ATTACH_ON_DEMAND ("Attach on demand"), + INTERNAL ("Internal"); + + private final String value; + + Flags(String val) { + this.value = val; + } + public String value() { + return value; + } +} diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Thread.java --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Thread.java Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Thread.java Wed Jul 05 19:50:00 2017 +0200 @@ -41,6 +41,8 @@ private static AddressField currentPendingMonitorField; private static AddressField currentWaitingMonitorField; + private static JLongField allocatedBytesField; + static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -61,6 +63,7 @@ activeHandlesField = type.getAddressField("_active_handles"); currentPendingMonitorField = type.getAddressField("_current_pending_monitor"); currentWaitingMonitorField = type.getAddressField("_current_waiting_monitor"); + allocatedBytesField = type.getJLongField("_allocated_bytes"); } public Thread(Address addr) { @@ -104,6 +107,10 @@ return new JNIHandleBlock(a); } + public long allocatedBytes() { + return allocatedBytesField.getValue(addr); + } + public boolean isVMThread() { return false; } public boolean isJavaThread() { return false; } public boolean isCompilerThread() { return false; } diff -r 376a52c9540c -r acabdf6da9db hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VMOps.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VMOps.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,86 @@ +/* + * 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. + * + */ + +package sun.jvm.hotspot.runtime; + +//These definitions should be kept in sync with the definitions in the HotSpot code. + +public enum VMOps { + Dummy, + ThreadStop, + ThreadDump, + PrintThreads, + FindDeadlocks, + ForceSafepoint, + ForceAsyncSafepoint, + Deoptimize, + DeoptimizeFrame, + DeoptimizeAll, + ZombieAll, + UnlinkSymbols, + Verify, + PrintJNI, + HeapDumper, + DeoptimizeTheWorld, + CollectForMetadataAllocation, + GC_HeapInspection, + GenCollectFull, + GenCollectFullConcurrent, + GenCollectForAllocation, + ParallelGCFailedAllocation, + ParallelGCSystemGC, + CGC_Operation, + CMS_Initial_Mark, + CMS_Final_Remark, + G1CollectFull, + G1CollectForAllocation, + G1IncCollectionPause, + EnableBiasedLocking, + RevokeBias, + BulkRevokeBias, + PopulateDumpSharedSpace, + JNIFunctionTableCopier, + RedefineClasses, + GetOwnedMonitorInfo, + GetObjectMonitorUsage, + GetCurrentContendedMonitor, + GetStackTrace, + GetMultipleStackTraces, + GetAllStackTraces, + GetThreadListStackTraces, + GetFrameCount, + GetFrameLocation, + ChangeBreakpoints, + GetOrSetLocal, + GetCurrentLocation, + EnterInterpOnlyMode, + ChangeSingleStep, + HeapWalkOperation, + HeapIterateOperation, + ReportJavaOutOfMemory, + JFRCheckpoint, + Exit, + LinuxDllLoad, + Terminating +} diff -r 376a52c9540c -r acabdf6da9db hotspot/make/aix/makefiles/vm.make --- a/hotspot/make/aix/makefiles/vm.make Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/aix/makefiles/vm.make Wed Jul 05 19:50:00 2017 +0200 @@ -82,14 +82,12 @@ -DJRE_RELEASE_VERSION="\"$(JRE_RELEASE_VER)\"" \ $(JDK_VER_DEFS) HS_LIB_ARCH = -DHOTSPOT_LIB_ARCH=\"$(LIBARCH)\" -BUILD_TARGET = -DHOTSPOT_BUILD_TARGET="\"$(TARGET)\"" BUILD_USER = -DHOTSPOT_BUILD_USER="\"$(HOTSPOT_BUILD_USER)\"" VM_DISTRO = -DHOTSPOT_VM_DISTRO="\"$(HOTSPOT_VM_DISTRO)\"" CXXFLAGS = \ ${SYSDEFS} \ ${INCLUDES} \ - ${BUILD_TARGET} \ ${BUILD_USER} \ ${HS_LIB_ARCH} \ ${VM_DISTRO} diff -r 376a52c9540c -r acabdf6da9db hotspot/make/bsd/makefiles/gcc.make --- a/hotspot/make/bsd/makefiles/gcc.make Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/bsd/makefiles/gcc.make Wed Jul 05 19:50:00 2017 +0200 @@ -280,7 +280,10 @@ # optimization control flags (Used by fastdebug and release variants) OPT_CFLAGS/NOOPT=-O0 -ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 8 \) \))" "1" +ifeq ($(USE_CLANG), true) + # Clang does not support -Og + OPT_CFLAGS/DEBUG=-O0 +else ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 8 \) \))" "1" # Allow basic optimizations which don't distrupt debugging. (Principally dead code elimination) OPT_CFLAGS/DEBUG=-Og else @@ -319,9 +322,20 @@ # Work around some compiler bugs. ifeq ($(USE_CLANG), true) + # Clang 4.2 ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 2), 1) OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT) OPT_CFLAGS/unsafe.o += -O1 + # Clang 5.0 + else ifeq ($(shell expr $(CC_VER_MAJOR) = 5 \& $(CC_VER_MINOR) = 0), 1) + OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT) + OPT_CFLAGS/unsafe.o += -O1 + # Clang 5.1 + else ifeq ($(shell expr $(CC_VER_MAJOR) = 5 \& $(CC_VER_MINOR) = 1), 1) + OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT) + OPT_CFLAGS/unsafe.o += -O1 + else + $(error "Update compiler workarounds for Clang $(CC_VER_MAJOR).$(CC_VER_MINOR)") endif else # 6835796. Problem in GCC 4.3.0 with mulnode.o optimized compilation. @@ -443,7 +457,10 @@ CFLAGS += -flimit-debug-info endif -ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 8 \) \))" "1" +ifeq ($(USE_CLANG), true) + # Clang does not support -Og + DEBUG_CFLAGS=-O0 +else ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 8 \) \))" "1" # Allow basic optimizations which don't distrupt debugging. (Principally dead code elimination) DEBUG_CFLAGS=-Og else diff -r 376a52c9540c -r acabdf6da9db hotspot/make/bsd/makefiles/vm.make --- a/hotspot/make/bsd/makefiles/vm.make Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/bsd/makefiles/vm.make Wed Jul 05 19:50:00 2017 +0200 @@ -81,14 +81,12 @@ -DJRE_RELEASE_VERSION="\"$(JRE_RELEASE_VER)\"" \ $(JDK_VER_DEFS) HS_LIB_ARCH = -DHOTSPOT_LIB_ARCH=\"$(LIBARCH)\" -BUILD_TARGET = -DHOTSPOT_BUILD_TARGET="\"$(TARGET)\"" BUILD_USER = -DHOTSPOT_BUILD_USER="\"$(HOTSPOT_BUILD_USER)\"" VM_DISTRO = -DHOTSPOT_VM_DISTRO="\"$(HOTSPOT_VM_DISTRO)\"" CXXFLAGS = \ ${SYSDEFS} \ ${INCLUDES} \ - ${BUILD_TARGET} \ ${BUILD_USER} \ ${HS_LIB_ARCH} \ ${VM_DISTRO} diff -r 376a52c9540c -r acabdf6da9db hotspot/make/defs.make --- a/hotspot/make/defs.make Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/defs.make Wed Jul 05 19:50:00 2017 +0200 @@ -135,8 +135,12 @@ ifeq ($(JDK_MKTG_VERSION),) JDK_MKTG_VERSION=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) endif -ifeq ($(JDK_VERSION),) - JDK_VERSION=$(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) +ifeq ($(JDK_VERSION),) + ifeq ($(BUILD_FLAVOR), product) + JDK_VERSION=$(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) + else + JDK_VERSION=$(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)-$(BUILD_FLAVOR) + endif endif ifeq ($(FULL_VERSION),) FULL_VERSION="$(JDK_VERSION)" diff -r 376a52c9540c -r acabdf6da9db hotspot/make/linux/makefiles/defs.make --- a/hotspot/make/linux/makefiles/defs.make Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/linux/makefiles/defs.make Wed Jul 05 19:50:00 2017 +0200 @@ -69,7 +69,7 @@ endif # sparc -ifeq ($(ARCH), sparc64) +ifneq (,$(findstring $(ARCH), sparc)) ifeq ($(ARCH_DATA_MODEL), 64) ARCH_DATA_MODEL = 64 MAKE_ARGS += LP64=1 @@ -83,30 +83,20 @@ HS_ARCH = sparc endif -# amd64/x86_64 -ifneq (,$(findstring $(ARCH), amd64 x86_64)) +# i686/i586 and amd64/x86_64 +ifneq (,$(findstring $(ARCH), amd64 x86_64 i686 i586)) ifeq ($(ARCH_DATA_MODEL), 64) ARCH_DATA_MODEL = 64 MAKE_ARGS += LP64=1 PLATFORM = linux-amd64 VM_PLATFORM = linux_amd64 - HS_ARCH = x86 else ARCH_DATA_MODEL = 32 PLATFORM = linux-i586 VM_PLATFORM = linux_i486 - HS_ARCH = x86 - # We have to reset ARCH to i686 since SRCARCH relies on it - ARCH = i686 endif -endif -# i686/i586 ie 32-bit x86 -ifneq (,$(findstring $(ARCH), i686 i586)) - ARCH_DATA_MODEL = 32 - PLATFORM = linux-i586 - VM_PLATFORM = linux_i486 - HS_ARCH = x86 + HS_ARCH = x86 endif # ARM @@ -118,20 +108,18 @@ endif # PPC -ifeq ($(ARCH), ppc) - ARCH_DATA_MODEL = 32 - PLATFORM = linux-ppc - VM_PLATFORM = linux_ppc - HS_ARCH = ppc -endif +ifneq (,$(findstring $(ARCH), ppc)) + ifeq ($(ARCH_DATA_MODEL), 64) + MAKE_ARGS += LP64=1 + PLATFORM = linux-ppc64 + VM_PLATFORM = linux_ppc64 + else + ARCH_DATA_MODEL = 32 + PLATFORM = linux-ppc + VM_PLATFORM = linux_ppc + endif -# PPC64 -ifeq ($(ARCH), ppc64) - ARCH_DATA_MODEL = 64 - MAKE_ARGS += LP64=1 - PLATFORM = linux-ppc64 - VM_PLATFORM = linux_ppc64 - HS_ARCH = ppc + HS_ARCH = ppc endif # On 32 bit linux we build server and client, on 64 bit just server. diff -r 376a52c9540c -r acabdf6da9db hotspot/make/linux/makefiles/vm.make --- a/hotspot/make/linux/makefiles/vm.make Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/linux/makefiles/vm.make Wed Jul 05 19:50:00 2017 +0200 @@ -82,14 +82,12 @@ -DJRE_RELEASE_VERSION="\"$(JRE_RELEASE_VER)\"" \ $(JDK_VER_DEFS) HS_LIB_ARCH = -DHOTSPOT_LIB_ARCH=\"$(LIBARCH)\" -BUILD_TARGET = -DHOTSPOT_BUILD_TARGET="\"$(TARGET)\"" BUILD_USER = -DHOTSPOT_BUILD_USER="\"$(HOTSPOT_BUILD_USER)\"" VM_DISTRO = -DHOTSPOT_VM_DISTRO="\"$(HOTSPOT_VM_DISTRO)\"" CXXFLAGS = \ ${SYSDEFS} \ ${INCLUDES} \ - ${BUILD_TARGET} \ ${BUILD_USER} \ ${HS_LIB_ARCH} \ ${VM_DISTRO} diff -r 376a52c9540c -r acabdf6da9db hotspot/make/solaris/makefiles/sa.make --- a/hotspot/make/solaris/makefiles/sa.make Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/solaris/makefiles/sa.make Wed Jul 05 19:50:00 2017 +0200 @@ -29,8 +29,12 @@ # and generate JNI header file for native methods. include $(GAMMADIR)/make/solaris/makefiles/rules.make +include $(GAMMADIR)/make/defs.make AGENT_DIR = $(GAMMADIR)/agent include $(GAMMADIR)/make/sa.files + +-include $(HS_ALT_MAKE)/solaris/makefiles/sa.make + GENERATED = ../generated # tools.jar is needed by the JDI - SA binding diff -r 376a52c9540c -r acabdf6da9db hotspot/make/solaris/makefiles/vm.make --- a/hotspot/make/solaris/makefiles/vm.make Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/solaris/makefiles/vm.make Wed Jul 05 19:50:00 2017 +0200 @@ -77,14 +77,12 @@ -DJRE_RELEASE_VERSION="\"$(JRE_RELEASE_VER)\"" \ $(JDK_VER_DEFS) HS_LIB_ARCH = -DHOTSPOT_LIB_ARCH=\"$(LIBARCH)\" -BUILD_TARGET = -DHOTSPOT_BUILD_TARGET="\"$(TARGET)\"" BUILD_USER = -DHOTSPOT_BUILD_USER="\"$(HOTSPOT_BUILD_USER)\"" VM_DISTRO = -DHOTSPOT_VM_DISTRO="\"$(HOTSPOT_VM_DISTRO)\"" CXXFLAGS = \ ${SYSDEFS} \ ${INCLUDES} \ - ${BUILD_TARGET} \ ${BUILD_USER} \ ${HS_LIB_ARCH} \ ${VM_DISTRO} diff -r 376a52c9540c -r acabdf6da9db hotspot/make/windows/makefiles/sa.make --- a/hotspot/make/windows/makefiles/sa.make Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/windows/makefiles/sa.make Wed Jul 05 19:50:00 2017 +0200 @@ -38,6 +38,22 @@ GENERATED = ../generated +HS_COMMON_SRC_REL = src + +!if "$(OPENJDK)" != "true" +HS_ALT_SRC_REL=src/closed +HS_ALT_SRC = $(WorkSpace)/$(HS_ALT_SRC_REL) +!ifndef HS_ALT_MAKE +HS_ALT_MAKE=$(WorkSpace)/make/closed +!endif +!endif + +HS_COMMON_SRC = $(WorkSpace)/$(HS_COMMON_SRC_REL) + +!ifdef HS_ALT_MAKE +!include $(HS_ALT_MAKE)/windows/makefiles/sa.make +!endif + # tools.jar is needed by the JDI - SA binding SA_CLASSPATH = $(BOOT_JAVA_HOME)/lib/tools.jar diff -r 376a52c9540c -r acabdf6da9db hotspot/make/windows/projectfiles/common/Makefile --- a/hotspot/make/windows/projectfiles/common/Makefile Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/make/windows/projectfiles/common/Makefile Wed Jul 05 19:50:00 2017 +0200 @@ -116,7 +116,7 @@ JDK_MINOR_VERSION="\\\"$(JDK_MINOR_VER)\\\"" JDK_MICRO_VERSION="\\\"$(JDK_MICRO_VER)\\\"" -ReleaseOptions = -define HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) -define JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION) -define HOTSPOT_VM_DISTRO=$(HOTSPOT_VM_DISTRO) -define JDK_MAJOR_VERSION=$(JDK_MAJOR_VERSION) -define JDK_MINOR_VERSION=$(JDK_MINOR_VERSION) -define JDK_MICRO_VERSION=$(JDK_MICRO_VERSION) -define JDK_BUILD_NUMBER=$(JDK_BUILD_NUMBER) +ReleaseOptions = -define HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) -define JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION) -define HOTSPOT_VM_DISTRO=$(HOTSPOT_VM_DISTRO) -define JDK_MAJOR_VERSION=$(JDK_MAJOR_VERSION) -define JDK_MINOR_VERSION=$(JDK_MINOR_VERSION) -define JDK_MICRO_VERSION=$(JDK_MICRO_VERSION) -define JDK_BUILD_NUMBER=$(JDK_BUILD_NUMBER) -define VISUAL_STUDIO_BUILD=true ProjectCreatorIDEOptions = $(ProjectCreatorIDEOptions) $(ReleaseOptions) $(HOTSPOTBUILDSPACE)/$(ProjectFile): $(HOTSPOTBUILDSPACE)/classes/ProjectCreator.class diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/assembler_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/assembler_ppc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/ppc/vm/assembler_ppc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -693,7 +693,7 @@ // PPC 1, section 4.6.7 Floating-Point Compare Instructions fcmpu( CCR7, F24, F25); - tty->print_cr("\ntest_asm disassembly (0x%lx 0x%lx):", code()->insts_begin(), code()->insts_end()); + tty->print_cr("\ntest_asm disassembly (0x%lx 0x%lx):", p2i(code()->insts_begin()), p2i(code()->insts_end())); code()->decode(); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/bytecodes_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/bytecodes_ppc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "interpreter/bytecodes.hpp" - -void Bytecodes::pd_initialize() { - // No ppc specific initialization. -} diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/bytecodes_ppc.hpp --- a/hotspot/src/cpu/ppc/vm/bytecodes_ppc.hpp Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. 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 CPU_PPC_VM_BYTECODES_PPC_HPP -#define CPU_PPC_VM_BYTECODES_PPC_HPP - -// No ppc64 specific bytecodes - -#endif // CPU_PPC_VM_BYTECODES_PPC_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/compiledIC_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/compiledIC_ppc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/ppc/vm/compiledIC_ppc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -50,34 +50,6 @@ return is_icholder_entry(call->destination()); } -//----------------------------------------------------------------------------- -// High-level access to an inline cache. Guaranteed to be MT-safe. - -CompiledIC::CompiledIC(nmethod* nm, NativeCall* call) - : _ic_call(call) -{ - address ic_call = call->instruction_address(); - - assert(ic_call != NULL, "ic_call address must be set"); - assert(nm != NULL, "must pass nmethod"); - assert(nm->contains(ic_call), "must be in nmethod"); - - // Search for the ic_call at the given address. - RelocIterator iter(nm, ic_call, ic_call+1); - bool ret = iter.next(); - assert(ret == true, "relocInfo must exist at this address"); - assert(iter.addr() == ic_call, "must find ic_call"); - if (iter.type() == relocInfo::virtual_call_type) { - virtual_call_Relocation* r = iter.virtual_call_reloc(); - _is_optimized = false; - _value = nativeMovConstReg_at(r->cached_value()); - } else { - assert(iter.type() == relocInfo::opt_virtual_call_type, "must be a virtual call"); - _is_optimized = true; - _value = NULL; - } -} - // ---------------------------------------------------------------------------- // A PPC CompiledStaticCall looks like this: @@ -203,7 +175,7 @@ if (TraceICs) { ResourceMark rm; tty->print_cr("CompiledStaticCall@" INTPTR_FORMAT ": set_to_interpreted %s", - instruction_address(), + p2i(instruction_address()), callee->name_and_sig_as_C_string()); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/frame_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/frame_ppc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/ppc/vm/frame_ppc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -140,7 +140,7 @@ void frame::patch_pc(Thread* thread, address pc) { if (TracePcPatching) { tty->print_cr("patch_pc at address " PTR_FORMAT " [" PTR_FORMAT " -> " PTR_FORMAT "]", - &((address*) _sp)[-1], ((address*) _sp)[-1], pc); + p2i(&((address*) _sp)[-1]), p2i(((address*) _sp)[-1]), p2i(pc)); } own_abi()->lr = (uint64_t)pc; _cb = CodeCache::find_blob(pc); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -3099,7 +3099,7 @@ }; static void stop_on_request(int tp, const char* msg) { - tty->print("PPC assembly code requires stop: (%s) %s\n", (void *)stop_types[tp%/*stop_end*/4], msg); + tty->print("PPC assembly code requires stop: (%s) %s\n", stop_types[tp%/*stop_end*/4], msg); guarantee(false, err_msg("PPC assembly code requires stop: %s", msg)); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -464,7 +464,7 @@ strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH const char* mh_reg_name = has_mh ? "R23_method_handle" : "G23"; tty->print_cr("MH %s %s="INTPTR_FORMAT " sp=" INTPTR_FORMAT, - adaptername, mh_reg_name, (intptr_t) mh, entry_sp); + adaptername, mh_reg_name, (intptr_t) mh, (intptr_t) entry_sp); if (Verbose) { tty->print_cr("Registers:"); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/nativeInst_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/nativeInst_ppc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/ppc/vm/nativeInst_ppc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,6 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012, 2014 SAP AG. 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 @@ -147,9 +147,9 @@ address addr = addr_at(0); if (!NativeCall::is_call_at(addr)) { - tty->print_cr("not a NativeCall at " PTR_FORMAT, addr); + tty->print_cr("not a NativeCall at " PTR_FORMAT, p2i(addr)); // TODO: PPC port: Disassembler::decode(addr - 20, addr + 20, tty); - fatal(err_msg("not a NativeCall at " PTR_FORMAT, addr)); + fatal(err_msg("not a NativeCall at " PTR_FORMAT, p2i(addr))); } } #endif // ASSERT @@ -160,9 +160,9 @@ NativeInstruction::verify(); if (!NativeFarCall::is_far_call_at(addr)) { - tty->print_cr("not a NativeFarCall at " PTR_FORMAT, addr); + tty->print_cr("not a NativeFarCall at " PTR_FORMAT, p2i(addr)); // TODO: PPC port: Disassembler::decode(addr, 20, 20, tty); - fatal(err_msg("not a NativeFarCall at " PTR_FORMAT, addr)); + fatal(err_msg("not a NativeFarCall at " PTR_FORMAT, p2i(addr))); } } #endif // ASSERT @@ -306,9 +306,9 @@ if (! (cb != NULL && MacroAssembler::is_calculate_address_from_global_toc_at(addr, cb->content_begin())) && ! (cb != NULL && MacroAssembler::is_set_narrow_oop(addr, cb->content_begin())) && ! MacroAssembler::is_bl(*((int*) addr))) { - tty->print_cr("not a NativeMovConstReg at " PTR_FORMAT, addr); + tty->print_cr("not a NativeMovConstReg at " PTR_FORMAT, p2i(addr)); // TODO: PPC port: Disassembler::decode(addr, 20, 20, tty); - fatal(err_msg("not a NativeMovConstReg at " PTR_FORMAT, addr)); + fatal(err_msg("not a NativeMovConstReg at " PTR_FORMAT, p2i(addr))); } } } @@ -344,9 +344,9 @@ NativeInstruction::verify(); if (!NativeJump::is_jump_at(addr)) { - tty->print_cr("not a NativeJump at " PTR_FORMAT, addr); + tty->print_cr("not a NativeJump at " PTR_FORMAT, p2i(addr)); // TODO: PPC port: Disassembler::decode(addr, 20, 20, tty); - fatal(err_msg("not a NativeJump at " PTR_FORMAT, addr)); + fatal(err_msg("not a NativeJump at " PTR_FORMAT, p2i(addr))); } } #endif // ASSERT diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/ppc.ad --- a/hotspot/src/cpu/ppc/vm/ppc.ad Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/ppc/vm/ppc.ad Wed Jul 05 19:50:00 2017 +0200 @@ -1329,7 +1329,7 @@ if (!false /* TODO: PPC port C->is_frameless_method()*/) { st->print("save return pc\n\t"); - st->print("push frame %d\n\t", -framesize); + st->print("push frame %ld\n\t", -framesize); } } #endif diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -352,7 +352,7 @@ if (PrintAssembly) { ttyLocker ttyl; - tty->print_cr("Decoding section size detection stub at " INTPTR_FORMAT " before execution:", code); + tty->print_cr("Decoding section size detection stub at " INTPTR_FORMAT " before execution:", p2i(code)); Disassembler::decode((u_char*)code, (u_char*)code_end, tty); tty->print_cr("Time loop1 :%f", loop1_seconds); tty->print_cr("Time loop2 :%f", loop2_seconds); @@ -435,7 +435,7 @@ // Print the detection code. if (PrintAssembly) { ttyLocker ttyl; - tty->print_cr("Decoding cpu-feature detection stub at " INTPTR_FORMAT " before execution:", code); + tty->print_cr("Decoding cpu-feature detection stub at " INTPTR_FORMAT " before execution:", p2i(code)); Disassembler::decode((u_char*)code, (u_char*)code_end, tty); } @@ -468,7 +468,7 @@ // Print the detection code. if (PrintAssembly) { ttyLocker ttyl; - tty->print_cr("Decoding cpu-feature detection stub at " INTPTR_FORMAT " after execution:", code); + tty->print_cr("Decoding cpu-feature detection stub at " INTPTR_FORMAT " after execution:", p2i(code)); Disassembler::decode((u_char*)code, (u_char*)code_end, tty); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/sparc/vm/bytecodes_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/bytecodes_sparc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "interpreter/bytecodes.hpp" - - -void Bytecodes::pd_initialize() { - // (nothing) -} - -Bytecodes::Code Bytecodes::pd_base_code_for(Code code) { - return code; -} diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/sparc/vm/bytecodes_sparc.hpp --- a/hotspot/src/cpu/sparc/vm/bytecodes_sparc.hpp Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 1998, 2010, 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 CPU_SPARC_VM_BYTECODES_SPARC_HPP -#define CPU_SPARC_VM_BYTECODES_SPARC_HPP - -#ifdef SPARC -#define NLOCALS_IN_REGS 6 -#endif - - -// Sparc specific bytecodes - -// (none) - -#endif // CPU_SPARC_VM_BYTECODES_SPARC_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/sparc/vm/compiledIC_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/compiledIC_sparc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/sparc/vm/compiledIC_sparc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -50,34 +50,6 @@ return is_icholder_entry(call->destination()); } -//----------------------------------------------------------------------------- -// High-level access to an inline cache. Guaranteed to be MT-safe. - -CompiledIC::CompiledIC(nmethod* nm, NativeCall* call) - : _ic_call(call) -{ - address ic_call = call->instruction_address(); - - assert(ic_call != NULL, "ic_call address must be set"); - assert(nm != NULL, "must pass nmethod"); - assert(nm->contains(ic_call), "must be in nmethod"); - - // Search for the ic_call at the given address. - RelocIterator iter(nm, ic_call, ic_call+1); - bool ret = iter.next(); - assert(ret == true, "relocInfo must exist at this address"); - assert(iter.addr() == ic_call, "must find ic_call"); - if (iter.type() == relocInfo::virtual_call_type) { - virtual_call_Relocation* r = iter.virtual_call_reloc(); - _is_optimized = false; - _value = nativeMovConstReg_at(r->cached_value()); - } else { - assert(iter.type() == relocInfo::opt_virtual_call_type, "must be a virtual call"); - _is_optimized = true; - _value = NULL; - } -} - // ---------------------------------------------------------------------------- #define __ _masm. diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/sparc/vm/frame_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/frame_sparc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/sparc/vm/frame_sparc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -436,32 +436,6 @@ } #endif // CC_INTERP - -#ifdef ASSERT -// Debugging aid -static frame nth_sender(int n) { - frame f = JavaThread::current()->last_frame(); - - for(int i = 0; i < n; ++i) - f = f.sender((RegisterMap*)NULL); - - printf("first frame %d\n", f.is_first_frame() ? 1 : 0); - printf("interpreted frame %d\n", f.is_interpreted_frame() ? 1 : 0); - printf("java frame %d\n", f.is_java_frame() ? 1 : 0); - printf("entry frame %d\n", f.is_entry_frame() ? 1 : 0); - printf("native frame %d\n", f.is_native_frame() ? 1 : 0); - if (f.is_compiled_frame()) { - if (f.is_deoptimized_frame()) - printf("deoptimized frame 1\n"); - else - printf("compiled frame 1\n"); - } - - return f; -} -#endif - - frame frame::sender_for_entry_frame(RegisterMap *map) const { assert(map != NULL, "map must be set"); // Java frame called from C; skip all C frames and return top C diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/x86/vm/bytecodes_x86.cpp --- a/hotspot/src/cpu/x86/vm/bytecodes_x86.cpp Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "interpreter/bytecodes.hpp" - - -void Bytecodes::pd_initialize() { - // No i486 specific initialization -} - - -Bytecodes::Code Bytecodes::pd_base_code_for(Code code) { - // No i486 specific bytecodes - return code; -} diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/x86/vm/bytecodes_x86.hpp --- a/hotspot/src/cpu/x86/vm/bytecodes_x86.hpp Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* - * Copyright (c) 1998, 2010, 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 CPU_X86_VM_BYTECODES_X86_HPP -#define CPU_X86_VM_BYTECODES_X86_HPP - -// No i486 specific bytecodes - -#endif // CPU_X86_VM_BYTECODES_X86_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/x86/vm/compiledIC_x86.cpp --- a/hotspot/src/cpu/x86/vm/compiledIC_x86.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/x86/vm/compiledIC_x86.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -47,34 +47,6 @@ return is_icholder_entry(call->destination()); } -//----------------------------------------------------------------------------- -// High-level access to an inline cache. Guaranteed to be MT-safe. - -CompiledIC::CompiledIC(nmethod* nm, NativeCall* call) - : _ic_call(call) -{ - address ic_call = call->instruction_address(); - - assert(ic_call != NULL, "ic_call address must be set"); - assert(nm != NULL, "must pass nmethod"); - assert(nm->contains(ic_call), "must be in nmethod"); - - // Search for the ic_call at the given address. - RelocIterator iter(nm, ic_call, ic_call+1); - bool ret = iter.next(); - assert(ret == true, "relocInfo must exist at this address"); - assert(iter.addr() == ic_call, "must find ic_call"); - if (iter.type() == relocInfo::virtual_call_type) { - virtual_call_Relocation* r = iter.virtual_call_reloc(); - _is_optimized = false; - _value = nativeMovConstReg_at(r->cached_value()); - } else { - assert(iter.type() == relocInfo::opt_virtual_call_type, "must be a virtual call"); - _is_optimized = true; - _value = NULL; - } -} - // ---------------------------------------------------------------------------- #define __ _masm. diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp --- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -280,6 +280,8 @@ case T_BYTE : __ sign_extend_byte (rax); break; case T_SHORT : __ sign_extend_short(rax); break; case T_INT : /* nothing to do */ break; + case T_LONG : /* nothing to do */ break; + case T_VOID : /* nothing to do */ break; case T_DOUBLE : case T_FLOAT : { const Register t = InterpreterRuntime::SignatureHandlerGenerator::temp(); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/zero/vm/bytecodes_zero.cpp --- a/hotspot/src/cpu/zero/vm/bytecodes_zero.cpp Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright 2007 Red Hat, Inc. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "interpreter/bytecodes.hpp" - -void Bytecodes::pd_initialize() { - // No zero specific initialization -} diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/zero/vm/bytecodes_zero.hpp --- a/hotspot/src/cpu/zero/vm/bytecodes_zero.hpp Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright 2009 Red Hat, Inc. - * 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 CPU_ZERO_VM_BYTECODES_ZERO_HPP -#define CPU_ZERO_VM_BYTECODES_ZERO_HPP - -// This file is intentionally empty - -#endif // CPU_ZERO_VM_BYTECODES_ZERO_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/zero/vm/compiledIC_zero.cpp --- a/hotspot/src/cpu/zero/vm/compiledIC_zero.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/zero/vm/compiledIC_zero.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -58,34 +58,6 @@ return is_icholder_entry(call->destination()); } -//----------------------------------------------------------------------------- -// High-level access to an inline cache. Guaranteed to be MT-safe. - -CompiledIC::CompiledIC(nmethod* nm, NativeCall* call) - : _ic_call(call) -{ - address ic_call = call->instruction_address(); - - assert(ic_call != NULL, "ic_call address must be set"); - assert(nm != NULL, "must pass nmethod"); - assert(nm->contains(ic_call), "must be in nmethod"); - - // Search for the ic_call at the given address. - RelocIterator iter(nm, ic_call, ic_call+1); - bool ret = iter.next(); - assert(ret == true, "relocInfo must exist at this address"); - assert(iter.addr() == ic_call, "must find ic_call"); - if (iter.type() == relocInfo::virtual_call_type) { - virtual_call_Relocation* r = iter.virtual_call_reloc(); - _is_optimized = false; - _value = nativeMovConstReg_at(r->cached_value()); - } else { - assert(iter.type() == relocInfo::opt_virtual_call_type, "must be a virtual call"); - _is_optimized = true; - _value = NULL; - } -} - // ---------------------------------------------------------------------------- void CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf) { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp --- a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -37,6 +37,7 @@ #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/deoptimization.hpp" #include "runtime/frame.inline.hpp" #include "runtime/interfaceSupport.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/aix/vm/osThread_aix.cpp --- a/hotspot/src/os/aix/vm/osThread_aix.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/aix/vm/osThread_aix.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -24,17 +24,13 @@ */ // no precompiled headers -#include "runtime/atomic.hpp" + #include "runtime/handles.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/os.hpp" #include "runtime/osThread.hpp" #include "runtime/safepoint.hpp" #include "runtime/vmThread.hpp" -#ifdef TARGET_ARCH_ppc -# include "assembler_ppc.inline.hpp" -#endif - void OSThread::pd_initialize() { assert(this != NULL, "check"); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/aix/vm/os_aix.cpp --- a/hotspot/src/os/aix/vm/os_aix.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/aix/vm/os_aix.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -48,6 +48,7 @@ #include "prims/jvm.h" #include "prims/jvm_misc.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/extendedPC.hpp" #include "runtime/globals.hpp" #include "runtime/interfaceSupport.hpp" @@ -2812,13 +2813,6 @@ os::YieldResult os::NakedYield() { sched_yield(); return os::YIELD_UNKNOWN; } -void os::yield_all() { - // Yields to all threads, including threads with lower priorities - // Threads on Linux are all with same priority. The Solaris style - // os::yield_all() with nanosleep(1ms) is not necessary. - sched_yield(); -} - //////////////////////////////////////////////////////////////////////////////// // thread priority support @@ -3075,7 +3069,7 @@ for (int n = 0; !osthread->sr.is_suspended(); n++) { for (int i = 0; i < RANDOMLY_LARGE_INTEGER2 && !osthread->sr.is_suspended(); i++) { - os::yield_all(); + os::yield(); } // timeout, try to cancel the request @@ -3109,7 +3103,7 @@ if (sr_notify(osthread) == 0) { for (int n = 0; n < RANDOMLY_LARGE_INTEGER && !osthread->sr.is_running(); n++) { for (int i = 0; i < 100 && !osthread->sr.is_running(); i++) { - os::yield_all(); + os::yield(); } } } else { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/bsd/vm/os_bsd.cpp --- a/hotspot/src/os/bsd/vm/os_bsd.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/bsd/vm/os_bsd.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -41,6 +41,7 @@ #include "prims/jvm.h" #include "prims/jvm_misc.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/extendedPC.hpp" #include "runtime/globals.hpp" #include "runtime/interfaceSupport.hpp" @@ -2600,13 +2601,6 @@ os::YieldResult os::NakedYield() { sched_yield(); return os::YIELD_UNKNOWN; } -void os::yield_all() { - // Yields to all threads, including threads with lower priorities - // Threads on Bsd are all with same priority. The Solaris style - // os::yield_all() with nanosleep(1ms) is not necessary. - sched_yield(); -} - //////////////////////////////////////////////////////////////////////////////// // thread priority support diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/linux/vm/os_linux.cpp --- a/hotspot/src/os/linux/vm/os_linux.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/linux/vm/os_linux.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -41,6 +41,7 @@ #include "prims/jvm.h" #include "prims/jvm_misc.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/extendedPC.hpp" #include "runtime/globals.hpp" #include "runtime/interfaceSupport.hpp" @@ -3795,13 +3796,6 @@ os::YieldResult os::NakedYield() { sched_yield(); return os::YIELD_UNKNOWN; } -void os::yield_all() { - // Yields to all threads, including threads with lower priorities - // Threads on Linux are all with same priority. The Solaris style - // os::yield_all() with nanosleep(1ms) is not necessary. - sched_yield(); -} - //////////////////////////////////////////////////////////////////////////////// // thread priority support diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/solaris/vm/osThread_solaris.cpp --- a/hotspot/src/os/solaris/vm/osThread_solaris.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/solaris/vm/osThread_solaris.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -23,7 +23,6 @@ */ // no precompiled headers -#include "runtime/atomic.hpp" #include "runtime/handles.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/os.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/solaris/vm/os_solaris.cpp --- a/hotspot/src/os/solaris/vm/os_solaris.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -41,6 +41,7 @@ #include "prims/jvm.h" #include "prims/jvm_misc.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/extendedPC.hpp" #include "runtime/globals.hpp" #include "runtime/interfaceSupport.hpp" @@ -3186,11 +3187,6 @@ os::YieldResult os::NakedYield() { thr_yield(); return os::YIELD_UNKNOWN; } -void os::yield_all() { - // Yields to all threads, including threads with lower priorities - os::sleep(Thread::current(), 1, false); -} - // Interface for setting lwp priorities. If we are using T2 libthread, // which forces the use of BoundThreads or we manually set UseBoundThreads, // all of our threads will be assigned to real lwp's. Using the thr_setprio diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/solaris/vm/thread_solaris.inline.hpp --- a/hotspot/src/os/solaris/vm/thread_solaris.inline.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/solaris/vm/thread_solaris.inline.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -29,7 +29,6 @@ #error "This file should only be included from thread.inline.hpp" #endif -#include "runtime/atomic.inline.hpp" #include "runtime/thread.hpp" #include "runtime/threadLocalStorage.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/windows/vm/osThread_windows.cpp --- a/hotspot/src/os/windows/vm/osThread_windows.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/windows/vm/osThread_windows.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -23,7 +23,6 @@ */ // no precompiled headers -#include "runtime/atomic.hpp" #include "runtime/handles.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/os.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/windows/vm/os_windows.cpp --- a/hotspot/src/os/windows/vm/os_windows.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/windows/vm/os_windows.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -44,6 +44,7 @@ #include "prims/jvm.h" #include "prims/jvm_misc.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/extendedPC.hpp" #include "runtime/globals.hpp" #include "runtime/interfaceSupport.hpp" @@ -3526,11 +3527,6 @@ void os::yield() { os::NakedYield(); } -void os::yield_all() { - // Yields to all threads, including threads with lower priorities - Sleep(1); -} - // Win32 only gives you access to seven real priorities at a time, // so we compress Java's ten down to seven. It would be better // if we dynamically adjusted relative priorities. diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os/windows/vm/threadCritical_windows.cpp --- a/hotspot/src/os/windows/vm/threadCritical_windows.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os/windows/vm/threadCritical_windows.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/thread.inline.hpp" #include "runtime/threadCritical.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp --- a/hotspot/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,6 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012, 2014 SAP AG. 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 @@ -307,7 +307,7 @@ // doesn't work for us. We use: ((NativeInstruction*)pc)->is_safepoint_poll()) { if (TraceTraps) { - tty->print_cr("trap: safepoint_poll at " INTPTR_FORMAT " (SIGSEGV)", pc); + tty->print_cr("trap: safepoint_poll at " INTPTR_FORMAT " (SIGSEGV)", p2i(pc)); } stub = SharedRuntime::get_poll_stub(pc); } @@ -316,7 +316,7 @@ else if (sig == SIGTRAP && TrapBasedICMissChecks && nativeInstruction_at(pc)->is_sigtrap_ic_miss_check()) { if (TraceTraps) { - tty->print_cr("trap: ic_miss_check at " INTPTR_FORMAT " (SIGTRAP)", pc); + tty->print_cr("trap: ic_miss_check at " INTPTR_FORMAT " (SIGTRAP)", p2i(pc)); } stub = SharedRuntime::get_ic_miss_stub(); } @@ -325,7 +325,7 @@ else if (sig == SIGTRAP && TrapBasedNullChecks && nativeInstruction_at(pc)->is_sigtrap_null_check()) { if (TraceTraps) { - tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGTRAP)", pc); + tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGTRAP)", p2i(pc)); } stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL); } @@ -335,7 +335,7 @@ CodeCache::contains((void*) pc) && !MacroAssembler::needs_explicit_null_check((intptr_t) info->si_addr)) { if (TraceTraps) { - tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGSEGV)", pc); + tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGSEGV)", p2i(pc)); } stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL); } @@ -345,7 +345,7 @@ else if (sig == SIGTRAP && TrapBasedRangeChecks && nativeInstruction_at(pc)->is_sigtrap_range_check()) { if (TraceTraps) { - tty->print_cr("trap: range_check at " INTPTR_FORMAT " (SIGTRAP)", pc); + tty->print_cr("trap: range_check at " INTPTR_FORMAT " (SIGTRAP)", p2i(pc)); } stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL); } @@ -572,7 +572,7 @@ st->cr(); intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc); - st->print_cr("Top of Stack: (sp=" PTR_FORMAT ")", sp); + st->print_cr("Top of Stack: (sp=" PTR_FORMAT ")", p2i(sp)); print_hex_dump(st, (address)sp, (address)(sp + 128), sizeof(intptr_t)); st->cr(); @@ -580,7 +580,7 @@ // point to garbage if entry point in an nmethod is corrupted. Leave // this at the end, and hope for the best. address pc = os::Linux::ucontext_get_pc(uc); - st->print_cr("Instructions: (pc=" PTR_FORMAT ")", pc); + st->print_cr("Instructions: (pc=" PTR_FORMAT ")", p2i(pc)); print_hex_dump(st, pc - 64, pc + 64, /*instrsize=*/4); st->cr(); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp --- a/hotspot/src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -38,6 +38,7 @@ #include "prims/jvm.h" #include "prims/jvm_misc.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/extendedPC.hpp" #include "runtime/frame.inline.hpp" #include "runtime/interfaceSupport.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/asm/assembler.cpp --- a/hotspot/src/share/vm/asm/assembler.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/asm/assembler.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,7 +26,6 @@ #include "asm/macroAssembler.hpp" #include "asm/macroAssembler.inline.hpp" #include "asm/codeBuffer.hpp" -#include "runtime/atomic.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/icache.hpp" #include "runtime/os.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/c1/c1_Runtime1.cpp --- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -47,6 +47,7 @@ #include "memory/resourceArea.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/compilationPolicy.hpp" #include "runtime/interfaceSupport.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/ci/ciConstantPoolCache.cpp --- a/hotspot/src/share/vm/ci/ciConstantPoolCache.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/ci/ciConstantPoolCache.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -38,7 +38,7 @@ int expected_size) { _elements = new (arena) GrowableArray(arena, expected_size, 0, 0); - _keys = new (arena) GrowableArray(arena, expected_size, 0, 0); + _keys = new (arena) GrowableArray(arena, expected_size, 0, 0); } // ------------------------------------------------------------------ diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/ci/ciConstantPoolCache.hpp --- a/hotspot/src/share/vm/ci/ciConstantPoolCache.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/ci/ciConstantPoolCache.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -35,7 +35,7 @@ // Usage note: this klass has nothing to do with ConstantPoolCache*. class ciConstantPoolCache : public ResourceObj { private: - GrowableArray* _keys; + GrowableArray* _keys; GrowableArray* _elements; int find(int index); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/ci/ciEnv.cpp --- a/hotspot/src/share/vm/ci/ciEnv.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/ci/ciEnv.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -512,24 +512,9 @@ } else { // Check if it's resolved if it's not a symbol constant pool entry. klass = KlassHandle(THREAD, ConstantPool::klass_at_if_loaded(cpool, index)); - + // Try to look it up by name. if (klass.is_null()) { - // The klass has not been inserted into the constant pool. - // Try to look it up by name. - { - // We have to lock the cpool to keep the oop from being resolved - // while we are accessing it. - MonitorLockerEx ml(cpool->lock()); - constantTag tag = cpool->tag_at(index); - if (tag.is_klass()) { - // The klass has been inserted into the constant pool - // very recently. - klass = KlassHandle(THREAD, cpool->resolved_klass_at(index)); - } else { - assert(cpool->tag_at(index).is_unresolved_klass(), "wrong tag"); - klass_name = cpool->unresolved_klass_at(index); - } - } + klass_name = cpool->klass_name_at(index); } } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/ci/ciReplay.cpp --- a/hotspot/src/share/vm/ci/ciReplay.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/ci/ciReplay.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2013, 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 @@ -686,7 +686,7 @@ switch (cp->tag_at(i).value()) { case JVM_CONSTANT_UnresolvedClass: { if (tag == JVM_CONSTANT_Class) { - tty->print_cr("Resolving klass %s at %d", cp->unresolved_klass_at(i)->as_utf8(), i); + tty->print_cr("Resolving klass %s at %d", cp->klass_name_at(i)->as_utf8(), i); Klass* k = cp->klass_at(i, CHECK); } break; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/classfile/classFileParser.cpp --- a/hotspot/src/share/vm/classfile/classFileParser.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -510,7 +510,7 @@ jbyte tag = cp->tag_at(index).value(); switch (tag) { case JVM_CONSTANT_UnresolvedClass: { - Symbol* class_name = cp->unresolved_klass_at(index); + Symbol* class_name = cp->klass_name_at(index); // check the name, even if _cp_patches will overwrite it verify_legal_class_name(class_name, CHECK_(nullHandle)); break; @@ -3161,7 +3161,7 @@ if (_need_verify) is_array = super_klass->oop_is_array(); } else if (_need_verify) { - is_array = (_cp->unresolved_klass_at(super_class_index)->byte_at(0) == JVM_SIGNATURE_ARRAY); + is_array = (_cp->klass_name_at(super_class_index)->byte_at(0) == JVM_SIGNATURE_ARRAY); } if (_need_verify) { guarantee_property(!is_array, @@ -3855,7 +3855,7 @@ "Invalid this class index %u in constant pool in class file %s", this_class_index, CHECK_(nullHandle)); - Symbol* class_name = cp->unresolved_klass_at(this_class_index); + Symbol* class_name = cp->klass_name_at(this_class_index); assert(class_name != NULL, "class_name can't be null"); // It's important to set parsed_name *before* resolving the super class. @@ -4139,8 +4139,8 @@ } // Allocate mirror and initialize static fields - java_lang_Class::create_mirror(this_klass, protection_domain, CHECK_(nullHandle)); - + java_lang_Class::create_mirror(this_klass, class_loader, protection_domain, + CHECK_(nullHandle)); // Generate any default methods - default methods are interface methods // that have a default implementation. This is new with Lambda project. diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/classfile/classLoaderData.cpp --- a/hotspot/src/share/vm/classfile/classLoaderData.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -57,6 +57,7 @@ #include "memory/metadataFactory.hpp" #include "memory/metaspaceShared.hpp" #include "memory/oopFactory.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/jniHandles.hpp" #include "runtime/mutex.hpp" #include "runtime/safepoint.hpp" @@ -549,6 +550,7 @@ // GC root of class loader data created. ClassLoaderData* ClassLoaderDataGraph::_head = NULL; ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL; +ClassLoaderData* ClassLoaderDataGraph::_saved_unloading = NULL; ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL; bool ClassLoaderDataGraph::_should_purge = false; @@ -656,7 +658,9 @@ void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!"); - for (ClassLoaderData* cld = _unloading; cld != NULL; cld = cld->next()) { + // Only walk the head until any clds not purged from prior unloading + // (CMS doesn't purge right away). + for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) { cld->classes_do(f); } } @@ -704,6 +708,11 @@ ClassLoaderData* data = _head; ClassLoaderData* prev = NULL; bool seen_dead_loader = false; + + // Save previous _unloading pointer for CMS which may add to unloading list before + // purging and we don't want to rewalk the previously unloaded class loader data. + _saved_unloading = _unloading; + // mark metadata seen on the stack and code cache so we can delete // unneeded entries. bool has_redefined_a_class = JvmtiExport::has_redefined_a_class(); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/classfile/classLoaderData.hpp --- a/hotspot/src/share/vm/classfile/classLoaderData.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/classfile/classLoaderData.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -66,6 +66,7 @@ static ClassLoaderData* _unloading; // CMS support. static ClassLoaderData* _saved_head; + static ClassLoaderData* _saved_unloading; static bool _should_purge; static ClassLoaderData* add(Handle class_loader, bool anonymous, TRAPS); @@ -187,8 +188,6 @@ JNIHandleBlock* handles() const; void set_handles(JNIHandleBlock* handles); - Mutex* metaspace_lock() const { return _metaspace_lock; } - // GC interface. void clear_claimed() { _claimed = 0; } bool claimed() const { return _claimed == 1; } @@ -216,6 +215,8 @@ return _the_null_class_loader_data; } + Mutex* metaspace_lock() const { return _metaspace_lock; } + bool is_anonymous() const { return _is_anonymous; } static void init_null_class_loader_data() { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/classfile/javaClasses.cpp --- a/hotspot/src/share/vm/classfile/javaClasses.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -558,7 +558,7 @@ } } } - create_mirror(k, Handle(NULL), CHECK); + create_mirror(k, Handle(NULL), Handle(NULL), CHECK); } void java_lang_Class::initialize_mirror_fields(KlassHandle k, @@ -578,7 +578,8 @@ InstanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, mirror, CHECK); } -void java_lang_Class::create_mirror(KlassHandle k, Handle protection_domain, TRAPS) { +void java_lang_Class::create_mirror(KlassHandle k, Handle class_loader, + Handle protection_domain, TRAPS) { assert(k->java_mirror() == NULL, "should only assign mirror once"); // Use this moment of initialization to cache modifier_flags also, // to support Class.getModifiers(). Instance classes recalculate @@ -633,6 +634,9 @@ } } + // set the classLoader field in the java_lang_Class instance + set_class_loader(mirror(), class_loader()); + // Setup indirection from klass->mirror last // after any exceptions can happen during allocations. if (!k.is_null()) { @@ -694,6 +698,18 @@ } +void java_lang_Class::set_class_loader(oop java_class, oop loader) { + // jdk7 runs Queens in bootstrapping and jdk8-9 has no coordinated pushes yet. + if (_class_loader_offset != 0) { + java_class->obj_field_put(_class_loader_offset, loader); + } +} + +oop java_lang_Class::class_loader(oop java_class) { + assert(_class_loader_offset != 0, "must be set"); + return java_class->obj_field(_class_loader_offset); +} + oop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS) { // This should be improved by adding a field at the Java level or by // introducing a new VM klass (see comment in ClassFileParser) @@ -853,6 +869,12 @@ compute_optional_offset(classRedefinedCount_offset, klass_oop, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature()); + // Needs to be optional because the old build runs Queens during bootstrapping + // and jdk8-9 doesn't have coordinated pushes yet. + compute_optional_offset(_class_loader_offset, + klass_oop, vmSymbols::classLoader_name(), + vmSymbols::classloader_signature()); + CLASS_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); } @@ -3073,6 +3095,7 @@ int java_lang_Class::_array_klass_offset; int java_lang_Class::_oop_size_offset; int java_lang_Class::_static_oop_field_count_offset; +int java_lang_Class::_class_loader_offset; int java_lang_Class::_protection_domain_offset; int java_lang_Class::_init_lock_offset; int java_lang_Class::_signers_offset; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/classfile/javaClasses.hpp --- a/hotspot/src/share/vm/classfile/javaClasses.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -240,19 +240,23 @@ static int _protection_domain_offset; static int _init_lock_offset; static int _signers_offset; + static int _class_loader_offset; static bool offsets_computed; static int classRedefinedCount_offset; + static GrowableArray* _fixup_mirror_list; static void set_init_lock(oop java_class, oop init_lock); static void set_protection_domain(oop java_class, oop protection_domain); + static void set_class_loader(oop java_class, oop class_loader); static void initialize_mirror_fields(KlassHandle k, Handle mirror, Handle protection_domain, TRAPS); public: static void compute_offsets(); // Instance creation - static void create_mirror(KlassHandle k, Handle protection_domain, TRAPS); + static void create_mirror(KlassHandle k, Handle class_loader, + Handle protection_domain, TRAPS); static void fixup_mirror(KlassHandle k, TRAPS); static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS); // Conversion @@ -290,6 +294,8 @@ static objArrayOop signers(oop java_class); static void set_signers(oop java_class, objArrayOop signers); + static oop class_loader(oop java_class); + static int oop_size(oop java_class); static void set_oop_size(oop java_class, int size); static int static_oop_field_count(oop java_class); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/classfile/stringTable.cpp --- a/hotspot/src/share/vm/classfile/stringTable.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/classfile/stringTable.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -33,6 +33,7 @@ #include "memory/gcLocker.inline.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/hashtable.inline.hpp" #if INCLUDE_ALL_GCS diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/classfile/symbolTable.cpp --- a/hotspot/src/share/vm/classfile/symbolTable.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -33,6 +33,7 @@ #include "memory/gcLocker.inline.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/hashtable.inline.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/classfile/vmSymbols.hpp --- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -572,6 +572,7 @@ template(serializePropertiesToByteArray_signature, "()[B") \ template(serializeAgentPropertiesToByteArray_name, "serializeAgentPropertiesToByteArray") \ template(classRedefinedCount_name, "classRedefinedCount") \ + template(classLoader_name, "classLoader") \ \ /* trace signatures */ \ TRACE_TEMPLATES(template) \ diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/code/compiledIC.cpp --- a/hotspot/src/share/vm/code/compiledIC.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/code/compiledIC.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -159,6 +159,30 @@ //----------------------------------------------------------------------------- // High-level access to an inline cache. Guaranteed to be MT-safe. +CompiledIC::CompiledIC(nmethod* nm, NativeCall* call) + : _ic_call(call) +{ + address ic_call = call->instruction_address(); + + assert(ic_call != NULL, "ic_call address must be set"); + assert(nm != NULL, "must pass nmethod"); + assert(nm->contains(ic_call), "must be in nmethod"); + + // Search for the ic_call at the given address. + RelocIterator iter(nm, ic_call, ic_call+1); + bool ret = iter.next(); + assert(ret == true, "relocInfo must exist at this address"); + assert(iter.addr() == ic_call, "must find ic_call"); + if (iter.type() == relocInfo::virtual_call_type) { + virtual_call_Relocation* r = iter.virtual_call_reloc(); + _is_optimized = false; + _value = nativeMovConstReg_at(r->cached_value()); + } else { + assert(iter.type() == relocInfo::opt_virtual_call_type, "must be a virtual call"); + _is_optimized = true; + _value = NULL; + } +} bool CompiledIC::set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS) { assert(CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/code/nmethod.cpp --- a/hotspot/src/share/vm/code/nmethod.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/code/nmethod.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -37,6 +37,7 @@ #include "oops/methodData.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/jvmtiImpl.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/orderAccess.inline.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/sweeper.hpp" @@ -363,27 +364,30 @@ set_exception_cache(new_entry); } -void nmethod::remove_from_exception_cache(ExceptionCache* ec) { +void nmethod::clean_exception_cache(BoolObjectClosure* is_alive) { ExceptionCache* prev = NULL; ExceptionCache* curr = exception_cache(); - assert(curr != NULL, "nothing to remove"); - // find the previous and next entry of ec - while (curr != ec) { - prev = curr; - curr = curr->next(); - assert(curr != NULL, "ExceptionCache not found"); + + while (curr != NULL) { + ExceptionCache* next = curr->next(); + + Klass* ex_klass = curr->exception_type(); + if (ex_klass != NULL && !ex_klass->is_loader_alive(is_alive)) { + if (prev == NULL) { + set_exception_cache(next); + } else { + prev->set_next(next); + } + delete curr; + // prev stays the same. + } else { + prev = curr; + } + + curr = next; } - // now: curr == ec - ExceptionCache* next = curr->next(); - if (prev == NULL) { - set_exception_cache(next); - } else { - prev->set_next(next); - } - delete curr; } - // public method for accessing the exception cache // These are the public access methods. address nmethod::handler_for_exception_and_pc(Handle exception, address pc) { @@ -668,8 +672,10 @@ _hotness_counter = NMethodSweeper::hotness_counter_reset_val(); code_buffer->copy_values_to(this); - if (ScavengeRootsInCode && detect_scavenge_root_oops()) { - CodeCache::add_scavenge_root_nmethod(this); + if (ScavengeRootsInCode) { + if (detect_scavenge_root_oops()) { + CodeCache::add_scavenge_root_nmethod(this); + } Universe::heap()->register_nmethod(this); } debug_only(verify_scavenge_root_oops()); @@ -753,8 +759,10 @@ _hotness_counter = NMethodSweeper::hotness_counter_reset_val(); code_buffer->copy_values_to(this); - if (ScavengeRootsInCode && detect_scavenge_root_oops()) { - CodeCache::add_scavenge_root_nmethod(this); + if (ScavengeRootsInCode) { + if (detect_scavenge_root_oops()) { + CodeCache::add_scavenge_root_nmethod(this); + } Universe::heap()->register_nmethod(this); } DEBUG_ONLY(verify_scavenge_root_oops();) @@ -869,8 +877,10 @@ code_buffer->copy_values_to(this); debug_info->copy_to(this); dependencies->copy_to(this); - if (ScavengeRootsInCode && detect_scavenge_root_oops()) { - CodeCache::add_scavenge_root_nmethod(this); + if (ScavengeRootsInCode) { + if (detect_scavenge_root_oops()) { + CodeCache::add_scavenge_root_nmethod(this); + } Universe::heap()->register_nmethod(this); } debug_only(verify_scavenge_root_oops()); @@ -1612,15 +1622,7 @@ } // Exception cache - ExceptionCache* ec = exception_cache(); - while (ec != NULL) { - Klass* ex_klass = ec->exception_type(); - ExceptionCache* next_ec = ec->next(); - if (ex_klass != NULL && !ex_klass->is_loader_alive(is_alive)) { - remove_from_exception_cache(ec); - } - ec = next_ec; - } + clean_exception_cache(is_alive); // If class unloading occurred we first iterate over all inline caches and // clear ICs where the cached oop is referring to an unloaded klass or method. diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/code/nmethod.hpp --- a/hotspot/src/share/vm/code/nmethod.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/code/nmethod.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -529,7 +529,7 @@ void set_exception_cache(ExceptionCache *ec) { _exception_cache = ec; } address handler_for_exception_and_pc(Handle exception, address pc); void add_handler_for_exception_and_pc(Handle exception, address pc, address handler); - void remove_from_exception_cache(ExceptionCache* ec); + void clean_exception_cache(BoolObjectClosure* is_alive); // implicit exceptions support address continuation_for_implicit_exception(address pc); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/compiler/compileBroker.cpp --- a/hotspot/src/share/vm/compiler/compileBroker.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/compiler/compileBroker.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -36,6 +36,7 @@ #include "oops/oop.inline.hpp" #include "prims/nativeLookup.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/compilationPolicy.hpp" #include "runtime/init.hpp" #include "runtime/interfaceSupport.hpp" @@ -589,11 +590,10 @@ /** - * Add a CompileTask to a CompileQueue + * Add a CompileTask to a CompileQueue. */ void CompileQueue::add(CompileTask* task) { assert(lock()->owned_by_self(), "must own lock"); - assert(!CompileBroker::is_compilation_disabled_forever(), "Do not add task if compilation is turned off forever"); task->set_next(NULL); task->set_prev(NULL); @@ -639,8 +639,11 @@ while (next != NULL) { CompileTask* current = next; next = current->next(); - // Wake up thread that blocks on the compile task. - current->lock()->notify(); + { + // Wake up thread that blocks on the compile task. + MutexLocker ct_lock(current->lock()); + current->lock()->notify(); + } // Put the task back on the freelist. CompileTask::free(current); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_HPP #include "memory/genOopClosures.hpp" +#include "memory/iterator.hpp" ///////////////////////////////////////////////////////////////// // Closures used by ConcurrentMarkSweepGeneration's collector @@ -48,33 +49,13 @@ } \ } -// Applies the given oop closure to all oops in all klasses visited. -class CMKlassClosure : public KlassClosure { - friend class CMSOopClosure; - friend class CMSOopsInGenClosure; - - OopClosure* _oop_closure; - - // Used when _oop_closure couldn't be set in an initialization list. - void initialize(OopClosure* oop_closure) { - assert(_oop_closure == NULL, "Should only be called once"); - _oop_closure = oop_closure; - } +// TODO: This duplication of the MetadataAwareOopClosure class is only needed +// because some CMS OopClosures derive from OopsInGenClosure. It would be +// good to get rid of them completely. +class MetadataAwareOopsInGenClosure: public OopsInGenClosure { + KlassToOopClosure _klass_closure; public: - CMKlassClosure(OopClosure* oop_closure = NULL) : _oop_closure(oop_closure) { } - - void do_klass(Klass* k); -}; - -// The base class for all CMS marking closures. -// It's used to proxy through the metadata to the oops defined in them. -class CMSOopClosure: public ExtendedOopClosure { - CMKlassClosure _klass_closure; - public: - CMSOopClosure() : ExtendedOopClosure() { - _klass_closure.initialize(this); - } - CMSOopClosure(ReferenceProcessor* rp) : ExtendedOopClosure(rp) { + MetadataAwareOopsInGenClosure() { _klass_closure.initialize(this); } @@ -87,26 +68,7 @@ virtual void do_class_loader_data(ClassLoaderData* cld); }; -// TODO: This duplication of the CMSOopClosure class is only needed because -// some CMS OopClosures derive from OopsInGenClosure. It would be good -// to get rid of them completely. -class CMSOopsInGenClosure: public OopsInGenClosure { - CMKlassClosure _klass_closure; - public: - CMSOopsInGenClosure() { - _klass_closure.initialize(this); - } - - virtual bool do_metadata() { return do_metadata_nv(); } - inline bool do_metadata_nv() { return true; } - - virtual void do_klass(Klass* k); - void do_klass_nv(Klass* k); - - virtual void do_class_loader_data(ClassLoaderData* cld); -}; - -class MarkRefsIntoClosure: public CMSOopsInGenClosure { +class MarkRefsIntoClosure: public MetadataAwareOopsInGenClosure { private: const MemRegion _span; CMSBitMap* _bitMap; @@ -118,7 +80,7 @@ virtual void do_oop(narrowOop* p); }; -class Par_MarkRefsIntoClosure: public CMSOopsInGenClosure { +class Par_MarkRefsIntoClosure: public MetadataAwareOopsInGenClosure { private: const MemRegion _span; CMSBitMap* _bitMap; @@ -132,7 +94,7 @@ // A variant of the above used in certain kinds of CMS // marking verification. -class MarkRefsIntoVerifyClosure: public CMSOopsInGenClosure { +class MarkRefsIntoVerifyClosure: public MetadataAwareOopsInGenClosure { private: const MemRegion _span; CMSBitMap* _verification_bm; @@ -147,7 +109,7 @@ }; // The non-parallel version (the parallel version appears further below). -class PushAndMarkClosure: public CMSOopClosure { +class PushAndMarkClosure: public MetadataAwareOopClosure { private: CMSCollector* _collector; MemRegion _span; @@ -177,7 +139,7 @@ // synchronization (for instance, via CAS). The marking stack // used in the non-parallel case above is here replaced with // an OopTaskQueue structure to allow efficient work stealing. -class Par_PushAndMarkClosure: public CMSOopClosure { +class Par_PushAndMarkClosure: public MetadataAwareOopClosure { private: CMSCollector* _collector; MemRegion _span; @@ -198,7 +160,7 @@ }; // The non-parallel version (the parallel version appears further below). -class MarkRefsIntoAndScanClosure: public CMSOopsInGenClosure { +class MarkRefsIntoAndScanClosure: public MetadataAwareOopsInGenClosure { private: MemRegion _span; CMSBitMap* _bit_map; @@ -239,7 +201,7 @@ // stack and the bitMap are shared, so access needs to be suitably // synchronized. An OopTaskQueue structure, supporting efficient // work stealing, replaces a CMSMarkStack for storing grey objects. -class Par_MarkRefsIntoAndScanClosure: public CMSOopsInGenClosure { +class Par_MarkRefsIntoAndScanClosure: public MetadataAwareOopsInGenClosure { private: MemRegion _span; CMSBitMap* _bit_map; @@ -265,7 +227,7 @@ // This closure is used during the concurrent marking phase // following the first checkpoint. Its use is buried in // the closure MarkFromRootsClosure. -class PushOrMarkClosure: public CMSOopClosure { +class PushOrMarkClosure: public MetadataAwareOopClosure { private: CMSCollector* _collector; MemRegion _span; @@ -298,7 +260,7 @@ // This closure is used during the concurrent marking phase // following the first checkpoint. Its use is buried in // the closure Par_MarkFromRootsClosure. -class Par_PushOrMarkClosure: public CMSOopClosure { +class Par_PushOrMarkClosure: public MetadataAwareOopClosure { private: CMSCollector* _collector; MemRegion _whole_span; @@ -338,7 +300,7 @@ // processing phase of the CMS final checkpoint step, as // well as during the concurrent precleaning of the discovered // reference lists. -class CMSKeepAliveClosure: public CMSOopClosure { +class CMSKeepAliveClosure: public MetadataAwareOopClosure { private: CMSCollector* _collector; const MemRegion _span; @@ -358,7 +320,7 @@ inline void do_oop_nv(narrowOop* p) { CMSKeepAliveClosure::do_oop_work(p); } }; -class CMSInnerParMarkAndPushClosure: public CMSOopClosure { +class CMSInnerParMarkAndPushClosure: public MetadataAwareOopClosure { private: CMSCollector* _collector; MemRegion _span; @@ -379,7 +341,7 @@ // A parallel (MT) version of the above, used when // reference processing is parallel; the only difference // is in the do_oop method. -class CMSParKeepAliveClosure: public CMSOopClosure { +class CMSParKeepAliveClosure: public MetadataAwareOopClosure { private: MemRegion _span; OopTaskQueue* _work_queue; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -44,33 +44,20 @@ } } -// CMSOopClosure and CMSoopsInGenClosure are duplicated, +// MetadataAwareOopClosure and MetadataAwareOopsInGenClosure are duplicated, // until we get rid of OopsInGenClosure. -inline void CMSOopClosure::do_klass(Klass* k) { do_klass_nv(k); } -inline void CMSOopsInGenClosure::do_klass(Klass* k) { do_klass_nv(k); } - -inline void CMSOopClosure::do_klass_nv(Klass* k) { +inline void MetadataAwareOopsInGenClosure::do_klass_nv(Klass* k) { ClassLoaderData* cld = k->class_loader_data(); do_class_loader_data(cld); } -inline void CMSOopsInGenClosure::do_klass_nv(Klass* k) { - ClassLoaderData* cld = k->class_loader_data(); - do_class_loader_data(cld); -} +inline void MetadataAwareOopsInGenClosure::do_klass(Klass* k) { do_klass_nv(k); } -inline void CMSOopClosure::do_class_loader_data(ClassLoaderData* cld) { - assert(_klass_closure._oop_closure == this, "Must be"); - - bool claim = true; // Must claim the class loader data before processing. - cld->oops_do(_klass_closure._oop_closure, &_klass_closure, claim); -} -inline void CMSOopsInGenClosure::do_class_loader_data(ClassLoaderData* cld) { +inline void MetadataAwareOopsInGenClosure::do_class_loader_data(ClassLoaderData* cld) { assert(_klass_closure._oop_closure == this, "Must be"); bool claim = true; // Must claim the class loader data before processing. cld->oops_do(_klass_closure._oop_closure, &_klass_closure, claim); } - #endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_INLINE_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -49,13 +49,14 @@ #include "memory/genCollectedHeap.hpp" #include "memory/genMarkSweep.hpp" #include "memory/genOopClosures.inline.hpp" -#include "memory/iterator.hpp" +#include "memory/iterator.inline.hpp" #include "memory/padded.hpp" #include "memory/referencePolicy.hpp" #include "memory/resourceArea.hpp" #include "memory/tenuredGeneration.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/globals_extension.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" @@ -2024,7 +2025,7 @@ SerialOldTracer* gc_tracer = GenMarkSweep::gc_tracer(); gc_tracer->report_gc_start(gch->gc_cause(), gc_timer->gc_start()); - GCTraceTime t("CMS:MSC ", PrintGCDetails && Verbose, true, NULL); + GCTraceTime t("CMS:MSC ", PrintGCDetails && Verbose, true, NULL, gc_tracer->gc_id()); if (PrintGC && Verbose && !(GCCause::is_user_requested_gc(gch->gc_cause()))) { gclog_or_tty->print_cr("Compact ConcurrentMarkSweepGeneration after %d " "collections passed to foreground collector", _full_gcs_since_conc_gc); @@ -2534,8 +2535,10 @@ assert(ConcurrentMarkSweepThread::vm_thread_has_cms_token(), "VM thread should have CMS token"); + // The gc id is created in register_foreground_gc_start if this collection is synchronous + const GCId gc_id = _collectorState == InitialMarking ? GCId::peek() : _gc_tracer_cm->gc_id(); NOT_PRODUCT(GCTraceTime t("CMS:MS (foreground) ", PrintGCDetails && Verbose, - true, NULL);) + true, NULL, gc_id);) if (UseAdaptiveSizePolicy) { size_policy()->ms_collection_begin(); } @@ -3120,7 +3123,7 @@ // Mark from roots one level into CMS MarkRefsIntoVerifyClosure notOlder(_span, verification_mark_bm(), markBitMap()); - CMKlassClosure klass_closure(¬Older); + KlassToOopClosure klass_closure(¬Older); gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel. gch->gen_process_strong_roots(_cmsGen->level(), @@ -3538,6 +3541,7 @@ public: CMSPhaseAccounting(CMSCollector *collector, const char *phase, + const GCId gc_id, bool print_cr = true); ~CMSPhaseAccounting(); @@ -3546,6 +3550,7 @@ const char *_phase; elapsedTimer _wallclock; bool _print_cr; + const GCId _gc_id; public: // Not MT-safe; so do not pass around these StackObj's @@ -3561,15 +3566,15 @@ CMSPhaseAccounting::CMSPhaseAccounting(CMSCollector *collector, const char *phase, + const GCId gc_id, bool print_cr) : - _collector(collector), _phase(phase), _print_cr(print_cr) { + _collector(collector), _phase(phase), _print_cr(print_cr), _gc_id(gc_id) { if (PrintCMSStatistics != 0) { _collector->resetYields(); } if (PrintGCDetails) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(_gc_id); gclog_or_tty->print_cr("[%s-concurrent-%s-start]", _collector->cmsGen()->short_name(), _phase); } @@ -3583,8 +3588,7 @@ _collector->stopTimer(); _wallclock.stop(); if (PrintGCDetails) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(_gc_id); gclog_or_tty->print("[%s-concurrent-%s: %3.3f/%3.3f secs]", _collector->cmsGen()->short_name(), _phase, _collector->timerValue(), _wallclock.seconds()); @@ -3682,7 +3686,7 @@ setup_cms_unloading_and_verification_state(); NOT_PRODUCT(GCTraceTime t("\ncheckpointRootsInitialWork", - PrintGCDetails && Verbose, true, _gc_timer_cm);) + PrintGCDetails && Verbose, true, _gc_timer_cm, _gc_tracer_cm->gc_id());) if (UseAdaptiveSizePolicy) { size_policy()->checkpoint_roots_initial_begin(); } @@ -3740,7 +3744,7 @@ gch->set_par_threads(0); } else { // The serial version. - CMKlassClosure klass_closure(¬Older); + KlassToOopClosure klass_closure(¬Older); gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel. gch->gen_process_strong_roots(_cmsGen->level(), true, // younger gens are roots @@ -3799,7 +3803,7 @@ CMSTokenSyncWithLocks ts(true, bitMapLock()); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - CMSPhaseAccounting pa(this, "mark", !PrintGCDetails); + CMSPhaseAccounting pa(this, "mark", _gc_tracer_cm->gc_id(), !PrintGCDetails); res = markFromRootsWork(asynch); if (res) { _collectorState = Precleaning; @@ -4202,7 +4206,7 @@ pst->all_tasks_completed(); } -class Par_ConcMarkingClosure: public CMSOopClosure { +class Par_ConcMarkingClosure: public MetadataAwareOopClosure { private: CMSCollector* _collector; CMSConcMarkingTask* _task; @@ -4215,7 +4219,7 @@ public: Par_ConcMarkingClosure(CMSCollector* collector, CMSConcMarkingTask* task, OopTaskQueue* work_queue, CMSBitMap* bit_map, CMSMarkStack* overflow_stack): - CMSOopClosure(collector->ref_processor()), + MetadataAwareOopClosure(collector->ref_processor()), _collector(collector), _task(task), _span(collector->_span), @@ -4522,7 +4526,7 @@ _start_sampling = false; } TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - CMSPhaseAccounting pa(this, "preclean", !PrintGCDetails); + CMSPhaseAccounting pa(this, "preclean", _gc_tracer_cm->gc_id(), !PrintGCDetails); preclean_work(CMSPrecleanRefLists1, CMSPrecleanSurvivors1); } CMSTokenSync x(true); // is cms thread @@ -4551,7 +4555,7 @@ // we will never do an actual abortable preclean cycle. if (get_eden_used() > CMSScheduleRemarkEdenSizeThreshold) { TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - CMSPhaseAccounting pa(this, "abortable-preclean", !PrintGCDetails); + CMSPhaseAccounting pa(this, "abortable-preclean", _gc_tracer_cm->gc_id(), !PrintGCDetails); // We need more smarts in the abortable preclean // loop below to deal with cases where allocation // in young gen is very very slow, and our precleaning @@ -4696,7 +4700,7 @@ GCTimer *gc_timer = NULL; // Currently not tracing concurrent phases rp->preclean_discovered_references( rp->is_alive_non_header(), &keep_alive, &complete_trace, &yield_cl, - gc_timer); + gc_timer, _gc_tracer_cm->gc_id()); } if (clean_survivor) { // preclean the active survivor space(s) @@ -4986,7 +4990,7 @@ } class PrecleanKlassClosure : public KlassClosure { - CMKlassClosure _cm_klass_closure; + KlassToOopClosure _cm_klass_closure; public: PrecleanKlassClosure(OopClosure* oop_closure) : _cm_klass_closure(oop_closure) {} void do_klass(Klass* k) { @@ -5039,7 +5043,7 @@ // expect it to be false and set to true FlagSetting fl(gch->_is_gc_active, false); NOT_PRODUCT(GCTraceTime t("Scavenge-Before-Remark", - PrintGCDetails && Verbose, true, _gc_timer_cm);) + PrintGCDetails && Verbose, true, _gc_timer_cm, _gc_tracer_cm->gc_id());) int level = _cmsGen->level() - 1; if (level >= 0) { gch->do_collection(true, // full (i.e. force, see below) @@ -5068,7 +5072,7 @@ void CMSCollector::checkpointRootsFinalWork(bool asynch, bool clear_all_soft_refs, bool init_mark_was_synchronous) { - NOT_PRODUCT(GCTraceTime tr("checkpointRootsFinalWork", PrintGCDetails, false, _gc_timer_cm);) + NOT_PRODUCT(GCTraceTime tr("checkpointRootsFinalWork", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id());) assert(haveFreelistLocks(), "must have free list locks"); assert_lock_strong(bitMapLock()); @@ -5123,11 +5127,11 @@ // the most recent young generation GC, minus those cleaned up by the // concurrent precleaning. if (CMSParallelRemarkEnabled && CollectedHeap::use_parallel_gc_threads()) { - GCTraceTime t("Rescan (parallel) ", PrintGCDetails, false, _gc_timer_cm); + GCTraceTime t("Rescan (parallel) ", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id()); do_remark_parallel(); } else { GCTraceTime t("Rescan (non-parallel) ", PrintGCDetails, false, - _gc_timer_cm); + _gc_timer_cm, _gc_tracer_cm->gc_id()); do_remark_non_parallel(); } } @@ -5140,7 +5144,7 @@ verify_overflow_empty(); { - NOT_PRODUCT(GCTraceTime ts("refProcessingWork", PrintGCDetails, false, _gc_timer_cm);) + NOT_PRODUCT(GCTraceTime ts("refProcessingWork", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id());) refProcessingWork(asynch, clear_all_soft_refs); } verify_work_stacks_empty(); @@ -5224,7 +5228,7 @@ _timer.start(); GenCollectedHeap* gch = GenCollectedHeap::heap(); Par_MarkRefsIntoClosure par_mri_cl(_collector->_span, &(_collector->_markBitMap)); - CMKlassClosure klass_closure(&par_mri_cl); + KlassToOopClosure klass_closure(&par_mri_cl); // ---------- young gen roots -------------- { @@ -5298,7 +5302,7 @@ }; class RemarkKlassClosure : public KlassClosure { - CMKlassClosure _cm_klass_closure; + KlassToOopClosure _cm_klass_closure; public: RemarkKlassClosure(OopClosure* oop_closure) : _cm_klass_closure(oop_closure) {} void do_klass(Klass* k) { @@ -5921,7 +5925,7 @@ NULL, // space is set further below &_markBitMap, &_markStack, &mrias_cl); { - GCTraceTime t("grey object rescan", PrintGCDetails, false, _gc_timer_cm); + GCTraceTime t("grey object rescan", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id()); // Iterate over the dirty cards, setting the corresponding bits in the // mod union table. { @@ -5958,7 +5962,7 @@ Universe::verify(); } { - GCTraceTime t("root rescan", PrintGCDetails, false, _gc_timer_cm); + GCTraceTime t("root rescan", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id()); verify_work_stacks_empty(); @@ -5978,7 +5982,7 @@ } { - GCTraceTime t("visit unhandled CLDs", PrintGCDetails, false, _gc_timer_cm); + GCTraceTime t("visit unhandled CLDs", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id()); verify_work_stacks_empty(); @@ -5997,7 +6001,7 @@ } { - GCTraceTime t("dirty klass scan", PrintGCDetails, false, _gc_timer_cm); + GCTraceTime t("dirty klass scan", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id()); verify_work_stacks_empty(); @@ -6199,7 +6203,7 @@ _span, &_markBitMap, &_markStack, &cmsKeepAliveClosure, false /* !preclean */); { - GCTraceTime t("weak refs processing", PrintGCDetails, false, _gc_timer_cm); + GCTraceTime t("weak refs processing", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id()); ReferenceProcessorStats stats; if (rp->processing_is_mt()) { @@ -6224,13 +6228,15 @@ &cmsKeepAliveClosure, &cmsDrainMarkingStackClosure, &task_executor, - _gc_timer_cm); + _gc_timer_cm, + _gc_tracer_cm->gc_id()); } else { stats = rp->process_discovered_references(&_is_alive_closure, &cmsKeepAliveClosure, &cmsDrainMarkingStackClosure, NULL, - _gc_timer_cm); + _gc_timer_cm, + _gc_tracer_cm->gc_id()); } _gc_tracer_cm->report_gc_reference_stats(stats); @@ -6241,7 +6247,7 @@ if (should_unload_classes()) { { - GCTraceTime t("class unloading", PrintGCDetails, false, _gc_timer_cm); + GCTraceTime t("class unloading", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id()); // Unload classes and purge the SystemDictionary. bool purged_class = SystemDictionary::do_unloading(&_is_alive_closure); @@ -6254,7 +6260,7 @@ } { - GCTraceTime t("scrub symbol table", PrintGCDetails, false, _gc_timer_cm); + GCTraceTime t("scrub symbol table", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id()); // Clean up unreferenced symbols in symbol table. SymbolTable::unlink(); } @@ -6263,7 +6269,7 @@ // CMS doesn't use the StringTable as hard roots when class unloading is turned off. // Need to check if we really scanned the StringTable. if ((roots_scanning_options() & SharedHeap::SO_Strings) == 0) { - GCTraceTime t("scrub string table", PrintGCDetails, false, _gc_timer_cm); + GCTraceTime t("scrub string table", PrintGCDetails, false, _gc_timer_cm, _gc_tracer_cm->gc_id()); // Delete entries for dead interned strings. StringTable::unlink(&_is_alive_closure); } @@ -6330,7 +6336,7 @@ _intra_sweep_timer.start(); if (asynch) { TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - CMSPhaseAccounting pa(this, "sweep", !PrintGCDetails); + CMSPhaseAccounting pa(this, "sweep", _gc_tracer_cm->gc_id(), !PrintGCDetails); // First sweep the old gen { CMSTokenSyncWithLocks ts(true, _cmsGen->freelistLock(), @@ -6551,7 +6557,7 @@ // Clear the mark bitmap (no grey objects to start with) // for the next cycle. TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - CMSPhaseAccounting cmspa(this, "reset", !PrintGCDetails); + CMSPhaseAccounting cmspa(this, "reset", _gc_tracer_cm->gc_id(), !PrintGCDetails); HeapWord* curAddr = _markBitMap.startWord(); while (curAddr < _markBitMap.endWord()) { @@ -6617,7 +6623,7 @@ void CMSCollector::do_CMS_operation(CMS_op_type op, GCCause::Cause gc_cause) { gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - GCTraceTime t(GCCauseString("GC", gc_cause), PrintGC, !PrintGCDetails, NULL); + GCTraceTime t(GCCauseString("GC", gc_cause), PrintGC, !PrintGCDetails, NULL, _gc_tracer_cm->gc_id()); TraceCollectorStats tcs(counters()); switch (op) { @@ -7735,7 +7741,7 @@ CMSCollector* collector, MemRegion span, CMSBitMap* verification_bm, CMSBitMap* cms_bm, CMSMarkStack* mark_stack): - CMSOopClosure(collector->ref_processor()), + MetadataAwareOopClosure(collector->ref_processor()), _collector(collector), _span(span), _verification_bm(verification_bm), @@ -7788,7 +7794,7 @@ MemRegion span, CMSBitMap* bitMap, CMSMarkStack* markStack, HeapWord* finger, MarkFromRootsClosure* parent) : - CMSOopClosure(collector->ref_processor()), + MetadataAwareOopClosure(collector->ref_processor()), _collector(collector), _span(span), _bitMap(bitMap), @@ -7805,7 +7811,7 @@ HeapWord* finger, HeapWord** global_finger_addr, Par_MarkFromRootsClosure* parent) : - CMSOopClosure(collector->ref_processor()), + MetadataAwareOopClosure(collector->ref_processor()), _collector(collector), _whole_span(collector->_span), _span(span), @@ -7854,11 +7860,6 @@ _overflow_stack->expand(); // expand the stack if possible } -void CMKlassClosure::do_klass(Klass* k) { - assert(_oop_closure != NULL, "Not initialized?"); - k->oops_do(_oop_closure); -} - void PushOrMarkClosure::do_oop(oop obj) { // Ignore mark word because we are running concurrent with mutators. assert(obj->is_oop_or_null(true), "expected an oop or NULL"); @@ -7956,7 +7957,7 @@ CMSBitMap* mod_union_table, CMSMarkStack* mark_stack, bool concurrent_precleaning): - CMSOopClosure(rp), + MetadataAwareOopClosure(rp), _collector(collector), _span(span), _bit_map(bit_map), @@ -8029,7 +8030,7 @@ ReferenceProcessor* rp, CMSBitMap* bit_map, OopTaskQueue* work_queue): - CMSOopClosure(rp), + MetadataAwareOopClosure(rp), _collector(collector), _span(span), _bit_map(bit_map), diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -1444,7 +1444,7 @@ // The following closures are used to do certain kinds of verification of // CMS marking. -class PushAndMarkVerifyClosure: public CMSOopClosure { +class PushAndMarkVerifyClosure: public MetadataAwareOopClosure { CMSCollector* _collector; MemRegion _span; CMSBitMap* _verification_bm; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -56,7 +56,7 @@ void VM_CMS_Operation::verify_before_gc() { if (VerifyBeforeGC && GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) { - GCTraceTime tm("Verify Before", false, false, _collector->_gc_timer_cm); + GCTraceTime tm("Verify Before", false, false, _collector->_gc_timer_cm, _collector->_gc_tracer_cm->gc_id()); HandleMark hm; FreelistLocker x(_collector); MutexLockerEx y(_collector->bitMapLock(), Mutex::_no_safepoint_check_flag); @@ -68,7 +68,7 @@ void VM_CMS_Operation::verify_after_gc() { if (VerifyAfterGC && GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) { - GCTraceTime tm("Verify After", false, false, _collector->_gc_timer_cm); + GCTraceTime tm("Verify After", false, false, _collector->_gc_timer_cm, _collector->_gc_tracer_cm->gc_id()); HandleMark hm; FreelistLocker x(_collector); MutexLockerEx y(_collector->bitMapLock(), Mutex::_no_safepoint_check_flag); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,6 +28,7 @@ #include "gc_implementation/g1/g1CollectorPolicy.hpp" #include "gc_implementation/g1/g1ErgoVerbose.hpp" #include "memory/space.inline.hpp" +#include "runtime/atomic.inline.hpp" // Even though we don't use the GC efficiency in our heuristics as // much as we used to, we still order according to GC efficiency. This diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -45,6 +45,7 @@ #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/prefetch.inline.hpp" #include "services/memTracker.hpp" @@ -511,6 +512,7 @@ _has_overflown(false), _concurrent(false), _has_aborted(false), + _aborted_gc_id(GCId::undefined()), _restart_for_overflow(false), _concurrent_marking_in_progress(false), @@ -1020,8 +1022,7 @@ force_overflow()->update(); if (G1Log::fine()) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(concurrent_gc_id()); gclog_or_tty->print_cr("[GC concurrent-mark-reset-for-overflow]"); } } @@ -2469,7 +2470,7 @@ if (G1Log::finer()) { gclog_or_tty->put(' '); } - GCTraceTime t("GC ref-proc", G1Log::finer(), false, g1h->gc_timer_cm()); + GCTraceTime t("GC ref-proc", G1Log::finer(), false, g1h->gc_timer_cm(), concurrent_gc_id()); ReferenceProcessor* rp = g1h->ref_processor_cm(); @@ -2526,7 +2527,8 @@ &g1_keep_alive, &g1_drain_mark_stack, executor, - g1h->gc_timer_cm()); + g1h->gc_timer_cm(), + concurrent_gc_id()); g1h->gc_tracer_cm()->report_gc_reference_stats(stats); // The do_oop work routines of the keep_alive and drain_marking_stack @@ -3261,6 +3263,12 @@ } _first_overflow_barrier_sync.abort(); _second_overflow_barrier_sync.abort(); + const GCId& gc_id = _g1h->gc_tracer_cm()->gc_id(); + if (!gc_id.is_undefined()) { + // We can do multiple full GCs before ConcurrentMarkThread::run() gets a chance + // to detect that it was aborted. Only keep track of the first GC id that we aborted. + _aborted_gc_id = gc_id; + } _has_aborted = true; SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set(); @@ -3275,6 +3283,13 @@ _g1h->register_concurrent_cycle_end(); } +const GCId& ConcurrentMark::concurrent_gc_id() { + if (has_aborted()) { + return _aborted_gc_id; + } + return _g1h->gc_tracer_cm()->gc_id(); +} + static void print_ms_time_info(const char* prefix, const char* name, NumberSeq& ns) { gclog_or_tty->print_cr("%s%5d %12s: total time = %8.2f s (avg = %8.2f ms).", diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #define SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_HPP #include "gc_implementation/g1/heapRegionSet.hpp" +#include "gc_implementation/shared/gcId.hpp" #include "utilities/taskqueue.hpp" class G1CollectedHeap; @@ -444,6 +445,7 @@ volatile bool _concurrent; // Set at the end of a Full GC so that marking aborts volatile bool _has_aborted; + GCId _aborted_gc_id; // Used when remark aborts due to an overflow to indicate that // another concurrent marking phase should start @@ -824,6 +826,8 @@ bool has_aborted() { return _has_aborted; } + const GCId& concurrent_gc_id(); + // This prints the global/local fingers. It is used for debugging. NOT_PRODUCT(void print_finger();) diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,4 +1,4 @@ -/* + /* * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -29,6 +29,7 @@ #include "gc_implementation/g1/g1Log.hpp" #include "gc_implementation/g1/g1MMUTracker.hpp" #include "gc_implementation/g1/vm_operations_g1.hpp" +#include "gc_implementation/shared/gcTrace.hpp" #include "memory/resourceArea.hpp" #include "runtime/vmThread.hpp" @@ -111,8 +112,7 @@ double scan_start = os::elapsedTime(); if (!cm()->has_aborted()) { if (G1Log::fine()) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(cm()->concurrent_gc_id()); gclog_or_tty->print_cr("[GC concurrent-root-region-scan-start]"); } @@ -120,8 +120,7 @@ double scan_end = os::elapsedTime(); if (G1Log::fine()) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(cm()->concurrent_gc_id()); gclog_or_tty->print_cr("[GC concurrent-root-region-scan-end, %1.7lf secs]", scan_end - scan_start); } @@ -129,8 +128,7 @@ double mark_start_sec = os::elapsedTime(); if (G1Log::fine()) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(cm()->concurrent_gc_id()); gclog_or_tty->print_cr("[GC concurrent-mark-start]"); } @@ -153,8 +151,7 @@ } if (G1Log::fine()) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(cm()->concurrent_gc_id()); gclog_or_tty->print_cr("[GC concurrent-mark-end, %1.7lf secs]", mark_end_sec - mark_start_sec); } @@ -169,8 +166,7 @@ "in remark (restart #%d).", iter); } if (G1Log::fine()) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(cm()->concurrent_gc_id()); gclog_or_tty->print_cr("[GC concurrent-mark-restart-for-overflow]"); } } @@ -213,8 +209,7 @@ double cleanup_start_sec = os::elapsedTime(); if (G1Log::fine()) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(cm()->concurrent_gc_id()); gclog_or_tty->print_cr("[GC concurrent-cleanup-start]"); } @@ -234,8 +229,7 @@ double cleanup_end_sec = os::elapsedTime(); if (G1Log::fine()) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(cm()->concurrent_gc_id()); gclog_or_tty->print_cr("[GC concurrent-cleanup-end, %1.7lf secs]", cleanup_end_sec - cleanup_start_sec); } @@ -276,8 +270,7 @@ if (cm()->has_aborted()) { if (G1Log::fine()) { - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(cm()->concurrent_gc_id()); gclog_or_tty->print_cr("[GC concurrent-mark-abort]"); } } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,7 +26,7 @@ #include "gc_implementation/g1/dirtyCardQueue.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/heapRegionRemSet.hpp" -#include "runtime/atomic.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/safepoint.hpp" #include "runtime/thread.inline.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" +#include "gc_implementation/g1/heapRegion.hpp" #include "memory/space.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" @@ -98,6 +99,20 @@ return (delta & right_n_bits(LogN_words)) == (size_t)NoBits; } +void G1BlockOffsetSharedArray::set_offset_array(HeapWord* left, HeapWord* right, u_char offset) { + check_index(index_for(right - 1), "right address out of range"); + assert(left < right, "Heap addresses out of order"); + size_t num_cards = pointer_delta(right, left) >> LogN_words; + if (UseMemSetInBOT) { + memset(&_offset_array[index_for(left)], offset, num_cards); + } else { + size_t i = index_for(left); + const size_t end = i + num_cards; + for (; i < end; i++) { + _offset_array[i] = offset; + } + } +} ////////////////////////////////////////////////////////////////////// // G1BlockOffsetArray @@ -107,7 +122,7 @@ MemRegion mr, bool init_to_zero) : G1BlockOffsetTable(mr.start(), mr.end()), _unallocated_block(_bottom), - _array(array), _csp(NULL), + _array(array), _gsp(NULL), _init_to_zero(init_to_zero) { assert(_bottom <= _end, "arguments out of order"); if (!_init_to_zero) { @@ -117,9 +132,8 @@ } } -void G1BlockOffsetArray::set_space(Space* sp) { - _sp = sp; - _csp = sp->toContiguousSpace(); +void G1BlockOffsetArray::set_space(G1OffsetTableContigSpace* sp) { + _gsp = sp; } // The arguments follow the normal convention of denoting @@ -378,7 +392,7 @@ } // Otherwise, find the block start using the table. HeapWord* q = block_at_or_preceding(addr, false, 0); - HeapWord* n = q + _sp->block_size(q); + HeapWord* n = q + block_size(q); return forward_to_block_containing_addr_const(q, n, addr); } @@ -406,31 +420,17 @@ err_msg("next_boundary is beyond the end of the covered region " " next_boundary " PTR_FORMAT " _array->_end " PTR_FORMAT, next_boundary, _array->_end)); - if (csp() != NULL) { - if (addr >= csp()->top()) return csp()->top(); - while (next_boundary < addr) { - while (n <= next_boundary) { - q = n; - oop obj = oop(q); - if (obj->klass_or_null() == NULL) return q; - n += obj->size(); - } - assert(q <= next_boundary && n > next_boundary, "Consequence of loop"); - // [q, n) is the block that crosses the boundary. - alloc_block_work2(&next_boundary, &next_index, q, n); + if (addr >= gsp()->top()) return gsp()->top(); + while (next_boundary < addr) { + while (n <= next_boundary) { + q = n; + oop obj = oop(q); + if (obj->klass_or_null() == NULL) return q; + n += obj->size(); } - } else { - while (next_boundary < addr) { - while (n <= next_boundary) { - q = n; - oop obj = oop(q); - if (obj->klass_or_null() == NULL) return q; - n += _sp->block_size(q); - } - assert(q <= next_boundary && n > next_boundary, "Consequence of loop"); - // [q, n) is the block that crosses the boundary. - alloc_block_work2(&next_boundary, &next_index, q, n); - } + assert(q <= next_boundary && n > next_boundary, "Consequence of loop"); + // [q, n) is the block that crosses the boundary. + alloc_block_work2(&next_boundary, &next_index, q, n); } return forward_to_block_containing_addr_const(q, n, addr); } @@ -637,7 +637,7 @@ assert(_bottom <= addr && addr < _end, "addr must be covered by this Array"); HeapWord* q = block_at_or_preceding(addr, true, _next_offset_index-1); - HeapWord* n = q + _sp->block_size(q); + HeapWord* n = q + block_size(q); return forward_to_block_containing_addr_const(q, n, addr); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -52,8 +52,8 @@ // consolidation. // Forward declarations -class ContiguousSpace; class G1BlockOffsetSharedArray; +class G1OffsetTableContigSpace; class G1BlockOffsetTable VALUE_OBJ_CLASS_SPEC { friend class VMStructs; @@ -157,6 +157,8 @@ return _offset_array[index]; } + void set_offset_array(HeapWord* left, HeapWord* right, u_char offset); + void set_offset_array(size_t index, u_char offset) { check_index(index, "index out of range"); check_offset(offset, "offset too large"); @@ -170,21 +172,6 @@ _offset_array[index] = (u_char) pointer_delta(high, low); } - void set_offset_array(HeapWord* left, HeapWord* right, u_char offset) { - check_index(index_for(right - 1), "right address out of range"); - assert(left < right, "Heap addresses out of order"); - size_t num_cards = pointer_delta(right, left) >> LogN_words; - if (UseMemSetInBOT) { - memset(&_offset_array[index_for(left)], offset, num_cards); - } else { - size_t i = index_for(left); - const size_t end = i + num_cards; - for (; i < end; i++) { - _offset_array[i] = offset; - } - } - } - void set_offset_array(size_t left, size_t right, u_char offset) { check_index(right, "right index out of range"); assert(left <= right, "indexes out of order"); @@ -281,11 +268,7 @@ G1BlockOffsetSharedArray* _array; // The space that owns this subregion. - Space* _sp; - - // If "_sp" is a contiguous space, the field below is the view of "_sp" - // as a contiguous space, else NULL. - ContiguousSpace* _csp; + G1OffsetTableContigSpace* _gsp; // If true, array entries are initialized to 0; otherwise, they are // initialized to point backwards to the beginning of the covered region. @@ -310,7 +293,9 @@ protected: - ContiguousSpace* csp() const { return _csp; } + G1OffsetTableContigSpace* gsp() const { return _gsp; } + + inline size_t block_size(const HeapWord* p) const; // Returns the address of a block whose start is at most "addr". // If "has_max_index" is true, "assumes "max_index" is the last valid one @@ -363,7 +348,7 @@ // "this" to be passed as a parameter to a member constructor for // the containing concrete subtype of Space. // This would be legal C++, but MS VC++ doesn't allow it. - void set_space(Space* sp); + void set_space(G1OffsetTableContigSpace* sp); // Resets the covered region to the given "mr". void set_region(MemRegion mr); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #define SHARE_VM_GC_IMPLEMENTATION_G1_G1BLOCKOFFSETTABLE_INLINE_HPP #include "gc_implementation/g1/g1BlockOffsetTable.hpp" +#include "gc_implementation/g1/heapRegion.hpp" #include "memory/space.hpp" inline HeapWord* G1BlockOffsetTable::block_start(const void* addr) { @@ -69,6 +70,11 @@ return result; } +inline size_t +G1BlockOffsetArray::block_size(const HeapWord* p) const { + return gsp()->block_size(p); +} + inline HeapWord* G1BlockOffsetArray::block_at_or_preceding(const void* addr, bool has_max_index, @@ -88,7 +94,7 @@ // to go back by. size_t n_cards_back = BlockOffsetArray::entry_to_cards_back(offset); q -= (N_words * n_cards_back); - assert(q >= _sp->bottom(), "Went below bottom!"); + assert(q >= gsp()->bottom(), "Went below bottom!"); index -= n_cards_back; offset = _array->offset_array(index); } @@ -101,21 +107,12 @@ G1BlockOffsetArray:: forward_to_block_containing_addr_const(HeapWord* q, HeapWord* n, const void* addr) const { - if (csp() != NULL) { - if (addr >= csp()->top()) return csp()->top(); - while (n <= addr) { - q = n; - oop obj = oop(q); - if (obj->klass_or_null() == NULL) return q; - n += obj->size(); - } - } else { - while (n <= addr) { - q = n; - oop obj = oop(q); - if (obj->klass_or_null() == NULL) return q; - n += _sp->block_size(q); - } + if (addr >= gsp()->top()) return gsp()->top(); + while (n <= addr) { + q = n; + oop obj = oop(q); + if (obj->klass_or_null() == NULL) return q; + n += obj->size(); } assert(q <= n, "wrong order for q and addr"); assert(addr < n, "wrong order for addr and n"); @@ -126,7 +123,7 @@ G1BlockOffsetArray::forward_to_block_containing_addr(HeapWord* q, const void* addr) { if (oop(q)->klass_or_null() == NULL) return q; - HeapWord* n = q + _sp->block_size(q); + HeapWord* n = q + block_size(q); // In the normal case, where the query "addr" is a card boundary, and the // offset table chunks are the same size as cards, the block starting at // "q" will contain addr, so the test below will fail, and we'll fall diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -62,6 +62,7 @@ #include "memory/referenceProcessor.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.pcgc.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/prefetch.inline.hpp" #include "runtime/orderAccess.inline.hpp" #include "runtime/vmThread.hpp" @@ -1298,7 +1299,7 @@ TraceCPUTime tcpu(G1Log::finer(), true, gclog_or_tty); { - GCTraceTime t(GCCauseString("Full GC", gc_cause()), G1Log::fine(), true, NULL); + GCTraceTime t(GCCauseString("Full GC", gc_cause()), G1Log::fine(), true, NULL, gc_tracer->gc_id()); TraceCollectorStats tcs(g1mm()->full_collection_counters()); TraceMemoryManagerStats tms(true /* fullGC */, gc_cause()); @@ -3858,8 +3859,7 @@ return; } - gclog_or_tty->date_stamp(PrintGCDateStamps); - gclog_or_tty->stamp(PrintGCTimeStamps); + gclog_or_tty->gclog_stamp(_gc_tracer_stw->gc_id()); GCCauseString gc_cause_str = GCCauseString("GC pause", gc_cause()) .append(g1_policy()->gcs_are_young() ? "(young)" : "(mixed)") @@ -5340,17 +5340,14 @@ class G1CopyingKeepAliveClosure: public OopClosure { G1CollectedHeap* _g1h; OopClosure* _copy_non_heap_obj_cl; - OopsInHeapRegionClosure* _copy_metadata_obj_cl; G1ParScanThreadState* _par_scan_state; public: G1CopyingKeepAliveClosure(G1CollectedHeap* g1h, OopClosure* non_heap_obj_cl, - OopsInHeapRegionClosure* metadata_obj_cl, G1ParScanThreadState* pss): _g1h(g1h), _copy_non_heap_obj_cl(non_heap_obj_cl), - _copy_metadata_obj_cl(metadata_obj_cl), _par_scan_state(pss) {} @@ -5383,7 +5380,7 @@ _par_scan_state->push_on_queue(p); } else { assert(!Metaspace::contains((const void*)p), - err_msg("Otherwise need to call _copy_metadata_obj_cl->do_oop(p) " + err_msg("Unexpectedly found a pointer from metadata: " PTR_FORMAT, p)); _copy_non_heap_obj_cl->do_oop(p); } @@ -5478,22 +5475,18 @@ pss.set_evac_failure_closure(&evac_failure_cl); G1ParScanExtRootClosure only_copy_non_heap_cl(_g1h, &pss, NULL); - G1ParScanMetadataClosure only_copy_metadata_cl(_g1h, &pss, NULL); G1ParScanAndMarkExtRootClosure copy_mark_non_heap_cl(_g1h, &pss, NULL); - G1ParScanAndMarkMetadataClosure copy_mark_metadata_cl(_g1h, &pss, NULL); OopClosure* copy_non_heap_cl = &only_copy_non_heap_cl; - OopsInHeapRegionClosure* copy_metadata_cl = &only_copy_metadata_cl; if (_g1h->g1_policy()->during_initial_mark_pause()) { // We also need to mark copied objects. copy_non_heap_cl = ©_mark_non_heap_cl; - copy_metadata_cl = ©_mark_metadata_cl; } // Keep alive closure. - G1CopyingKeepAliveClosure keep_alive(_g1h, copy_non_heap_cl, copy_metadata_cl, &pss); + G1CopyingKeepAliveClosure keep_alive(_g1h, copy_non_heap_cl, &pss); // Complete GC closure G1ParEvacuateFollowersClosure drain_queue(_g1h, &pss, _task_queues, _terminator); @@ -5588,18 +5581,14 @@ G1ParScanExtRootClosure only_copy_non_heap_cl(_g1h, &pss, NULL); - G1ParScanMetadataClosure only_copy_metadata_cl(_g1h, &pss, NULL); G1ParScanAndMarkExtRootClosure copy_mark_non_heap_cl(_g1h, &pss, NULL); - G1ParScanAndMarkMetadataClosure copy_mark_metadata_cl(_g1h, &pss, NULL); OopClosure* copy_non_heap_cl = &only_copy_non_heap_cl; - OopsInHeapRegionClosure* copy_metadata_cl = &only_copy_metadata_cl; if (_g1h->g1_policy()->during_initial_mark_pause()) { // We also need to mark copied objects. copy_non_heap_cl = ©_mark_non_heap_cl; - copy_metadata_cl = ©_mark_metadata_cl; } // Is alive closure @@ -5607,7 +5596,7 @@ // Copying keep alive closure. Applied to referent objects that need // to be copied. - G1CopyingKeepAliveClosure keep_alive(_g1h, copy_non_heap_cl, copy_metadata_cl, &pss); + G1CopyingKeepAliveClosure keep_alive(_g1h, copy_non_heap_cl, &pss); ReferenceProcessor* rp = _g1h->ref_processor_cm(); @@ -5713,22 +5702,18 @@ assert(pss.refs()->is_empty(), "pre-condition"); G1ParScanExtRootClosure only_copy_non_heap_cl(this, &pss, NULL); - G1ParScanMetadataClosure only_copy_metadata_cl(this, &pss, NULL); G1ParScanAndMarkExtRootClosure copy_mark_non_heap_cl(this, &pss, NULL); - G1ParScanAndMarkMetadataClosure copy_mark_metadata_cl(this, &pss, NULL); OopClosure* copy_non_heap_cl = &only_copy_non_heap_cl; - OopsInHeapRegionClosure* copy_metadata_cl = &only_copy_metadata_cl; if (_g1h->g1_policy()->during_initial_mark_pause()) { // We also need to mark copied objects. copy_non_heap_cl = ©_mark_non_heap_cl; - copy_metadata_cl = ©_mark_metadata_cl; } // Keep alive closure. - G1CopyingKeepAliveClosure keep_alive(this, copy_non_heap_cl, copy_metadata_cl, &pss); + G1CopyingKeepAliveClosure keep_alive(this, copy_non_heap_cl, &pss); // Serial Complete GC closure G1STWDrainQueueClosure drain_queue(this, &pss); @@ -5743,7 +5728,8 @@ &keep_alive, &drain_queue, NULL, - _gc_timer_stw); + _gc_timer_stw, + _gc_tracer_stw->gc_id()); } else { // Parallel reference processing assert(rp->num_q() == no_of_gc_workers, "sanity"); @@ -5754,7 +5740,8 @@ &keep_alive, &drain_queue, &par_task_executor, - _gc_timer_stw); + _gc_timer_stw, + _gc_tracer_stw->gc_id()); } _gc_tracer_stw->report_gc_reference_stats(stats); @@ -6993,7 +6980,7 @@ return; } - if (ScavengeRootsInCode && nm->detect_scavenge_root_oops()) { + if (ScavengeRootsInCode) { _g1h->register_nmethod(nm); } } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,6 +28,7 @@ #include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1Log.hpp" #include "gc_implementation/g1/g1StringDedup.hpp" +#include "runtime/atomic.inline.hpp" // Helper class for avoiding interleaved logging class LineBuffer: public StackObj { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1HotCardCache.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1HotCardCache.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1HotCardCache.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,7 +28,7 @@ #include "gc_implementation/g1/g1HotCardCache.hpp" #include "gc_implementation/g1/g1RemSet.hpp" #include "gc_implementation/g1/heapRegion.hpp" -#include "runtime/atomic.hpp" +#include "runtime/atomic.inline.hpp" G1HotCardCache::G1HotCardCache(G1CollectedHeap *g1h): _g1h(g1h), _hot_cache(NULL), _use_cache(false), _card_counts(g1h) {} diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -44,6 +44,7 @@ #include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/fprofiler.hpp" #include "runtime/synchronizer.hpp" @@ -123,7 +124,7 @@ void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading, bool clear_all_softrefs) { // Recursively traverse all live objects and mark them - GCTraceTime tm("phase 1", G1Log::fine() && Verbose, true, gc_timer()); + GCTraceTime tm("phase 1", G1Log::fine() && Verbose, true, gc_timer(), gc_tracer()->gc_id()); GenMarkSweep::trace(" 1"); SharedHeap* sh = SharedHeap::heap(); @@ -146,7 +147,8 @@ &GenMarkSweep::keep_alive, &GenMarkSweep::follow_stack_closure, NULL, - gc_timer()); + gc_timer(), + gc_tracer()->gc_id()); gc_tracer()->report_gc_reference_stats(stats); @@ -260,7 +262,7 @@ G1CollectedHeap* g1h = G1CollectedHeap::heap(); - GCTraceTime tm("phase 2", G1Log::fine() && Verbose, true, gc_timer()); + GCTraceTime tm("phase 2", G1Log::fine() && Verbose, true, gc_timer(), gc_tracer()->gc_id()); GenMarkSweep::trace("2"); // find the first region @@ -297,7 +299,7 @@ G1CollectedHeap* g1h = G1CollectedHeap::heap(); // Adjust the pointers to reflect the new locations - GCTraceTime tm("phase 3", G1Log::fine() && Verbose, true, gc_timer()); + GCTraceTime tm("phase 3", G1Log::fine() && Verbose, true, gc_timer(), gc_tracer()->gc_id()); GenMarkSweep::trace("3"); SharedHeap* sh = SharedHeap::heap(); @@ -358,7 +360,7 @@ // to use a higher index (saved from phase2) when verifying perm_gen. G1CollectedHeap* g1h = G1CollectedHeap::heap(); - GCTraceTime tm("phase 4", G1Log::fine() && Verbose, true, gc_timer()); + GCTraceTime tm("phase 4", G1Log::fine() && Verbose, true, gc_timer(), gc_tracer()->gc_id()); GenMarkSweep::trace("4"); G1SpaceCompactClosure blk; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #include "gc_implementation/g1/heapRegion.hpp" #include "gc_implementation/g1/satbQueue.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/orderAccess.inline.hpp" #include "runtime/thread.inline.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -31,6 +31,7 @@ #include "gc_implementation/g1/g1StringDedupStat.hpp" #include "gc_implementation/g1/g1StringDedupTable.hpp" #include "gc_implementation/g1/g1StringDedupThread.hpp" +#include "runtime/atomic.inline.hpp" bool G1StringDedup::_enabled = false; @@ -211,3 +212,16 @@ G1StringDedupTable::finish_rehash(_rehashed_table); } } + +// Atomically claims the next available queue for exclusive access by +// the current thread. Returns the queue number of the claimed queue. +size_t G1StringDedupUnlinkOrOopsDoClosure::claim_queue() { + return (size_t)Atomic::add_ptr(1, &_next_queue) - 1; +} + +// Atomically claims the next available table partition for exclusive +// access by the current thread. Returns the table bucket number where +// the claimed partition starts. +size_t G1StringDedupUnlinkOrOopsDoClosure::claim_table_partition(size_t partition_size) { + return (size_t)Atomic::add_ptr(partition_size, &_next_bucket) - partition_size; +} diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -84,6 +84,7 @@ #include "memory/allocation.hpp" #include "oops/oop.hpp" +#include "runtime/atomic.hpp" class OopClosure; class BoolObjectClosure; @@ -174,16 +175,12 @@ // Atomically claims the next available queue for exclusive access by // the current thread. Returns the queue number of the claimed queue. - size_t claim_queue() { - return (size_t)Atomic::add_ptr(1, &_next_queue) - 1; - } + size_t claim_queue(); // Atomically claims the next available table partition for exclusive // access by the current thread. Returns the table bucket number where // the claimed partition starts. - size_t claim_table_partition(size_t partition_size) { - return (size_t)Atomic::add_ptr(partition_size, &_next_bucket) - partition_size; - } + size_t claim_table_partition(size_t partition_size); // Applies and returns the result from the is_alive closure, or // returns true if no such closure was provided. diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #include "classfile/javaClasses.hpp" #include "gc_implementation/g1/g1StringDedupQueue.hpp" #include "memory/gcLocker.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/stack.inline.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/g1StringDedupThread.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupThread.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupThread.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,6 +28,7 @@ #include "gc_implementation/g1/g1StringDedupTable.hpp" #include "gc_implementation/g1/g1StringDedupThread.hpp" #include "gc_implementation/g1/g1StringDedupQueue.hpp" +#include "runtime/atomic.inline.hpp" G1StringDedupThread* G1StringDedupThread::_thread = NULL; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -34,6 +34,7 @@ #include "memory/iterator.hpp" #include "memory/space.inline.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/orderAccess.inline.hpp" PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC @@ -48,7 +49,7 @@ HeapRegion* hr, ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, FilterKind fk) : - ContiguousSpaceDCTOC(hr, cl, precision, NULL), + DirtyCardToOopClosure(hr, cl, precision, NULL), _hr(hr), _fk(fk), _g1(g1) { } FilterOutOfRegionClosure::FilterOutOfRegionClosure(HeapRegion* r, @@ -77,19 +78,18 @@ return cur; } -void HeapRegionDCTOC::walk_mem_region_with_cl(MemRegion mr, - HeapWord* bottom, - HeapWord* top, - ExtendedOopClosure* cl) { +void HeapRegionDCTOC::walk_mem_region(MemRegion mr, + HeapWord* bottom, + HeapWord* top) { G1CollectedHeap* g1h = _g1; int oop_size; ExtendedOopClosure* cl2 = NULL; - FilterIntoCSClosure intoCSFilt(this, g1h, cl); - FilterOutOfRegionClosure outOfRegionFilt(_hr, cl); + FilterIntoCSClosure intoCSFilt(this, g1h, _cl); + FilterOutOfRegionClosure outOfRegionFilt(_hr, _cl); switch (_fk) { - case NoFilterKind: cl2 = cl; break; + case NoFilterKind: cl2 = _cl; break; case IntoCSFilterKind: cl2 = &intoCSFilt; break; case OutOfRegionFilterKind: cl2 = &outOfRegionFilt; break; default: ShouldNotReachHere(); @@ -111,17 +111,17 @@ // We replicate the loop below for several kinds of possible filters. switch (_fk) { case NoFilterKind: - bottom = walk_mem_region_loop(cl, g1h, _hr, bottom, top); + bottom = walk_mem_region_loop(_cl, g1h, _hr, bottom, top); break; case IntoCSFilterKind: { - FilterIntoCSClosure filt(this, g1h, cl); + FilterIntoCSClosure filt(this, g1h, _cl); bottom = walk_mem_region_loop(&filt, g1h, _hr, bottom, top); break; } case OutOfRegionFilterKind: { - FilterOutOfRegionClosure filt(_hr, cl); + FilterOutOfRegionClosure filt(_hr, _cl); bottom = walk_mem_region_loop(&filt, g1h, _hr, bottom, top); break; } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -25,7 +25,7 @@ #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_HPP #define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_HPP -#include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" +#include "gc_implementation/g1/g1BlockOffsetTable.hpp" #include "gc_implementation/g1/g1_specialized_oop_closures.hpp" #include "gc_implementation/g1/survRateGroup.hpp" #include "gc_implementation/shared/ageTable.hpp" @@ -71,7 +71,7 @@ // in the concurrent marker used by G1 to filter remembered // sets. -class HeapRegionDCTOC : public ContiguousSpaceDCTOC { +class HeapRegionDCTOC : public DirtyCardToOopClosure { public: // Specification of possible DirtyCardToOopClosure filtering. enum FilterKind { @@ -85,39 +85,13 @@ FilterKind _fk; G1CollectedHeap* _g1; - void walk_mem_region_with_cl(MemRegion mr, - HeapWord* bottom, HeapWord* top, - ExtendedOopClosure* cl); - - // We don't specialize this for FilteringClosure; filtering is handled by - // the "FilterKind" mechanism. But we provide this to avoid a compiler - // warning. - void walk_mem_region_with_cl(MemRegion mr, - HeapWord* bottom, HeapWord* top, - FilteringClosure* cl) { - HeapRegionDCTOC::walk_mem_region_with_cl(mr, bottom, top, - (ExtendedOopClosure*)cl); - } - - // Get the actual top of the area on which the closure will - // operate, given where the top is assumed to be (the end of the - // memory region passed to do_MemRegion) and where the object - // at the top is assumed to start. For example, an object may - // start at the top but actually extend past the assumed top, - // in which case the top becomes the end of the object. - HeapWord* get_actual_top(HeapWord* top, HeapWord* top_obj) { - return ContiguousSpaceDCTOC::get_actual_top(top, top_obj); - } - // Walk the given memory region from bottom to (actual) top // looking for objects and applying the oop closure (_cl) to // them. The base implementation of this treats the area as // blocks, where a block may or may not be an object. Sub- // classes should override this to provide more accurate // or possibly more efficient walking. - void walk_mem_region(MemRegion mr, HeapWord* bottom, HeapWord* top) { - Filtering_DCTOC::walk_mem_region(mr, bottom, top); - } + void walk_mem_region(MemRegion mr, HeapWord* bottom, HeapWord* top); public: HeapRegionDCTOC(G1CollectedHeap* g1, diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -25,6 +25,8 @@ #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_INLINE_HPP #define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_INLINE_HPP +#include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" + inline HeapWord* G1OffsetTableContigSpace::allocate(size_t size) { HeapWord* res = ContiguousSpace::allocate(size); if (res != NULL) { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -32,6 +32,7 @@ #include "memory/padded.inline.hpp" #include "memory/space.inline.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "utilities/bitMap.inline.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/growableArray.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -29,6 +29,7 @@ #include "memory/allocation.inline.hpp" #include "memory/cardTableModRefBS.hpp" #include "memory/space.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #define SPARSE_PRT_VERBOSE 0 diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -226,7 +226,7 @@ void VM_CGC_Operation::doit() { gclog_or_tty->date_stamp(G1Log::fine() && PrintGCDateStamps); TraceCPUTime tcpu(G1Log::finer(), true, gclog_or_tty); - GCTraceTime t(_printGCMessage, G1Log::fine(), true, G1CollectedHeap::heap()->gc_timer_cm()); + GCTraceTime t(_printGCMessage, G1Log::fine(), true, G1CollectedHeap::heap()->gc_timer_cm(), G1CollectedHeap::heap()->concurrent_mark()->concurrent_gc_id()); SharedHeap* sh = SharedHeap::heap(); // This could go away if CollectedHeap gave access to _gc_is_active... if (sh != NULL) { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -47,6 +47,7 @@ #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.pcgc.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/handles.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" @@ -955,7 +956,7 @@ size_policy->minor_collection_begin(); } - GCTraceTime t1(GCCauseString("GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, NULL); + GCTraceTime t1(GCCauseString("GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, NULL, gc_tracer.gc_id()); // Capture heap used before collection (for printing). size_t gch_prev_used = gch->used(); @@ -1013,14 +1014,14 @@ ParNewRefProcTaskExecutor task_executor(*this, thread_state_set); stats = rp->process_discovered_references(&is_alive, &keep_alive, &evacuate_followers, &task_executor, - _gc_timer); + _gc_timer, gc_tracer.gc_id()); } else { thread_state_set.flush(); gch->set_par_threads(0); // 0 ==> non-parallel. gch->save_marks(); stats = rp->process_discovered_references(&is_alive, &keep_alive, &evacuate_followers, NULL, - _gc_timer); + _gc_timer, gc_tracer.gc_id()); } gc_tracer.report_gc_reference_stats(stats); if (!promotion_failed()) { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #include "gc_implementation/parallelScavenge/parMarkBitMap.hpp" #include "gc_implementation/parallelScavenge/psParallelCompact.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/os.hpp" #include "utilities/bitMap.inline.hpp" #include "services/memTracker.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -53,7 +53,7 @@ ResourceMark rm; NOT_PRODUCT(GCTraceTime tm("ThreadRootsMarkingTask", - PrintGCDetails && TraceParallelOldGCTasks, true, NULL)); + PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); @@ -82,7 +82,7 @@ assert(Universe::heap()->is_gc_active(), "called outside gc"); NOT_PRODUCT(GCTraceTime tm("MarkFromRootsTask", - PrintGCDetails && TraceParallelOldGCTasks, true, NULL)); + PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); @@ -153,7 +153,7 @@ assert(Universe::heap()->is_gc_active(), "called outside gc"); NOT_PRODUCT(GCTraceTime tm("RefProcTask", - PrintGCDetails && TraceParallelOldGCTasks, true, NULL)); + PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); @@ -209,7 +209,7 @@ assert(Universe::heap()->is_gc_active(), "called outside gc"); NOT_PRODUCT(GCTraceTime tm("StealMarkingTask", - PrintGCDetails && TraceParallelOldGCTasks, true, NULL)); + PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); @@ -242,7 +242,7 @@ assert(Universe::heap()->is_gc_active(), "called outside gc"); NOT_PRODUCT(GCTraceTime tm("StealRegionCompactionTask", - PrintGCDetails && TraceParallelOldGCTasks, true, NULL)); + PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); @@ -309,7 +309,7 @@ void UpdateDensePrefixTask::do_it(GCTaskManager* manager, uint which) { NOT_PRODUCT(GCTraceTime tm("UpdateDensePrefixTask", - PrintGCDetails && TraceParallelOldGCTasks, true, NULL)); + PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); @@ -324,7 +324,7 @@ assert(Universe::heap()->is_gc_active(), "called outside gc"); NOT_PRODUCT(GCTraceTime tm("DrainStacksCompactionTask", - PrintGCDetails && TraceParallelOldGCTasks, true, NULL)); + PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -34,6 +34,7 @@ #include "oops/objArrayKlass.inline.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.pcgc.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "utilities/stack.inline.hpp" PSOldGen* ParCompactionManager::_old_gen = NULL; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -170,7 +170,7 @@ gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - GCTraceTime t1(GCCauseString("Full GC", gc_cause), PrintGC, !PrintGCDetails, NULL); + GCTraceTime t1(GCCauseString("Full GC", gc_cause), PrintGC, !PrintGCDetails, NULL, _gc_tracer->gc_id()); TraceCollectorStats tcs(counters()); TraceMemoryManagerStats tms(true /* Full GC */,gc_cause); @@ -521,7 +521,7 @@ void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) { // Recursively traverse all live objects and mark them - GCTraceTime tm("phase 1", PrintGCDetails && Verbose, true, _gc_timer); + GCTraceTime tm("phase 1", PrintGCDetails && Verbose, true, _gc_timer, _gc_tracer->gc_id()); trace(" 1"); ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); @@ -556,7 +556,7 @@ ref_processor()->setup_policy(clear_all_softrefs); const ReferenceProcessorStats& stats = ref_processor()->process_discovered_references( - is_alive_closure(), mark_and_push_closure(), follow_stack_closure(), NULL, _gc_timer); + is_alive_closure(), mark_and_push_closure(), follow_stack_closure(), NULL, _gc_timer, _gc_tracer->gc_id()); gc_tracer()->report_gc_reference_stats(stats); } @@ -582,7 +582,7 @@ void PSMarkSweep::mark_sweep_phase2() { - GCTraceTime tm("phase 2", PrintGCDetails && Verbose, true, _gc_timer); + GCTraceTime tm("phase 2", PrintGCDetails && Verbose, true, _gc_timer, _gc_tracer->gc_id()); trace("2"); // Now all live objects are marked, compute the new object addresses. @@ -612,7 +612,7 @@ void PSMarkSweep::mark_sweep_phase3() { // Adjust the pointers to reflect the new locations - GCTraceTime tm("phase 3", PrintGCDetails && Verbose, true, _gc_timer); + GCTraceTime tm("phase 3", PrintGCDetails && Verbose, true, _gc_timer, _gc_tracer->gc_id()); trace("3"); ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); @@ -655,7 +655,7 @@ void PSMarkSweep::mark_sweep_phase4() { EventMark m("4 compact heap"); - GCTraceTime tm("phase 4", PrintGCDetails && Verbose, true, _gc_timer); + GCTraceTime tm("phase 4", PrintGCDetails && Verbose, true, _gc_timer, _gc_tracer->gc_id()); trace("4"); // All pointers are now adjusted, move objects accordingly diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -51,6 +51,7 @@ #include "oops/methodData.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.pcgc.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/fprofiler.hpp" #include "runtime/safepoint.hpp" #include "runtime/vmThread.hpp" @@ -979,7 +980,7 @@ // at each young gen gc. Do the update unconditionally (even though a // promotion failure does not swap spaces) because an unknown number of minor // collections will have swapped the spaces an unknown number of times. - GCTraceTime tm("pre compact", print_phases(), true, &_gc_timer); + GCTraceTime tm("pre compact", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); ParallelScavengeHeap* heap = gc_heap(); _space_info[from_space_id].set_space(heap->young_gen()->from_space()); _space_info[to_space_id].set_space(heap->young_gen()->to_space()); @@ -1022,7 +1023,7 @@ void PSParallelCompact::post_compact() { - GCTraceTime tm("post compact", print_phases(), true, &_gc_timer); + GCTraceTime tm("post compact", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); for (unsigned int id = old_space_id; id < last_space_id; ++id) { // Clear the marking bitmap, summary data and split info. @@ -1848,7 +1849,7 @@ void PSParallelCompact::summary_phase(ParCompactionManager* cm, bool maximum_compaction) { - GCTraceTime tm("summary phase", print_phases(), true, &_gc_timer); + GCTraceTime tm("summary phase", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); // trace("2"); #ifdef ASSERT @@ -2057,7 +2058,7 @@ gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - GCTraceTime t1(GCCauseString("Full GC", gc_cause), PrintGC, !PrintGCDetails, NULL); + GCTraceTime t1(GCCauseString("Full GC", gc_cause), PrintGC, !PrintGCDetails, NULL, _gc_tracer.gc_id()); TraceCollectorStats tcs(counters()); TraceMemoryManagerStats tms(true /* Full GC */,gc_cause); @@ -2359,7 +2360,7 @@ bool maximum_heap_compaction, ParallelOldTracer *gc_tracer) { // Recursively traverse all live objects and mark them - GCTraceTime tm("marking phase", print_phases(), true, &_gc_timer); + GCTraceTime tm("marking phase", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); ParallelScavengeHeap* heap = gc_heap(); uint parallel_gc_threads = heap->gc_task_manager()->workers(); @@ -2374,7 +2375,7 @@ ClassLoaderDataGraph::clear_claimed_marks(); { - GCTraceTime tm_m("par mark", print_phases(), true, &_gc_timer); + GCTraceTime tm_m("par mark", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); ParallelScavengeHeap::ParStrongRootsScope psrs; @@ -2403,24 +2404,24 @@ // Process reference objects found during marking { - GCTraceTime tm_r("reference processing", print_phases(), true, &_gc_timer); + GCTraceTime tm_r("reference processing", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); ReferenceProcessorStats stats; if (ref_processor()->processing_is_mt()) { RefProcTaskExecutor task_executor; stats = ref_processor()->process_discovered_references( is_alive_closure(), &mark_and_push_closure, &follow_stack_closure, - &task_executor, &_gc_timer); + &task_executor, &_gc_timer, _gc_tracer.gc_id()); } else { stats = ref_processor()->process_discovered_references( is_alive_closure(), &mark_and_push_closure, &follow_stack_closure, NULL, - &_gc_timer); + &_gc_timer, _gc_tracer.gc_id()); } gc_tracer->report_gc_reference_stats(stats); } - GCTraceTime tm_c("class unloading", print_phases(), true, &_gc_timer); + GCTraceTime tm_c("class unloading", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); // This is the point where the entire marking should have completed. assert(cm->marking_stacks_empty(), "Marking should have completed"); @@ -2459,7 +2460,7 @@ void PSParallelCompact::adjust_roots() { // Adjust the pointers to reflect the new locations - GCTraceTime tm("adjust roots", print_phases(), true, &_gc_timer); + GCTraceTime tm("adjust roots", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); // Need new claim bits when tracing through and adjusting pointers. ClassLoaderDataGraph::clear_claimed_marks(); @@ -2495,7 +2496,7 @@ void PSParallelCompact::enqueue_region_draining_tasks(GCTaskQueue* q, uint parallel_gc_threads) { - GCTraceTime tm("drain task setup", print_phases(), true, &_gc_timer); + GCTraceTime tm("drain task setup", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); // Find the threads that are active unsigned int which = 0; @@ -2569,7 +2570,7 @@ void PSParallelCompact::enqueue_dense_prefix_tasks(GCTaskQueue* q, uint parallel_gc_threads) { - GCTraceTime tm("dense prefix task setup", print_phases(), true, &_gc_timer); + GCTraceTime tm("dense prefix task setup", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); ParallelCompactData& sd = PSParallelCompact::summary_data(); @@ -2651,7 +2652,7 @@ GCTaskQueue* q, ParallelTaskTerminator* terminator_ptr, uint parallel_gc_threads) { - GCTraceTime tm("steal task setup", print_phases(), true, &_gc_timer); + GCTraceTime tm("steal task setup", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); // Once a thread has drained it's stack, it should try to steal regions from // other threads. @@ -2699,7 +2700,7 @@ void PSParallelCompact::compact() { // trace("5"); - GCTraceTime tm("compaction phase", print_phases(), true, &_gc_timer); + GCTraceTime tm("compaction phase", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); @@ -2716,7 +2717,7 @@ enqueue_region_stealing_tasks(q, &terminator, active_gc_threads); { - GCTraceTime tm_pc("par compact", print_phases(), true, &_gc_timer); + GCTraceTime tm_pc("par compact", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); gc_task_manager()->execute_and_wait(q); @@ -2730,7 +2731,7 @@ { // Update the deferred objects, if any. Any compaction manager can be used. - GCTraceTime tm_du("deferred updates", print_phases(), true, &_gc_timer); + GCTraceTime tm_du("deferred updates", print_phases(), true, &_gc_timer, _gc_tracer.gc_id()); ParCompactionManager* cm = ParCompactionManager::manager_array(0); for (unsigned int id = old_space_id; id < last_space_id; ++id) { update_deferred_objects(cm, SpaceId(id)); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -1004,6 +1004,10 @@ static bool _dwl_initialized; #endif // #ifdef ASSERT + + public: + static ParallelOldTracer* gc_tracer() { return &_gc_tracer; } + private: static void initialize_space_info(); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -332,7 +332,7 @@ gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - GCTraceTime t1(GCCauseString("GC", gc_cause), PrintGC, !PrintGCDetails, NULL); + GCTraceTime t1(GCCauseString("GC", gc_cause), PrintGC, !PrintGCDetails, NULL, _gc_tracer.gc_id()); TraceCollectorStats tcs(counters()); TraceMemoryManagerStats tms(false /* not full GC */,gc_cause); @@ -398,7 +398,7 @@ // We'll use the promotion manager again later. PSPromotionManager* promotion_manager = PSPromotionManager::vm_thread_promotion_manager(); { - GCTraceTime tm("Scavenge", false, false, &_gc_timer); + GCTraceTime tm("Scavenge", false, false, &_gc_timer, _gc_tracer.gc_id()); ParallelScavengeHeap::ParStrongRootsScope psrs; GCTaskQueue* q = GCTaskQueue::create(); @@ -440,7 +440,7 @@ // Process reference objects discovered during scavenge { - GCTraceTime tm("References", false, false, &_gc_timer); + GCTraceTime tm("References", false, false, &_gc_timer, _gc_tracer.gc_id()); reference_processor()->setup_policy(false); // not always_clear reference_processor()->set_active_mt_degree(active_workers); @@ -451,10 +451,10 @@ PSRefProcTaskExecutor task_executor; stats = reference_processor()->process_discovered_references( &_is_alive_closure, &keep_alive, &evac_followers, &task_executor, - &_gc_timer); + &_gc_timer, _gc_tracer.gc_id()); } else { stats = reference_processor()->process_discovered_references( - &_is_alive_closure, &keep_alive, &evac_followers, NULL, &_gc_timer); + &_is_alive_closure, &keep_alive, &evac_followers, NULL, &_gc_timer, _gc_tracer.gc_id()); } _gc_tracer.report_gc_reference_stats(stats); @@ -469,7 +469,7 @@ } { - GCTraceTime tm("StringTable", false, false, &_gc_timer); + GCTraceTime tm("StringTable", false, false, &_gc_timer, _gc_tracer.gc_id()); // Unlink any dead interned Strings and process the remaining live ones. PSScavengeRootsClosure root_closure(promotion_manager); StringTable::unlink_or_oops_do(&_is_alive_closure, &root_closure); @@ -641,7 +641,7 @@ NOT_PRODUCT(reference_processor()->verify_no_references_recorded()); { - GCTraceTime tm("Prune Scavenge Root Methods", false, false, &_gc_timer); + GCTraceTime tm("Prune Scavenge Root Methods", false, false, &_gc_timer, _gc_tracer.gc_id()); CodeCache::prune_scavenge_root_nmethods(); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/ageTable.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/ageTable.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/ageTable.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,6 +28,7 @@ #include "memory/collectorPolicy.hpp" #include "memory/resourceArea.hpp" #include "memory/sharedHeap.hpp" +#include "runtime/atomic.inline.hpp" #include "utilities/copy.hpp" /* Copyright (c) 1992-2009 Oracle and/or its affiliates, and Stanford University. diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/gcId.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/gc_implementation/shared/gcId.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,42 @@ +/* + * 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. + * + */ + +#include "precompiled.hpp" +#include "gc_implementation/shared/gcId.hpp" +#include "runtime/safepoint.hpp" + +uint GCId::_next_id = 0; + +const GCId GCId::create() { + return GCId(_next_id++); +} +const GCId GCId::peek() { + return GCId(_next_id); +} +const GCId GCId::undefined() { + return GCId(UNDEFINED); +} +bool GCId::is_undefined() const { + return _id == UNDEFINED; +} diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/gcId.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/gc_implementation/shared/gcId.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,51 @@ +/* + * 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_GC_IMPLEMENTATION_SHARED_GCID_HPP +#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCID_HPP + +#include "memory/allocation.hpp" + +class GCId VALUE_OBJ_CLASS_SPEC { + private: + uint _id; + GCId(uint id) : _id(id) {} + GCId() { } // Unused + + static uint _next_id; + static const uint UNDEFINED = (uint)-1; + + public: + uint id() const { + assert(_id != UNDEFINED, "Using undefined GC ID"); + return _id; + } + bool is_undefined() const; + + static const GCId create(); + static const GCId peek(); + static const GCId undefined(); +}; + +#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCID_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -25,6 +25,7 @@ #include "precompiled.hpp" #include "gc_implementation/shared/copyFailedInfo.hpp" #include "gc_implementation/shared/gcHeapSummary.hpp" +#include "gc_implementation/shared/gcId.hpp" #include "gc_implementation/shared/gcTimer.hpp" #include "gc_implementation/shared/gcTrace.hpp" #include "gc_implementation/shared/objectCountEventSender.hpp" @@ -38,19 +39,14 @@ #include "gc_implementation/g1/evacuationInfo.hpp" #endif -#define assert_unset_gc_id() assert(_shared_gc_info.id() == SharedGCInfo::UNSET_GCID, "GC already started?") -#define assert_set_gc_id() assert(_shared_gc_info.id() != SharedGCInfo::UNSET_GCID, "GC not started?") - -static GCId GCTracer_next_gc_id = 0; -static GCId create_new_gc_id() { - return GCTracer_next_gc_id++; -} +#define assert_unset_gc_id() assert(_shared_gc_info.gc_id().is_undefined(), "GC already started?") +#define assert_set_gc_id() assert(!_shared_gc_info.gc_id().is_undefined(), "GC not started?") void GCTracer::report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp) { assert_unset_gc_id(); - GCId gc_id = create_new_gc_id(); - _shared_gc_info.set_id(gc_id); + GCId gc_id = GCId::create(); + _shared_gc_info.set_gc_id(gc_id); _shared_gc_info.set_cause(cause); _shared_gc_info.set_start_timestamp(timestamp); } @@ -62,7 +58,7 @@ } bool GCTracer::has_reported_gc_start() const { - return _shared_gc_info.id() != SharedGCInfo::UNSET_GCID; + return !_shared_gc_info.gc_id().is_undefined(); } void GCTracer::report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions) { @@ -81,7 +77,7 @@ report_gc_end_impl(timestamp, time_partitions); - _shared_gc_info.set_id(SharedGCInfo::UNSET_GCID); + _shared_gc_info.set_gc_id(GCId::undefined()); } void GCTracer::report_gc_reference_stats(const ReferenceProcessorStats& rps) const { @@ -132,7 +128,7 @@ if (!cit.allocation_failed()) { HeapInspection hi(false, false, false, NULL); hi.populate_table(&cit, is_alive_cl); - ObjectCountEventSenderClosure event_sender(_shared_gc_info.id(), cit.size_of_instances_in_words(), Ticks::now()); + ObjectCountEventSenderClosure event_sender(_shared_gc_info.gc_id(), cit.size_of_instances_in_words(), Ticks::now()); cit.iterate(&event_sender); } } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp --- a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -27,6 +27,7 @@ #include "gc_interface/gcCause.hpp" #include "gc_interface/gcName.hpp" +#include "gc_implementation/shared/gcId.hpp" #include "gc_implementation/shared/gcWhen.hpp" #include "gc_implementation/shared/copyFailedInfo.hpp" #include "memory/allocation.hpp" @@ -38,7 +39,6 @@ #include "utilities/macros.hpp" #include "utilities/ticks.hpp" -typedef uint GCId; class EvacuationInfo; class GCHeapSummary; @@ -50,11 +50,8 @@ class BoolObjectClosure; class SharedGCInfo VALUE_OBJ_CLASS_SPEC { - public: - static const GCId UNSET_GCID = (GCId)-1; - private: - GCId _id; + GCId _gc_id; GCName _name; GCCause::Cause _cause; Ticks _start_timestamp; @@ -64,7 +61,7 @@ public: SharedGCInfo(GCName name) : - _id(UNSET_GCID), + _gc_id(GCId::undefined()), _name(name), _cause(GCCause::_last_gc_cause), _start_timestamp(), @@ -73,8 +70,8 @@ _longest_pause() { } - void set_id(GCId id) { _id = id; } - GCId id() const { return _id; } + void set_gc_id(GCId gc_id) { _gc_id = gc_id; } + const GCId& gc_id() const { return _gc_id; } void set_start_timestamp(const Ticks& timestamp) { _start_timestamp = timestamp; } const Ticks start_timestamp() const { return _start_timestamp; } @@ -131,10 +128,11 @@ void report_gc_reference_stats(const ReferenceProcessorStats& rp) const; void report_object_count_after_gc(BoolObjectClosure* object_filter) NOT_SERVICES_RETURN; bool has_reported_gc_start() const; + const GCId& gc_id() { return _shared_gc_info.gc_id(); } protected: GCTracer(GCName name) : _shared_gc_info(name) {} - virtual void report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp); + void report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp); virtual void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions); private: diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -43,7 +43,7 @@ void GCTracer::send_garbage_collection_event() const { EventGCGarbageCollection event(UNTIMED); if (event.should_commit()) { - event.set_gcId(_shared_gc_info.id()); + event.set_gcId(_shared_gc_info.gc_id().id()); event.set_name(_shared_gc_info.name()); event.set_cause((u2) _shared_gc_info.cause()); event.set_sumOfPauses(_shared_gc_info.sum_of_pauses()); @@ -57,7 +57,7 @@ void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const { EventGCReferenceStatistics e; if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_type((u1)type); e.set_count(count); e.commit(); @@ -68,7 +68,7 @@ const MetaspaceChunkFreeListSummary& summary) const { EventMetaspaceChunkFreeListSummary e; if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_when(when); e.set_metadataType(mdtype); @@ -91,7 +91,7 @@ void ParallelOldTracer::send_parallel_old_event() const { EventGCParallelOld e(UNTIMED); if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_densePrefix((TraceAddress)_parallel_old_gc_info.dense_prefix()); e.set_starttime(_shared_gc_info.start_timestamp()); e.set_endtime(_shared_gc_info.end_timestamp()); @@ -102,7 +102,7 @@ void YoungGCTracer::send_young_gc_event() const { EventGCYoungGarbageCollection e(UNTIMED); if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_tenuringThreshold(_tenuring_threshold); e.set_starttime(_shared_gc_info.start_timestamp()); e.set_endtime(_shared_gc_info.end_timestamp()); @@ -113,7 +113,7 @@ void OldGCTracer::send_old_gc_event() const { EventGCOldGarbageCollection e(UNTIMED); if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_starttime(_shared_gc_info.start_timestamp()); e.set_endtime(_shared_gc_info.end_timestamp()); e.commit(); @@ -132,7 +132,7 @@ void YoungGCTracer::send_promotion_failed_event(const PromotionFailedInfo& pf_info) const { EventPromotionFailed e; if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_data(to_trace_struct(pf_info)); e.set_thread(pf_info.thread()->thread_id()); e.commit(); @@ -143,7 +143,7 @@ void OldGCTracer::send_concurrent_mode_failure_event() { EventConcurrentModeFailure e; if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.commit(); } } @@ -152,7 +152,7 @@ void G1NewTracer::send_g1_young_gc_event() { EventGCG1GarbageCollection e(UNTIMED); if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_type(_g1_young_gc_info.type()); e.set_starttime(_shared_gc_info.start_timestamp()); e.set_endtime(_shared_gc_info.end_timestamp()); @@ -163,7 +163,7 @@ void G1NewTracer::send_evacuation_info_event(EvacuationInfo* info) { EventEvacuationInfo e; if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_cSetRegions(info->collectionset_regions()); e.set_cSetUsedBefore(info->collectionset_used_before()); e.set_cSetUsedAfter(info->collectionset_used_after()); @@ -179,7 +179,7 @@ void G1NewTracer::send_evacuation_failed_event(const EvacuationFailedInfo& ef_info) const { EventEvacuationFailed e; if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_data(to_trace_struct(ef_info)); e.commit(); } @@ -206,17 +206,17 @@ } class GCHeapSummaryEventSender : public GCHeapSummaryVisitor { - GCId _id; + GCId _gc_id; GCWhen::Type _when; public: - GCHeapSummaryEventSender(GCId id, GCWhen::Type when) : _id(id), _when(when) {} + GCHeapSummaryEventSender(GCId gc_id, GCWhen::Type when) : _gc_id(gc_id), _when(when) {} void visit(const GCHeapSummary* heap_summary) const { const VirtualSpaceSummary& heap_space = heap_summary->heap(); EventGCHeapSummary e; if (e.should_commit()) { - e.set_gcId(_id); + e.set_gcId(_gc_id.id()); e.set_when((u1)_when); e.set_heapSpace(to_trace_struct(heap_space)); e.set_heapUsed(heap_summary->used()); @@ -236,7 +236,7 @@ EventPSHeapSummary e; if (e.should_commit()) { - e.set_gcId(_id); + e.set_gcId(_gc_id.id()); e.set_when((u1)_when); e.set_oldSpace(to_trace_struct(ps_heap_summary->old())); @@ -251,7 +251,7 @@ }; void GCTracer::send_gc_heap_summary_event(GCWhen::Type when, const GCHeapSummary& heap_summary) const { - GCHeapSummaryEventSender visitor(_shared_gc_info.id(), when); + GCHeapSummaryEventSender visitor(_shared_gc_info.gc_id(), when); heap_summary.accept(&visitor); } @@ -268,7 +268,7 @@ void GCTracer::send_meta_space_summary_event(GCWhen::Type when, const MetaspaceSummary& meta_space_summary) const { EventMetaspaceSummary e; if (e.should_commit()) { - e.set_gcId(_shared_gc_info.id()); + e.set_gcId(_shared_gc_info.gc_id().id()); e.set_when((u1) when); e.set_gcThreshold(meta_space_summary.capacity_until_GC()); e.set_metaspace(to_trace_struct(meta_space_summary.meta_space())); @@ -287,7 +287,7 @@ void send_phase(PausePhase* pause) { T event(UNTIMED); if (event.should_commit()) { - event.set_gcId(_gc_id); + event.set_gcId(_gc_id.id()); event.set_name(pause->name()); event.set_starttime(pause->start()); event.set_endtime(pause->end()); @@ -311,7 +311,7 @@ }; void GCTracer::send_phase_events(TimePartitions* time_partitions) const { - PhaseSender phase_reporter(_shared_gc_info.id()); + PhaseSender phase_reporter(_shared_gc_info.gc_id()); TimePartitionPhasesIterator iter(time_partitions); while (iter.has_next()) { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "gc_implementation/shared/gcTimer.hpp" +#include "gc_implementation/shared/gcTrace.hpp" #include "gc_implementation/shared/gcTraceTime.hpp" #include "runtime/globals.hpp" #include "runtime/os.hpp" @@ -34,7 +35,7 @@ #include "utilities/ticks.inline.hpp" -GCTraceTime::GCTraceTime(const char* title, bool doit, bool print_cr, GCTimer* timer) : +GCTraceTime::GCTraceTime(const char* title, bool doit, bool print_cr, GCTimer* timer, GCId gc_id) : _title(title), _doit(doit), _print_cr(print_cr), _timer(timer), _start_counter() { if (_doit || _timer != NULL) { _start_counter.stamp(); @@ -52,6 +53,9 @@ gclog_or_tty->stamp(); gclog_or_tty->print(": "); } + if (PrintGCID) { + gclog_or_tty->print("#%u: ", gc_id.id()); + } gclog_or_tty->print("[%s", title); gclog_or_tty->flush(); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.hpp --- a/hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -25,6 +25,7 @@ #ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTRACETIME_HPP #define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTRACETIME_HPP +#include "gc_implementation/shared/gcTrace.hpp" #include "prims/jni_md.h" #include "utilities/ticks.hpp" @@ -38,7 +39,7 @@ Ticks _start_counter; public: - GCTraceTime(const char* title, bool doit, bool print_cr, GCTimer* timer); + GCTraceTime(const char* title, bool doit, bool print_cr, GCTimer* timer, GCId gc_id); ~GCTraceTime(); }; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,6 +28,7 @@ #include "gc_implementation/shared/spaceDecorator.hpp" #include "memory/sharedHeap.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/thread.inline.hpp" PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "runtime/atomic.inline.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS #include "gc_implementation/shared/mutableSpace.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -24,6 +24,7 @@ #include "precompiled.hpp" +#include "gc_implementation/shared/gcId.hpp" #include "gc_implementation/shared/objectCountEventSender.hpp" #include "memory/heapInspection.hpp" #include "trace/tracing.hpp" @@ -38,7 +39,7 @@ "Only call this method if the event is enabled"); EventObjectCountAfterGC event(UNTIMED); - event.set_gcId(gc_id); + event.set_gcId(gc_id.id()); event.set_class(entry->klass()); event.set_count(entry->count()); event.set_totalSize(entry->words() * BytesPerWord); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/gc_interface/collectedHeap.cpp --- a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -558,13 +558,13 @@ void CollectedHeap::pre_full_gc_dump(GCTimer* timer) { if (HeapDumpBeforeFullGC) { - GCTraceTime tt("Heap Dump (before full gc): ", PrintGCDetails, false, timer); + GCTraceTime tt("Heap Dump (before full gc): ", PrintGCDetails, false, timer, GCId::create()); // We are doing a "major" collection and a heap dump before // major collection has been requested. HeapDumper::dump_heap(); } if (PrintClassHistogramBeforeFullGC) { - GCTraceTime tt("Class Histogram (before full gc): ", PrintGCDetails, true, timer); + GCTraceTime tt("Class Histogram (before full gc): ", PrintGCDetails, true, timer, GCId::create()); VM_GC_HeapInspection inspector(gclog_or_tty, false /* ! full gc */); inspector.doit(); } @@ -572,11 +572,11 @@ void CollectedHeap::post_full_gc_dump(GCTimer* timer) { if (HeapDumpAfterFullGC) { - GCTraceTime tt("Heap Dump (after full gc): ", PrintGCDetails, false, timer); + GCTraceTime tt("Heap Dump (after full gc): ", PrintGCDetails, false, timer, GCId::create()); HeapDumper::dump_heap(); } if (PrintClassHistogramAfterFullGC) { - GCTraceTime tt("Class Histogram (after full gc): ", PrintGCDetails, true, timer); + GCTraceTime tt("Class Histogram (after full gc): ", PrintGCDetails, true, timer, GCId::create()); VM_GC_HeapInspection inspector(gclog_or_tty, false /* ! full gc */); inspector.doit(); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp --- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 @@ -37,6 +37,7 @@ #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/frame.inline.hpp" #include "runtime/handles.inline.hpp" @@ -2782,11 +2783,11 @@ if (TraceExceptions) { ttyLocker ttyl; ResourceMark rm; - tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), (void*)except_oop()); + tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), p2i(except_oop())); tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string()); tty->print_cr(" at bci %d, continuing at %d for thread " INTPTR_FORMAT, - istate->bcp() - (intptr_t)METHOD->code_base(), - continuation_bci, THREAD); + (int)(istate->bcp() - METHOD->code_base()), + (int)continuation_bci, p2i(THREAD)); } // for AbortVMOnException flag NOT_PRODUCT(Exceptions::debug_check_abort(except_oop)); @@ -2798,11 +2799,11 @@ if (TraceExceptions) { ttyLocker ttyl; ResourceMark rm; - tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), (void*)except_oop()); + tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), p2i(except_oop())); tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string()); tty->print_cr(" at bci %d, unwinding for thread " INTPTR_FORMAT, - istate->bcp() - (intptr_t)METHOD->code_base(), - THREAD); + (int)(istate->bcp() - METHOD->code_base()), + p2i(THREAD)); } // for AbortVMOnException flag NOT_PRODUCT(Exceptions::debug_check_abort(except_oop)); @@ -3401,7 +3402,7 @@ tty->print_cr("osr._osr_buf: " INTPTR_FORMAT, (uintptr_t) this->_result._osr._osr_buf); tty->print_cr("osr._osr_entry: " INTPTR_FORMAT, (uintptr_t) this->_result._osr._osr_entry); tty->print_cr("prev_link: " INTPTR_FORMAT, (uintptr_t) this->_prev_link); - tty->print_cr("native_mirror: " INTPTR_FORMAT, (void*) this->_oop_temp); + tty->print_cr("native_mirror: " INTPTR_FORMAT, (uintptr_t) this->_oop_temp); tty->print_cr("stack_base: " INTPTR_FORMAT, (uintptr_t) this->_stack_base); tty->print_cr("stack_limit: " INTPTR_FORMAT, (uintptr_t) this->_stack_limit); tty->print_cr("monitor_base: " INTPTR_FORMAT, (uintptr_t) this->_monitor_base); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/interpreter/bytecodeInterpreterProfiling.hpp --- a/hotspot/src/share/vm/interpreter/bytecodeInterpreterProfiling.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreterProfiling.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,6 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012, 2014 SAP AG. 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,11 +86,11 @@ " \t-> " PTR_FORMAT "(%d)", \ (int) THREAD->osthread()->thread_id(), \ BCI(), \ - MDX(), \ + p2i(MDX()), \ (MDX() == NULL \ ? 0 \ : istate->method()->method_data()->dp_to_di((address)MDX())), \ - mdx, \ + p2i(mdx), \ istate->method()->method_data()->dp_to_di((address)mdx) \ ); \ }; \ @@ -107,7 +107,7 @@ MethodData *md = istate->method()->method_data(); \ tty->cr(); \ tty->print("method data at mdx " PTR_FORMAT "(0) for", \ - md->data_layout_at(md->bci_to_di(0))); \ + p2i(md->data_layout_at(md->bci_to_di(0)))); \ istate->method()->print_short_name(tty); \ tty->cr(); \ if (md != NULL) { \ @@ -115,7 +115,7 @@ address mdx = (address) MDX(); \ if (mdx != NULL) { \ tty->print_cr("current mdx " PTR_FORMAT "(%d)", \ - mdx, \ + p2i(mdx), \ istate->method()->method_data()->dp_to_di(mdx)); \ } \ } else { \ diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/interpreter/bytecodes.cpp --- a/hotspot/src/share/vm/interpreter/bytecodes.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/interpreter/bytecodes.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -541,9 +541,6 @@ def(_shouldnotreachhere , "_shouldnotreachhere" , "b" , NULL , T_VOID , 0, false); - // platform specific JVM bytecodes - pd_initialize(); - // compare can_trap information for each bytecode with the // can_trap information for the corresponding base bytecode // (if a rewritten bytecode can trap, so must the base bytecode) diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/interpreter/bytecodes.hpp --- a/hotspot/src/share/vm/interpreter/bytecodes.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/interpreter/bytecodes.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -287,23 +287,6 @@ _shouldnotreachhere, // For debugging - // Platform specific JVM bytecodes -#ifdef TARGET_ARCH_x86 -# include "bytecodes_x86.hpp" -#endif -#ifdef TARGET_ARCH_sparc -# include "bytecodes_sparc.hpp" -#endif -#ifdef TARGET_ARCH_zero -# include "bytecodes_zero.hpp" -#endif -#ifdef TARGET_ARCH_arm -# include "bytecodes_arm.hpp" -#endif -#ifdef TARGET_ARCH_ppc -# include "bytecodes_ppc.hpp" -#endif - number_of_codes }; @@ -348,8 +331,6 @@ static void def(Code code, const char* name, const char* format, const char* wide_format, BasicType result_type, int depth, bool can_trap); static void def(Code code, const char* name, const char* format, const char* wide_format, BasicType result_type, int depth, bool can_trap, Code java_code); - static void pd_initialize(); // platform specific initialization - static Code pd_base_code_for(Code code); // platform specific base_code_for implementation // Verify that bcp points into method #ifdef ASSERT diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/interpreter/interpreterRuntime.cpp --- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -42,6 +42,7 @@ #include "oops/symbol.hpp" #include "prims/jvmtiExport.hpp" #include "prims/nativeLookup.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/compilationPolicy.hpp" #include "runtime/deoptimization.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/allocation.cpp --- a/hotspot/src/share/vm/memory/allocation.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/allocation.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -29,7 +29,7 @@ #include "memory/metaspaceShared.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" -#include "runtime/atomic.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/os.hpp" #include "runtime/task.hpp" #include "runtime/threadCritical.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/cardTableRS.cpp --- a/hotspot/src/share/vm/memory/cardTableRS.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/cardTableRS.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -29,6 +29,7 @@ #include "memory/generation.hpp" #include "memory/space.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/java.hpp" #include "runtime/os.hpp" #include "utilities/macros.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/defNewGeneration.cpp --- a/hotspot/src/share/vm/memory/defNewGeneration.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -41,6 +41,7 @@ #include "memory/space.inline.hpp" #include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/java.hpp" #include "runtime/prefetch.inline.hpp" #include "runtime/thread.inline.hpp" @@ -585,7 +586,7 @@ init_assuming_no_promotion_failure(); - GCTraceTime t1(GCCauseString("GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, NULL); + GCTraceTime t1(GCCauseString("GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, NULL, gc_tracer.gc_id()); // Capture heap used before collection (for printing). size_t gch_prev_used = gch->used(); @@ -641,7 +642,7 @@ rp->setup_policy(clear_all_soft_refs); const ReferenceProcessorStats& stats = rp->process_discovered_references(&is_alive, &keep_alive, &evacuate_followers, - NULL, _gc_timer); + NULL, _gc_timer, gc_tracer.gc_id()); gc_tracer.report_gc_reference_stats(stats); if (!_promotion_failed) { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/gcLocker.cpp --- a/hotspot/src/share/vm/memory/gcLocker.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/gcLocker.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #include "memory/gcLocker.inline.hpp" #include "memory/resourceArea.hpp" #include "memory/sharedHeap.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/thread.inline.hpp" volatile jint GC_locker::_jni_lock_count = 0; @@ -59,6 +60,17 @@ assert(_jni_lock_count == count, "must be equal"); } } + +// In debug mode track the locking state at all times +void GC_locker::increment_debug_jni_lock_count() { + assert(_debug_jni_lock_count >= 0, "bad value"); + Atomic::inc(&_debug_jni_lock_count); +} + +void GC_locker::decrement_debug_jni_lock_count() { + assert(_debug_jni_lock_count > 0, "bad value"); + Atomic::dec(&_debug_jni_lock_count); +} #endif bool GC_locker::check_active_before_gc() { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/gcLocker.hpp --- a/hotspot/src/share/vm/memory/gcLocker.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/gcLocker.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -94,18 +94,8 @@ } // In debug mode track the locking state at all times - static void increment_debug_jni_lock_count() { -#ifdef ASSERT - assert(_debug_jni_lock_count >= 0, "bad value"); - Atomic::inc(&_debug_jni_lock_count); -#endif - } - static void decrement_debug_jni_lock_count() { -#ifdef ASSERT - assert(_debug_jni_lock_count > 0, "bad value"); - Atomic::dec(&_debug_jni_lock_count); -#endif - } + static void increment_debug_jni_lock_count() NOT_DEBUG_RETURN; + static void decrement_debug_jni_lock_count() NOT_DEBUG_RETURN; // Set the current lock count static void set_jni_lock_count(int count) { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/genCollectedHeap.cpp --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,6 +28,7 @@ #include "classfile/vmSymbols.hpp" #include "code/icBuffer.hpp" #include "gc_implementation/shared/collectorCounters.hpp" +#include "gc_implementation/shared/gcTrace.hpp" #include "gc_implementation/shared/gcTraceTime.hpp" #include "gc_implementation/shared/vmGCOperations.hpp" #include "gc_interface/collectedHeap.inline.hpp" @@ -384,7 +385,9 @@ const char* gc_cause_prefix = complete ? "Full GC" : "GC"; gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - GCTraceTime t(GCCauseString(gc_cause_prefix, gc_cause()), PrintGCDetails, false, NULL); + // The PrintGCDetails logging starts before we have incremented the GC id. We will do that later + // so we can assume here that the next GC id is what we want. + GCTraceTime t(GCCauseString(gc_cause_prefix, gc_cause()), PrintGCDetails, false, NULL, GCId::peek()); gc_prologue(complete); increment_total_collections(complete); @@ -417,7 +420,9 @@ } // Timer for individual generations. Last argument is false: no CR // FIXME: We should try to start the timing earlier to cover more of the GC pause - GCTraceTime t1(_gens[i]->short_name(), PrintGCDetails, false, NULL); + // The PrintGCDetails logging starts before we have incremented the GC id. We will do that later + // so we can assume here that the next GC id is what we want. + GCTraceTime t1(_gens[i]->short_name(), PrintGCDetails, false, NULL, GCId::peek()); TraceCollectorStats tcs(_gens[i]->counters()); TraceMemoryManagerStats tmms(_gens[i]->kind(),gc_cause()); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/genMarkSweep.cpp --- a/hotspot/src/share/vm/memory/genMarkSweep.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -69,7 +69,7 @@ _ref_processor = rp; rp->setup_policy(clear_all_softrefs); - GCTraceTime t1(GCCauseString("Full GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, NULL); + GCTraceTime t1(GCCauseString("Full GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, NULL, _gc_tracer->gc_id()); gch->trace_heap_before_gc(_gc_tracer); @@ -193,7 +193,7 @@ void GenMarkSweep::mark_sweep_phase1(int level, bool clear_all_softrefs) { // Recursively traverse all live objects and mark them - GCTraceTime tm("phase 1", PrintGC && Verbose, true, _gc_timer); + GCTraceTime tm("phase 1", PrintGC && Verbose, true, _gc_timer, _gc_tracer->gc_id()); trace(" 1"); GenCollectedHeap* gch = GenCollectedHeap::heap(); @@ -220,7 +220,7 @@ ref_processor()->setup_policy(clear_all_softrefs); const ReferenceProcessorStats& stats = ref_processor()->process_discovered_references( - &is_alive, &keep_alive, &follow_stack_closure, NULL, _gc_timer); + &is_alive, &keep_alive, &follow_stack_closure, NULL, _gc_timer, _gc_tracer->gc_id()); gc_tracer()->report_gc_reference_stats(stats); } @@ -262,7 +262,7 @@ GenCollectedHeap* gch = GenCollectedHeap::heap(); - GCTraceTime tm("phase 2", PrintGC && Verbose, true, _gc_timer); + GCTraceTime tm("phase 2", PrintGC && Verbose, true, _gc_timer, _gc_tracer->gc_id()); trace("2"); gch->prepare_for_compaction(); @@ -279,7 +279,7 @@ GenCollectedHeap* gch = GenCollectedHeap::heap(); // Adjust the pointers to reflect the new locations - GCTraceTime tm("phase 3", PrintGC && Verbose, true, _gc_timer); + GCTraceTime tm("phase 3", PrintGC && Verbose, true, _gc_timer, _gc_tracer->gc_id()); trace("3"); // Need new claim bits for the pointer adjustment tracing. @@ -327,7 +327,7 @@ // to use a higher index (saved from phase2) when verifying perm_gen. GenCollectedHeap* gch = GenCollectedHeap::heap(); - GCTraceTime tm("phase 4", PrintGC && Verbose, true, _gc_timer); + GCTraceTime tm("phase 4", PrintGC && Verbose, true, _gc_timer, _gc_tracer->gc_id()); trace("4"); GenCompactClosure blk; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/heap.cpp diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/iterator.cpp --- a/hotspot/src/share/vm/memory/iterator.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/iterator.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -27,6 +27,7 @@ #include "oops/oop.inline.hpp" void KlassToOopClosure::do_klass(Klass* k) { + assert(_oop_closure != NULL, "Not initialized?"); k->oops_do(_oop_closure); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/iterator.hpp --- a/hotspot/src/share/vm/memory/iterator.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/iterator.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -115,9 +115,19 @@ }; class KlassToOopClosure : public KlassClosure { + friend class MetadataAwareOopClosure; + friend class MetadataAwareOopsInGenClosure; + OopClosure* _oop_closure; - public: - KlassToOopClosure(OopClosure* oop_closure) : _oop_closure(oop_closure) {} + + // Used when _oop_closure couldn't be set in an initialization list. + void initialize(OopClosure* oop_closure) { + assert(_oop_closure == NULL, "Should only be called once"); + _oop_closure = oop_closure; + } + +public: + KlassToOopClosure(OopClosure* oop_closure = NULL) : _oop_closure(oop_closure) {} virtual void do_klass(Klass* k); }; @@ -135,6 +145,29 @@ void do_cld(ClassLoaderData* cld); }; +// The base class for all concurrent marking closures, +// that participates in class unloading. +// It's used to proxy through the metadata to the oops defined in them. +class MetadataAwareOopClosure: public ExtendedOopClosure { + KlassToOopClosure _klass_closure; + + public: + MetadataAwareOopClosure() : ExtendedOopClosure() { + _klass_closure.initialize(this); + } + MetadataAwareOopClosure(ReferenceProcessor* rp) : ExtendedOopClosure(rp) { + _klass_closure.initialize(this); + } + + virtual bool do_metadata() { return do_metadata_nv(); } + inline bool do_metadata_nv() { return true; } + + virtual void do_klass(Klass* k); + void do_klass_nv(Klass* k); + + virtual void do_class_loader_data(ClassLoaderData* cld); +}; + // ObjectClosure is used for iterating through an object space class ObjectClosure : public Closure { @@ -318,4 +351,16 @@ } }; + +// Helper defines for ExtendOopClosure + +#define if_do_metadata_checked(closure, nv_suffix) \ + /* Make sure the non-virtual and the virtual versions match. */ \ + assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \ + "Inconsistency in do_metadata"); \ + if (closure->do_metadata##nv_suffix()) + +#define assert_should_ignore_metadata(closure, nv_suffix) \ + assert(!closure->do_metadata##nv_suffix(), "Code to handle metadata is not implemented") + #endif // SHARE_VM_MEMORY_ITERATOR_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/iterator.inline.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/memory/iterator.inline.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,47 @@ +/* + * 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_MEMORY_ITERATOR_INLINE_HPP +#define SHARE_VM_MEMORY_ITERATOR_INLINE_HPP + +#include "classfile/classLoaderData.hpp" +#include "memory/iterator.hpp" +#include "oops/klass.hpp" +#include "utilities/debug.hpp" + +inline void MetadataAwareOopClosure::do_class_loader_data(ClassLoaderData* cld) { + assert(_klass_closure._oop_closure == this, "Must be"); + + bool claim = true; // Must claim the class loader data before processing. + cld->oops_do(_klass_closure._oop_closure, &_klass_closure, claim); +} + +inline void MetadataAwareOopClosure::do_klass_nv(Klass* k) { + ClassLoaderData* cld = k->class_loader_data(); + do_class_loader_data(cld); +} + +inline void MetadataAwareOopClosure::do_klass(Klass* k) { do_klass_nv(k); } + +#endif // SHARE_VM_MEMORY_ITERATOR_INLINE_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/referenceProcessor.cpp --- a/hotspot/src/share/vm/memory/referenceProcessor.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -190,7 +190,8 @@ OopClosure* keep_alive, VoidClosure* complete_gc, AbstractRefProcTaskExecutor* task_executor, - GCTimer* gc_timer) { + GCTimer* gc_timer, + GCId gc_id) { NOT_PRODUCT(verify_ok_to_handle_reflists()); assert(!enqueuing_is_done(), "If here enqueuing should not be complete"); @@ -212,7 +213,7 @@ // Soft references size_t soft_count = 0; { - GCTraceTime tt("SoftReference", trace_time, false, gc_timer); + GCTraceTime tt("SoftReference", trace_time, false, gc_timer, gc_id); soft_count = process_discovered_reflist(_discoveredSoftRefs, _current_soft_ref_policy, true, is_alive, keep_alive, complete_gc, task_executor); @@ -223,7 +224,7 @@ // Weak references size_t weak_count = 0; { - GCTraceTime tt("WeakReference", trace_time, false, gc_timer); + GCTraceTime tt("WeakReference", trace_time, false, gc_timer, gc_id); weak_count = process_discovered_reflist(_discoveredWeakRefs, NULL, true, is_alive, keep_alive, complete_gc, task_executor); @@ -232,7 +233,7 @@ // Final references size_t final_count = 0; { - GCTraceTime tt("FinalReference", trace_time, false, gc_timer); + GCTraceTime tt("FinalReference", trace_time, false, gc_timer, gc_id); final_count = process_discovered_reflist(_discoveredFinalRefs, NULL, false, is_alive, keep_alive, complete_gc, task_executor); @@ -241,7 +242,7 @@ // Phantom references size_t phantom_count = 0; { - GCTraceTime tt("PhantomReference", trace_time, false, gc_timer); + GCTraceTime tt("PhantomReference", trace_time, false, gc_timer, gc_id); phantom_count = process_discovered_reflist(_discoveredPhantomRefs, NULL, false, is_alive, keep_alive, complete_gc, task_executor); @@ -253,7 +254,7 @@ // thus use JNI weak references to circumvent the phantom references and // resurrect a "post-mortem" object. { - GCTraceTime tt("JNI Weak Reference", trace_time, false, gc_timer); + GCTraceTime tt("JNI Weak Reference", trace_time, false, gc_timer, gc_id); if (task_executor != NULL) { task_executor->set_single_threaded_mode(); } @@ -1251,14 +1252,15 @@ OopClosure* keep_alive, VoidClosure* complete_gc, YieldClosure* yield, - GCTimer* gc_timer) { + GCTimer* gc_timer, + GCId gc_id) { NOT_PRODUCT(verify_ok_to_handle_reflists()); // Soft references { GCTraceTime tt("Preclean SoftReferences", PrintGCDetails && PrintReferenceGC, - false, gc_timer); + false, gc_timer, gc_id); for (uint i = 0; i < _max_num_q; i++) { if (yield->should_return()) { return; @@ -1271,7 +1273,7 @@ // Weak references { GCTraceTime tt("Preclean WeakReferences", PrintGCDetails && PrintReferenceGC, - false, gc_timer); + false, gc_timer, gc_id); for (uint i = 0; i < _max_num_q; i++) { if (yield->should_return()) { return; @@ -1284,7 +1286,7 @@ // Final references { GCTraceTime tt("Preclean FinalReferences", PrintGCDetails && PrintReferenceGC, - false, gc_timer); + false, gc_timer, gc_id); for (uint i = 0; i < _max_num_q; i++) { if (yield->should_return()) { return; @@ -1297,7 +1299,7 @@ // Phantom references { GCTraceTime tt("Preclean PhantomReferences", PrintGCDetails && PrintReferenceGC, - false, gc_timer); + false, gc_timer, gc_id); for (uint i = 0; i < _max_num_q; i++) { if (yield->should_return()) { return; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/referenceProcessor.hpp --- a/hotspot/src/share/vm/memory/referenceProcessor.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -25,6 +25,7 @@ #ifndef SHARE_VM_MEMORY_REFERENCEPROCESSOR_HPP #define SHARE_VM_MEMORY_REFERENCEPROCESSOR_HPP +#include "gc_implementation/shared/gcTrace.hpp" #include "memory/referencePolicy.hpp" #include "memory/referenceProcessorStats.hpp" #include "memory/referenceType.hpp" @@ -349,7 +350,8 @@ OopClosure* keep_alive, VoidClosure* complete_gc, YieldClosure* yield, - GCTimer* gc_timer); + GCTimer* gc_timer, + GCId gc_id); // Delete entries in the discovered lists that have // either a null referent or are not active. Such @@ -480,7 +482,8 @@ OopClosure* keep_alive, VoidClosure* complete_gc, AbstractRefProcTaskExecutor* task_executor, - GCTimer *gc_timer); + GCTimer *gc_timer, + GCId gc_id); // Enqueue references at end of GC (called by the garbage collector) bool enqueue_discovered_references(AbstractRefProcTaskExecutor* task_executor = NULL); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/space.cpp --- a/hotspot/src/share/vm/memory/space.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/space.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -37,6 +37,7 @@ #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" #include "runtime/java.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/prefetch.inline.hpp" #include "runtime/orderAccess.inline.hpp" #include "runtime/safepoint.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/specialized_oop_closures.hpp --- a/hotspot/src/share/vm/memory/specialized_oop_closures.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/specialized_oop_closures.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -25,7 +25,6 @@ #ifndef SHARE_VM_MEMORY_SPECIALIZED_OOP_CLOSURES_HPP #define SHARE_VM_MEMORY_SPECIALIZED_OOP_CLOSURES_HPP -#include "runtime/atomic.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS #include "gc_implementation/g1/g1_specialized_oop_closures.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -27,7 +27,6 @@ #include "gc_interface/collectedHeap.hpp" #include "memory/threadLocalAllocBuffer.hpp" -#include "runtime/atomic.hpp" #include "runtime/thread.hpp" #include "utilities/copy.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/memory/universe.cpp --- a/hotspot/src/share/vm/memory/universe.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/memory/universe.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -53,6 +53,7 @@ #include "oops/typeArrayKlass.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/deoptimization.hpp" #include "runtime/fprofiler.hpp" #include "runtime/handles.inline.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/arrayKlass.cpp --- a/hotspot/src/share/vm/oops/arrayKlass.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/arrayKlass.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -93,7 +93,7 @@ ResourceMark rm(THREAD); k->initialize_supers(super_klass(), CHECK); k->vtable()->initialize_vtable(false, CHECK); - java_lang_Class::create_mirror(k, Handle(NULL), CHECK); + java_lang_Class::create_mirror(k, Handle(NULL), Handle(NULL), CHECK); } GrowableArray* ArrayKlass::compute_secondary_supers(int num_extra_slots) { diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/compiledICHolder.cpp --- a/hotspot/src/share/vm/oops/compiledICHolder.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/compiledICHolder.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -27,11 +27,27 @@ #include "oops/klass.hpp" #include "oops/method.hpp" #include "oops/oop.inline2.hpp" +#include "runtime/atomic.inline.hpp" volatile int CompiledICHolder::_live_count; volatile int CompiledICHolder::_live_not_claimed_count; +CompiledICHolder::CompiledICHolder(Method* method, Klass* klass) + : _holder_method(method), _holder_klass(klass) { +#ifdef ASSERT + Atomic::inc(&_live_count); + Atomic::inc(&_live_not_claimed_count); +#endif // ASSERT +} + +#ifdef ASSERT +CompiledICHolder::~CompiledICHolder() { + assert(_live_count > 0, "underflow"); + Atomic::dec(&_live_count); +} +#endif // ASSERT + // Printing void CompiledICHolder::print_on(outputStream* st) const { @@ -51,3 +67,11 @@ guarantee(holder_method()->is_method(), "should be method"); guarantee(holder_klass()->is_klass(), "should be klass"); } + +#ifdef ASSERT + +void CompiledICHolder::claim() { + Atomic::dec(&_live_not_claimed_count); +} + +#endif // ASSERT diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/compiledICHolder.hpp --- a/hotspot/src/share/vm/oops/compiledICHolder.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/compiledICHolder.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #define SHARE_VM_OOPS_COMPILEDICHOLDEROOP_HPP #include "oops/oop.hpp" +#include "utilities/macros.hpp" // A CompiledICHolder* is a helper object for the inline cache implementation. // It holds an intermediate value (method+klass pair) used when converting from @@ -50,20 +51,8 @@ public: // Constructor - CompiledICHolder(Method* method, Klass* klass) - : _holder_method(method), _holder_klass(klass) { -#ifdef ASSERT - Atomic::inc(&_live_count); - Atomic::inc(&_live_not_claimed_count); -#endif - } - - ~CompiledICHolder() { -#ifdef ASSERT - assert(_live_count > 0, "underflow"); - Atomic::dec(&_live_count); -#endif - } + CompiledICHolder(Method* method, Klass* klass); + ~CompiledICHolder() NOT_DEBUG_RETURN; static int live_count() { return _live_count; } static int live_not_claimed_count() { return _live_not_claimed_count; } @@ -91,11 +80,7 @@ const char* internal_name() const { return "{compiledICHolder}"; } - void claim() { -#ifdef ASSERT - Atomic::dec(&_live_not_claimed_count); -#endif - } + void claim() NOT_DEBUG_RETURN; }; #endif // SHARE_VM_OOPS_COMPILEDICHOLDEROOP_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/constantPool.cpp --- a/hotspot/src/share/vm/oops/constantPool.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/constantPool.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -71,7 +71,6 @@ // only set to non-zero if constant pool is merged by RedefineClasses set_version(0); - set_lock(new Monitor(Monitor::nonleaf + 2, "A constant pool lock")); // initialize tag array int length = tags->length(); @@ -100,9 +99,6 @@ void ConstantPool::release_C_heap_structures() { // walk constant pool and decrement symbol reference counts unreference_symbols(); - - delete _lock; - set_lock(NULL); } objArrayOop ConstantPool::resolved_references() const { @@ -146,8 +142,7 @@ // CDS support. Create a new resolved_references array. void ConstantPool::restore_unshareable_info(TRAPS) { - // Only create the new resolved references array and lock if it hasn't been - // attempted before + // Only create the new resolved references array if it hasn't been attempted before if (resolved_references() != NULL) return; // restore the C++ vtable from the shared archive @@ -163,9 +158,6 @@ ClassLoaderData* loader_data = pool_holder()->class_loader_data(); set_resolved_references(loader_data->add_handle(refs_handle)); } - - // Also need to recreate the mutex. Make sure this matches the constructor - set_lock(new Monitor(Monitor::nonleaf + 2, "A constant pool lock")); } } @@ -176,7 +168,6 @@ set_resolved_reference_length( resolved_references() != NULL ? resolved_references()->length() : 0); set_resolved_references(NULL); - set_lock(NULL); } int ConstantPool::cp_to_object_index(int cp_index) { @@ -186,11 +177,41 @@ return (i < 0) ? _no_index_sentinel : i; } +void ConstantPool::trace_class_resolution(constantPoolHandle this_cp, KlassHandle k) { + ResourceMark rm; + int line_number = -1; + const char * source_file = NULL; + if (JavaThread::current()->has_last_Java_frame()) { + // try to identify the method which called this function. + vframeStream vfst(JavaThread::current()); + if (!vfst.at_end()) { + line_number = vfst.method()->line_number_from_bci(vfst.bci()); + Symbol* s = vfst.method()->method_holder()->source_file_name(); + if (s != NULL) { + source_file = s->as_C_string(); + } + } + } + if (k() != this_cp->pool_holder()) { + // only print something if the classes are different + if (source_file != NULL) { + tty->print("RESOLVE %s %s %s:%d\n", + this_cp->pool_holder()->external_name(), + InstanceKlass::cast(k())->external_name(), source_file, line_number); + } else { + tty->print("RESOLVE %s %s\n", + this_cp->pool_holder()->external_name(), + InstanceKlass::cast(k())->external_name()); + } + } +} + Klass* ConstantPool::klass_at_impl(constantPoolHandle this_cp, int which, TRAPS) { + assert(THREAD->is_Java_thread(), "must be a Java thread"); + // A resolved constantPool entry will contain a Klass*, otherwise a Symbol*. - // It is not safe to rely on the tag bit's here, since we don't have a lock, and the entry and - // tag is not updated atomicly. - + // It is not safe to rely on the tag bit's here, since we don't have a lock, and + // the entry and tag is not updated atomicly. CPSlot entry = this_cp->slot_at(which); if (entry.is_resolved()) { assert(entry.get_klass()->is_klass(), "must be"); @@ -198,115 +219,51 @@ return entry.get_klass(); } - // Acquire lock on constant oop while doing update. After we get the lock, we check if another object - // already has updated the object - assert(THREAD->is_Java_thread(), "must be a Java thread"); - bool do_resolve = false; - bool in_error = false; - - // Create a handle for the mirror. This will preserve the resolved class - // until the loader_data is registered. - Handle mirror_handle; - - Symbol* name = NULL; - Handle loader; - { MonitorLockerEx ml(this_cp->lock()); - - if (this_cp->tag_at(which).is_unresolved_klass()) { - if (this_cp->tag_at(which).is_unresolved_klass_in_error()) { - in_error = true; - } else { - do_resolve = true; - name = this_cp->unresolved_klass_at(which); - loader = Handle(THREAD, this_cp->pool_holder()->class_loader()); - } - } - } // unlocking constantPool - - - // The original attempt to resolve this constant pool entry failed so find the - // class of the original error and throw another error of the same class (JVMS 5.4.3). - // If there is a detail message, pass that detail message to the error constructor. - // The JVMS does not strictly require us to duplicate the same detail message, - // or any internal exception fields such as cause or stacktrace. But since the - // detail message is often a class name or other literal string, we will repeat it if - // we can find it in the symbol table. - if (in_error) { + // This tag doesn't change back to unresolved class unless at a safepoint. + if (this_cp->tag_at(which).is_unresolved_klass_in_error()) { + // The original attempt to resolve this constant pool entry failed so find the + // class of the original error and throw another error of the same class + // (JVMS 5.4.3). + // If there is a detail message, pass that detail message to the error. + // The JVMS does not strictly require us to duplicate the same detail message, + // or any internal exception fields such as cause or stacktrace. But since the + // detail message is often a class name or other literal string, we will repeat it + // if we can find it in the symbol table. throw_resolution_error(this_cp, which, CHECK_0); + ShouldNotReachHere(); } - if (do_resolve) { - // this_cp must be unlocked during resolve_or_fail - oop protection_domain = this_cp->pool_holder()->protection_domain(); - Handle h_prot (THREAD, protection_domain); - Klass* kk = SystemDictionary::resolve_or_fail(name, loader, h_prot, true, THREAD); - KlassHandle k; - if (!HAS_PENDING_EXCEPTION) { - k = KlassHandle(THREAD, kk); - // preserve the resolved klass. - mirror_handle = Handle(THREAD, kk->java_mirror()); - // Do access check for klasses - verify_constant_pool_resolve(this_cp, k, THREAD); - } - - // Failed to resolve class. We must record the errors so that subsequent attempts - // to resolve this constant pool entry fail with the same error (JVMS 5.4.3). - if (HAS_PENDING_EXCEPTION) { - MonitorLockerEx ml(this_cp->lock()); - - // some other thread has beaten us and has resolved the class. - if (this_cp->tag_at(which).is_klass()) { - CLEAR_PENDING_EXCEPTION; - entry = this_cp->resolved_klass_at(which); - return entry.get_klass(); - } + Handle mirror_handle; + Symbol* name = entry.get_symbol(); + Handle loader (THREAD, this_cp->pool_holder()->class_loader()); + Handle protection_domain (THREAD, this_cp->pool_holder()->protection_domain()); + Klass* kk = SystemDictionary::resolve_or_fail(name, loader, protection_domain, true, THREAD); + KlassHandle k (THREAD, kk); + if (!HAS_PENDING_EXCEPTION) { + // preserve the resolved klass from unloading + mirror_handle = Handle(THREAD, kk->java_mirror()); + // Do access check for klasses + verify_constant_pool_resolve(this_cp, k, THREAD); + } - // The tag could have changed to in-error before the lock but we have to - // handle that here for the class case. - save_and_throw_exception(this_cp, which, constantTag(JVM_CONSTANT_UnresolvedClass), CHECK_0); - } + // Failed to resolve class. We must record the errors so that subsequent attempts + // to resolve this constant pool entry fail with the same error (JVMS 5.4.3). + if (HAS_PENDING_EXCEPTION) { + save_and_throw_exception(this_cp, which, constantTag(JVM_CONSTANT_UnresolvedClass), CHECK_0); + } - if (TraceClassResolution && !k()->oop_is_array()) { - // skip resolving the constant pool so that this code get's - // called the next time some bytecodes refer to this class. - ResourceMark rm; - int line_number = -1; - const char * source_file = NULL; - if (JavaThread::current()->has_last_Java_frame()) { - // try to identify the method which called this function. - vframeStream vfst(JavaThread::current()); - if (!vfst.at_end()) { - line_number = vfst.method()->line_number_from_bci(vfst.bci()); - Symbol* s = vfst.method()->method_holder()->source_file_name(); - if (s != NULL) { - source_file = s->as_C_string(); - } - } - } - if (k() != this_cp->pool_holder()) { - // only print something if the classes are different - if (source_file != NULL) { - tty->print("RESOLVE %s %s %s:%d\n", - this_cp->pool_holder()->external_name(), - InstanceKlass::cast(k())->external_name(), source_file, line_number); - } else { - tty->print("RESOLVE %s %s\n", - this_cp->pool_holder()->external_name(), - InstanceKlass::cast(k())->external_name()); - } - } + // Make this class loader depend upon the class loader owning the class reference + ClassLoaderData* this_key = this_cp->pool_holder()->class_loader_data(); + this_key->record_dependency(k(), CHECK_NULL); // Can throw OOM + + if (TraceClassResolution && !k->oop_is_array()) { + // skip resolving the constant pool so that this code gets + // called the next time some bytecodes refer to this class. + trace_class_resolution(this_cp, k); return k(); } else { - MonitorLockerEx ml(this_cp->lock()); - // Only updated constant pool - if it is resolved. - do_resolve = this_cp->tag_at(which).is_unresolved_klass(); - if (do_resolve) { - ClassLoaderData* this_key = this_cp->pool_holder()->class_loader_data(); - this_key->record_dependency(k(), CHECK_NULL); // Can throw OOM this_cp->klass_at_put(which, k()); } - } - } entry = this_cp->resolved_klass_at(which); assert(entry.is_resolved() && entry.get_klass()->is_klass(), "must be resolved at this point"); @@ -576,7 +533,7 @@ switch (tag.value()) { case JVM_CONSTANT_UnresolvedClass: // return the class name in the error message - message = this_cp->unresolved_klass_at(which); + message = this_cp->klass_name_at(which); break; case JVM_CONSTANT_MethodHandle: // return the method handle name in the error message @@ -606,7 +563,6 @@ // in the resolution error table, so that the same exception is thrown again. void ConstantPool::save_and_throw_exception(constantPoolHandle this_cp, int which, constantTag tag, TRAPS) { - assert(this_cp->lock()->is_locked(), "constant pool lock should be held"); Symbol* error = PENDING_EXCEPTION->klass()->name(); int error_tag = tag.error_value(); @@ -620,7 +576,14 @@ } else if (this_cp->tag_at(which).value() != error_tag) { Symbol* message = exception_message(this_cp, which, tag, PENDING_EXCEPTION); SystemDictionary::add_resolution_error(this_cp, which, error, message); - this_cp->tag_at_put(which, error_tag); + // CAS in the tag. If a thread beat us to registering this error that's fine. + // If another thread resolved the reference, this is an error. The resolution + // must deterministically get an error. So why do we save this? + // We save this because jvmti can add classes to the bootclass path after this + // error, so it needs to get the same error if the error is first. + jbyte old_tag = Atomic::cmpxchg((jbyte)error_tag, + (jbyte*)this_cp->tag_addr_at(which), (jbyte)tag.value()); + assert(old_tag == error_tag || old_tag == tag.value(), "should not be resolved otherwise"); } else { // some other thread put this in error state throw_resolution_error(this_cp, which, CHECK); @@ -710,7 +673,6 @@ THREAD); result_oop = value(); if (HAS_PENDING_EXCEPTION) { - MonitorLockerEx ml(this_cp->lock()); // lock cpool to change tag. save_and_throw_exception(this_cp, index, tag, CHECK_NULL); } break; @@ -727,7 +689,6 @@ Handle value = SystemDictionary::find_method_handle_type(signature, klass, THREAD); result_oop = value(); if (HAS_PENDING_EXCEPTION) { - MonitorLockerEx ml(this_cp->lock()); // lock cpool to change tag. save_and_throw_exception(this_cp, index, tag, CHECK_NULL); } break; @@ -765,22 +726,17 @@ } if (cache_index >= 0) { - // Cache the oop here also. - Handle result_handle(THREAD, result_oop); - MonitorLockerEx ml(this_cp->lock()); // don't know if we really need this - oop result = this_cp->resolved_references()->obj_at(cache_index); - // Benign race condition: resolved_references may already be filled in while we were trying to lock. + // Benign race condition: resolved_references may already be filled in. // The important thing here is that all threads pick up the same result. // It doesn't matter which racing thread wins, as long as only one // result is used by all threads, and all future queries. - // That result may be either a resolved constant or a failure exception. - if (result == NULL) { - this_cp->resolved_references()->obj_at_put(cache_index, result_handle()); - return result_handle(); + oop old_result = this_cp->resolved_references()->atomic_compare_exchange_oop(cache_index, result_oop, NULL); + if (old_result == NULL) { + return result_oop; // was installed } else { // Return the winning thread's result. This can be different than - // result_handle() for MethodHandles. - return result; + // the result here for MethodHandles. + return old_result; } } else { return result_oop; @@ -853,9 +809,8 @@ } -// Iterate over symbols and decrement ones which are Symbol*s. -// This is done during GC so do not need to lock constantPool unless we -// have per-thread safepoints. +// Iterate over symbols and decrement ones which are Symbol*s +// This is done during GC. // Only decrement the UTF8 symbols. Unresolved classes and strings point to // these symbols but didn't increment the reference count. void ConstantPool::unreference_symbols() { @@ -987,8 +942,8 @@ case JVM_CONSTANT_UnresolvedClass: { - Symbol* k1 = unresolved_klass_at(index1); - Symbol* k2 = cp2->unresolved_klass_at(index2); + Symbol* k1 = klass_name_at(index1); + Symbol* k2 = cp2->klass_name_at(index2); if (k1 == k2) { return true; } @@ -1970,7 +1925,6 @@ break; case JVM_CONSTANT_UnresolvedClass : // fall-through case JVM_CONSTANT_UnresolvedClassInError: { - // unresolved_klass_at requires lock or safe world. CPSlot entry = slot_at(index); if (entry.is_resolved()) { entry.get_klass()->print_value_on(st); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/constantPool.hpp --- a/hotspot/src/share/vm/oops/constantPool.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/constantPool.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -112,12 +112,12 @@ int _version; } _saved; - Monitor* _lock; - void set_tags(Array* tags) { _tags = tags; } void tag_at_put(int which, jbyte t) { tags()->at_put(which, t); } void release_tag_at_put(int which, jbyte t) { tags()->release_at_put(which, t); } + u1* tag_addr_at(int which) const { return tags()->adr_at(which); } + void set_operands(Array* operands) { _operands = operands; } int flags() const { return _flags; } @@ -362,14 +362,6 @@ return CPSlot((Klass*)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_klass(); } - // This method should only be used with a cpool lock or during parsing or gc - Symbol* unresolved_klass_at(int which) { // Temporary until actual use - Symbol* s = CPSlot((Symbol*)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_symbol(); - // check that the klass is still unresolved. - assert(tag_at(which).is_unresolved_klass(), "Corrupted constant pool"); - return s; - } - // RedefineClasses() API support: Symbol* klass_at_noresolve(int which) { return klass_name_at(which); } @@ -818,6 +810,8 @@ static Klass* klass_at_impl(constantPoolHandle this_cp, int which, TRAPS); static oop string_at_impl(constantPoolHandle this_cp, int which, int obj_index, TRAPS); + static void trace_class_resolution(constantPoolHandle this_cp, KlassHandle k); + // Resolve string constants (to prevent allocation during compilation) static void resolve_string_constants_impl(constantPoolHandle this_cp, TRAPS); @@ -848,8 +842,6 @@ void set_resolved_reference_length(int length) { _saved._resolved_reference_length = length; } int resolved_reference_length() const { return _saved._resolved_reference_length; } - void set_lock(Monitor* lock) { _lock = lock; } - Monitor* lock() { return _lock; } // Decrease ref counts of symbols that are in the constant pool // when the holder class is unloaded diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/cpCache.cpp --- a/hotspot/src/share/vm/oops/cpCache.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/cpCache.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -32,6 +32,7 @@ #include "oops/oop.inline.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/methodHandles.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/orderAccess.inline.hpp" #include "utilities/macros.hpp" @@ -286,7 +287,9 @@ // the lock, so that when the losing writer returns, he can use the linked // cache entry. - MonitorLockerEx ml(cpool->lock()); + // Use the lock from the metaspace for this, which cannot stop for safepoint. + Mutex* metaspace_lock = cpool->pool_holder()->class_loader_data()->metaspace_lock(); + MutexLockerEx ml(metaspace_lock, Mutex::_no_safepoint_check_flag); if (!is_f1_null()) { return; } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/instanceClassLoaderKlass.cpp --- a/hotspot/src/share/vm/oops/instanceClassLoaderKlass.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/instanceClassLoaderKlass.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,6 +28,7 @@ #include "gc_implementation/shared/markSweep.inline.hpp" #include "gc_interface/collectedHeap.inline.hpp" #include "memory/genOopClosures.inline.hpp" +#include "memory/iterator.inline.hpp" #include "memory/oopFactory.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceClassLoaderKlass.hpp" @@ -44,12 +45,6 @@ #include "oops/oop.pcgc.inline.hpp" #endif // INCLUDE_ALL_GCS -#define if_do_metadata_checked(closure, nv_suffix) \ - /* Make sure the non-virtual and the virtual versions match. */ \ - assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \ - "Inconsistency in do_metadata"); \ - if (closure->do_metadata##nv_suffix()) - // Macro to define InstanceClassLoaderKlass::oop_oop_iterate for virtual/nonvirtual for // all closures. Macros calling macros above for each oop size. // Since ClassLoader objects have only a pointer to the loader_data, they are not diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/instanceKlass.cpp --- a/hotspot/src/share/vm/oops/instanceKlass.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -35,6 +35,7 @@ #include "jvmtifiles/jvmti.h" #include "memory/genOopClosures.inline.hpp" #include "memory/heapInspection.hpp" +#include "memory/iterator.inline.hpp" #include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" #include "oops/fieldStreams.hpp" @@ -51,6 +52,7 @@ #include "prims/jvmtiRedefineClasses.hpp" #include "prims/jvmtiThreadState.hpp" #include "prims/methodComparator.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/fieldDescriptor.hpp" #include "runtime/handles.inline.hpp" #include "runtime/javaCalls.hpp" @@ -2113,12 +2115,6 @@ // closure's do_metadata() method dictates whether the given closure should be // applied to the klass ptr in the object header. -#define if_do_metadata_checked(closure, nv_suffix) \ - /* Make sure the non-virtual and the virtual versions match. */ \ - assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \ - "Inconsistency in do_metadata"); \ - if (closure->do_metadata##nv_suffix()) - #define InstanceKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ \ int InstanceKlass::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ @@ -2142,10 +2138,9 @@ int InstanceKlass::oop_oop_iterate_backwards##nv_suffix(oop obj, \ OopClosureType* closure) { \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::ik); \ - /* header */ \ - if_do_metadata_checked(closure, nv_suffix) { \ - closure->do_klass##nv_suffix(obj->klass()); \ - } \ + \ + assert_should_ignore_metadata(closure, nv_suffix); \ + \ /* instance variables */ \ InstanceKlass_OOP_MAP_REVERSE_ITERATE( \ obj, \ diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/instanceKlass.hpp --- a/hotspot/src/share/vm/oops/instanceKlass.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/instanceKlass.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -32,7 +32,6 @@ #include "oops/fieldInfo.hpp" #include "oops/instanceOop.hpp" #include "oops/klassVtable.hpp" -#include "runtime/atomic.hpp" #include "runtime/handles.hpp" #include "runtime/os.hpp" #include "utilities/accessFlags.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/instanceMirrorKlass.cpp --- a/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,6 +28,7 @@ #include "gc_implementation/shared/markSweep.inline.hpp" #include "gc_interface/collectedHeap.inline.hpp" #include "memory/genOopClosures.inline.hpp" +#include "memory/iterator.inline.hpp" #include "memory/oopFactory.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" @@ -241,12 +242,6 @@ return oop_size(obj); \ -#define if_do_metadata_checked(closure, nv_suffix) \ - /* Make sure the non-virtual and the virtual versions match. */ \ - assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \ - "Inconsistency in do_metadata"); \ - if (closure->do_metadata##nv_suffix()) - // Macro to define InstanceMirrorKlass::oop_oop_iterate for virtual/nonvirtual for // all closures. Macros calling macros above for each oop size. diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/klass.cpp --- a/hotspot/src/share/vm/oops/klass.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/klass.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -508,7 +508,7 @@ // Only recreate it if not present. A previous attempt to restore may have // gotten an OOM later but keep the mirror if it was created. if (java_mirror() == NULL) { - java_lang_Class::create_mirror(this, Handle(NULL), CHECK); + java_lang_Class::create_mirror(this, Handle(NULL), Handle(NULL), CHECK); } } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/objArrayKlass.cpp --- a/hotspot/src/share/vm/oops/objArrayKlass.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/objArrayKlass.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -29,6 +29,7 @@ #include "gc_implementation/shared/markSweep.inline.hpp" #include "gc_interface/collectedHeap.inline.hpp" #include "memory/genOopClosures.inline.hpp" +#include "memory/iterator.inline.hpp" #include "memory/metadataFactory.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" @@ -476,12 +477,6 @@ } #endif // INCLUDE_ALL_GCS -#define if_do_metadata_checked(closure, nv_suffix) \ - /* Make sure the non-virtual and the virtual versions match. */ \ - assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \ - "Inconsistency in do_metadata"); \ - if (closure->do_metadata##nv_suffix()) - #define ObjArrayKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ \ int ObjArrayKlass::oop_oop_iterate##nv_suffix(oop obj, \ diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/objArrayOop.cpp --- a/hotspot/src/share/vm/oops/objArrayOop.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/objArrayOop.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -27,6 +27,22 @@ #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" +oop objArrayOopDesc::atomic_compare_exchange_oop(int index, oop exchange_value, + oop compare_value) { + volatile HeapWord* dest; + if (UseCompressedOops) { + dest = (HeapWord*)obj_at_addr(index); + } else { + dest = (HeapWord*)obj_at_addr(index); + } + oop res = oopDesc::atomic_compare_exchange_oop(exchange_value, dest, compare_value, true); + // update card mark if success + if (res == compare_value) { + update_barrier_set((void*)dest, exchange_value); + } + return res; +} + #define ObjArrayOop_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ \ int objArrayOopDesc::oop_iterate_range(OopClosureType* blk, int start, int end) { \ diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/objArrayOop.hpp --- a/hotspot/src/share/vm/oops/objArrayOop.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/objArrayOop.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -95,6 +95,9 @@ oop_store(obj_at_addr(index), value); } } + + oop atomic_compare_exchange_oop(int index, oop exchange_value, oop compare_value); + // Sizing static int header_size() { return arrayOopDesc::header_size(T_OBJECT); } int object_size() { return object_size(length()); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/oop.pcgc.inline.hpp --- a/hotspot/src/share/vm/oops/oop.pcgc.inline.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/oop.pcgc.inline.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #define SHARE_VM_OOPS_OOP_PCGC_INLINE_HPP #include "utilities/macros.hpp" +#include "runtime/atomic.inline.hpp" #if INCLUDE_ALL_GCS #include "gc_implementation/parNew/parNewGeneration.hpp" #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/oops/symbol.cpp --- a/hotspot/src/share/vm/oops/symbol.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/oops/symbol.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,11 +26,11 @@ #include "precompiled.hpp" #include "classfile/altHashing.hpp" #include "classfile/classLoaderData.hpp" +#include "memory/allocation.inline.hpp" +#include "memory/resourceArea.hpp" #include "oops/symbol.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/os.hpp" -#include "memory/allocation.inline.hpp" -#include "memory/resourceArea.hpp" Symbol::Symbol(const u1* name, int length, int refcount) { _refcount = refcount; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/opto/compile.cpp --- a/hotspot/src/share/vm/opto/compile.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/opto/compile.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -3411,7 +3411,7 @@ _root->verify_edges(visited); if (no_dead_code) { // Now make sure that no visited node is used by an unvisited node. - bool dead_nodes = 0; + bool dead_nodes = false; Unique_Node_List checked(area); while (visited.size() > 0) { Node* n = visited.pop(); @@ -3422,14 +3422,16 @@ if (visited.member(use)) continue; // already in the graph if (use->is_Con()) continue; // a dead ConNode is OK // At this point, we have found a dead node which is DU-reachable. - if (dead_nodes++ == 0) + if (!dead_nodes) { tty->print_cr("*** Dead nodes reachable via DU edges:"); + dead_nodes = true; + } use->dump(2); tty->print_cr("---"); checked.push(use); // No repeats; pretend it is now checked. } } - assert(dead_nodes == 0, "using nodes must be reachable from root"); + assert(!dead_nodes, "using nodes must be reachable from root"); } } } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/opto/matcher.cpp --- a/hotspot/src/share/vm/opto/matcher.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/opto/matcher.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -36,7 +36,6 @@ #include "opto/runtime.hpp" #include "opto/type.hpp" #include "opto/vectornode.hpp" -#include "runtime/atomic.hpp" #include "runtime/os.hpp" #ifdef TARGET_ARCH_MODEL_x86_32 # include "adfiles/ad_x86_32.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/opto/runtime.cpp --- a/hotspot/src/share/vm/opto/runtime.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/opto/runtime.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -55,6 +55,7 @@ #include "opto/mulnode.hpp" #include "opto/runtime.hpp" #include "opto/subnode.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/fprofiler.hpp" #include "runtime/handles.inline.hpp" #include "runtime/interfaceSupport.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/prims/jni.cpp --- a/hotspot/src/share/vm/prims/jni.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/prims/jni.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -59,6 +59,7 @@ #include "prims/jvm_misc.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/compilationPolicy.hpp" #include "runtime/fieldDescriptor.hpp" #include "runtime/fprofiler.hpp" @@ -3336,13 +3337,7 @@ directBufferSupportInitializeEnded = 1; } else { while (!directBufferSupportInitializeEnded && !directBufferSupportInitializeFailed) { - // Set state as yield_all can call os:sleep. On Solaris, yield_all calls - // os::sleep which requires the VM state transition. On other platforms, it - // is not necessary. The following call to change the VM state is purposely - // put inside the loop to avoid potential deadlock when multiple threads - // try to call this method. See 6791815 for more details. - ThreadInVMfromNative tivn(thread); - os::yield_all(); + os::yield(); } } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/prims/jvm.cpp --- a/hotspot/src/share/vm/prims/jvm.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/prims/jvm.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -44,6 +44,7 @@ #include "prims/nativeLookup.hpp" #include "prims/privilegedStack.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/dtraceJSDT.hpp" #include "runtime/handles.inline.hpp" #include "runtime/init.hpp" @@ -55,6 +56,7 @@ #include "runtime/os.hpp" #include "runtime/perfData.hpp" #include "runtime/reflection.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vframe.hpp" #include "runtime/vm_operations.hpp" #include "services/attachListener.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/prims/jvmtiEnv.cpp --- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -258,9 +258,6 @@ // VM representation. We don't attach the reconstituted class // bytes to the InstanceKlass here because they have not been // validated and we're not at a safepoint. - constantPoolHandle constants(current_thread, ikh->constants()); - MonitorLockerEx ml(constants->lock()); // lock constant pool while we query it - JvmtiClassFileReconstituter reconstituter(ikh); if (reconstituter.get_error() != JVMTI_ERROR_NONE) { return reconstituter.get_error(); @@ -2445,9 +2442,6 @@ } instanceKlassHandle ikh(thread, k_oop); - constantPoolHandle constants(thread, ikh->constants()); - MonitorLockerEx ml(constants->lock()); // lock constant pool while we query it - JvmtiConstantPoolReconstituter reconstituter(ikh); if (reconstituter.get_error() != JVMTI_ERROR_NONE) { return reconstituter.get_error(); @@ -2467,6 +2461,7 @@ return reconstituter.get_error(); } + constantPoolHandle constants(thread, ikh->constants()); *constant_pool_count_ptr = constants->length(); *constant_pool_byte_count_ptr = cpool_size; *constant_pool_bytes_ptr = cpool_bytes; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/prims/jvmtiImpl.cpp --- a/hotspot/src/share/vm/prims/jvmtiImpl.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/prims/jvmtiImpl.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -32,7 +32,7 @@ #include "prims/jvmtiEventController.inline.hpp" #include "prims/jvmtiImpl.hpp" #include "prims/jvmtiRedefineClasses.hpp" -#include "runtime/atomic.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/deoptimization.hpp" #include "runtime/handles.hpp" #include "runtime/handles.inline.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp --- a/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "prims/jvmtiRawMonitor.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/orderAccess.inline.hpp" #include "runtime/thread.inline.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/prims/unsafe.cpp --- a/hotspot/src/share/vm/prims/unsafe.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/prims/unsafe.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -31,6 +31,7 @@ #include "memory/allocation.inline.hpp" #include "prims/jni.h" #include "prims/jvm.h" +#include "runtime/atomic.inline.hpp" #include "runtime/globals.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/prefetch.inline.hpp" @@ -891,6 +892,14 @@ } UNSAFE_END +static jobject get_class_loader(JNIEnv* env, jclass cls) { + if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { + return NULL; + } + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); + oop loader = k->class_loader(); + return JNIHandles::make_local(env, loader); +} UNSAFE_ENTRY(jclass, Unsafe_DefineClass0(JNIEnv *env, jobject unsafe, jstring name, jbyteArray data, int offset, int length)) UnsafeWrapper("Unsafe_DefineClass"); @@ -899,7 +908,7 @@ int depthFromDefineClass0 = 1; jclass caller = JVM_GetCallerClass(env, depthFromDefineClass0); - jobject loader = (caller == NULL) ? NULL : JVM_GetClassLoader(env, caller); + jobject loader = (caller == NULL) ? NULL : get_class_loader(env, caller); jobject pd = (caller == NULL) ? NULL : JVM_GetProtectionDomain(env, caller); return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/biasedLocking.cpp --- a/hotspot/src/share/vm/runtime/biasedLocking.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/biasedLocking.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -25,6 +25,7 @@ #include "precompiled.hpp" #include "oops/klass.inline.hpp" #include "oops/markOop.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/basicLock.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/task.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/extendedPC.hpp --- a/hotspot/src/share/vm/runtime/extendedPC.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/extendedPC.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -25,6 +25,9 @@ #ifndef SHARE_VM_RUNTIME_EXTENDEDPC_HPP #define SHARE_VM_RUNTIME_EXTENDEDPC_HPP +#include "memory/allocation.hpp" +#include "utilities/globalDefinitions.hpp" + // An ExtendedPC contains the _pc from a signal handler in a platform // independent way. diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/frame.cpp --- a/hotspot/src/share/vm/runtime/frame.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/frame.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -44,6 +44,7 @@ #include "runtime/signature.hpp" #include "runtime/stubCodeGenerator.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/decoder.hpp" #ifdef TARGET_ARCH_x86 diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/globals.hpp --- a/hotspot/src/share/vm/runtime/globals.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/globals.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -2299,6 +2299,9 @@ manageable(bool, PrintGCTimeStamps, false, \ "Print timestamps at garbage collection") \ \ + manageable(bool, PrintGCID, true, \ + "Print an identifier for each garbage collection") \ + \ product(bool, PrintGCTaskTimeStamps, false, \ "Print timestamps for individual gc worker thread tasks") \ \ diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/handles.cpp --- a/hotspot/src/share/vm/runtime/handles.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/handles.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,6 +26,7 @@ #include "memory/allocation.inline.hpp" #include "oops/constantPool.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/thread.inline.hpp" #ifdef TARGET_OS_FAMILY_linux diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/interfaceSupport.cpp --- a/hotspot/src/share/vm/runtime/interfaceSupport.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/interfaceSupport.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -28,6 +28,7 @@ #include "gc_interface/collectedHeap.inline.hpp" #include "memory/genCollectedHeap.hpp" #include "memory/resourceArea.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/init.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/orderAccess.inline.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/mutex.cpp --- a/hotspot/src/share/vm/runtime/mutex.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/mutex.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -24,6 +24,7 @@ */ #include "precompiled.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/mutex.hpp" #include "runtime/orderAccess.inline.hpp" #include "runtime/osThread.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/objectMonitor.cpp --- a/hotspot/src/share/vm/runtime/objectMonitor.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/objectMonitor.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -27,6 +27,7 @@ #include "memory/resourceArea.hpp" #include "oops/markOop.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/mutexLocker.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/os.cpp --- a/hotspot/src/share/vm/runtime/os.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/os.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -40,6 +40,7 @@ #include "prims/jvm_misc.hpp" #include "prims/privilegedStack.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/frame.inline.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/java.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/os.hpp --- a/hotspot/src/share/vm/runtime/os.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/os.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,7 +26,6 @@ #define SHARE_VM_RUNTIME_OS_HPP #include "jvmtifiles/jvmti.h" -#include "runtime/atomic.hpp" #include "runtime/extendedPC.hpp" #include "runtime/handles.hpp" #include "utilities/top.hpp" @@ -453,8 +452,6 @@ // yield that can be used in lieu of blocking. } ; static YieldResult NakedYield () ; - static void yield_all(); // Yields to all other threads including lower priority - // (for the default scheduling policy) static OSReturn set_priority(Thread* thread, ThreadPriority priority); static OSReturn get_priority(const Thread* const thread, ThreadPriority& priority); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/safepoint.cpp --- a/hotspot/src/share/vm/runtime/safepoint.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/safepoint.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -32,10 +32,12 @@ #include "code/scopeDesc.hpp" #include "gc_interface/collectedHeap.hpp" #include "interpreter/interpreter.hpp" +#include "memory/gcLocker.inline.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/compilationPolicy.hpp" #include "runtime/deoptimization.hpp" #include "runtime/frame.inline.hpp" @@ -264,8 +266,8 @@ // // Further complicating matters is that yield() does not work as naively expected // on many platforms -- yield() does not guarantee that any other ready threads - // will run. As such we revert yield_all() after some number of iterations. - // Yield_all() is implemented as a short unconditional sleep on some platforms. + // will run. As such we revert to naked_short_sleep() after some number of iterations. + // nakes_short_sleep() is implemented as a short unconditional sleep. // Typical operating systems round a "short" sleep period up to 10 msecs, so sleeping // can actually increase the time it takes the VM thread to detect that a system-wide // stop-the-world safepoint has been reached. In a pathological scenario such as that @@ -322,9 +324,7 @@ if (steps < DeferThrSuspendLoopCount) { os::NakedYield() ; } else { - os::yield_all() ; - // Alternately, the VM thread could transiently depress its scheduling priority or - // transiently increase the priority of the tardy mutator(s). + os::naked_short_sleep(1); } iterations ++ ; @@ -744,80 +744,12 @@ // ------------------------------------------------------------------------------------------------------ // Exception handlers -#ifndef PRODUCT - -#ifdef SPARC - -#ifdef _LP64 -#define PTR_PAD "" -#else -#define PTR_PAD " " -#endif - -static void print_ptrs(intptr_t oldptr, intptr_t newptr, bool wasoop) { - bool is_oop = newptr ? (cast_to_oop(newptr))->is_oop() : false; - tty->print_cr(PTR_FORMAT PTR_PAD " %s %c " PTR_FORMAT PTR_PAD " %s %s", - oldptr, wasoop?"oop":" ", oldptr == newptr ? ' ' : '!', - newptr, is_oop?"oop":" ", (wasoop && !is_oop) ? "STALE" : ((wasoop==false&&is_oop==false&&oldptr !=newptr)?"STOMP":" ")); -} - -static void print_longs(jlong oldptr, jlong newptr, bool wasoop) { - bool is_oop = newptr ? (cast_to_oop(newptr))->is_oop() : false; - tty->print_cr(PTR64_FORMAT " %s %c " PTR64_FORMAT " %s %s", - oldptr, wasoop?"oop":" ", oldptr == newptr ? ' ' : '!', - newptr, is_oop?"oop":" ", (wasoop && !is_oop) ? "STALE" : ((wasoop==false&&is_oop==false&&oldptr !=newptr)?"STOMP":" ")); -} - -static void print_me(intptr_t *new_sp, intptr_t *old_sp, bool *was_oops) { -#ifdef _LP64 - tty->print_cr("--------+------address-----+------before-----------+-------after----------+"); - const int incr = 1; // Increment to skip a long, in units of intptr_t -#else - tty->print_cr("--------+--address-+------before-----------+-------after----------+"); - const int incr = 2; // Increment to skip a long, in units of intptr_t -#endif - tty->print_cr("---SP---|"); - for( int i=0; i<16; i++ ) { - tty->print("blob %c%d |"PTR_FORMAT" ","LO"[i>>3],i&7,new_sp); print_ptrs(*old_sp++,*new_sp++,*was_oops++); } - tty->print_cr("--------|"); - for( int i1=0; i1print("argv pad|"PTR_FORMAT" ",new_sp); print_ptrs(*old_sp++,*new_sp++,*was_oops++); } - tty->print(" pad|"PTR_FORMAT" ",new_sp); print_ptrs(*old_sp++,*new_sp++,*was_oops++); - tty->print_cr("--------|"); - tty->print(" G1 |"PTR_FORMAT" ",new_sp); print_longs(*(jlong*)old_sp,*(jlong*)new_sp,was_oops[incr-1]); old_sp += incr; new_sp += incr; was_oops += incr; - tty->print(" G3 |"PTR_FORMAT" ",new_sp); print_longs(*(jlong*)old_sp,*(jlong*)new_sp,was_oops[incr-1]); old_sp += incr; new_sp += incr; was_oops += incr; - tty->print(" G4 |"PTR_FORMAT" ",new_sp); print_longs(*(jlong*)old_sp,*(jlong*)new_sp,was_oops[incr-1]); old_sp += incr; new_sp += incr; was_oops += incr; - tty->print(" G5 |"PTR_FORMAT" ",new_sp); print_longs(*(jlong*)old_sp,*(jlong*)new_sp,was_oops[incr-1]); old_sp += incr; new_sp += incr; was_oops += incr; - tty->print_cr(" FSR |"PTR_FORMAT" "PTR64_FORMAT" "PTR64_FORMAT,new_sp,*(jlong*)old_sp,*(jlong*)new_sp); - old_sp += incr; new_sp += incr; was_oops += incr; - // Skip the floats - tty->print_cr("--Float-|"PTR_FORMAT,new_sp); - tty->print_cr("---FP---|"); - old_sp += incr*32; new_sp += incr*32; was_oops += incr*32; - for( int i2=0; i2<16; i2++ ) { - tty->print("call %c%d |"PTR_FORMAT" ","LI"[i2>>3],i2&7,new_sp); print_ptrs(*old_sp++,*new_sp++,*was_oops++); } - tty->cr(); -} -#endif // SPARC -#endif // PRODUCT - void SafepointSynchronize::handle_polling_page_exception(JavaThread *thread) { assert(thread->is_Java_thread(), "polling reference encountered by VM thread"); assert(thread->thread_state() == _thread_in_Java, "should come from Java code"); assert(SafepointSynchronize::is_synchronizing(), "polling encountered outside safepoint synchronization"); - // Uncomment this to get some serious before/after printing of the - // Sparc safepoint-blob frame structure. - /* - intptr_t* sp = thread->last_Java_sp(); - intptr_t stack_copy[150]; - for( int i=0; i<150; i++ ) stack_copy[i] = sp[i]; - bool was_oops[150]; - for( int i=0; i<150; i++ ) - was_oops[i] = stack_copy[i] ? ((oop)stack_copy[i])->is_oop() : false; - */ - if (ShowSafepointMsgs) { tty->print("handle_polling_page_exception: "); } @@ -829,7 +761,6 @@ ThreadSafepointState* state = thread->safepoint_state(); state->handle_polling_page_exception(); - // print_me(sp,stack_copy,was_oops); } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/sharedRuntime.cpp --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -42,6 +42,7 @@ #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/methodHandles.hpp" #include "prims/nativeLookup.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/arguments.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/handles.inline.hpp" @@ -1176,10 +1177,7 @@ (!is_virtual && invoke_code == Bytecodes::_invokedynamic) || ( is_virtual && invoke_code != Bytecodes::_invokestatic ), "inconsistent bytecode"); - // We do not patch the call site if the caller nmethod has been made non-entrant. - if (!caller_nm->is_in_use()) { - return callee_method; - } + assert(caller_nm->is_alive(), "It should be alive"); #ifndef PRODUCT // tracing/debugging/statistics @@ -1249,13 +1247,11 @@ // Now that we are ready to patch if the Method* was redefined then // don't update call site and let the caller retry. - // Don't update call site if caller nmethod has been made non-entrant - // as it is a waste of time. // Don't update call site if callee nmethod was unloaded or deoptimized. // Don't update call site if callee nmethod was replaced by an other nmethod // which may happen when multiply alive nmethod (tiered compilation) // will be supported. - if (!callee_method->is_old() && caller_nm->is_in_use() && + if (!callee_method->is_old() && (callee_nm == NULL || callee_nm->is_in_use() && (callee_method->code() == callee_nm))) { #ifdef ASSERT // We must not try to patch to jump to an already unloaded method. @@ -1454,14 +1450,12 @@ // out of scope. JvmtiDynamicCodeEventCollector event_collector; - // Update inline cache to megamorphic. Skip update if caller has been - // made non-entrant or we are called from interpreted. + // Update inline cache to megamorphic. Skip update if we are called from interpreted. { MutexLocker ml_patch (CompiledIC_lock); RegisterMap reg_map(thread, false); frame caller_frame = thread->last_frame().sender(®_map); CodeBlob* cb = caller_frame.cb(); - if (cb->is_nmethod() && ((nmethod*)cb)->is_in_use()) { - // Not a non-entrant nmethod, so find inline_cache + if (cb->is_nmethod()) { CompiledIC* inline_cache = CompiledIC_before(((nmethod*)cb), caller_frame.pc()); bool should_be_mono = false; if (inline_cache->is_optimized()) { @@ -1604,19 +1598,13 @@ // resolve is only done once. MutexLocker ml(CompiledIC_lock); - // - // We do not patch the call site if the nmethod has been made non-entrant - // as it is a waste of time - // - if (caller_nm->is_in_use()) { - if (is_static_call) { - CompiledStaticCall* ssc= compiledStaticCall_at(call_addr); - ssc->set_to_clean(); - } else { - // compiled, dispatched call (which used to call an interpreted method) - CompiledIC* inline_cache = CompiledIC_at(caller_nm, call_addr); - inline_cache->set_to_clean(); - } + if (is_static_call) { + CompiledStaticCall* ssc= compiledStaticCall_at(call_addr); + ssc->set_to_clean(); + } else { + // compiled, dispatched call (which used to call an interpreted method) + CompiledIC* inline_cache = CompiledIC_at(caller_nm, call_addr); + inline_cache->set_to_clean(); } } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/sweeper.cpp --- a/hotspot/src/share/vm/runtime/sweeper.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/sweeper.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -30,7 +30,7 @@ #include "compiler/compileBroker.hpp" #include "memory/resourceArea.hpp" #include "oops/method.hpp" -#include "runtime/atomic.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/compilationPolicy.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/orderAccess.inline.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/synchronizer.cpp --- a/hotspot/src/share/vm/runtime/synchronizer.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/synchronizer.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -27,6 +27,7 @@ #include "memory/resourceArea.hpp" #include "oops/markOop.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/handles.inline.hpp" #include "runtime/interfaceSupport.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/thread.cpp --- a/hotspot/src/share/vm/runtime/thread.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/thread.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -46,6 +46,7 @@ #include "prims/jvmtiThreadState.hpp" #include "prims/privilegedStack.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/deoptimization.hpp" #include "runtime/fprofiler.hpp" @@ -1357,14 +1358,24 @@ } void WatcherThread::stop() { - { - MutexLockerEx ml(PeriodicTask_lock, Mutex::_no_safepoint_check_flag); - _should_terminate = true; - OrderAccess::fence(); // ensure WatcherThread sees update in main loop - + // Get the PeriodicTask_lock if we can. If we cannot, then the + // WatcherThread is using it and we don't want to block on that lock + // here because that might cause a safepoint deadlock depending on + // what the current WatcherThread tasks are doing. + bool have_lock = PeriodicTask_lock->try_lock(); + + _should_terminate = true; + OrderAccess::fence(); // ensure WatcherThread sees update in main loop + + if (have_lock) { WatcherThread* watcher = watcher_thread(); - if (watcher != NULL) + if (watcher != NULL) { + // If we managed to get the lock, then we should unpark the + // WatcherThread so that it can see we want it to stop. watcher->unpark(); + } + + PeriodicTask_lock->unlock(); } // it is ok to take late safepoints here, if needed diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/thread.hpp --- a/hotspot/src/share/vm/runtime/thread.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/thread.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -343,42 +343,16 @@ bool has_async_exception() const { return (_suspend_flags & _has_async_exception) != 0; } - void set_suspend_flag(SuspendFlags f) { - assert(sizeof(jint) == sizeof(_suspend_flags), "size mismatch"); - uint32_t flags; - do { - flags = _suspend_flags; - } - while (Atomic::cmpxchg((jint)(flags | f), - (volatile jint*)&_suspend_flags, - (jint)flags) != (jint)flags); - } - void clear_suspend_flag(SuspendFlags f) { - assert(sizeof(jint) == sizeof(_suspend_flags), "size mismatch"); - uint32_t flags; - do { - flags = _suspend_flags; - } - while (Atomic::cmpxchg((jint)(flags & ~f), - (volatile jint*)&_suspend_flags, - (jint)flags) != (jint)flags); - } + inline void set_suspend_flag(SuspendFlags f); + inline void clear_suspend_flag(SuspendFlags f); - void set_has_async_exception() { - set_suspend_flag(_has_async_exception); - } - void clear_has_async_exception() { - clear_suspend_flag(_has_async_exception); - } + inline void set_has_async_exception(); + inline void clear_has_async_exception(); bool do_critical_native_unlock() const { return (_suspend_flags & _critical_native_unlock) != 0; } - void set_critical_native_unlock() { - set_suspend_flag(_critical_native_unlock); - } - void clear_critical_native_unlock() { - clear_suspend_flag(_critical_native_unlock); - } + inline void set_critical_native_unlock(); + inline void clear_critical_native_unlock(); // Support for Unhandled Oop detection #ifdef CHECK_UNHANDLED_OOPS @@ -1074,8 +1048,8 @@ // Suspend/resume support for JavaThread private: - void set_ext_suspended() { set_suspend_flag (_ext_suspended); } - void clear_ext_suspended() { clear_suspend_flag(_ext_suspended); } + inline void set_ext_suspended(); + inline void clear_ext_suspended(); public: void java_suspend(); @@ -1123,11 +1097,11 @@ // via the appropriate -XX options. bool wait_for_ext_suspend_completion(int count, int delay, uint32_t *bits); - void set_external_suspend() { set_suspend_flag (_external_suspend); } - void clear_external_suspend() { clear_suspend_flag(_external_suspend); } + inline void set_external_suspend(); + inline void clear_external_suspend(); - void set_deopt_suspend() { set_suspend_flag (_deopt_suspend); } - void clear_deopt_suspend() { clear_suspend_flag(_deopt_suspend); } + inline void set_deopt_suspend(); + inline void clear_deopt_suspend(); bool is_deopt_suspend() { return (_suspend_flags & _deopt_suspend) != 0; } bool is_external_suspend() const { @@ -1215,11 +1189,7 @@ void set_pending_unsafe_access_error() { _special_runtime_exit_condition = _async_unsafe_access_error; } - void set_pending_async_exception(oop e) { - _pending_async_exception = e; - _special_runtime_exit_condition = _async_exception; - set_has_async_exception(); - } + inline void set_pending_async_exception(oop e); // Fast-locking support bool is_lock_owned(address adr) const; diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/thread.inline.hpp --- a/hotspot/src/share/vm/runtime/thread.inline.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/thread.inline.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -27,6 +27,7 @@ #define SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE +#include "runtime/atomic.inline.hpp" #include "runtime/thread.hpp" #ifdef TARGET_OS_FAMILY_linux # include "thread_linux.inline.hpp" @@ -46,6 +47,40 @@ #undef SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE +inline void Thread::set_suspend_flag(SuspendFlags f) { + assert(sizeof(jint) == sizeof(_suspend_flags), "size mismatch"); + uint32_t flags; + do { + flags = _suspend_flags; + } + while (Atomic::cmpxchg((jint)(flags | f), + (volatile jint*)&_suspend_flags, + (jint)flags) != (jint)flags); +} +inline void Thread::clear_suspend_flag(SuspendFlags f) { + assert(sizeof(jint) == sizeof(_suspend_flags), "size mismatch"); + uint32_t flags; + do { + flags = _suspend_flags; + } + while (Atomic::cmpxchg((jint)(flags & ~f), + (volatile jint*)&_suspend_flags, + (jint)flags) != (jint)flags); +} + +inline void Thread::set_has_async_exception() { + set_suspend_flag(_has_async_exception); +} +inline void Thread::clear_has_async_exception() { + clear_suspend_flag(_has_async_exception); +} +inline void Thread::set_critical_native_unlock() { + set_suspend_flag(_critical_native_unlock); +} +inline void Thread::clear_critical_native_unlock() { + clear_suspend_flag(_critical_native_unlock); +} + inline jlong Thread::cooked_allocated_bytes() { jlong allocated_bytes = OrderAccess::load_acquire(&_allocated_bytes); if (UseTLAB) { @@ -59,6 +94,33 @@ return allocated_bytes; } +inline void JavaThread::set_ext_suspended() { + set_suspend_flag (_ext_suspended); +} +inline void JavaThread::clear_ext_suspended() { + clear_suspend_flag(_ext_suspended); +} + +inline void JavaThread::set_external_suspend() { + set_suspend_flag(_external_suspend); +} +inline void JavaThread::clear_external_suspend() { + clear_suspend_flag(_external_suspend); +} + +inline void JavaThread::set_deopt_suspend() { + set_suspend_flag(_deopt_suspend); +} +inline void JavaThread::clear_deopt_suspend() { + clear_suspend_flag(_deopt_suspend); +} + +inline void JavaThread::set_pending_async_exception(oop e) { + _pending_async_exception = e; + _special_runtime_exit_condition = _async_exception; + set_has_async_exception(); +} + #ifdef PPC64 inline JavaThreadState JavaThread::thread_state() const { return (JavaThreadState) OrderAccess::load_acquire((volatile jint*)&_thread_state); diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/virtualspace.cpp diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/vmStructs.cpp --- a/hotspot/src/share/vm/runtime/vmStructs.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -104,6 +104,7 @@ #include "utilities/globalDefinitions.hpp" #include "utilities/hashtable.hpp" #include "utilities/macros.hpp" + #ifdef TARGET_ARCH_x86 # include "vmStructs_x86.hpp" #endif @@ -168,6 +169,11 @@ #include "gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp" #include "gc_implementation/g1/vmStructs_g1.hpp" #endif // INCLUDE_ALL_GCS + +#if INCLUDE_TRACE + #include "runtime/vmStructs_trace.hpp" +#endif + #ifdef COMPILER2 #include "opto/addnode.hpp" #include "opto/block.hpp" @@ -1390,6 +1396,8 @@ /* unsigned short on Win32 */ \ declare_unsigned_integer_type(u1) \ declare_unsigned_integer_type(u2) \ + declare_unsigned_integer_type(u4) \ + declare_unsigned_integer_type(u8) \ declare_unsigned_integer_type(unsigned) \ \ /*****************************/ \ @@ -2923,6 +2931,11 @@ GENERATE_STATIC_VM_STRUCT_ENTRY) #endif // INCLUDE_ALL_GCS +#if INCLUDE_TRACE + VM_STRUCTS_TRACE(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, + GENERATE_STATIC_VM_STRUCT_ENTRY) +#endif + VM_STRUCTS_CPU(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, GENERATE_STATIC_VM_STRUCT_ENTRY, GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, @@ -2968,6 +2981,11 @@ GENERATE_TOPLEVEL_VM_TYPE_ENTRY) #endif // INCLUDE_ALL_GCS +#if INCLUDE_TRACE + VM_TYPES_TRACE(GENERATE_VM_TYPE_ENTRY, + GENERATE_TOPLEVEL_VM_TYPE_ENTRY) +#endif + VM_TYPES_CPU(GENERATE_VM_TYPE_ENTRY, GENERATE_TOPLEVEL_VM_TYPE_ENTRY, GENERATE_OOP_VM_TYPE_ENTRY, @@ -3003,6 +3021,10 @@ VM_INT_CONSTANTS_PARNEW(GENERATE_VM_INT_CONSTANT_ENTRY) #endif // INCLUDE_ALL_GCS +#if INCLUDE_TRACE + VM_INT_CONSTANTS_TRACE(GENERATE_VM_INT_CONSTANT_ENTRY) +#endif + VM_INT_CONSTANTS_CPU(GENERATE_VM_INT_CONSTANT_ENTRY, GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, GENERATE_C1_VM_INT_CONSTANT_ENTRY, @@ -3065,8 +3087,14 @@ VM_STRUCTS_G1(CHECK_NONSTATIC_VM_STRUCT_ENTRY, CHECK_STATIC_VM_STRUCT_ENTRY); + #endif // INCLUDE_ALL_GCS +#if INCLUDE_TRACE + VM_STRUCTS_TRACE(CHECK_NONSTATIC_VM_STRUCT_ENTRY, + CHECK_STATIC_VM_STRUCT_ENTRY); +#endif + VM_STRUCTS_CPU(CHECK_NONSTATIC_VM_STRUCT_ENTRY, CHECK_STATIC_VM_STRUCT_ENTRY, CHECK_NO_OP, @@ -3105,8 +3133,14 @@ VM_TYPES_G1(CHECK_VM_TYPE_ENTRY, CHECK_SINGLE_ARG_VM_TYPE_NO_OP); + #endif // INCLUDE_ALL_GCS +#if INCLUDE_TRACE + VM_TYPES_TRACE(CHECK_VM_TYPE_ENTRY, + CHECK_SINGLE_ARG_VM_TYPE_NO_OP); +#endif + VM_TYPES_CPU(CHECK_VM_TYPE_ENTRY, CHECK_SINGLE_ARG_VM_TYPE_NO_OP, CHECK_SINGLE_ARG_VM_TYPE_NO_OP, @@ -3169,6 +3203,12 @@ debug_only(VM_STRUCTS_G1(ENSURE_FIELD_TYPE_PRESENT, ENSURE_FIELD_TYPE_PRESENT)); #endif // INCLUDE_ALL_GCS + +#if INCLUDE_TRACE + debug_only(VM_STRUCTS_TRACE(ENSURE_FIELD_TYPE_PRESENT, + ENSURE_FIELD_TYPE_PRESENT)); +#endif + debug_only(VM_STRUCTS_CPU(ENSURE_FIELD_TYPE_PRESENT, ENSURE_FIELD_TYPE_PRESENT, CHECK_NO_OP, diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/vmStructs_trace.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/runtime/vmStructs_trace.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,35 @@ +/* + * 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_VMSTRUCTS_TRACE_HPP +#define SHARE_VM_RUNTIME_VMSTRUCTS_TRACE_HPP + +#define VM_INT_CONSTANTS_TRACE(a) + +#define VM_STRUCTS_TRACE(a, b) + +#define VM_TYPES_TRACE(a, b) + + +#endif // SHARE_VM_RUNTIME_VMSTRUCTS_TRACE_HPP diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/runtime/vm_version.cpp --- a/hotspot/src/share/vm/runtime/vm_version.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/runtime/vm_version.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -72,14 +72,16 @@ #ifndef JRE_RELEASE_VERSION #error JRE_RELEASE_VERSION must be defined #endif -#ifndef HOTSPOT_BUILD_TARGET - #error HOTSPOT_BUILD_TARGET must be defined -#endif -#ifdef PRODUCT +// NOTE: Builds within Visual Studio do not define the build target in +// HOTSPOT_RELEASE_VERSION, so it must be done here +#if defined(VISUAL_STUDIO_BUILD) && !defined(PRODUCT) + #ifndef HOTSPOT_BUILD_TARGET + #error HOTSPOT_BUILD_TARGET must be defined + #endif + #define VM_RELEASE HOTSPOT_RELEASE_VERSION "-" HOTSPOT_BUILD_TARGET +#else #define VM_RELEASE HOTSPOT_RELEASE_VERSION -#else - #define VM_RELEASE HOTSPOT_RELEASE_VERSION "-" HOTSPOT_BUILD_TARGET #endif // HOTSPOT_RELEASE_VERSION follows the JDK release version naming convention diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/services/memPtr.cpp --- a/hotspot/src/share/vm/services/memPtr.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/services/memPtr.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "runtime/atomic.inline.hpp" #include "services/memPtr.hpp" #include "services/memTracker.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/services/memPtr.hpp --- a/hotspot/src/share/vm/services/memPtr.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/services/memPtr.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -26,7 +26,6 @@ #define SHARE_VM_SERVICES_MEM_PTR_HPP #include "memory/allocation.hpp" -#include "runtime/atomic.hpp" #include "runtime/os.hpp" #include "runtime/safepoint.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/services/memRecorder.cpp --- a/hotspot/src/share/vm/services/memRecorder.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/services/memRecorder.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -24,7 +24,7 @@ #include "precompiled.hpp" -#include "runtime/atomic.hpp" +#include "runtime/atomic.inline.hpp" #include "services/memBaseline.hpp" #include "services/memRecorder.hpp" #include "services/memPtr.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/services/memTracker.cpp --- a/hotspot/src/share/vm/services/memTracker.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/services/memTracker.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "oops/instanceKlass.hpp" -#include "runtime/atomic.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/safepoint.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/services/memTracker.hpp --- a/hotspot/src/share/vm/services/memTracker.hpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/services/memTracker.hpp Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 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 @@ -481,17 +481,9 @@ if (_slowdown_calling_thread && thr != _worker_thread) { #ifdef _WINDOWS // On Windows, os::NakedYield() does not work as well - // as os::yield_all() - os::yield_all(); + // as short sleep. + os::naked_short_sleep(1); #else - // On Solaris, os::yield_all() depends on os::sleep() - // which requires JavaTherad in _thread_in_vm state. - // Transits thread to _thread_in_vm state can be dangerous - // if caller holds lock, as it may deadlock with Threads_lock. - // So use NaKedYield instead. - // - // Linux and BSD, NakedYield() and yield_all() implementations - // are the same. os::NakedYield(); #endif } diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/services/threadService.cpp --- a/hotspot/src/share/vm/services/threadService.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/services/threadService.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -29,6 +29,7 @@ #include "memory/oopFactory.hpp" #include "oops/instanceKlass.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/init.hpp" #include "runtime/thread.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/shark/sharkRuntime.cpp --- a/hotspot/src/share/vm/shark/sharkRuntime.cpp Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/shark/sharkRuntime.cpp Wed Jul 05 19:50:00 2017 +0200 @@ -24,6 +24,7 @@ */ #include "precompiled.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/deoptimization.hpp" #include "runtime/thread.hpp" diff -r 376a52c9540c -r acabdf6da9db hotspot/src/share/vm/trace/tracetypes.xml --- a/hotspot/src/share/vm/trace/tracetypes.xml Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/src/share/vm/trace/tracetypes.xml Wed Jul 05 19:50:00 2017 +0200 @@ -98,6 +98,7 @@ + finalargs = new ArrayList(); String[] defaultArgs = new String[] { "-XX:+UseG1GC", - "-XX:+UseCompressedOops", "-Xmn4m", "-Xmx20m", "-XX:InitiatingHeapOccupancyPercent=100", // we don't want the additional GCs due to initial marking diff -r 376a52c9540c -r acabdf6da9db hotspot/test/gc/logging/TestGCId.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/gc/logging/TestGCId.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,91 @@ +/* + * 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 TestGCId + * @bug 8043607 + * @summary Ensure that the GCId is logged + * @key gc + * @library /testlibrary + */ + +import com.oracle.java.testlibrary.ProcessTools; +import com.oracle.java.testlibrary.OutputAnalyzer; + +public class TestGCId { + public static void main(String[] args) throws Exception { + testGCId("UseParallelGC", "PrintGC"); + testGCId("UseParallelGC", "PrintGCDetails"); + + testGCId("UseG1GC", "PrintGC"); + testGCId("UseG1GC", "PrintGCDetails"); + + testGCId("UseConcMarkSweepGC", "PrintGC"); + testGCId("UseConcMarkSweepGC", "PrintGCDetails"); + + testGCId("UseSerialGC", "PrintGC"); + testGCId("UseSerialGC", "PrintGCDetails"); + } + + private static void verifyContainsGCIDs(OutputAnalyzer output) { + output.shouldMatch("^#0: \\["); + output.shouldMatch("^#1: \\["); + output.shouldHaveExitValue(0); + } + + private static void verifyContainsNoGCIDs(OutputAnalyzer output) { + output.shouldNotMatch("^#[0-9]+: \\["); + output.shouldHaveExitValue(0); + } + + private static void testGCId(String gcFlag, String logFlag) throws Exception { + // GCID logging enabled + ProcessBuilder pb_enabled = + ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-XX:+" + logFlag, "-Xmx10M", "-XX:+PrintGCID", GCTest.class.getName()); + verifyContainsGCIDs(new OutputAnalyzer(pb_enabled.start())); + + // GCID logging disabled + ProcessBuilder pb_disabled = + ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-XX:+" + logFlag, "-Xmx10M", "-XX:-PrintGCID", GCTest.class.getName()); + verifyContainsNoGCIDs(new OutputAnalyzer(pb_disabled.start())); + + // GCID logging default + ProcessBuilder pb_default = + ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-XX:+" + logFlag, "-Xmx10M", GCTest.class.getName()); + verifyContainsGCIDs(new OutputAnalyzer(pb_default.start())); + } + + static class GCTest { + private static byte[] garbage; + public static void main(String [] args) { + System.out.println("Creating garbage"); + // create 128MB of garbage. This should result in at least one GC + for (int i = 0; i < 1024; i++) { + garbage = new byte[128 * 1024]; + } + // do a system gc to get one more gc + System.gc(); + System.out.println("Done"); + } + } +} diff -r 376a52c9540c -r acabdf6da9db hotspot/test/runtime/8001071/Test8001071.java --- a/hotspot/test/runtime/8001071/Test8001071.java Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +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. - */ - -import sun.misc.Unsafe; -import java.lang.reflect.Field; - -@SuppressWarnings("sunapi") -public class Test8001071 { - public static Unsafe unsafe; - - static { - try { - Field f = Unsafe.class.getDeclaredField("theUnsafe"); - f.setAccessible(true); - unsafe = (Unsafe) f.get(null); - } catch ( Exception e ) { - e.printStackTrace(); - } - } - - public static void main(String args[]) { - unsafe.getObject(new Test8001071(), Short.MAX_VALUE); - } - -} diff -r 376a52c9540c -r acabdf6da9db hotspot/test/runtime/8001071/Test8001071.sh --- a/hotspot/test/runtime/8001071/Test8001071.sh Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +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 -## @bug 8001071 -## @summary Add simple range check into VM implemenation of Unsafe access methods -## @compile Test8001071.java -## @run shell Test8001071.sh -## @author filipp.zhinkin@oracle.com - -VERSION=`${TESTJAVA}/bin/java ${TESTVMOPTS} -version 2>&1` - -if [ -n "`echo $VERSION | grep debug`" -o -n "`echo $VERSION | grep jvmg`" ]; then - echo "Build type check passed" - echo "Continue testing" -else - echo "Fastdebug build is required for this test" - exit 0 -fi - -${TESTJAVA}/bin/java -cp ${TESTCLASSES} ${TESTVMOPTS} Test8001071 2>&1 - -HS_ERR_FILE=hs_err_pid*.log - -if [ ! -f $HS_ERR_FILE ] -then - echo "hs_err_pid log file was not found" - echo "Test failed" - exit 1 -fi - -grep "assert(byte_offset < p_size) failed: Unsafe access: offset.*> object's size.*" $HS_ERR_FILE - -if [ "0" = "$?" ]; -then - echo "Range check assertion failed as expected" - echo "Test passed" - exit 0 -else - echo "Range check assertion was not failed" - echo "Test failed" - exit 1 -fi diff -r 376a52c9540c -r acabdf6da9db hotspot/test/runtime/CDSCompressedKPtrs/XShareAuto.java --- a/hotspot/test/runtime/CDSCompressedKPtrs/XShareAuto.java Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/test/runtime/CDSCompressedKPtrs/XShareAuto.java Wed Jul 05 19:50:00 2017 +0200 @@ -44,8 +44,16 @@ "-server", "-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./sample.jsa", "-version"); output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("sharing"); - output.shouldHaveExitValue(0); + // We asked for server but it could be aliased to something else + if (output.getOutput().contains("Server VM")) { + // In server case we don't expect to see sharing flag + output.shouldNotContain("sharing"); + output.shouldHaveExitValue(0); + } + else { + System.out.println("Skipping test - no Server VM available"); + return; + } pb = ProcessTools.createJavaProcessBuilder( "-server", "-Xshare:auto", "-XX:+UnlockDiagnosticVMOptions", diff -r 376a52c9540c -r acabdf6da9db hotspot/test/runtime/Unsafe/RangeCheck.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/Unsafe/RangeCheck.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,59 @@ +/* + * 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 + * @bug 8001071 + * @summary Add simple range check into VM implemenation of Unsafe access methods + * @library /testlibrary + */ + +import com.oracle.java.testlibrary.*; +import sun.misc.Unsafe; + +public class RangeCheck { + + public static void main(String args[]) throws Exception { + if (!Platform.isDebugBuild()) { + System.out.println("Testing assert which requires a debug build. Passing silently."); + return; + } + + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + true, + "-Xmx32m", + "-XX:-TransmitErrorReport", + "-XX:-InlineUnsafeOps", // The compiler intrinsics doesn't have the assert + DummyClassWithMainRangeCheck.class.getName()); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldMatch("assert\\(byte_offset < p_size\\) failed: Unsafe access: offset \\d+ > object's size \\d+"); + } + + public static class DummyClassWithMainRangeCheck { + public static void main(String args[]) throws Exception { + Unsafe unsafe = Utils.getUnsafe(); + unsafe.getObject(new DummyClassWithMainRangeCheck(), Short.MAX_VALUE); + } + } +} diff -r 376a52c9540c -r acabdf6da9db hotspot/test/runtime/memory/ReadFromNoaccessArea.java --- a/hotspot/test/runtime/memory/ReadFromNoaccessArea.java Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/test/runtime/memory/ReadFromNoaccessArea.java Wed Jul 05 19:50:00 2017 +0200 @@ -47,6 +47,7 @@ "-XX:+WhiteBoxAPI", "-XX:+UseCompressedOops", "-XX:HeapBaseMinAddress=33G", + "-Xmx32m", DummyClassWithMainTryingToReadFromNoaccessArea.class.getName()); OutputAnalyzer output = new OutputAnalyzer(pb.start()); diff -r 376a52c9540c -r acabdf6da9db hotspot/test/runtime/memory/ReserveMemory.java --- a/hotspot/test/runtime/memory/ReserveMemory.java Sun Jun 15 08:41:57 2014 -0700 +++ b/hotspot/test/runtime/memory/ReserveMemory.java Wed Jul 05 19:50:00 2017 +0200 @@ -57,6 +57,7 @@ "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", "-XX:-TransmitErrorReport", + "-Xmx32m", "ReserveMemory", "test"); diff -r 376a52c9540c -r acabdf6da9db hotspot/test/runtime/verifier/TestANewArray.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/verifier/TestANewArray.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,148 @@ +/* + * 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.File; +import java.io.FileOutputStream; + +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import static jdk.internal.org.objectweb.asm.Opcodes.*; + +import com.oracle.java.testlibrary.*; + +/* + * @test + * @summary Test that anewarray bytecode is valid only if it specifies 255 or fewer dimensions. + * @library /testlibrary + * @compile -XDignore.symbol.file TestANewArray.java + * @run main/othervm TestANewArray 49 + * @run main/othervm TestANewArray 50 + * @run main/othervm TestANewArray 51 + * @run main/othervm TestANewArray 52 + */ + +/* + * Testing anewarray instruction with 254, 255 & 264 dimensions to verify JVMS 8, + * Section 4.9.1, Static Constraints that states the following: + * + * "No anewarray instruction may be used to create an array of more than 255 dimensions." + * + */ + +public class TestANewArray { + + static String classCName = null; // the generated class name + + static final int test_Dimension_254 = 254; // should always pass + static final int test_Dimension_255 = 255; // should always pass, except for cfv 49 + static final int test_Dimension_264 = 264; // should always fail + + static final String array_Dimension_254 = genArrayDim(test_Dimension_254); + static final String array_Dimension_255 = genArrayDim(test_Dimension_255); + static final String array_Dimension_264 = genArrayDim(test_Dimension_264); + + public static void main(String... args) throws Exception { + int cfv = Integer.parseInt(args[0]); + + // 254 array dimensions + byte[] classFile_254 = dumpClassFile(cfv, test_Dimension_254, array_Dimension_254); + writeClassFileFromByteArray(classFile_254); + System.err.println("Running with cfv: " + cfv + ", test_Dimension_254"); + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, "-verify", "-cp", ".", classCName); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldNotContain("java.lang.VerifyError"); + output.shouldHaveExitValue(0); + + // 255 array dimensions + byte[] classFile_255 = dumpClassFile(cfv, test_Dimension_255, array_Dimension_255); + writeClassFileFromByteArray(classFile_255); + System.err.println("Running with cfv: " + cfv + ", test_Dimension_255"); + pb = ProcessTools.createJavaProcessBuilder(true, "-verify", "-cp", ".", classCName); + output = new OutputAnalyzer(pb.start()); + if (cfv == 49) { + // The type-inferencing verifier used for <=49.0 ClassFiles detects an anewarray instruction + // with exactly 255 dimensions and incorrectly issues the "Array with too many dimensions" VerifyError. + output.shouldContain("Array with too many dimensions"); + output.shouldHaveExitValue(1); + } else { + // 255 dimensions should always pass, except for cfv 49 + output.shouldNotContain("java.lang.VerifyError"); + output.shouldNotContain("java.lang.ClassFormatError"); + output.shouldHaveExitValue(0); + } + + // 264 array dimensions + byte[] classFile_264 = dumpClassFile(cfv, test_Dimension_264, array_Dimension_264); + writeClassFileFromByteArray(classFile_264); + System.err.println("Running with cfv: " + cfv + ", test_Dimension_264"); + pb = ProcessTools.createJavaProcessBuilder(true, "-verify", "-cp", ".", classCName); + output = new OutputAnalyzer(pb.start()); + output.shouldContain("java.lang.ClassFormatError"); + output.shouldHaveExitValue(1); + } + + public static byte[] dumpClassFile(int cfv, int testDimension264, String arrayDim) throws Exception { + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + MethodVisitor mv; + + classCName = "classCName_" + cfv + "_" + testDimension264; + + cw.visit(cfv, ACC_PUBLIC + ACC_SUPER, classCName, null, "java/lang/Object", null); + { + mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null); + mv.visitCode(); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V", false); + mv.visitInsn(RETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + } + { // classCName main method + mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null); + mv.visitCode(); + mv.visitIntInsn(BIPUSH, 1); + mv.visitTypeInsn(ANEWARRAY, arrayDim); // Test ANEWARRAY bytecode with various dimensions + mv.visitInsn(RETURN); + mv.visitMaxs(2, 2); + mv.visitEnd(); + } + cw.visitEnd(); + return cw.toByteArray(); + } + + public static FileOutputStream writeClassFileFromByteArray(byte[] classFileByteArray) throws Exception { + FileOutputStream fos = new FileOutputStream(new File(classCName + ".class")); + fos.write(classFileByteArray); + fos.close(); + return fos; + } + + private static String genArrayDim(int testDim) { + StringBuilder array_Dimension = new StringBuilder(); + for (int i = 0; i < testDim; i++) + { + array_Dimension.append("["); + } + return array_Dimension.append("Ljava/lang/Object;").toString(); + } +} diff -r 376a52c9540c -r acabdf6da9db jaxp/.hgtags --- a/jaxp/.hgtags Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxp/.hgtags Wed Jul 05 19:50:00 2017 +0200 @@ -264,3 +264,4 @@ f9c82769a6bc2b219a8f01c24afe5c91039267d7 jdk9-b19 94fd4d9d3a75819644b21e18c8a567fd0e973eaf jdk9-b20 7eb0ab676ea75cb1dd31c613e77008a7d8cb0af7 jdk9-b21 +82b94ff002c6e007a03bf0f364ca94b381e09135 jdk9-b22 diff -r 376a52c9540c -r acabdf6da9db jaxws/.hgtags --- a/jaxws/.hgtags Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/.hgtags Wed Jul 05 19:50:00 2017 +0200 @@ -267,3 +267,4 @@ 7f922a73e8a2c6ce42634238090fce7c6d599541 jdk9-b19 6a9f8ff45c04a172df446a418c586da6a86564d5 jdk9-b20 4a099451fd7e17b6cc4772fe9547907576a45b6f jdk9-b21 +7f5e5902cde75fd9335c52f469491f061fe0239e jdk9-b22 diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/istack/internal/ByteArrayDataSource.java --- a/jaxws/src/share/jaxws_classes/com/sun/istack/internal/ByteArrayDataSource.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/istack/internal/ByteArrayDataSource.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -41,9 +41,19 @@ private final byte[] buf; private final int len; + /** + * @param buf input buffer - the byte array isn't being copied; used directly + * @param contentType + */ public ByteArrayDataSource(byte[] buf, String contentType) { this(buf,buf.length,contentType); } + + /** + * @param buf input buffer - the byte array isn't being copied; used directly + * @param length + * @param contentType + */ public ByteArrayDataSource(byte[] buf, int length, String contentType) { this.buf = buf; this.len = length; diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/istack/internal/XMLStreamReaderToContentHandler.java --- a/jaxws/src/share/jaxws_classes/com/sun/istack/internal/XMLStreamReaderToContentHandler.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/istack/internal/XMLStreamReaderToContentHandler.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -91,7 +91,7 @@ this.saxHandler = saxCore; this.eagerQuit = eagerQuit; this.fragment = fragment; - this.inscopeNamespaces = inscopeNamespaces; + this.inscopeNamespaces = inscopeNamespaces.clone(); assert inscopeNamespaces.length%2 == 0; } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle.properties Wed Jul 05 19:50:00 2017 +0200 @@ -30,10 +30,10 @@ Non-existent directory: {0} VERSION = \ - schemagen 2.2.9-b140218.1920 + schemagen 2.2.11-b140528.1207 FULLVERSION = \ - schemagen full version "2.2.9-b140218.1920" + schemagen full version "2.2.11-b140528.1207" USAGE = \ Usage: schemagen [-options ...] \n\ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_de.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_de.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_de.properties Wed Jul 05 19:50:00 2017 +0200 @@ -27,8 +27,8 @@ BASEDIR_DOESNT_EXIST = Nicht vorhandenes Verzeichnis: {0} -VERSION = schemagen 2.2.9-b140218.1920 +VERSION = schemagen 2.2.11-b140528.1207 -FULLVERSION = schemagen vollst\u00E4ndige Version "2.2.9-b140218.1920" +FULLVERSION = schemagen vollst\u00E4ndige Version "2.2.11-b140528.1207" USAGE = Verwendung: schemagen [-options ...] \nOptionen: \n\\ \\ \\ \\ -d : Gibt an, wo die von Prozessor und javac generierten Klassendateien gespeichert werden sollen\n\\ \\ \\ \\ -cp : Gibt an, wo die vom Benutzer angegebenen Dateien gespeichert sind\n\\ \\ \\ \\ -classpath : Gibt an, wo die vom Benutzer angegebenen Dateien gespeichert sind\n\\ \\ \\ \\ -encoding : Gibt die Codierung f\u00FCr die Annotationsverarbeitung/den javac-Aufruf an \n\\ \\ \\ \\ -episode : Generiert Episodendatei f\u00FCr separate Kompilierung\n\\ \\ \\ \\ -version : Zeigt Versionsinformation an\n\\ \\ \\ \\ -fullversion : Zeigt vollst\u00E4ndige Versionsinformationen an\n\\ \\ \\ \\ -help : Zeigt diese Verwendungsmeldung an diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_es.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_es.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_es.properties Wed Jul 05 19:50:00 2017 +0200 @@ -27,8 +27,8 @@ BASEDIR_DOESNT_EXIST = Directorio no existente: {0} -VERSION = schemagen 2.2.9-b140218.1920 +VERSION = schemagen 2.2.11-b140528.1207 -FULLVERSION = versi\u00F3n completa de schemagen "2.2.9-b140218.1920" +FULLVERSION = versi\u00F3n completa de schemagen "2.2.11-b140528.1207" USAGE = Sintaxis: schemagen [-options ...] \nOpciones: \n\\ \\ \\ \\ -d : especifique d\u00F3nde se colocan los archivos de clase generados por javac y el procesador\n\\ \\ \\ \\ -cp : especifique d\u00F3nde se encuentran los archivos especificados por el usuario\n\\ \\ \\ \\ -encoding : especifique la codificaci\u00F3n que se va a utilizar para el procesamiento de anotaciones/llamada de javac\n\\ \\ \\ \\ -episode : genera un archivo de episodio para una compilaci\u00F3n diferente\n\\ \\ \\ \\ -version : muestra la informaci\u00F3n de la versi\u00F3n\n\\ \\ \\ \\ -fullversion : muestra la informaci\u00F3n completa de la versi\u00F3n\n\\ \\ \\ \\ -help : muestra este mensaje de sintaxis diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_fr.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_fr.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_fr.properties Wed Jul 05 19:50:00 2017 +0200 @@ -27,8 +27,8 @@ BASEDIR_DOESNT_EXIST = R\u00E9pertoire {0} inexistant -VERSION = schemagen 2.2.9-b140218.1920 +VERSION = schemagen 2.2.11-b140528.1207 -FULLVERSION = version compl\u00E8te de schemagen "2.2.9-b140218.1920" +FULLVERSION = version compl\u00E8te de schemagen "2.2.11-b140528.1207" USAGE = Syntaxe : schemagen [-options ...] \nOptions : \n\ \ \ \ -d : indiquez o\u00F9 placer les fichiers de classe g\u00E9n\u00E9r\u00E9s par le processeur et le compilateur javac\n\ \ \ \ -cp : indiquez o\u00F9 trouver les fichiers sp\u00E9cifi\u00E9s par l'utilisateur\n\ \ \ \ -classpath : indiquez o\u00F9 trouver les fichiers sp\u00E9cifi\u00E9s par l'utilisateur\n\ \ \ \ -encoding : indiquez l'encodage \u00E0 utiliser pour l'appel de javac/traitement de l'annotation \n\ \ \ \ -episode : g\u00E9n\u00E9rez un fichier d'\u00E9pisode pour la compilation s\u00E9par\u00E9e\n\ \ \ \ -version : affichez les informations de version\n\ \ \ \ -fullversion : affichez les informations compl\u00E8tes de version\n\ \ \ \ -help : affichez ce message de syntaxe diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_it.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_it.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_it.properties Wed Jul 05 19:50:00 2017 +0200 @@ -27,8 +27,8 @@ BASEDIR_DOESNT_EXIST = Directory non esistente: {0} -VERSION = schemagen 2.2.9-b140218.1920 +VERSION = schemagen 2.2.11-b140528.1207 -FULLVERSION = versione completa schemagen "2.2.9-b140218.1920" +FULLVERSION = versione completa schemagen "2.2.11-b140528.1207" USAGE = Uso: schemagen [-options ...] \nOpzioni: \n\ \ \ \ -d : specifica dove posizionare il processore e i file della classe generata javac\n\ \ \ \ -cp : specifica dove trovare i file specificati dall'utente\n\ \ \ \ -classpath : specifica dove trovare i file specificati dall'utente\n\ \ \ \ -encoding : specifica la codifica da usare per l'elaborazione dell'annotazione/richiamo javac \n\ \ \ \ -episode : genera il file di episodio per la compilazione separata\n\ \ \ \ -version : visualizza le informazioni sulla versione\n\ \ \ \ -fullversion : visualizza le informazioni sulla versione completa\n\ \ \ \ -help : visualizza questo messaggio sull'uso diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_ja.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_ja.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_ja.properties Wed Jul 05 19:50:00 2017 +0200 @@ -27,8 +27,8 @@ BASEDIR_DOESNT_EXIST = \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u5B58\u5728\u3057\u307E\u305B\u3093: {0} -VERSION = schemagen 2.2.9-b140218.1920 +VERSION = schemagen 2.2.11-b140528.1207 -FULLVERSION = schemagen\u30D5\u30EB\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3"2.2.9-b140218.1920" +FULLVERSION = schemagen\u30D5\u30EB\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3"2.2.11-b140528.1207" USAGE = \u4F7F\u7528\u65B9\u6CD5: schemagen [-options ...] \n\u30AA\u30D7\u30B7\u30E7\u30F3: \n\ \ \ \ -d : \u30D7\u30ED\u30BB\u30C3\u30B5\u304A\u3088\u3073javac\u304C\u751F\u6210\u3057\u305F\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304F\u4F4D\u7F6E\u3092\u6307\u5B9A\u3057\u307E\u3059\n\ \ \ \ -cp : \u30E6\u30FC\u30B6\u30FC\u304C\u6307\u5B9A\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u4F4D\u7F6E\u3092\u6307\u5B9A\u3057\u307E\u3059\n\ \ \ \ -classpath : \u30E6\u30FC\u30B6\u30FC\u304C\u6307\u5B9A\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u4F4D\u7F6E\u3092\u6307\u5B9A\u3057\u307E\u3059\n\ \ \ \ -encoding : \u6CE8\u91C8\u51E6\u7406/javac\u547C\u51FA\u3057\u306B\u4F7F\u7528\u3059\u308B\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u3092\u6307\u5B9A\u3057\u307E\u3059\n\ \ \ \ -episode : \u30B3\u30F3\u30D1\u30A4\u30EB\u3054\u3068\u306B\u30A8\u30D4\u30BD\u30FC\u30C9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u751F\u6210\u3057\u307E\u3059\n\ \ \ \ -version : \u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059\n\ \ \ \ -fullversion : \u30D5\u30EB\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059\n\ \ \ \ -help : \u3053\u306E\u4F7F\u7528\u4F8B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8868\u793A\u3057\u307E\u3059 diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_ko.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_ko.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_ko.properties Wed Jul 05 19:50:00 2017 +0200 @@ -27,8 +27,8 @@ BASEDIR_DOESNT_EXIST = \uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 \uB514\uB809\uD1A0\uB9AC: {0} -VERSION = schemagen 2.2.9-b140218.1920 +VERSION = schemagen 2.2.11-b140528.1207 -FULLVERSION = schemagen \uC815\uC2DD \uBC84\uC804 "2.2.9-b140218.1920" +FULLVERSION = schemagen \uC815\uC2DD \uBC84\uC804 "2.2.11-b140528.1207" USAGE = \uC0AC\uC6A9\uBC95: schemagen [-options ...] \n\uC635\uC158: \n\ \ \ \ -d : \uD504\uB85C\uC138\uC11C \uBC0F javac\uC5D0\uC11C \uC0DD\uC131\uD55C \uD074\uB798\uC2A4 \uD30C\uC77C\uC744 \uBC30\uCE58\uD560 \uC704\uCE58\uB97C \uC9C0\uC815\uD569\uB2C8\uB2E4.\n\ \ \ \ -cp : \uC0AC\uC6A9\uC790\uAC00 \uC9C0\uC815\uD55C \uD30C\uC77C\uC744 \uCC3E\uC744 \uC704\uCE58\uB97C \uC9C0\uC815\uD569\uB2C8\uB2E4.\n\ \ \ \ -classpath : \uC0AC\uC6A9\uC790\uAC00 \uC9C0\uC815\uD55C \uD30C\uC77C\uC744 \uCC3E\uC744 \uC704\uCE58\uB97C \uC9C0\uC815\uD569\uB2C8\uB2E4.\n\ \ \ \ -encoding : \uC8FC\uC11D \uCC98\uB9AC/javac \uD638\uCD9C\uC5D0 \uC0AC\uC6A9\uD560 \uC778\uCF54\uB529\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4. \n\ \ \ \ -episode : \uBCC4\uB3C4 \uCEF4\uD30C\uC77C\uC744 \uC704\uD574 episode \uD30C\uC77C\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4.\n\ \ \ \ -version : \uBC84\uC804 \uC815\uBCF4\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.\n\ \ \ \ -fullversion : \uC815\uC2DD \uBC84\uC804 \uC815\uBCF4\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.\n\ \ \ \ -help : \uC774 \uC0AC\uC6A9\uBC95 \uBA54\uC2DC\uC9C0\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4. diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_pt_BR.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_pt_BR.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_pt_BR.properties Wed Jul 05 19:50:00 2017 +0200 @@ -27,8 +27,8 @@ BASEDIR_DOESNT_EXIST = Diret\u00F3rio n\u00E3o existente: {0} -VERSION = gera\u00E7\u00E3o do esquema 2.2.9-b140218.1920 +VERSION = gera\u00E7\u00E3o do esquema 2.2.11-b140528.1207 -FULLVERSION = vers\u00E3o completa da gera\u00E7\u00E3o do esquema "2.2.9-b140218.1920" +FULLVERSION = vers\u00E3o completa da gera\u00E7\u00E3o do esquema "2.2.11-b140528.1207" USAGE = Uso: gera\u00E7\u00E3o do esquema [-options ...] \nOp\u00E7\u00F5es: \n\\ \\ \\ \\ -d : especificar onde colocar o processador e os arquivos da classe gerados por javac\n\\ \\ \\ \\ -cp : especificar onde localizar arquivos especificados pelo usu\u00E1rio\n\\ \\ \\ \\ -classpath : especificar onde localizar os arquivos especificados pelo usu\u00E1rio\n\\ \\ \\ \\ -encoding : especificar codifica\u00E7\u00E3o a ser usada para processamento de anota\u00E7\u00E3o/chamada javac \n\\ \\ \\ \\ -episode : gerar arquivo do epis\u00F3dio para compila\u00E7\u00E3o separada\n\\ \\ \\ \\ -version : exibir informa\u00E7\u00F5es da vers\u00E3o\n\\ \\ \\ \\ -fullversion : exibir informa\u00E7\u00F5es da vers\u00E3o completa\n\\ \\ \\ \\ -help : exibir esta mensagem de uso diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_zh_CN.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_zh_CN.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_zh_CN.properties Wed Jul 05 19:50:00 2017 +0200 @@ -27,8 +27,8 @@ BASEDIR_DOESNT_EXIST = \u4E0D\u5B58\u5728\u7684\u76EE\u5F55: {0} -VERSION = schemagen 2.2.9-b140218.1920 +VERSION = schemagen 2.2.11-b140528.1207 -FULLVERSION = schemagen \u5B8C\u6574\u7248\u672C "2.2.9-b140218.1920" +FULLVERSION = schemagen \u5B8C\u6574\u7248\u672C "2.2.11-b140528.1207" USAGE = \u7528\u6CD5: schemagen [-options ...] \n\u9009\u9879: \n\ \ \ \ -d : \u6307\u5B9A\u653E\u7F6E\u5904\u7406\u7A0B\u5E8F\u548C javac \u751F\u6210\u7684\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n\ \ \ \ -cp : \u6307\u5B9A\u67E5\u627E\u7528\u6237\u6307\u5B9A\u6587\u4EF6\u7684\u4F4D\u7F6E\n\ \ \ \ -classpath : \u6307\u5B9A\u67E5\u627E\u7528\u6237\u6307\u5B9A\u6587\u4EF6\u7684\u4F4D\u7F6E\n\ \ \ \ -encoding : \u6307\u5B9A\u7528\u4E8E\u6CE8\u91CA\u5904\u7406/javac \u8C03\u7528\u7684\u7F16\u7801\n\ \ \ \ -episode : \u751F\u6210\u7247\u6BB5\u6587\u4EF6\u4EE5\u4F9B\u5355\u72EC\u7F16\u8BD1\n\ \ \ \ -version : \u663E\u793A\u7248\u672C\u4FE1\u606F\n\ \ \ \ -fullversion : \u663E\u793A\u5B8C\u6574\u7684\u7248\u672C\u4FE1\u606F\n\ \ \ \ -help : \u663E\u793A\u6B64\u7528\u6CD5\u6D88\u606F diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_zh_TW.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_zh_TW.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/MessageBundle_zh_TW.properties Wed Jul 05 19:50:00 2017 +0200 @@ -27,8 +27,8 @@ BASEDIR_DOESNT_EXIST = \u4E0D\u5B58\u5728\u7684\u76EE\u9304: {0} -VERSION = schemagen 2.2.9-b140218.1920 +VERSION = schemagen 2.2.11-b140528.1207 -FULLVERSION = schemagen \u5B8C\u6574\u7248\u672C "2.2.9-b140218.1920" +FULLVERSION = schemagen \u5B8C\u6574\u7248\u672C "2.2.11-b140528.1207" USAGE = \u7528\u6CD5: schemagen [-options ...] \n\u9078\u9805: \n\\ \\ \\ \\ -d : \u6307\u5B9A\u8655\u7406\u5668\u4EE5\u53CA javac \u7522\u751F\u7684\u985E\u5225\u6A94\u6848\u653E\u7F6E\u4F4D\u7F6E\n\\ \\ \\ \\ -cp : \u6307\u5B9A\u8981\u5C0B\u627E\u4F7F\u7528\u8005\u6307\u5B9A\u6A94\u6848\u7684\u4F4D\u7F6E\n\\ \\ \\ \\ -classpath : \u6307\u5B9A\u8981\u5C0B\u627E\u4F7F\u7528\u8005\u6307\u5B9A\u6A94\u6848\u7684\u4F4D\u7F6E\n\\ \\ \\ \\ -encoding : \u6307\u5B9A\u8981\u7528\u65BC\u8A3B\u89E3\u8655\u7406/javac \u547C\u53EB\u7684\u7DE8\u78BC \n\\ \\ \\ \\ -episode : \u7522\u751F\u7368\u7ACB\u7DE8\u8B6F\u7684\u4E8B\u4EF6 (episode) \u6A94\u6848\n\\ \\ \\ \\ -version : \u986F\u793A\u7248\u672C\u8CC7\u8A0A\n\\ \\ \\ \\ -fullversion : \u986F\u793A\u5B8C\u6574\u7248\u672C\u8CC7\u8A0A\n\\ \\ \\ \\ -help : \u986F\u793A\u6B64\u7528\u6CD5\u8A0A\u606F diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/version.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/version.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/version.properties Wed Jul 05 19:50:00 2017 +0200 @@ -23,7 +23,7 @@ # questions. # -build-id=2.2.10-b140228.1436 -build-version=JAX-WS RI 2.2.10-b140228.1436 -major-version=2.2.10 -svn-revision=e1d4708e8a2aee1ae9d38313452e14ce4b67851a +build-id=2.2.11-b140602.1731 +build-version=JAX-WS RI 2.2.11-b140602.1731 +major-version=2.2.11 +svn-revision=a684014c13b34abb8b9613e106f44f59abea206f diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/Driver.java --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/Driver.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/Driver.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -31,6 +31,8 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintStream; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.Iterator; import com.sun.codemodel.internal.CodeWriter; @@ -64,14 +66,12 @@ */ public class Driver { + private static final String SYSTEM_PROXY_PROPERTY = "java.net.useSystemProxies"; + public static void main(final String[] args) throws Exception { // use the platform default proxy if available. // see sun.net.spi.DefaultProxySelector for details. - try { - System.setProperty("java.net.useSystemProxies","true"); - } catch (SecurityException e) { - // failing to set this property isn't fatal - } + setupProxies(); if( Util.getSystemProperty(Driver.class,"noThreadSwap")!=null ) _main(args); // for the ease of debugging @@ -103,6 +103,27 @@ } } + /** + * Set useSystemProxies if needed + */ + private static void setupProxies() { + Object setProperty = AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Object run() { + return System.getProperty(SYSTEM_PROXY_PROPERTY); + } + }); + if (setProperty == null) { + AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Void run() { + System.setProperty(SYSTEM_PROXY_PROPERTY, "true"); + return null; + } + }); + } + } + private static void _main( String[] args ) throws Exception { try { System.exit(run( args, System.out, System.out )); diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle.properties Wed Jul 05 19:50:00 2017 +0200 @@ -171,20 +171,20 @@ Driver.FailedToGenerateCode = \ Failed to produce code. -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn Driver.FilePrologComment = \ - This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.9-b140218.1920 \n\ + This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11-b140528.1207 \n\ See http://java.sun.com/xml/jaxb \n\ Any modifications to this file will be lost upon recompilation of the source schema. \n\ Generated on: {0} \n Driver.Version = \ - xjc 2.2.9-b140218.1920 + xjc 2.2.11-b140528.1207 Driver.FullVersion = \ - xjc full version "2.2.9-b140218.1920" + xjc full version "2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_de.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_de.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_de.properties Wed Jul 05 19:50:00 2017 +0200 @@ -96,14 +96,14 @@ Driver.FailedToGenerateCode = Code konnte nicht erzeugt werden. -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn -Driver.FilePrologComment = Diese Datei wurde mit der JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.9-b140218.1920 generiert \nSiehe http://java.sun.com/xml/jaxb \n\u00c4nderungen an dieser Datei gehen bei einer Neukompilierung des Quellschemas verloren. \nGeneriert: {0} \n +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn +Driver.FilePrologComment = Diese Datei wurde mit der JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11-b140528.1207 generiert \nSiehe http://java.sun.com/xml/jaxb \n\u00c4nderungen an dieser Datei gehen bei einer Neukompilierung des Quellschemas verloren. \nGeneriert: {0} \n -Driver.Version = xjc 2.2.9-b140218.1920 +Driver.Version = xjc 2.2.11-b140528.1207 -Driver.FullVersion = xjc vollst\u00E4ndige Version "2.2.9-b140218.1920" +Driver.FullVersion = xjc vollst\u00E4ndige Version "2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_es.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_es.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_es.properties Wed Jul 05 19:50:00 2017 +0200 @@ -96,14 +96,14 @@ Driver.FailedToGenerateCode = Fallo al producir c\u00f3digo. -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn -Driver.FilePrologComment = Este archivo ha sido generado por la arquitectura JavaTM para la implantaci\u00f3n de la referencia de enlace (JAXB) XML v2.2.9-b140218.1920 \nVisite http://java.sun.com/xml/jaxb \nTodas las modificaciones realizadas en este archivo se perder\u00e1n si se vuelve a compilar el esquema de origen. \nGenerado el: {0} \n +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn +Driver.FilePrologComment = Este archivo ha sido generado por la arquitectura JavaTM para la implantaci\u00f3n de la referencia de enlace (JAXB) XML v2.2.11-b140528.1207 \nVisite http://java.sun.com/xml/jaxb \nTodas las modificaciones realizadas en este archivo se perder\u00e1n si se vuelve a compilar el esquema de origen. \nGenerado el: {0} \n -Driver.Version = xjc 2.2.9-b140218.1920 +Driver.Version = xjc 2.2.11-b140528.1207 -Driver.FullVersion = versi\u00F3n completa de xjc "2.2.9-b140218.1920" +Driver.FullVersion = versi\u00F3n completa de xjc "2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_fr.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_fr.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_fr.properties Wed Jul 05 19:50:00 2017 +0200 @@ -96,14 +96,14 @@ Driver.FailedToGenerateCode = Echec de la production du code. -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn -Driver.FilePrologComment = Ce fichier a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9 par l''impl\u00e9mentation de r\u00e9f\u00e9rence JavaTM Architecture for XML Binding (JAXB), v2.2.9-b140218.1920 \nVoir http://java.sun.com/xml/jaxb \nToute modification apport\u00e9e \u00e0 ce fichier sera perdue lors de la recompilation du sch\u00e9ma source. \nG\u00e9n\u00e9r\u00e9 le : {0} \n +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn +Driver.FilePrologComment = Ce fichier a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9 par l''impl\u00e9mentation de r\u00e9f\u00e9rence JavaTM Architecture for XML Binding (JAXB), v2.2.11-b140528.1207 \nVoir http://java.sun.com/xml/jaxb \nToute modification apport\u00e9e \u00e0 ce fichier sera perdue lors de la recompilation du sch\u00e9ma source. \nG\u00e9n\u00e9r\u00e9 le : {0} \n -Driver.Version = xjc 2.2.9-b140218.1920 +Driver.Version = xjc 2.2.11-b140528.1207 -Driver.FullVersion = version compl\u00E8te xjc "2.2.9-b140218.1920" +Driver.FullVersion = version compl\u00E8te xjc "2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_it.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_it.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_it.properties Wed Jul 05 19:50:00 2017 +0200 @@ -96,14 +96,14 @@ Driver.FailedToGenerateCode = Produzione del codice non riuscita. -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn -Driver.FilePrologComment = Questo file \u00e8 stato generato dall''architettura JavaTM per XML Binding (JAXB) Reference Implementation, v2.2.9-b140218.1920 \nVedere http://java.sun.com/xml/jaxb \nQualsiasi modifica a questo file andr\u00e0 persa durante la ricompilazione dello schema di origine. \nGenerato il: {0} \n +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn +Driver.FilePrologComment = Questo file \u00e8 stato generato dall''architettura JavaTM per XML Binding (JAXB) Reference Implementation, v2.2.11-b140528.1207 \nVedere http://java.sun.com/xml/jaxb \nQualsiasi modifica a questo file andr\u00e0 persa durante la ricompilazione dello schema di origine. \nGenerato il: {0} \n -Driver.Version = xjc 2.2.9-b140218.1920 +Driver.Version = xjc 2.2.11-b140528.1207 -Driver.FullVersion = versione completa xjc "2.2.9-b140218.1920" +Driver.FullVersion = versione completa xjc "2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_ja.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_ja.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_ja.properties Wed Jul 05 19:50:00 2017 +0200 @@ -96,14 +96,14 @@ Driver.FailedToGenerateCode = \u30b3\u30fc\u30c9\u306e\u751f\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn -Driver.FilePrologComment = \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001JavaTM Architecture for XML Binding(JAXB) Reference Implementation\u3001v2.2.9-b140218.1920\u306b\u3088\u3063\u3066\u751f\u6210\u3055\u308c\u307e\u3057\u305f \nhttp://java.sun.com/xml/jaxb\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044 \n\u30bd\u30fc\u30b9\u30fb\u30b9\u30ad\u30fc\u30de\u306e\u518d\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u5909\u66f4\u306f\u5931\u308f\u308c\u307e\u3059\u3002 \n\u751f\u6210\u65e5: {0} \n +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn +Driver.FilePrologComment = \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001JavaTM Architecture for XML Binding(JAXB) Reference Implementation\u3001v2.2.11-b140528.1207\u306b\u3088\u3063\u3066\u751f\u6210\u3055\u308c\u307e\u3057\u305f \nhttp://java.sun.com/xml/jaxb\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044 \n\u30bd\u30fc\u30b9\u30fb\u30b9\u30ad\u30fc\u30de\u306e\u518d\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u5909\u66f4\u306f\u5931\u308f\u308c\u307e\u3059\u3002 \n\u751f\u6210\u65e5: {0} \n -Driver.Version = xjc 2.2.9-b140218.1920 +Driver.Version = xjc 2.2.11-b140528.1207 -Driver.FullVersion = xjc\u30D5\u30EB\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3"2.2.9-b140218.1920" +Driver.FullVersion = xjc\u30D5\u30EB\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3"2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_ko.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_ko.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_ko.properties Wed Jul 05 19:50:00 2017 +0200 @@ -96,14 +96,14 @@ Driver.FailedToGenerateCode = \ucf54\ub4dc \uc0dd\uc131\uc744 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn -Driver.FilePrologComment = \uc774 \ud30c\uc77c\uc740 JAXB(JavaTM Architecture for XML Binding) \ucc38\uc870 \uad6c\ud604 2.2.9-b140218.1920 \ubc84\uc804\uc744 \ud1b5\ud574 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \nhttp://java.sun.com/xml/jaxb\ub97c \ucc38\uc870\ud558\uc2ed\uc2dc\uc624. \n\uc774 \ud30c\uc77c\uc744 \uc218\uc815\ud558\uba74 \uc18c\uc2a4 \uc2a4\ud0a4\ub9c8\ub97c \uc7ac\ucef4\ud30c\uc77c\ud560 \ub54c \uc218\uc815 \uc0ac\ud56d\uc774 \uc190\uc2e4\ub429\ub2c8\ub2e4. \n\uc0dd\uc131 \ub0a0\uc9dc: {0} \n +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn +Driver.FilePrologComment = \uc774 \ud30c\uc77c\uc740 JAXB(JavaTM Architecture for XML Binding) \ucc38\uc870 \uad6c\ud604 2.2.11-b140528.1207 \ubc84\uc804\uc744 \ud1b5\ud574 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \nhttp://java.sun.com/xml/jaxb\ub97c \ucc38\uc870\ud558\uc2ed\uc2dc\uc624. \n\uc774 \ud30c\uc77c\uc744 \uc218\uc815\ud558\uba74 \uc18c\uc2a4 \uc2a4\ud0a4\ub9c8\ub97c \uc7ac\ucef4\ud30c\uc77c\ud560 \ub54c \uc218\uc815 \uc0ac\ud56d\uc774 \uc190\uc2e4\ub429\ub2c8\ub2e4. \n\uc0dd\uc131 \ub0a0\uc9dc: {0} \n -Driver.Version = XJC 2.2.9-b140218.1920 +Driver.Version = XJC 2.2.11-b140528.1207 -Driver.FullVersion = XJC \uC815\uC2DD \uBC84\uC804 "2.2.9-b140218.1920" +Driver.FullVersion = XJC \uC815\uC2DD \uBC84\uC804 "2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_pt_BR.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_pt_BR.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_pt_BR.properties Wed Jul 05 19:50:00 2017 +0200 @@ -96,14 +96,14 @@ Driver.FailedToGenerateCode = Falha ao produzir o c\u00f3digo. -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn -Driver.FilePrologComment = Este arquivo foi gerado pela Arquitetura JavaTM para Implementa\u00e7\u00e3o de Refer\u00eancia (JAXB) de Bind XML, v2.2.9-b140218.1920 \nConsulte http://java.sun.com/xml/jaxb \nTodas as modifica\u00e7\u00f5es neste arquivo ser\u00e3o perdidas ap\u00f3s a recompila\u00e7\u00e3o do esquema de origem. \nGerado em: {0} \n +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn +Driver.FilePrologComment = Este arquivo foi gerado pela Arquitetura JavaTM para Implementa\u00e7\u00e3o de Refer\u00eancia (JAXB) de Bind XML, v2.2.11-b140528.1207 \nConsulte http://java.sun.com/xml/jaxb \nTodas as modifica\u00e7\u00f5es neste arquivo ser\u00e3o perdidas ap\u00f3s a recompila\u00e7\u00e3o do esquema de origem. \nGerado em: {0} \n -Driver.Version = xjc 2.2.9-b140218.1920 +Driver.Version = xjc 2.2.11-b140528.1207 -Driver.FullVersion = vers\u00E3o completa de xjc "2.2.9-b140218.1920" +Driver.FullVersion = vers\u00E3o completa de xjc "2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_zh_CN.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_zh_CN.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_zh_CN.properties Wed Jul 05 19:50:00 2017 +0200 @@ -96,14 +96,14 @@ Driver.FailedToGenerateCode = \u65e0\u6cd5\u751f\u6210\u4ee3\u7801\u3002 -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn -Driver.FilePrologComment = \u6b64\u6587\u4ef6\u662f\u7531 JavaTM Architecture for XML Binding (JAXB) \u5f15\u7528\u5b9e\u73b0 v2.2.9-b140218.1920 \u751f\u6210\u7684\n\u8bf7\u8bbf\u95ee http://java.sun.com/xml/jaxb \n\u5728\u91cd\u65b0\u7f16\u8bd1\u6e90\u6a21\u5f0f\u65f6, \u5bf9\u6b64\u6587\u4ef6\u7684\u6240\u6709\u4fee\u6539\u90fd\u5c06\u4e22\u5931\u3002\n\u751f\u6210\u65f6\u95f4: {0} \n +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn +Driver.FilePrologComment = \u6b64\u6587\u4ef6\u662f\u7531 JavaTM Architecture for XML Binding (JAXB) \u5f15\u7528\u5b9e\u73b0 v2.2.11-b140528.1207 \u751f\u6210\u7684\n\u8bf7\u8bbf\u95ee http://java.sun.com/xml/jaxb \n\u5728\u91cd\u65b0\u7f16\u8bd1\u6e90\u6a21\u5f0f\u65f6, \u5bf9\u6b64\u6587\u4ef6\u7684\u6240\u6709\u4fee\u6539\u90fd\u5c06\u4e22\u5931\u3002\n\u751f\u6210\u65f6\u95f4: {0} \n -Driver.Version = xjc 2.2.9-b140218.1920 +Driver.Version = xjc 2.2.11-b140528.1207 -Driver.FullVersion = xjc \u5B8C\u6574\u7248\u672C "2.2.9-b140218.1920" +Driver.FullVersion = xjc \u5B8C\u6574\u7248\u672C "2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_zh_TW.properties --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_zh_TW.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/MessageBundle_zh_TW.properties Wed Jul 05 19:50:00 2017 +0200 @@ -96,14 +96,14 @@ Driver.FailedToGenerateCode = \u7121\u6cd5\u7522\u751f\u7a0b\u5f0f\u78bc. -# DO NOT localize the 2.2.9-b140218.1920 string - it is a token for an mvn -Driver.FilePrologComment = \u6b64\u6a94\u6848\u662f\u7531 JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.9-b140218.1920 \u6240\u7522\u751f \n\u8acb\u53c3\u95b1 http://java.sun.com/xml/jaxb \n\u4e00\u65e6\u91cd\u65b0\u7de8\u8b6f\u4f86\u6e90\u7db1\u8981, \u5c0d\u6b64\u6a94\u6848\u6240\u505a\u7684\u4efb\u4f55\u4fee\u6539\u90fd\u5c07\u6703\u907a\u5931. \n\u7522\u751f\u6642\u9593: {0} \n +# DO NOT localize the 2.2.11-b140528.1207 string - it is a token for an mvn +Driver.FilePrologComment = \u6b64\u6a94\u6848\u662f\u7531 JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11-b140528.1207 \u6240\u7522\u751f \n\u8acb\u53c3\u95b1 http://java.sun.com/xml/jaxb \n\u4e00\u65e6\u91cd\u65b0\u7de8\u8b6f\u4f86\u6e90\u7db1\u8981, \u5c0d\u6b64\u6a94\u6848\u6240\u505a\u7684\u4efb\u4f55\u4fee\u6539\u90fd\u5c07\u6703\u907a\u5931. \n\u7522\u751f\u6642\u9593: {0} \n -Driver.Version = xjc 2.2.9-b140218.1920 +Driver.Version = xjc 2.2.11-b140528.1207 -Driver.FullVersion = xjc \u5B8C\u6574\u7248\u672C "2.2.9-b140218.1920" +Driver.FullVersion = xjc \u5B8C\u6574\u7248\u672C "2.2.11-b140528.1207" -Driver.BuildID = 2.2.9-b140218.1920 +Driver.BuildID = 2.2.11-b140528.1207 # for JDK integration - include version in source zip jaxb.jdk.version=@@JAXB_JDK_VERSION@@ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/Options.java --- a/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/Options.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/Options.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -773,7 +773,10 @@ */ public void addCatalog(File catalogFile) throws IOException { if(entityResolver==null) { - CatalogManager.getStaticManager().setIgnoreMissingProperties(true); + final CatalogManager staticManager = CatalogManager.getStaticManager(); + // hack to force initialization so catalog manager system properties take effect + staticManager.getVerbosity(); + staticManager.setIgnoreMissingProperties(true); entityResolver = new CatalogResolver(true); } ((CatalogResolver)entityResolver).getCatalog().parseCatalog(catalogFile.getPath()); diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_de.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_de.properties Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,26 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +FAILED_TO_INITIALE_DATATYPE_FACTORY = JAXP 1.3 DatatypeFactory-Klasse konnte nicht initialisiert werden. diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_es.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_es.properties Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,26 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +FAILED_TO_INITIALE_DATATYPE_FACTORY = Fallo al inicializar la clase DatatypeFactory de JAXP 1.3. diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_fr.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_fr.properties Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,26 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +FAILED_TO_INITIALE_DATATYPE_FACTORY = Echec de l'initialisation de la classe JAXP 1.3 DatatypeFactory. diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_it.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_it.properties Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,26 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +FAILED_TO_INITIALE_DATATYPE_FACTORY = Inizializzazione della classe DatatypeFactory di JAXP 1.3 non riuscita. diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_ja.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_ja.properties Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,26 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +FAILED_TO_INITIALE_DATATYPE_FACTORY = JAXP 1.3 DatatypeFactory\u30AF\u30E9\u30B9\u306E\u521D\u671F\u5316\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002 diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_ko.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_ko.properties Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,26 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +FAILED_TO_INITIALE_DATATYPE_FACTORY = JAXP 1.3 DatatypeFactory \uD074\uB798\uC2A4 \uCD08\uAE30\uD654\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_pt_BR.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_pt_BR.properties Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,26 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +FAILED_TO_INITIALE_DATATYPE_FACTORY = Falha ao inicializar a classe DatatypeFactory de JAXP 1.3. diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_zh_CN.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_zh_CN.properties Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,26 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +FAILED_TO_INITIALE_DATATYPE_FACTORY = \u65E0\u6CD5\u521D\u59CB\u5316 JAXP 1.3 DatatypeFactory \u7C7B\u3002 diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_zh_TW.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages_zh_TW.properties Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,26 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +FAILED_TO_INITIALE_DATATYPE_FACTORY = \u7121\u6CD5\u8D77\u59CB JAXP 1.3 DatatypeFactory \u985E\u5225. diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -90,9 +90,6 @@ INVALID_XML_ENUM_VALUE = \ "{0}" is not a valid value for {1}. -FAILED_TO_INITIALE_DATATYPE_FACTORY = \ - Failed to initialize JAXP 1.3 DatatypeFactory class. - NO_IMAGE_WRITER = \ No javax.imageio.ImageWriter is available for the specified MIME type "{0}" diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_de.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_de.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_de.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -69,8 +69,6 @@ # {1} - (local) type name e.g.: '#foo' is not a valid value for 'NCName' INVALID_XML_ENUM_VALUE = "{0}" ist kein g\u00FCltiger Wert f\u00FCr {1}. -FAILED_TO_INITIALE_DATATYPE_FACTORY = JAXP 1.3 DatatypeFactory-Klasse konnte nicht initialisiert werden. - NO_IMAGE_WRITER = Es ist kein javax.imageio.ImageWriter f\u00FCr den angegebenen MIME-Typ "{0}" verf\u00FCgbar ILLEGAL_MIME_TYPE = "{0}" ist kein g\u00FCltiger MIME-Typ: {1} diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_es.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_es.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_es.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -69,8 +69,6 @@ # {1} - (local) type name e.g.: '#foo' is not a valid value for 'NCName' INVALID_XML_ENUM_VALUE = "{0}" no es un valor v\u00E1lido para {1}. -FAILED_TO_INITIALE_DATATYPE_FACTORY = Fallo al inicializar la clase DatatypeFactory de JAXP 1.3. - NO_IMAGE_WRITER = No hay disponible ning\u00FAn javax.imageio.ImageWriter para el tipo MIME especificado "{0}" ILLEGAL_MIME_TYPE = "{0}" no es un tipo MIME v\u00E1lido: {1} diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_fr.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_fr.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_fr.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -69,8 +69,6 @@ # {1} - (local) type name e.g.: '#foo' is not a valid value for 'NCName' INVALID_XML_ENUM_VALUE = "{0}" n''est pas une valeur valide pour {1}. -FAILED_TO_INITIALE_DATATYPE_FACTORY = Echec de l'initialisation de la classe JAXP 1.3 DatatypeFactory. - NO_IMAGE_WRITER = Aucune classe javax.imageio.ImageWriter n''est disponible pour le type MIME "{0}" indiqu\u00E9 ILLEGAL_MIME_TYPE = "{0}" n''est pas un type MIME valide : {1} diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_it.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_it.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_it.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -69,8 +69,6 @@ # {1} - (local) type name e.g.: '#foo' is not a valid value for 'NCName' INVALID_XML_ENUM_VALUE = "{0}" non \u00E8 un valore valido per {1}. -FAILED_TO_INITIALE_DATATYPE_FACTORY = Inizializzazione della classe DatatypeFactory di JAXP 1.3 non riuscita. - NO_IMAGE_WRITER = Nessun javax.imageio.ImageWriter disponibile per il tipo MIME specificato "{0}" ILLEGAL_MIME_TYPE = "{0}" non \u00E8 un tipo MIME valido: {1} diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_ja.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_ja.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_ja.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -69,8 +69,6 @@ # {1} - (local) type name e.g.: '#foo' is not a valid value for 'NCName' INVALID_XML_ENUM_VALUE = "{0}"\u306F{1}\u306B\u5BFE\u3059\u308B\u6709\u52B9\u306A\u5024\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 -FAILED_TO_INITIALE_DATATYPE_FACTORY = JAXP 1.3 DatatypeFactory\u30AF\u30E9\u30B9\u306E\u521D\u671F\u5316\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002 - NO_IMAGE_WRITER = \u6307\u5B9A\u3057\u305FMIME \u30BF\u30A4\u30D7"{0}"\u306B\u4F7F\u7528\u3067\u304D\u308Bjavax.imageio.ImageWriter\u304C\u3042\u308A\u307E\u305B\u3093 ILLEGAL_MIME_TYPE = "{0}"\u306F\u6709\u52B9\u306AMIME\u30BF\u30A4\u30D7\u3067\u306F\u3042\u308A\u307E\u305B\u3093: {1} diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_ko.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_ko.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_ko.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -69,8 +69,6 @@ # {1} - (local) type name e.g.: '#foo' is not a valid value for 'NCName' INVALID_XML_ENUM_VALUE = "{0}"\uC740(\uB294) {1}\uC5D0 \uB300\uD574 \uC801\uD569\uD55C \uAC12\uC774 \uC544\uB2D9\uB2C8\uB2E4. -FAILED_TO_INITIALE_DATATYPE_FACTORY = JAXP 1.3 DatatypeFactory \uD074\uB798\uC2A4 \uCD08\uAE30\uD654\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. - NO_IMAGE_WRITER = \uC9C0\uC815\uB41C MIME \uC720\uD615 "{0}"\uC5D0 \uC0AC\uC6A9 \uAC00\uB2A5\uD55C javax.imageio.ImageWriter\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. ILLEGAL_MIME_TYPE = "{0}"\uC740(\uB294) \uC801\uD569\uD55C MIME \uC720\uD615\uC774 \uC544\uB2D8: {1} diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_pt_BR.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_pt_BR.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_pt_BR.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -69,8 +69,6 @@ # {1} - (local) type name e.g.: '#foo' is not a valid value for 'NCName' INVALID_XML_ENUM_VALUE = "{0}" n\u00E3o \u00E9 um valor v\u00E1lido para {1}. -FAILED_TO_INITIALE_DATATYPE_FACTORY = Falha ao inicializar a classe DatatypeFactory de JAXP 1.3. - NO_IMAGE_WRITER = Nenhum javax.imageio.ImageWriter dispon\u00EDvel para o tipo MIME "{0}" especificado ILLEGAL_MIME_TYPE = "{0}" n\u00E3o \u00E9 um tipo MIME v\u00E1lido: {1} diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_zh_CN.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_zh_CN.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_zh_CN.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -69,8 +69,6 @@ # {1} - (local) type name e.g.: '#foo' is not a valid value for 'NCName' INVALID_XML_ENUM_VALUE = "{0}" \u4E0D\u662F{1}\u7684\u6709\u6548\u503C\u3002 -FAILED_TO_INITIALE_DATATYPE_FACTORY = \u65E0\u6CD5\u521D\u59CB\u5316 JAXP 1.3 DatatypeFactory \u7C7B\u3002 - NO_IMAGE_WRITER = \u6307\u5B9A MIME \u7C7B\u578B "{0}" \u6CA1\u6709\u53EF\u7528\u7684 javax.imageio.ImageWriter ILLEGAL_MIME_TYPE = "{0}" \u4E0D\u662F\u6709\u6548\u7684 MIME \u7C7B\u578B: {1} diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_zh_TW.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_zh_TW.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages_zh_TW.properties Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -69,8 +69,6 @@ # {1} - (local) type name e.g.: '#foo' is not a valid value for 'NCName' INVALID_XML_ENUM_VALUE = "{0}" \u4E0D\u662F {1} \u7684\u6709\u6548\u503C. -FAILED_TO_INITIALE_DATATYPE_FACTORY = \u7121\u6CD5\u8D77\u59CB JAXP 1.3 DatatypeFactory \u985E\u5225. - NO_IMAGE_WRITER = \u6307\u5B9A\u7684 MIME \u985E\u578B "{0}" \u6C92\u6709\u53EF\u7528\u7684 javax.imageio.ImageWriter ILLEGAL_MIME_TYPE = "{0}" \u4E0D\u662F\u6709\u6548\u7684 MIME \u985E\u578B: {1} diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -43,6 +43,8 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; @@ -950,7 +952,13 @@ m.put(DatatypeConstants.DATETIME, "%Y-%M-%DT%h:%m:%s"+ "%z"); m.put(DatatypeConstants.DATE, "%Y-%M-%D" +"%z"); m.put(DatatypeConstants.TIME, "%h:%m:%s"+ "%z"); - if (System.getProperty(USE_OLD_GMONTH_MAPPING) == null) { + final String oldGmonthMappingProperty = AccessController.doPrivileged(new PrivilegedAction() { + @Override + public String run() { + return System.getProperty(USE_OLD_GMONTH_MAPPING); + } + }); + if (oldGmonthMappingProperty == null) { m.put(DatatypeConstants.GMONTH, "--%M%z"); // E2-12 Error. http://www.w3.org/2001/05/xmlschema-errata#e2-12 } else { // backw. compatibility if (logger.isLoggable(Level.FINE)) { diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ArrayBeanInfoImpl.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ArrayBeanInfoImpl.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ArrayBeanInfoImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -79,19 +79,19 @@ @Override public void startElement(UnmarshallingContext.State state, TagName ea) { - state.target = new ArrayList(); + state.setTarget(new ArrayList()); } @Override public void leaveElement(UnmarshallingContext.State state, TagName ea) { - state.target = toArray((List)state.target); + state.setTarget(toArray((List)state.getTarget())); } @Override public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException { if(ea.matches("","item")) { - state.loader = itemLoader; - state.receiver = this; + state.setLoader(itemLoader); + state.setReceiver(this); } else { super.childElement(state,ea); } @@ -103,9 +103,9 @@ } public void receive(UnmarshallingContext.State state, Object o) { - ((List)state.target).add(o); + ((List)state.getTarget()).add(o); } - }; + } protected Object toArray( List list ) { int len = list.size(); diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -208,8 +208,8 @@ @Override public final void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException { - state.loader = core; - state.intercepter = this; + state.setLoader(core); + state.setIntercepter(this); // TODO: make sure there aren't too many duplicate of this code // create the object to unmarshal @@ -231,21 +231,21 @@ fireBeforeUnmarshal(ElementBeanInfoImpl.this, child, state); context.recordOuterPeer(child); - UnmarshallingContext.State p = state.prev; - p.backup = p.target; - p.target = child; + UnmarshallingContext.State p = state.getPrev(); + p.setBackup(p.getTarget()); + p.setTarget(child); core.startElement(state,ea); } public Object intercept(UnmarshallingContext.State state, Object o) throws SAXException { - JAXBElement e = (JAXBElement)state.target; - state.target = state.backup; - state.backup = null; + JAXBElement e = (JAXBElement)state.getTarget(); + state.setTarget(state.getBackup()); + state.setBackup(null); - if (state.nil) { + if (state.isNil()) { e.setNil(true); - state.nil = false; + state.setNil(false); } if(o!=null) diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Messages.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Messages.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Messages.java Wed Jul 05 19:50:00 2017 +0200 @@ -58,7 +58,6 @@ FAILED_TO_GENERATE_SCHEMA, // 0 args ERROR_PROCESSING_SCHEMA, // 0 args ILLEGAL_CONTENT, // 2 args - FAILED_TO_INITIALE_DATATYPE_FACTORY, // 2 args ; private static final ResourceBundle rb = ResourceBundle.getBundle(Messages.class.getName()); diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ValueListBeanInfoImpl.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ValueListBeanInfoImpl.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ValueListBeanInfoImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -90,7 +90,7 @@ idx = p; } - state.target = toArray(r); + state.setTarget(toArray(r)); } }; diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -98,7 +98,7 @@ UnmarshallingContext context = state.getContext(); context.startScope(1); // inherit the target so that our children can access its target - state.target = state.prev.target; + state.setTarget(state.getPrev().getTarget()); // start it now, so that even if there's no children we can still return empty collection context.getScope(0).start(acc,lister); @@ -116,8 +116,8 @@ super.childElement(state,ea); return; } - state.loader = child.loader; - state.receiver = child.receiver; + state.setLoader(child.loader); + state.setReceiver(child.receiver); } @Override diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java Wed Jul 05 19:50:00 2017 +0200 @@ -147,7 +147,7 @@ public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException { // create or obtain the Map object try { - BeanT target = (BeanT) state.prev.target; + BeanT target = (BeanT) state.getPrev().getTarget(); ValueT mapValue = acc.get(target); if(mapValue == null) mapValue = ClassFactory.create(mapImplClass); @@ -156,11 +156,11 @@ Stack.push(this.target, target); Stack.push(map, mapValue); - state.target = mapValue; + state.setTarget(mapValue); } catch (AccessorException e) { // recover from error by setting a dummy Map that receives and discards the values handleGenericException(e,true); - state.target = new HashMap(); + state.setTarget(new HashMap()); } } @@ -177,7 +177,7 @@ @Override public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException { if(ea.matches(entryTag)) { - state.loader = entryLoader; + state.setLoader(entryLoader); } else { super.childElement(state,ea); } @@ -197,26 +197,26 @@ private final Loader entryLoader = new Loader(false) { @Override public void startElement(UnmarshallingContext.State state, TagName ea) { - state.target = new Object[2]; // this is inefficient + state.setTarget(new Object[2]); // this is inefficient } @Override public void leaveElement(UnmarshallingContext.State state, TagName ea) { - Object[] keyValue = (Object[])state.target; - Map map = (Map) state.prev.target; + Object[] keyValue = (Object[])state.getTarget(); + Map map = (Map) state.getPrev().getTarget(); map.put(keyValue[0],keyValue[1]); } @Override public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException { if(ea.matches(keyTag)) { - state.loader = keyLoader; - state.receiver = keyReceiver; + state.setLoader(keyLoader); + state.setReceiver(keyReceiver); return; } if(ea.matches(valueTag)) { - state.loader = valueLoader; - state.receiver = valueReceiver; + state.setLoader(valueLoader); + state.setReceiver(valueReceiver); return; } super.childElement(state,ea); @@ -234,7 +234,7 @@ this.index = index; } public void receive(UnmarshallingContext.State state, Object o) { - ((Object[])state.target)[index] = o; + ((Object[])state.getTarget())[index] = o; } } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -148,7 +148,7 @@ public void receive(UnmarshallingContext.State state, Object o) throws SAXException { try { - set((BeanT) state.target, (ValueT) o); + set((BeanT) state.getTarget(), (ValueT) o); } catch (AccessorException e) { Loader.handleGenericException(e, true); } catch (IllegalAccessError iae) { diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultValueLoaderDecorator.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultValueLoaderDecorator.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultValueLoaderDecorator.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -44,10 +44,10 @@ @Override public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException { // install the default value, but don't override the one given by the parent loader - if(state.elementDefaultValue==null) - state.elementDefaultValue = defaultValue; + if(state.getElementDefaultValue() == null) + state.setElementDefaultValue(defaultValue); - state.loader = l; + state.setLoader(l); l.startElement(state,ea); } } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Discarder.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Discarder.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Discarder.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -44,8 +44,8 @@ @Override public void childElement(UnmarshallingContext.State state, TagName ea) { - state.target = null; + state.setTarget(null); // registering this allows the discarder to process the whole subtree. - state.loader = this; + state.setLoader(this); } } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DomLoader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DomLoader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DomLoader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -99,10 +99,10 @@ @Override public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException { UnmarshallingContext context = state.getContext(); - if (state.target == null) - state.target = new State(context); + if (state.getTarget() == null) + state.setTarget(new State(context)); - State s = (State) state.target; + State s = (State) state.getTarget(); try { s.declarePrefixes(context, context.getNewlyDeclaredPrefixes()); s.handler.startElement(ea.uri, ea.local, ea.getQname(), ea.atts); @@ -114,10 +114,10 @@ @Override public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException { - state.loader = this; - State s = (State) state.prev.target; + state.setLoader(this); + State s = (State) state.getPrev().getTarget(); s.depth++; - state.target = s; + state.setTarget(s); } @Override @@ -125,7 +125,7 @@ if(text.length()==0) return; // there's no point in creating an empty Text node in DOM. try { - State s = (State) state.target; + State s = (State) state.getTarget(); s.handler.characters(text.toString().toCharArray(),0,text.length()); } catch( SAXException e ) { state.getContext().handleError(e); @@ -135,7 +135,7 @@ @Override public void leaveElement(UnmarshallingContext.State state, TagName ea) throws SAXException { - State s = (State) state.target; + State s = (State) state.getTarget(); UnmarshallingContext context = state.getContext(); try { @@ -157,7 +157,7 @@ } // we are done - state.target = s.getElement(); + state.setTarget(s.getElement()); } } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyLoader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyLoader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyLoader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -47,7 +47,7 @@ public void text(UnmarshallingContext.State state, CharSequence text) throws SAXException { try { - xacc.parse(state.prev.target,text); + xacc.parse(state.getPrev().getTarget(), text); } catch (AccessorException e) { handleGenericException(e,true); } catch (RuntimeException e) { diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyXsiLoader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyXsiLoader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyXsiLoader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -55,9 +55,9 @@ @Override public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException { - state.loader = selectLoader(state, ea); - - state.loader.startElement(state, ea); + final Loader loader = selectLoader(state, ea); + state.setLoader(loader); + loader.startElement(state, ea); } protected Loader selectLoader(UnmarshallingContext.State state, TagName ea) throws SAXException { diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -88,8 +88,8 @@ public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException { // notify the error, then recover by ignoring the whole element. reportUnexpectedChildElement(ea, true); - state.loader = Discarder.INSTANCE; - state.receiver = null; + state.setLoader(Discarder.INSTANCE); + state.setReceiver(null); } @SuppressWarnings({"StringEquality"}) @@ -195,10 +195,10 @@ UnmarshallingContext context = state.getContext(); Unmarshaller.Listener listener = context.parent.getListener(); if(beanInfo.hasBeforeUnmarshalMethod()) { - beanInfo.invokeBeforeUnmarshalMethod(context.parent, child, state.prev.target); + beanInfo.invokeBeforeUnmarshalMethod(context.parent, child, state.getPrev().getTarget()); } if(listener!=null) { - listener.beforeUnmarshal(child, state.prev.target); + listener.beforeUnmarshal(child, state.getPrev().getTarget()); } } } @@ -215,10 +215,10 @@ UnmarshallingContext context = state.getContext(); Unmarshaller.Listener listener = context.parent.getListener(); if(beanInfo.hasAfterUnmarshalMethod()) { - beanInfo.invokeAfterUnmarshalMethod(context.parent, child, state.target); + beanInfo.invokeAfterUnmarshalMethod(context.parent, child, state.getTarget()); } if(listener!=null) - listener.afterUnmarshal(child, state.target); + listener.afterUnmarshal(child, state.getTarget()); } } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ProxyLoader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ProxyLoader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ProxyLoader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -41,7 +41,7 @@ @Override public final void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException { Loader loader = selectLoader(state,ea); - state.loader = loader; + state.setLoader(loader); loader.startElement(state,ea); } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -144,17 +144,7 @@ if( qname==null || qname.length()==0 ) qname=local; - - boolean ignorable = true; - StructureLoader sl; - - // not null only if element content is processed (StructureLoader is used) - // ugly - if((sl = this.context.getStructureLoader()) != null) { - ignorable = ((ClassBeanInfoImpl)sl.getBeanInfo()).hasElementOnlyContentModel(); - } - - processText(ignorable); + processText(!context.getCurrentState().isMixed()); tagName.uri = uri; tagName.local = local; @@ -204,7 +194,7 @@ } private void processText( boolean ignorable ) throws SAXException { - if( predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer))) + if (predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer))) next.text(buffer); buffer.setLength(0); } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Scope.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Scope.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Scope.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -97,7 +97,7 @@ public void add( Accessor acc, Lister lister, ItemT value) throws SAXException{ try { if(!hasStarted()) { - this.bean = (BeanT)context.getCurrentState().target; + this.bean = (BeanT)context.getCurrentState().getTarget(); this.acc = acc; this.lister = lister; this.pack = lister.startPacking(bean,acc); @@ -121,7 +121,7 @@ public void start( Accessor acc, Lister lister) throws SAXException{ try { if(!hasStarted()) { - this.bean = (BeanT)context.getCurrentState().target; + this.bean = (BeanT)context.getCurrentState().getTarget(); this.acc = acc; this.lister = lister; this.pack = lister.startPacking(bean,acc); diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -172,7 +172,7 @@ context.recordInnerPeer(child); - state.target = child; + state.setTarget(child); fireBeforeUnmarshal(beanInfo, child, state); @@ -197,7 +197,7 @@ String qname = atts.getQName(i); if(atts.getURI(i).equals(WellKnownNamespace.XML_SCHEMA_INSTANCE)) continue; // xsi:* attributes are meant to be processed by us, not by user apps. - Object o = state.target; + Object o = state.getTarget(); Map map = attCatchAll.get(o); if(map==null) { // TODO: use ClassFactory.inferImplClass(sig,knownImplClasses) @@ -250,8 +250,8 @@ } } - state.loader = child.loader; - state.receiver = child.receiver; + state.setLoader(child.loader); + state.setReceiver(child.receiver); } @Override @@ -273,7 +273,7 @@ @Override public void leaveElement(UnmarshallingContext.State state, TagName ea) throws SAXException { state.getContext().endScope(frameSize); - fireAfterUnmarshal(beanInfo, state.target, state.prev); + fireAfterUnmarshal(beanInfo, state.getTarget(), state.getPrev()); } private static final QNameMap EMPTY = new QNameMap(); diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/TextLoader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/TextLoader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/TextLoader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -51,7 +51,7 @@ public void text(UnmarshallingContext.State state, CharSequence text) throws SAXException { try { - state.target = xducer.parse(text); + state.setTarget(xducer.parse(text)); } catch (AccessorException e) { handleGenericException(e,true); } catch (RuntimeException e) { diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -198,20 +198,19 @@ /** * Loader that owns this element. */ - public Loader loader; + private Loader loader; /** * Once {@link #loader} is completed, this receiver * receives the result. */ - public Receiver receiver; + private Receiver receiver; - public Intercepter intercepter; - + private Intercepter intercepter; /** * Object being unmarshalled by this {@link #loader}. */ - public Object target; + private Object target; /** * Hack for making JAXBElement unmarshalling work. @@ -240,7 +239,7 @@ * @see ElementBeanInfoImpl.IntercepterLoader#startElement(State, TagName) * @see ElementBeanInfoImpl.IntercepterLoader#intercept(State, Object) */ - public Object backup; + private Object backup; /** * Number of {@link UnmarshallingContext#nsBind}s declared thus far. @@ -256,17 +255,22 @@ * or by a child {@link Loader} when * {@link Loader#startElement(State, TagName)} is called. */ - public String elementDefaultValue; + private String elementDefaultValue; /** * {@link State} for the parent element * * {@link State} objects form a doubly linked list. */ - public State prev; + private State prev; private State next; - public boolean nil = false; + private boolean nil = false; + + /** + * specifies that we are working with mixed content + */ + private boolean mixed = false; /** * Gets the context. @@ -280,6 +284,8 @@ this.prev = prev; if (prev!=null) { prev.next = this; + if (prev.mixed) // parent is in mixed mode + this.mixed = true; } } @@ -289,7 +295,7 @@ } if (next==null) { assert current == this; - allocateMoreStates(); + next = new State(this); } nil = false; State n = next; @@ -304,11 +310,71 @@ assert prev!=null; loader = null; nil = false; + mixed = false; receiver = null; intercepter = null; elementDefaultValue = null; target = null; current = prev; + next = null; + } + + public boolean isMixed() { + return mixed; + } + + public Object getTarget() { + return target; + } + + public void setLoader(Loader loader) { + if (loader instanceof StructureLoader) // set mixed mode + mixed = !((StructureLoader)loader).getBeanInfo().hasElementOnlyContentModel(); + this.loader = loader; + } + + public void setReceiver(Receiver receiver) { + this.receiver = receiver; + } + + public State getPrev() { + return prev; + } + + public void setIntercepter(Intercepter intercepter) { + this.intercepter = intercepter; + } + + public void setBackup(Object backup) { + this.backup = backup; + } + + public void setTarget(Object target) { + this.target = target; + } + + public Object getBackup() { + return backup; + } + + public boolean isNil() { + return nil; + } + + public void setNil(boolean nil) { + this.nil = nil; + } + + public Loader getLoader() { + return loader; + } + + public String getElementDefaultValue() { + return elementDefaultValue; + } + + public void setElementDefaultValue(String elementDefaultValue) { + this.elementDefaultValue = elementDefaultValue; } } @@ -348,7 +414,6 @@ this.parent = _parent; this.assoc = assoc; this.root = this.current = new State(null); - allocateMoreStates(); } public void reset(InfosetScanner scanner,boolean isInplaceMode, JaxBeanInfo expectedType, IDResolver idResolver) { @@ -395,23 +460,6 @@ return null; } - /** - * Allocates a few more {@link State}s. - * - * Allocating multiple {@link State}s at once allows those objects - * to be allocated near each other, which reduces the working set - * of CPU. It improves the chance the relevant data is in the cache. - */ - private void allocateMoreStates() { - // this method should be used only when we run out of a state. - assert current.next==null; - - State s = current; - for (int i=0; i<8; i++) { - s = new State(s); - } - } - public void clearStates() { State last = current; while (last.next != null) last = last.next; @@ -515,16 +563,15 @@ @Override public void text(CharSequence pcdata) throws SAXException { - State cur = current; pushCoordinator(); try { - if(cur.elementDefaultValue!=null) { - if(pcdata.length()==0) { + if (current.elementDefaultValue != null) { + if (pcdata.length() == 0) { // send the default value into the unmarshaller instead - pcdata = cur.elementDefaultValue; + pcdata = current.elementDefaultValue; } } - cur.loader.text(cur,pcdata); + current.loader.text(current, pcdata); } finally { popCoordinator(); } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValuePropertyLoader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValuePropertyLoader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValuePropertyLoader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -49,18 +49,17 @@ public void text(UnmarshallingContext.State state, CharSequence text) throws SAXException { try { - xacc.parse(state.target,text); + xacc.parse(state.getTarget(),text); } catch (AccessorException e) { handleGenericException(e,true); } catch (RuntimeException e) { - if(state.prev != null) { - if(state.prev.target instanceof JAXBElement) { - ; // do nothing - issue 601 - don't report exceptions like - // NumberFormatException when unmarshalling "nillable" element - // (I suppose JAXBElement indicates this - } else { + if(state.getPrev() != null) { + if (!(state.getPrev().getTarget() instanceof JAXBElement)) handleParseConversionException(state,e); - } + // else + // do nothing - issue 601 - don't report exceptions like + // NumberFormatException when unmarshalling "nillable" element + // (I suppose JAXBElement indicates this } else { handleParseConversionException(state,e); } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -62,7 +62,7 @@ onNil(state); boolean hasOtherAttributes = (ea.atts.getLength() - 1) > 0; // see issues 6759703 and 565 - need to preserve attributes even if the element is nil; only when the type is stored in JAXBElement - if (!(hasOtherAttributes && (state.prev.target instanceof JAXBElement))) { + if (!(hasOtherAttributes && (state.getPrev().getTarget() instanceof JAXBElement))) { return Discarder.INSTANCE; } } @@ -96,8 +96,8 @@ @Override protected void onNil(UnmarshallingContext.State state) throws SAXException { try { - acc.set(state.prev.target,null); - state.prev.nil = true; + acc.set(state.getPrev().getTarget(),null); + state.getPrev().setNil(true); } catch (AccessorException e) { handleGenericException(e,true); } @@ -113,7 +113,7 @@ @Override protected void onNil(UnmarshallingContext.State state) { // let the receiver add this to the lister - state.target = null; + state.setTarget(null); } } } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiTypeLoader.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiTypeLoader.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiTypeLoader.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -61,7 +61,7 @@ beanInfo = defaultBeanInfo; Loader loader = beanInfo.getLoader(null,false); - state.loader = loader; + state.setLoader(loader); loader.startElement(state,ea); } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -358,7 +358,7 @@ bos.close(); try { if (decoded != null) - decoded.close(); + decoded.close(); } catch (IOException ex) { throw new SOAPException(ex); } @@ -582,8 +582,7 @@ mailMap.addMailcap("text/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler"); mailMap.addMailcap("application/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler"); mailMap.addMailcap("application/fastinfoset;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.FastInfosetDataContentHandler"); - // this handler seems to be not used according VCS history ... - // mailMap.addMailcap("multipart/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler"); + //mailMap.addMailcap("multipart/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler"); mailMap.addMailcap("image/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler"); mailMap.addMailcap("text/plain;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.StringDataContentHandler"); } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory.java Wed Jul 05 19:50:00 2017 +0200 @@ -25,6 +25,7 @@ package com.sun.xml.internal.messaging.saaj.soap; +import com.sun.xml.internal.messaging.saaj.LazyEnvelopeSource; import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl; import com.sun.xml.internal.messaging.saaj.util.JAXMStreamSource; import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants; @@ -45,10 +46,6 @@ import javax.xml.transform.sax.SAXSource; import javax.xml.transform.stax.StAXSource; import javax.xml.transform.stream.StreamSource; - -import com.sun.xml.internal.messaging.saaj.LazyEnvelopeSource; -import com.sun.xml.internal.messaging.saaj.util.transform.EfficientStreamingTransformer; - import java.util.logging.Logger; /** @@ -58,8 +55,8 @@ public class EnvelopeFactory { protected static final Logger - log = Logger.getLogger(LogDomainConstants.SOAP_DOMAIN, - "com.sun.xml.internal.messaging.saaj.soap.LocalStrings"); + log = Logger.getLogger(LogDomainConstants.SOAP_DOMAIN, + "com.sun.xml.internal.messaging.saaj.soap.LocalStrings"); private static ContextClassloaderLocal parserPool = new ContextClassloaderLocal() { @@ -72,16 +69,16 @@ public static Envelope createEnvelope(Source src, SOAPPartImpl soapPart) throws SOAPException { - if (src instanceof JAXMStreamSource) { - try { - if (!SOAPPartImpl.lazyContentLength) { - ((JAXMStreamSource) src).reset(); + if (src instanceof JAXMStreamSource) { + try { + if (!SOAPPartImpl.lazyContentLength) { + ((JAXMStreamSource) src).reset(); + } + } catch (java.io.IOException ioe) { + log.severe("SAAJ0515.source.reset.exception"); + throw new SOAPExceptionImpl(ioe); } - } catch (java.io.IOException ioe) { - log.severe("SAAJ0515.source.reset.exception"); - throw new SOAPExceptionImpl(ioe); } - } if (src instanceof LazyEnvelopeSource) { return lazy((LazyEnvelopeSource)src, soapPart); } @@ -93,7 +90,7 @@ } private static Envelope lazy(LazyEnvelopeSource src, SOAPPartImpl soapPart) throws SOAPException { - try { + try { StaxBridge staxBridge = new StaxLazySourceBridge(src, soapPart); staxBridge.bridgeEnvelopeAndHeaders(); Envelope env = (Envelope) soapPart.getEnvelope(); @@ -144,11 +141,11 @@ } catch (Exception e) { log.severe("SAAJ0601.util.newSAXParser.exception"); throw new SOAPExceptionImpl( - "Couldn't get a SAX parser while constructing a envelope", - e); + "Couldn't get a SAX parser while constructing a envelope", + e); } InputSource is = SAXSource.sourceToInputSource(src); - if (is.getEncoding() == null && soapPart.getSourceCharsetEncoding() != null) { + if (is.getEncoding()== null && soapPart.getSourceCharsetEncoding() != null) { is.setEncoding(soapPart.getSourceCharsetEncoding()); } XMLReader rejectFilter; @@ -157,15 +154,15 @@ } catch (Exception ex) { log.severe("SAAJ0510.soap.cannot.create.envelope"); throw new SOAPExceptionImpl( - "Unable to create envelope from given source: ", - ex); + "Unable to create envelope from given source: ", + ex); } src = new SAXSource(rejectFilter, is); } try { Transformer transformer = - EfficientStreamingTransformer.newTransformer(); + EfficientStreamingTransformer.newTransformer(); DOMResult result = new DOMResult(soapPart); transformer.transform(src, result); @@ -177,8 +174,8 @@ } log.severe("SAAJ0511.soap.cannot.create.envelope"); throw new SOAPExceptionImpl( - "Unable to create envelope from given source: ", - ex); + "Unable to create envelope from given source: ", + ex); } finally { if (saxParser != null) { parserPool.get().returnParser(saxParser); diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/util/stax/SaajStaxWriter.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/util/stax/SaajStaxWriter.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/util/stax/SaajStaxWriter.java Wed Jul 05 19:50:00 2017 +0200 @@ -55,8 +55,6 @@ static final protected String Body = "Body"; static final protected String xmlns = "xmlns"; - private boolean isHeaderSeen = false; - public SaajStaxWriter(final SOAPMessage msg, String uri) throws SOAPException { soap = msg; this.envURI = uri; @@ -93,7 +91,6 @@ fixPrefix(prefix); return; } else if (Header.equals(ln)) { - isHeaderSeen = true; currentElement = soap.getSOAPHeader(); fixPrefix(prefix); return; @@ -144,21 +141,6 @@ @Override public void writeEndDocument() throws XMLStreamException { - try { - if (!isHeaderSeen) { - SOAPElement header = soap.getSOAPHeader(); - if (header != null) { - String prefixAtHeader = header.getPrefix(); - SOAPElement env = getEnvelope(); - header.detachNode(); - if (prefixAtHeader != null && !prefixAtHeader.equals(env.getPrefix())) { - env.removeNamespaceDeclaration(prefixAtHeader); - } - } - } - } catch (SOAPException e) { - throw new XMLStreamException(e); - } } @Override diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/message/Packet.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/message/Packet.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/message/Packet.java Wed Jul 05 19:50:00 2017 +0200 @@ -1388,7 +1388,12 @@ public ContentType getInternalContentType() { Message msg = getInternalMessage(); if (msg instanceof MessageWritable) { - return ((MessageWritable)msg).getContentType(); + MessageWritable mw = (MessageWritable) msg; + + //bug 18121499 fix + mw.setMTOMConfiguration(mtomFeature); + + return mw.getContentType(); } return contentType; } diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/message/saaj/SaajStaxWriter.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/message/saaj/SaajStaxWriter.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/message/saaj/SaajStaxWriter.java Wed Jul 05 19:50:00 2017 +0200 @@ -55,8 +55,6 @@ static final protected String Body = "Body"; static final protected String xmlns = "xmlns"; - private boolean isHeaderSeen = false; - public SaajStaxWriter(final SOAPMessage msg, String uri) throws SOAPException { soap = msg; this.envURI = uri; @@ -93,7 +91,6 @@ fixPrefix(prefix); return; } else if (Header.equals(ln)) { - isHeaderSeen = true; currentElement = soap.getSOAPHeader(); fixPrefix(prefix); return; @@ -144,21 +141,6 @@ @Override public void writeEndDocument() throws XMLStreamException { - try { - if (!isHeaderSeen) { - SOAPElement header = soap.getSOAPHeader(); - if (header != null) { - String prefixAtHeader = header.getPrefix(); - SOAPElement env = getEnvelope(); - header.detachNode(); - if (prefixAtHeader != null && !prefixAtHeader.equals(env.getPrefix())) { - env.removeNamespaceDeclaration(prefixAtHeader); - } - } - } - } catch (SOAPException e) { - throw new XMLStreamException(e); - } } @Override diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/binding/WebServiceFeatureList.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/binding/WebServiceFeatureList.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/binding/WebServiceFeatureList.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -58,6 +58,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Constructor; import java.util.*; +import java.util.logging.Level; import java.util.logging.Logger; /** @@ -272,7 +273,7 @@ final Method buildMethod = builder.getClass().getDeclaredMethod("build"); for (Method builderMethod : builder.getClass().getDeclaredMethods()) { - if (!builderMethod.equals(buildMethod)) { + if (!builderMethod.equals(buildMethod) && !builderMethod.isSynthetic()) { final String methodName = builderMethod.getName(); final Method annotationMethod = annotation.annotationType().getDeclaredMethod(methodName); final Object annotationFieldValue = annotationMethod.invoke(annotation); @@ -291,6 +292,7 @@ throw new WebServiceException("Not a WebServiceFeature: " + result); } } catch (final NoSuchMethodException e) { + LOGGER.log(Level.INFO, "Unable to find builder method on webservice feature: " + beanClass.getName(), e); return null; } catch (final IllegalAccessException e) { throw new WebServiceException(e); diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/version.properties --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/version.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/version.properties Wed Jul 05 19:50:00 2017 +0200 @@ -23,7 +23,7 @@ # questions. # -build-id=2.2.10-b140228.1436 -build-version=JAX-WS RI 2.2.10-b140228.1436 -major-version=2.2.10 -svn-revision=e1d4708e8a2aee1ae9d38313452e14ce4b67851a +build-id=2.2.11-b140602.1731 +build-version=JAX-WS RI 2.2.11-b140602.1731 +major-version=2.2.11 +svn-revision=a684014c13b34abb8b9613e106f44f59abea206f diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/XMLReaderComposite.java --- a/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/XMLReaderComposite.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/XMLReaderComposite.java Wed Jul 05 19:50:00 2017 +0200 @@ -85,7 +85,7 @@ public XMLReaderComposite(final ElemInfo elem, XMLStreamReader[] wrapees) { elemInfo = elem; tagInfo = elem.tagInfo; - children = wrapees; + children = wrapees.clone(); if (children != null && children.length > 0) { payloadIndex = 0; payloadReader = children[payloadIndex]; diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/javax/xml/ws/WebServiceRef.java --- a/jaxws/src/share/jaxws_classes/javax/xml/ws/WebServiceRef.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/javax/xml/ws/WebServiceRef.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, 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 @@ -123,7 +123,7 @@ String mappedName() default ""; /** - * The service class, alwiays a type extending + * The service class, always a type extending * javax.xml.ws.Service. This element MUST be specified * whenever the type of the reference is a service endpoint interface. */ diff -r 376a52c9540c -r acabdf6da9db jaxws/src/share/jaxws_classes/javax/xml/ws/spi/Provider.java --- a/jaxws/src/share/jaxws_classes/javax/xml/ws/spi/Provider.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jaxws/src/share/jaxws_classes/javax/xml/ws/spi/Provider.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, 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 @@ -29,7 +29,7 @@ import java.util.List; import java.util.Iterator; import java.util.Map; -import java.lang.reflect.Method; +import java.util.ServiceLoader; import javax.xml.namespace.QName; import javax.xml.ws.*; import javax.xml.ws.wsaddressing.W3CEndpointReference; @@ -50,8 +50,7 @@ * name of a Provider implementation * class. */ - static public final String JAXWSPROVIDER_PROPERTY - = "javax.xml.ws.spi.Provider"; + static public final String JAXWSPROVIDER_PROPERTY = "javax.xml.ws.spi.Provider"; /** * A constant representing the name of the default @@ -62,29 +61,6 @@ = "com.sun"+".xml.internal.ws.spi.ProviderImpl"; /** - * Take advantage of Java SE 6's java.util.ServiceLoader API. - * Using reflection so that there is no compile-time dependency on SE 6. - */ - static private final Method loadMethod; - static private final Method iteratorMethod; - static { - Method tLoadMethod = null; - Method tIteratorMethod = null; - try { - Class clazz = Class.forName("java.util.ServiceLoader"); - tLoadMethod = clazz.getMethod("load", Class.class); - tIteratorMethod = clazz.getMethod("iterator"); - } catch(ClassNotFoundException ce) { - // Running on Java SE 5 - } catch(NoSuchMethodException ne) { - // Shouldn't happen - } - loadMethod = tLoadMethod; - iteratorMethod = tIteratorMethod; - } - - - /** * Creates a new instance of Provider */ protected Provider() { @@ -146,25 +122,16 @@ } } - private static Provider getProviderUsingServiceLoader() { - if (loadMethod != null) { - Object loader; - try { - loader = loadMethod.invoke(null, Provider.class); - } catch (Exception e) { - throw new WebServiceException("Cannot invoke java.util.ServiceLoader#load()", e); - } - - Iterator it; - try { - it = (Iterator)iteratorMethod.invoke(loader); - } catch(Exception e) { - throw new WebServiceException("Cannot invoke java.util.ServiceLoader#iterator()", e); - } - return it.hasNext() ? it.next() : null; + ServiceLoader sl; + Iterator it; + try { + sl = ServiceLoader.load(Provider.class); + it = (Iterator)sl.iterator(); + } catch (Exception e) { + throw new WebServiceException("Cannot invoke java.util.ServiceLoader#iterator()", e); } - return null; + return ((it != null) && it.hasNext()) ? it.next() : null; } /** diff -r 376a52c9540c -r acabdf6da9db jdk/.hgtags --- a/jdk/.hgtags Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/.hgtags Wed Jul 05 19:50:00 2017 +0200 @@ -264,3 +264,4 @@ 27561aede285c25a3e9ed8bf8918234ad3bb81e3 jdk9-b19 f87c5be90e01a7ffb47947108eb3e0b0b1920880 jdk9-b20 2df45ac1bf491278f38c12e0dfbeebadb6c54c8c jdk9-b21 +85bcf0f99edc08873614afbe5a5563e13ce13c83 jdk9-b22 diff -r 376a52c9540c -r acabdf6da9db jdk/make/CopyFiles.gmk --- a/jdk/make/CopyFiles.gmk Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/make/CopyFiles.gmk Wed Jul 05 19:50:00 2017 +0200 @@ -407,16 +407,11 @@ ########################################################################################## -BLACKLISTED_CERTS_SRC := $(JDK_TOPDIR)/src/share/lib/security/blacklisted.certs -BLACKLISTED_CERTS_DST := $(JDK_OUTPUTDIR)/lib/security/blacklisted.certs - ifndef OPENJDK BLACKLIST_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/blacklist BLACKLIST_DST := $(JDK_OUTPUTDIR)/lib/security/blacklist - BLACKLISTED_CERTS_SRC += $(wildcard $(JDK_TOPDIR)/src/closed/share/lib/security/blacklisted.certs) - TRUSTEDLIBS_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/trusted.libraries TRUSTEDLIBS_DST := $(JDK_OUTPUTDIR)/lib/security/trusted.libraries @@ -432,20 +427,6 @@ endif -$(BLACKLISTED_CERTS_DST): $(BLACKLISTED_CERTS_SRC) - $(MKDIR) -p $(@D) - $(CAT) $^ | $(SED) '/^$$/d' | $(SORT) | $(UNIQ) > $@.tmp - $(GREP) -i Algorithm $@.tmp > $@ - if [ `$(SED) -n -e "$$=" $@` != 1 ]; then \ - $(ECHO) "Different algorithms defined in $^"; \ - $(RM) $@ $@.tmp; \ - false; \ - fi - $(GREP) -iv Algorithm $@.tmp >> $@ - $(RM) $@.tmp - -COPY_FILES += $(BLACKLISTED_CERTS_DST) - ########################################################################################## ifndef OPENJDK diff -r 376a52c9540c -r acabdf6da9db jdk/make/GenerateData.gmk --- a/jdk/make/GenerateData.gmk Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/make/GenerateData.gmk Wed Jul 05 19:50:00 2017 +0200 @@ -50,6 +50,9 @@ include gendata/GendataHtml32dtd.gmk GENDATA += $(GENDATA_HTML32DTD) +include gendata/GendataBlacklistedCerts.gmk +GENDATA += $(GENDATA_BLACKLISTED_CERTS) + ########################################################################################## GENDATA_UNINAME := $(JDK_OUTPUTDIR)/classes/java/lang/uniName.dat diff -r 376a52c9540c -r acabdf6da9db jdk/make/Tools.gmk --- a/jdk/make/Tools.gmk Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/make/Tools.gmk Wed Jul 05 19:50:00 2017 +0200 @@ -87,6 +87,9 @@ TOOL_TZDB = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \ build.tools.tzdb.TzdbZoneRulesCompiler +TOOL_BLACKLISTED_CERTS = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \ + build.tools.blacklistedcertsconverter.BlacklistedCertsConverter + # TODO: There are references to the jdwpgen.jar in jdk/make/netbeans/jdwpgen/build.xml # and nbproject/project.properties in the same dir. Needs to be looked at. diff -r 376a52c9540c -r acabdf6da9db jdk/make/data/blacklistedcertsconverter/blacklisted.certs.pem --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/make/data/blacklistedcertsconverter/blacklisted.certs.pem Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,727 @@ +#! java BlacklistedCertsConverter SHA-256 + +# The line above must be the first line of the blacklisted.certs.pem +# file inside src/share/lib/security/. It will be ignored if added in +# src/closed/share/lib/security/blacklisted.certs.pem. + +// Subject: CN=Digisign Server ID (Enrich), +// OU=457608-K, +// O=Digicert Sdn. Bhd., +// C=MY +// Issuer: CN=GTE CyberTrust Global Root, +// OU=GTE CyberTrust Solutions, Inc., +// O=GTE Corporation, +// C=US +// Serial: 120001705 (07:27:14:a9) +-----BEGIN CERTIFICATE----- +MIIDyzCCAzSgAwIBAgIEBycUqTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds +b2JhbCBSb290MB4XDTA3MDcxNzE1MTc0OFoXDTEyMDcxNzE1MTY1NFowYzELMAkG +A1UEBhMCTVkxGzAZBgNVBAoTEkRpZ2ljZXJ0IFNkbi4gQmhkLjERMA8GA1UECxMI +NDU3NjA4LUsxJDAiBgNVBAMTG0RpZ2lzaWduIFNlcnZlciBJRCAoRW5yaWNoKTCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArahkS02Hx4RZufuQRqCmicDx/tXa +VII3DZkrRSYK6Fawf8qo9I5HhAGCKeOzarWR8/uVhbxyqGToCkCcxfRxrnt7agfq +kBRPjYmvlKuyBtQCanuYH1m5Os1U+iDfsioK6bjdaZDAKdNO0JftZszFGUkGf/pe +LHx7hRsyQt97lSUCAwEAAaOCAXgwggF0MBIGA1UdEwEB/wQIMAYBAf8CAQAwXAYD +VR0gBFUwUzBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcCARYtaHR0cDovL2N5YmVy +dHJ1c3Qub21uaXJvb3QuY29tL3JlcG9zaXRvcnkuY2ZtMAcGBWCDSgEBMA4GA1Ud +DwEB/wQEAwIB5jCBiQYDVR0jBIGBMH+heaR3MHUxCzAJBgNVBAYTAlVTMRgwFgYD +VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv +bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv +b3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0 +LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFMYWk04WF+wW +royUdvOGbcV0boR3MA0GCSqGSIb3DQEBBQUAA4GBAHYAe6Z4K2Ydjl42xqSOBfIj +knyTZ9P0wAp9iy3Z6tVvGvPhSilaIoRNUC9LDPL/hcJ7VdREgr5trGeOvLQfkpxR +gBoU9m6rYYgLrRx/90tQUdZlG6ZHcRVesHHzNRTyN71jyNXwk1o0X9g96F33xR7A +5c8fhiSpPAdmzcHSNmNZ +-----END CERTIFICATE----- + +// Subject: CN=Digisign Server ID - (Enrich), +// OU=457608-K, +// O=Digicert Sdn. Bhd., +// C=MY +// Issuer: CN=Entrust.net Certification Authority (2048) +// OU=(c) 1999 Entrust.net Limited, +// OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), +// O=Entrust.net +// Serial: 1184644297 (4c:0e:63:6a) +-----BEGIN CERTIFICATE----- +MIIEzjCCA7agAwIBAgIETA5jajANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0xMDA3MTYxNzIzMzdaFw0xNTA3 +MTYxNzUzMzdaMGUxCzAJBgNVBAYTAk1ZMRswGQYDVQQKExJEaWdpY2VydCBTZG4u +IEJoZC4xETAPBgNVBAsTCDQ1NzYwOC1LMSYwJAYDVQQDEx1EaWdpc2lnbiBTZXJ2 +ZXIgSUQgLSAoRW5yaWNoKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AMWJ5PQNBkCSWccaszXRDkwqM/n4r8qef+65p21g9FTob9Wb8xtjMQRoctE0Foy0 +FyyX3nPF2JAVoBor9cuzSIZE8B2ITM5BQhrv9Qze/kDaOSD3BlU6ap1GwdJvpbLI +Vz4po5zg6YV3ZuiYpyR+vsBZIOVEb7ZX2L7OwmV3WMZhQdF0BMh/SULFcqlyFu6M +3RJdtErU0a9Qt9iqdXZorT5dqjBtYairEFs+E78z4K9EnTgiW+9ML6ZxJhUmyiiM +2fqOjqmiFDXimySItPR/hZ2DTwehthSQNsQ0HI0mYW0Tb3i+6I8nx0uElqOGaAwj +vgvsjJQAqQSKE5D334VsDLECAwEAAaOCATQwggEwMA4GA1UdDwEB/wQEAwIBBjAS +BgNVHRMBAf8ECDAGAQH/AgEAMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcD +AgYIKwYBBQUHAwQwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8v +b2NzcC5lbnRydXN0Lm5ldDBEBgNVHSAEPTA7MDkGBWCDSgEBMDAwLgYIKwYBBQUH +AgEWImh0dHA6Ly93d3cuZGlnaWNlcnQuY29tLm15L2Nwcy5odG0wMgYDVR0fBCsw +KTAnoCWgI4YhaHR0cDovL2NybC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMBEGA1Ud +DgQKBAhMTswlKAMpgTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDAN +BgkqhkiG9w0BAQUFAAOCAQEAl0zvSjpJrHL8MCBrtClbp8WVBJD5MtXChWreA6E3 ++YkAsFqsVX7bQzX/yQH4Ub7MJsrIaqTEVD4mHucMo82XZ5TdpkLrXM2POXlrM3kh +Bnn6gkQVmczBtznTRmJ8snDrb84gqj4Zt+l0gpy0pUtNYQA35IfS8hQ6ZHy4qXth +4JMi59WfPkfmNnagU9gAAzoPtTP+lsrT0oI6Lt3XSOHkp2nMHOmZSufKcEXXCwcO +mnUb0C+Sb/akB8O9HEumhLZ9qJqp0qcp8QtXaR6XVybsK0Os1EWDBQDp4/BGQAf6 +6rFRc5Mcpd1TETfIKqcVJx20qsx/qjEw/LhFn0gJ7RDixQ== +-----END CERTIFICATE----- + +// Subject: CN=Java Media APIs, +// OU=Java Signed Extensions, +// OU=Corporate Object Signing, +// O=Sun Microsystems Inc +// Issuer: CN=Object Signing CA, +// OU=Class 2 OnSite Subscriber CA, +// OU=VeriSign Trust Network, +// O=Sun Microsystems Inc +// Serial: 6a:8b:99:91:37:59:4f:89:53:e2:97:18:9f:19:1e:4e +-----BEGIN CERTIFICATE----- +MIIFdzCCBF+gAwIBAgIQaouZkTdZT4lT4pcYnxkeTjANBgkqhkiG9w0BAQUFADCB +gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj +cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDUxMjAw +MDAwMFoXDTEyMDUxMTIzNTk1OVowfTEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt +cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE +CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEYMBYGA1UEAxQPSmF2YSBNZWRpYSBB +UElzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl5blzoKTVE8y4Hpz +q6E15RZz1bF5HnYEyYqgHkZXnAKedmYCoMzm1XK8s+gQWShLEvGEAvs5yqarx9gE +nnC21N28aEZgIJMa2/arKxCUkS4pxdGPYGexL9UzSRkUpoBShCZKEGdmX7gfJE2K +/sd9MFvGV5/yZtWXrADzvm0Kd/9mg1KRv1gfrZIq0TJbupoXPYYqb73AkI9eT2ZD +q9MdwD4E5+oojsDFXt8GU/D00fUhtXpYwuplU7D667WHYdJhIah0ST6JywyqcLXG +XSuFTXOgITT2idSHluZVmx3dqJ72u9kPkO4JdJTMDfaK8zgNLaRkiU8Qcj+qhLYH +ytaqcwIDAQABo4IB6jCCAeYwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCB4AwfwYD +VR0fBHgwdjB0oHKgcIZuaHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vU3Vu +TWljcm9zeXN0ZW1zSW5jQ29ycG9yYXRlT2JqZWN0U2lnbmluZ0phdmFTaWduZWRF +eHRlbnNpb25zQ2xhc3NCL0xhdGVzdENSTC5jcmwwHwYDVR0jBBgwFoAUs0crgn5T +tHPKuLsZt76BTQeVx+0wHQYDVR0OBBYEFKS32mVx0gNWTeS4ProHEaeSpvvIMDsG +CCsGAQUFBwEBBC8wLTArBggrBgEFBQcwAYYfaHR0cDovL29uc2l0ZS1vY3NwLnZl +cmlzaWduLmNvbTCBtQYDVR0gBIGtMIGqMDkGC2CGSAGG+EUBBxcCMCowKAYIKwYB +BQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwbQYLYIZIAYb3AIN9 +nD8wXjAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuc3VuLmNvbS9wa2kvY3BzMDMG +CCsGAQUFBwICMCcaJVZhbGlkYXRlZCBGb3IgU3VuIEJ1c2luZXNzIE9wZXJhdGlv +bnMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcNAQEFBQADggEBAAe6BO4W +3TSNWfezyelJs6kE3HfulT6Bdyz4UUoh9ykXcV8nRwT+kh25I5MdyG2GfkJoADPR +VhC5DYo13UFpIsTNVjq+hGYe2hML93bN7ad9SxCCyjHUo3yMz2qgBbHZI3VA9ZHA +aWM4Tx0saMwbcnVvlbuGh+PXvStfypJqYT6lzcdFfjNVX4FI/QQNGhBswMY51tC8 +GTBCL2qhJon0gSCU4zaawDOf7+XxJWirLamYL1Aal1/h2z2sFrvA/1ftxtU3kZ6I +7De8DyoHeZg7pYGdrj7g+lPhCga/WvEhN152I+aP08YbFcJHYmK05ngl/Ye4c6Bd +cdrdfbw6QzEUIYY= +-----END CERTIFICATE----- + +// Subject: CN=JavaFX 1.0 Runtime, +// OU=Java Signed Extensions, +// OU=Corporate Object Signing, +// O=Sun Microsystems Inc +// Issuer: CN=Object Signing CA, +// OU=Class 2 OnSite Subscriber CA, +// OU=VeriSign Trust Network, +// O=Sun Microsystems Inc +// Serial: 55:c0:e6:44:59:59:79:9e:d9:26:f1:b0:4a:1e:f0:27 +-----BEGIN CERTIFICATE----- +MIIFezCCBGOgAwIBAgIQVcDmRFlZeZ7ZJvGwSh7wJzANBgkqhkiG9w0BAQUFADCB +gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj +cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA4MTAwOTAw +MDAwMFoXDTExMTAwOTIzNTk1OVowgYAxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl +bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxHzAdBgNV +BAsUFkphdmEgU2lnbmVkIEV4dGVuc2lvbnMxGzAZBgNVBAMUEkphdmFGWCAxLjAg +UnVudGltZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+WDc6+bu+4 +tmAcS/lBtUc02WOt9QZpVsXg9cG2pu/8bUtmDELa8iiYBVFpIs8DU58HLrGQtCUY +SIAGOVPsOJoN29UKCDWfY9j5JeVhfhMGqk9DwrWhzgsjy4cpZ1pIp+k/fJ8zT8Ul +aYLpow1vg3UNddsmwz02tN7cOrMw9WYIG4CRYnY1OrtJSfe2pYzheC4zyvR+aiVl +nang2OtqikSQsNFOFHsLOJFxngy9LrO8evDSu25VTKI6zlWU6/bMeqtztJPN0VOn +NyUrJZvkxZ207Jg0T693BGSxNC1n+ihztXogql8950M/pEuUbDjylv5FFvlp6DSB +dDT2MkutmyMCAwEAAaOCAeowggHmMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeA +MH8GA1UdHwR4MHYwdKByoHCGbmh0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29t +L1N1bk1pY3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdKYXZhU2ln +bmVkRXh0ZW5zaW9uc0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaAFLNH +K4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBTjgufVi3XJ3gx1ewsA6Rr7BR4Z +zjA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUtb2Nz +cC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAqMCgG +CCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CGSAGG +9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtpL2Nw +czAzBggrBgEFBQcCAjAnGiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBPcGVy +YXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IBAQAB +YVJTTVe7rzyTO4jc3zajErOT/COkdQTfNo0eIX1QbNynFieJvwY/jRzUZwjktIFR +2p4JtbpHGAtKtjOAOTieQ8xdDOoC1djzpE7/AbMvuvlTavtUKT+F7tPdhfXgWXJV +6Wbt8jryKyk3zZGiEhauIwZUkfjRkEtffEmZWLUd8c8rURJjfC/XHH2oyurscoxc +CjX29c9ynxSiS/VvQp1an0HvErGh69N48wj7cj8mtZ1yHzd2XCzSSR1OfTPfk0Pt +yg51p7yJaFiH21PTZegEL6zyVNOYBTKwwIi2OzpwYalD3uvK6e3OKDrfFCOxu17u +4PveESbrdyrmvLe7IVez +-----END CERTIFICATE----- + +// Subject: CN=JavaFX Runtime, +// OU=Java Signed Extensions, +// OU=Corporate Object Signing, +// O=Sun Microsystems Inc +// Issuer: CN=Object Signing CA, +// OU=Class 2 OnSite Subscriber CA, +// OU=VeriSign Trust Network, +// O=Sun Microsystems Inc +// Serial: 47:f4:55:f1:da:4a:5e:f9:e3:f7:a8:03:62:17:c0:ff +-----BEGIN CERTIFICATE----- +MIIFdjCCBF6gAwIBAgIQR/RV8dpKXvnj96gDYhfA/zANBgkqhkiG9w0BAQUFADCB +gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj +cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDEyOTAw +MDAwMFoXDTEyMDEyOTIzNTk1OVowfDEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt +cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE +CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEXMBUGA1UEAxQOSmF2YUZYIFJ1bnRp +bWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIzd0fAk8mI9ONc6RJ +aGieioK2FLdXEwj8zL3vdGDVmBwyR1zwYkaOIFFgF9IW/8qc4iAYA5sGUY+0g8q3 +5DuYAxfTzBB5KdaYvbuq6GGnoHIWmTirXY+1friFp8lyXSvtuEaGB1VHaBoZchEg +k+UgeVDA43dHwcT1Ov3DePczJRUes8T/QHzLX+BxUDG43vjyncCEO/AjqLZxXEz2 +xrNbKLcH3lGMJK7hdbfssUfF5BjC38Hn71HauYlA43b2no+2y0Sjulwzez2YPbDC +0GLR3TnKtA8dqOrnl5t3DniDbfOBNtBE3VOydJO0XW57Ng1HRXD023nm9ECPY2xp +0N/pAgMBAAGjggHqMIIB5jAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDB/BgNV +HR8EeDB2MHSgcqBwhm5odHRwOi8vb25zaXRlY3JsLnZlcmlzaWduLmNvbS9TdW5N +aWNyb3N5c3RlbXNJbmNDb3Jwb3JhdGVPYmplY3RTaWduaW5nSmF2YVNpZ25lZEV4 +dGVuc2lvbnNDbGFzc0IvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBSzRyuCflO0 +c8q4uxm3voFNB5XH7TAdBgNVHQ4EFgQUvOdd0cKPj+Yik/iOBwTdphh5A+gwOwYI +KwYBBQUHAQEELzAtMCsGCCsGAQUFBzABhh9odHRwOi8vb25zaXRlLW9jc3AudmVy +aXNpZ24uY29tMIG1BgNVHSAEga0wgaowOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEF +BQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTBtBgtghkgBhvcAg32c +PzBeMCcGCCsGAQUFBwIBFhtodHRwczovL3d3dy5zdW4uY29tL3BraS9jcHMwMwYI +KwYBBQUHAgIwJxolVmFsaWRhdGVkIEZvciBTdW4gQnVzaW5lc3MgT3BlcmF0aW9u +czATBgNVHSUEDDAKBggrBgEFBQcDAzANBgkqhkiG9w0BAQUFAAOCAQEAbGcf2NjL +AI93HG6ny2BbepaZA1a8xa/R6uUc7xV+Qw6MgLwFD4Q4i6LWUztQDvg9l68MM2/i +Y9LEi1KM4lcNbK5+D+t9x98wXBiuojXhVdp5ZmC03EyEBbriopdBsmXVLDSu/Y3+ +zowOO5xwpMK3dbgsSDs2Vt0UosD3FTcRaD3GNfOhXMp+o1grHNiXF9YgkmdQbPPZ +DQ2KBhFPCRJXBGvyKOqno/DTg0sQ3crGH/C4/4t7mnQXWldZotmJUZ0ONc9oD+Q1 +JAaguUKqIwn9yZ093ie+JWHbYNid9IIIPXYgtRxmf9a376WBhqhu56uJftBJ7x9g +eQ7Lot6CSWCiFw== +-----END CERTIFICATE----- + +// Subject: CN=Solaris INTERNAL DEVELOPMENT USE ONLY, +// OU=Solaris Cryptographic Framework, +// OU=Corporate Object Signing, +// O=Sun Microsystems Inc +// Issuer: CN=Object Signing CA, +// OU=Class 2 OnSite Subscriber CA, +// OU=VeriSign Trust Network, +// O=Sun Microsystems Inc +// Serial: 77:29:77:52:6a:19:7b:9a:a6:a2:c7:99:a0:e1:cd:8c +-----BEGIN CERTIFICATE----- +MIIFHjCCBAagAwIBAgIQdyl3UmoZe5qmoseZoOHNjDANBgkqhkiG9w0BAQUFADCB +gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj +cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA3MDEwNDAw +MDAwMFoXDTEwMDEwMzIzNTk1OVowgZwxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl +bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxKDAmBgNV +BAsUH1NvbGFyaXMgQ3J5cHRvZ3JhcGhpYyBGcmFtZXdvcmsxLjAsBgNVBAMUJVNv +bGFyaXMgSU5URVJOQUwgREVWRUxPUE1FTlQgVVNFIE9OTFkwgZ8wDQYJKoZIhvcN +AQEBBQADgY0AMIGJAoGBALbNU4hf3mD5ArDI9pjgioAyvV3bjMPRQdCZniIeGJBp +odFlSEH+Mh64W1DsY8coeZ7FvvGJkx9IpTMJW9k8w1oJK9UNqHyAQfaYjQyXi3xQ +LJp62EvYdGfDlwOZejEcR/MbzZG+GOPMMvQj5+xyFDvLXNGfQNTnxw2qnBgCJXjj +AgMBAAGjggH1MIIB8TAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDCBiQYDVR0f +BIGBMH8wfaB7oHmGd2h0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29tL1N1bk1p +Y3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdTb2xhcmlzQ3J5cHRv +Z3JhcGhpY0ZyYW1ld29ya0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaA +FLNHK4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBRpfiGYkehTnsIzuN2H6AFb +VCZG8jA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUt +b2NzcC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAq +MCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CG +SAGG9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtp +L2NwczAzBggrBgEFBQcCAjAnFiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBP +cGVyYXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IB +AQCG5soy3LFHTFbA8/5SzDRhQoJkHUnOP0t3b6nvX6vZYRp649fje7TQOPRm1pFd +CZ17J+tggdZwgzTqY4aYpJ00jZaK6pV37q/vgFC/ia6jDs8Q+ly9cEcadBZ5loYg +cmxp9p57W2MNWx8VA8oFdNtKfF0jUNXbLNtvwGHmgR6YcwLrGN1b6/9Lt9bO3ODl +FO+ZDwkfQz5ClUVrTx2dGBvKRYFqSG5S8JAfsgYhPvcacUQkA7ExyKvfRXLWVrce +ZiPpcElbx+819H2sAPvVvparVeAruZGMAtejHZp9NFoowKen5drJp9VxePS4eM49 +3DepB6lKRrNRw66LNQol4ZBz +-----END CERTIFICATE----- + +// Subject: EMAILADDRESS=info@diginotar.nl, CN=DigiNotar Cyber CA, +// O=DigiNotar, C=NL +// Issuer: CN=GTE CyberTrust Global Root, +// OU=GTE CyberTrust Solutions, Inc., +// O=GTE Corporation, +// C=US +// Serial: 120000525 (07:27:10:0D) +-----BEGIN CERTIFICATE----- +MIIFWjCCBMOgAwIBAgIEBycQDTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds +b2JhbCBSb290MB4XDTA2MTAwNDEwNTQxMVoXDTExMTAwNDEwNTMxMVowYDELMAkG +A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy +IEN5YmVyIENBMSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANLOFQotqF6EZ639vu9Gx8i5z3P8 +9DS5+SxD52ATPXrjss87Z2yQrcC5P4RS8DVC3HTcKDu9UrSnrHJFF8bwieu0qiXy +XUte0dmHutZ9fPXOMp8QM8WxSrtekTHC0OlBwpFkfglBO9uLCDdqqspS3rU5HsCI +A6U/i5kTYUO1m4Kz7iBvz6FEouova0CfjytXraFTwoUiaZ2gP1HfC0GRDaXhqKpc +SQhdvd5wQbEPyWNr0380dAIvNFp4dRxoeoFnivPaQPBgY/SSINcDpj2jHmfEhBtB +pcmM5r3qSLYFFgizNxJa92E89zhvLpfgb1Y4VNMota0Ubi5LZLUnZbd1JQm2Bz2V +VgIKgmCyc0XgMyZRdJq51FAc9k1bW1JSE1qmf6cO4ehBVGeYjIfVydNsy9NUkgYJ +NEH3gW8/nsl8dVWw58Gzd+jDxAA1lUBwEEoF3iW7n1mlZLxHYL9g43aLE1Xd4XR6 +uc8kpmp/3mQiRFhogmoQ+T3lPhu5vfwi9GAEibtVbShV+t6OjRshFNc3izR7Tfay +shDPM7F9HGKZSMsrbHaWVb8ZDR0fu2WqG46ZtcYokOWCLXhQIJr9eS8kf/CJKWn0 +fc1zvrPtTsHR7VJej/e4142HrbLZG1ES/1az4a80fVykeIgQnp0DxqWqoiRR90kU +xbHuWUOV36toKDA/AgMBAAGjggGGMIIBgjASBgNVHRMBAf8ECDAGAQH/AgEBMFMG +A1UdIARMMEowSAYJKwYBBAGxPgEAMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cu +cHVibGljLXRydXN0LmNvbS9DUFMvT21uaVJvb3QuaHRtbDAOBgNVHQ8BAf8EBAMC +AQYwgaAGA1UdIwSBmDCBlYAUpgwdn2H/Bxe1vzhG20Mw1Y6wUgaheaR3MHUxCzAJ +BgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdU +RSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVy +VHJ1c3QgR2xvYmFsIFJvb3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93 +d3cucHVibGljLXRydXN0LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYD +VR0OBBYEFKv5aN/PSjfXe0WMX3LeQETDZbvCMA0GCSqGSIb3DQEBBQUAA4GBAI9o +a6VbB7pEZg4cqFwwezPkCiYE/O+eGjjWLqEf0JlHwnVkJP2eOyh2uSYoYZEMbSz4 +BJ98UAHV42mv7xXSRZskCSpmBU8lgcpdvqrBWSeuM46C9990sFWzjvjnN8huqlZE +9r1TgSOWPbT6MopTZkQloiXGpjwljPDgKAYityZB +-----END CERTIFICATE----- + +// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL +// Issuer: CN=GTE CyberTrust Global Root, +// OU=GTE CyberTrust Solutions, Inc., +// O=GTE Corporation, +// C=US +// Serial: 120000505 (07:27:0F:F9) +-----BEGIN CERTIFICATE----- +MIIFODCCBKGgAwIBAgIEBycP+TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds +b2JhbCBSb290MB4XDTA2MDkyMDA5NDUzMloXDTEzMDkyMDA5NDQwNlowPjELMAkG +A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy +IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o +XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S +tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7 +24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp +naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj +9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu +LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU +Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk +vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6 +3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt +eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4 +iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB +/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC +ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s +MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV +jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv +bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD +VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6 +oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw +MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI +hvcNAQEFBQADgYEACcpiD427SuDUejUrBi3RKGG2rAH7g0m8rtQvLYauGYOl1h0T +4he+/jJ06XoUOMqUXvcpAWlxG5Ea/aO7qh3Ke+IW/aGjDvMMX7LhIDGUK16Sdu36 +6bUjpr8KOwOpb1JgVM1f6bcvfKIn/UGDdbYN+3gm87FF6TKVKho1IZXFonU= +-----END CERTIFICATE----- + +// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL +// Issuer: CN=GTE CyberTrust Global Root, +// OU=GTE CyberTrust Solutions, Inc., +// O=GTE Corporation, +// C=US +// Serial: 120000515 (07:27:10:03) +-----BEGIN CERTIFICATE----- +MIIFODCCBKGgAwIBAgIEBycQAzANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds +b2JhbCBSb290MB4XDTA2MDkyNzEwNTMzMloXDTExMDkyNzEwNTIzMFowPjELMAkG +A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy +IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o +XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S +tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7 +24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp +naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj +9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu +LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU +Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk +vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6 +3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt +eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4 +iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB +/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC +ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s +MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV +jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv +bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD +VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6 +oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw +MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI +hvcNAQEFBQADgYEAWcyGZhizJlRP1jjNupZey+yZG6oMDW4Z11boriMHbYPCndBE +bVh07zmPbZsihOw9w/vm5KbVX5CgxUv4Rhzh/20Faixf3P3bpWg0qgzHVVusNVR/ +P50aKkpdK3hp+QLl56e+lWOddSAINIpmcuyDI1hyuzB+GJEASm9tNU/6rs8= +-----END CERTIFICATE----- + +// Subject: EMAILADDRESS=info@diginotar.nl, +// CN=DigiNotar Root CA, +// O=DigiNotar, C=NL +// Issuer: CN=Entrust.net Secure Server Certification Authority +// OU=(c) 1999 Entrust.net Limited, +// OU=www.entrust.net/CPS incorp. by ref. (limits liab.), +// O=Entrust.net, +// C=US, +// Serial: 1184644297 (46:9C:3C:C9) +-----BEGIN CERTIFICATE----- +MIIFSDCCBLGgAwIBAgIERpw8yTANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u +ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc +KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u +ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA0 +MjYwNTAwMDBaFw0xMzA4MTQyMDEyMzZaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK +EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI +hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt +OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx +hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7 +gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D +IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T +BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs +Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8 +5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf +DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX +9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e +7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj +ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB +BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF +BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD +VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy +bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G +A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob +BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAI979rBep8tu3TeLunapgsZ0jtXp +GDFjKWSk87dj1jCyYi+q/GyDyZ6ZQZNRP0sF+6twscq05lClWNy3TROMp7QeuoLO +G7Utw3OJaswUtp4YglANMRTHEe3g9ltifUXRH5tSuy7u6yi4LD4WTm5ULP6r/g6l +0CnjXYb0+b1Fmz6U +-----END CERTIFICATE----- + +// Subject: EMAILADDRESS=info@diginotar.nl, +// CN=DigiNotar Root CA, +// O=DigiNotar, C=NL +// Issuer: CN=Entrust.net Secure Server Certification Authority +// OU=(c) 1999 Entrust.net Limited, +// OU=www.entrust.net/CPS incorp. by ref. (limits liab.), +// O=Entrust.net, +// C=US, +// Serial: 1184640175 (46:9C:2C:AF) +-----BEGIN CERTIFICATE----- +MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u +ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc +KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u +ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3 +MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK +EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI +hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt +OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx +hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7 +gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D +IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T +BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs +Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8 +5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf +DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX +9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e +7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj +ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB +BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF +BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD +VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy +bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G +A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob +BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh +xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd +ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP +ZFdYf+hthc3m6IcJ +-----END CERTIFICATE----- + +// Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2, +// O=DigiNotar B.V., +// C=NL +// Issuer: CN=Staat der Nederlanden Organisatie CA - G2, +// O=Staat der Nederlanden, +// C=NL +// Serial: 20001983 (01:31:34:bf) +-----BEGIN CERTIFICATE----- +MIIGnDCCBISgAwIBAgIEATE0vzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTIwMAYDVQQDDClTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gT3JnYW5pc2F0aWUgQ0EgLSBHMjAeFw0xMDA1MTIw +ODUxMzhaFw0yMDAzMjMwOTUwMDRaMFoxCzAJBgNVBAYTAk5MMRcwFQYDVQQKDA5E +aWdpTm90YXIgQi5WLjEyMDAGA1UEAwwpRGlnaU5vdGFyIFBLSW92ZXJoZWlkIENB +IE9yZ2FuaXNhdGllIC0gRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCxExkPJ+Zs1FWGS9DsiYpFkXisR71HK+T8RetPtCZzWzfTw3/2497Xo/gtaMUI +PkuU1uSHJTZrhLUYdPMoWHMvm2rPvAQe9t7dr/xLqvXbZmIlASWC3vKXWhBu3V2p +IrEEqSNzOvhxrR3PhETrR9Gvbch8KKvH8jd6dF9fxQIUiqNa4xtsAeNdjtlo1vQJ +GzLckbUs9SDrjANtJkm4k8SFXdjSm69WaswFM8ygQp40VUSca6DUEtArVM23iQ3l +9uvo+4UBM096a/GdcjOWDveyhKWlJ8Qn8VFzKXe6Z27+TNy04qGhgS85SY1DOBPO +0KVcwoc6AGdlQiPxNlkKHaNRyLyjlCox3+M88p0aPASw77EKMBNzttfzo0wBdRSF +eMDXijlYhVD6LubFvs+LP6+PNtQlCS3SD6xyk/K/i9RQs/kVUJuZ9RTZ+4uRozIm +JqD43ztggYaDeVsr6xM9KTrBbd29no6H1kquNJcF7hSm9tw4fkrpJFQHPZdoN0Zr +DceoIa8TVOQJavFNRgrJXfubT73e+7dUy7g4nKc5+2otwHuNq6WnV+xKkoozxeEg +XHPYkJIrgNUPhhhpfDlPhIa890xb89W0yqDC8DciynlSH1PmqvOQsDvd8ij9rOvF +BiSgydQvD1j9tZ7sD8+yWdCiBHo4aq5y+73wJWKUCacFCwIDAQABo4IBYTCCAV0w +SAYDVR0gBEEwPzA9BgRVHSAAMDUwMwYIKwYBBQUHAgEWJ2h0dHA6Ly93d3cuZGln +aW5vdGFyLm5sL2Nwcy9wa2lvdmVyaGVpZDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjCBhQYDVR0jBH4wfIAUORCLSZJc22ESIM1JnRqO2pxnQLmhXqRc +MFoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4x +KzApBgNVBAMMIlN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENBIC0gRzKCBACY +lvQwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5wa2lvdmVyaGVpZC5ubC9E +b21PcmdhbmlzYXRpZUxhdGVzdENSTC1HMi5jcmwwHQYDVR0OBBYEFLxdlDvZq3sD +JXNhwtst7vyrj2WhMA0GCSqGSIb3DQEBCwUAA4ICAQCP/C1Mt9kt1R+978v0t2gX +dZ1O1ffdnPEqJu2forYcA9VTs+wIzzTi48P0tRYvyMO+19NzqwA2+RpKftZj6V5G +uqW2jhW3oyrYQx3vXcgfgYWzi/f/PPTZ9EYIP5y8HaDZqEzNJVJOCrEg9x/pQ9lU +RoETmsBedGwqmDLq/He7DaWiMZgifnx859qkrey3LhoZcfhIUNpDjyyE3cFAJ+O1 +8BVOltT4XOOGKUYr1zsH6zh/yIZXl9PvKjPEF1DVZGlrK2tFXl0vF8paTs/D1zk8 +9TufRrmb5w5Jl53W1eMbD+qPAU6aE5RZCgIHSEsaYKt/T+0L2FUNaG9VnGllFULs +wNzdbKzDFs4LHVabpMTE0i7gD+JEJytQaaTcYuiKISlCbMwAOpZ2m+9AwKRed4Qy +bCYqOWauXeO5ubIsaB8empADOfCqs6TMSYsYNOk3yXspx4R8b0QVL+xhWQTJRcui +1lKifH8pktZKxYtCqNT+6tjHhyMY5J16fXNAUpigrm7jBT8FD+Clxm1N7YM3iJzH +89xCmmq21yFJNnfy7xhPxXDZnunetyuL9Lx+KN8NQMmFXK6dxTH/0FwOtah+8Okv +uq+IruW10Vilr5xxpykBkINpN4IFuvwJwQhujHg7wzMCgD9EhQgd31VWCK0shS1d +sQPhrqp0xaTzTro3mHuCuQ== +-----END CERTIFICATE----- + +// Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven, +// O=DigiNotar B.V., +// C=NL +// Issuer: CN=Staat der Nederlanden Overheid CA +// O=Staat der Nederlanden, +// C=NL +// Serial: 20015536 (01:31:69:b0) +-----BEGIN CERTIFICATE----- +MIIEiDCCA3CgAwIBAgIEATFpsDANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO +TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDcwNzA1MDg0MjA3WhcN +MTUwNzI3MDgzOTQ2WjBfMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy +IEIuVi4xNzA1BgNVBAMTLkRpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp +ZCBlbiBCZWRyaWp2ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc +vdKnTmoKuzuiheF/AK2+tDBomAfNoHrElM9x+Yo35FPrV3bMi+Zs/u6HVcg+uwQ5 +AKeAeKxbT370vbhUuHE7BzFJOZNUfCA7eSuPu2GQfbGs5h+QLp1FAalkLU3DL7nn +UNVOKlyrdnY3Rtd57EKZ96LspIlw3Dgrh6aqJOadkiQbvvb91C8ZF3rmMgeUVAVT +Q+lsvK9Hy7zL/b07RBKB8WtLu+20z6slTxjSzAL8o0+1QjPLWc0J3NNQ/aB2jKx+ +ZopC9q0ckvO2+xRG603XLzDgbe5bNr5EdLcgBVeFTegAGaL2DOauocBC36esgl3H +aLcY5olLmmv6znn58yynAgMBAAGjggFQMIIBTDBIBgNVHSAEQTA/MD0GBFUdIAAw +NTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5kaWdpbm90YXIubmwvY3BzL3BraW92 +ZXJoZWlkMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMIGABgNVHSME +eTB3gBQLhtYPd6NosftkCcOIblwEHFfpPaFZpFcwVTELMAkGA1UEBhMCTkwxHjAc +BgNVBAoTFVN0YWF0IGRlciBOZWRlcmxhbmRlbjEmMCQGA1UEAxMdU3RhYXQgZGVy +IE5lZGVybGFuZGVuIFJvb3QgQ0GCBACYmnkwPQYDVR0fBDYwNDAyoDCgLoYsaHR0 +cDovL2NybC5wa2lvdmVyaGVpZC5ubC9Eb21PdkxhdGVzdENSTC5jcmwwHQYDVR0O +BBYEFEwIyY128ZjHPt881y91DbF2eZfMMA0GCSqGSIb3DQEBBQUAA4IBAQAMlIca +v03jheLu19hjeQ5Q38aEW9K72fUxCho1l3TfFPoqDz7toOMI9tVOW6+mriXiRWsi +D7dUKH6S3o0UbNEc5W50BJy37zRERd/Jgx0ZH8Apad+J1T/CsFNt5U4X5HNhIxMm +cUP9TFnLw98iqiEr2b+VERqKpOKrp11Lbyn1UtHk0hWxi/7wA8+nfemZhzizDXMU +5HIs4c71rQZIZPrTKbmi2Lv01QulQERDjqC/zlqlUkxk0xcxYczopIro5Ij76eUv +BjMzm5RmZrGrUDqhCYF0U1onuabSJc/Tw6f/ltAv6uAejVLpGBwgCkegllYOQJBR +RKwa/fHuhR/3Qlpl +-----END CERTIFICATE----- + +// Subject: CN=DigiNotar PKIoverheid CA Overheid +// O=DigiNotar B.V., +// C=NL +// Issuer: CN=Staat der Nederlanden Overheid CA +// O=Staat der Nederlanden, +// C=NL +// Serial: 20006006 (01:31:44:76) +-----BEGIN CERTIFICATE----- +MIIEezCCA2OgAwIBAgIEATFEdjANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO +TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDQwNjI0MDgxOTMyWhcN +MTAwNjIzMDgxNzM2WjBSMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy +IEIuVi4xKjAoBgNVBAMTIURpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp +ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANSlrubta5tlOjVCi/gb +yLCvRqfBjxG8H594VcKHu0WAYc99SPZF9cycj5mw2GyfQvy/WIrGrL4iyNq1gSqR +0QA/mTXKZIaPqzpDhdm+VvrKkmjrbZfaQxgMSs3ChtBsjcP9Lc0X1zXZ4Q8nBe3k +BTp+zehINfmbjoEgXLxsMR5RQ6GxzKjuC04PQpbJQgTIakglKaqYcDDZbEscWgPV +Hgj/2aoHlj6leW/ThHZ+O41jUguEmBLZA3mu3HrCfrHntb5dPt0ihzSx7GtD/SaX +5HBLxnP189YuqMk5iRA95CtiSdKauvon/xRKRLNgG6XAz0ctSoY7xLDdiBVU5kJd +FScCAwEAAaOCAVAwggFMMEgGA1UdIARBMD8wPQYEVR0gADA1MDMGCCsGAQUFBwIB +FidodHRwOi8vd3d3LmRpZ2lub3Rhci5ubC9jcHMvcGtpb3ZlcmhlaWQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgYAGA1UdIwR5MHeAFAuG1g93o2ix ++2QJw4huXAQcV+k9oVmkVzBVMQswCQYDVQQGEwJOTDEeMBwGA1UEChMVU3RhYXQg +ZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQYIEAJiaeTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnBraW92 +ZXJoZWlkLm5sL0RvbU92TGF0ZXN0Q1JMLmNybDAdBgNVHQ4EFgQUvRaYQh2+kdE9 +wpcl4CjXWOC1f+IwDQYJKoZIhvcNAQEFBQADggEBAGhQsCWLiaN2EOhPAW+JQP6o +XBOrLv5w6joahzBFVn1BiefzmlMKjibqKYxURRvMAsMkh82/MfL8V0w6ugxl81lu +i42dcxl9cKSVXKMw4bbBzJ2VQI5HTIABwefeNuy/eX6idVwYdt3ajAH7fUA8Q9Cq +vr6H8B+8mwoEqTVTEVlCSsC/EXsokYEUr06PPzRudKjDmijgj7zFaIioZNc8hk7g +ufEgrs/tmcNGylrwRHgCXjCRBt2NHlZ08l7A1AGU8HcHlSbG9Un/2q9kVHUkps0D +gtUaEK+x6jpAu/R8Ojezu/+ZEcwwjI/KOhG+84+ejFmtyEkrUdsAdEdLf/2dKsw= +-----END CERTIFICATE----- + +// Subject: EMAILADDRESS=info@diginotar.nl, +// CN=DigiNotar Services 1024 CA +// O=DigiNotar, C=NL +// Issuer: CN=Entrust.net Secure Server Certification Authority, +// OU=(c) 1999 Entrust.net Limited, +// OU=www.entrust.net/CPS incorp. by ref. (limits liab.), +// O=Entrust.net, +// C=US +// Serial: 1184640176 (46:9c:2c:b0) +-----BEGIN CERTIFICATE----- +MIIDzTCCAzagAwIBAgIERpwssDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u +ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc +KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u +ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3 +MjYxNTU5MDBaFw0xMzA4MjYxNjI5MDBaMGgxCzAJBgNVBAYTAk5MMRIwEAYDVQQK +EwlEaWdpTm90YXIxIzAhBgNVBAMTGkRpZ2lOb3RhciBTZXJ2aWNlcyAxMDI0IENB +MSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEA2ptNXTz50eKLxsYIIMXZHkjsZlhneWIrQWP0iY1o2q+4 +lDaLGSSkoJPSmQ+yrS01Tc0vauH5mxkrvAQafi09UmTN8T5nD4ku6PJPrqYIoYX+ +oakJ5sarPkP8r3oDkdqmOaZh7phPGKjTs69mgumfvN1y+QYEvRLZGCTnq5NTi1kC +AwEAAaOCASYwggEiMBIGA1UdEwEB/wQIMAYBAf8CAQAwJwYDVR0lBCAwHgYIKwYB +BQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDBDARBgNVHSAECjAIMAYGBFUdIAAwMwYI +KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5l +dDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L3NlcnZl +cjEuY3JsMB0GA1UdDgQWBBT+3JRJDG/vXH/G8RKZTxZJrfuCZTALBgNVHQ8EBAMC +AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowGQYJKoZIhvZ9B0EA +BAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEFBQADgYEAY3RqN6k/lpxmyFisCcnv +9WWUf6MCxDgxvV0jh+zUVrLJsm7kBQb87PX6iHBZ1O7m3bV6oKNgLwIMq94SXa/w +NUuqikeRGvWFLELHHe+VQ7NeuJWTpdrFKKqtci0xrZlrbP+MISevrZqRK8fdWMNu +B8WfedLHjFW/TMcnXlEWKz4= +-----END CERTIFICATE----- + +// Subject: CN=Buster Paper Comercial Ltda, +// O=Buster Paper Comercial Ltda, +// L=S?o Jos? Dos Campos, +// ST=S?o Paulo, +// C=BR +// Issuer: CN=DigiCert Assured ID Code Signing CA-1, +// OU=www.digicert.com, +// O=DigiCert Inc, +// C=US +// Serial: 07:b4:4c:db:ff:fb:78:de:05:f4:26:16:72:a6:73:12 +-----BEGIN CERTIFICATE----- +MIIGwzCCBaugAwIBAgIQB7RM2//7eN4F9CYWcqZzEjANBgkqhkiG9w0BAQUFADBv +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv +ZGUgU2lnbmluZyBDQS0xMB4XDTEzMDExNzAwMDAwMFoXDTE0MDEyMjEyMDAwMFow +gY4xCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMR4wHAYDVQQHDBVT +w6NvIEpvc8OpIERvcyBDYW1wb3MxJDAiBgNVBAoTG0J1c3RlciBQYXBlciBDb21l +cmNpYWwgTHRkYTEkMCIGA1UEAxMbQnVzdGVyIFBhcGVyIENvbWVyY2lhbCBMdGRh +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzO0l6jWIpEfO2oUpVHpL +HETj5lzivNb0S9jKHgGJax917czh81PnGTxwxFXd6gLJuy/XFHvmiSi8g8jzlymn +2Ji5zQ3CPaz7nomJokSUDlMVJ2qYWtctw4jrdjuI4qtn+koXXUFkWjkf8h8251I4 +tUs7S49HE2Go5owCYP3byajj7fsFAYR/Xb7TdVtndkZsUB/YgOjHovyACjouaNCi +mDiRyQ6zLLjZGiyeD65Yiseuhp5b8/BL5h1p7w76QYMYMVQNAdtDKut2R8MBpuWf +Ny7Eoi0x/gm1p9X5Rcl5aN7K0G4UtTAJKbkuUfXddsyFoM0Nx8uo8SgNQ8Y/X5Jx +BwIDAQABo4IDOTCCAzUwHwYDVR0jBBgwFoAUe2jOKarAF75JeuHlP9an90WPNTIw +HQYDVR0OBBYEFFLZ3n5nt/Eer7n1bvtOqMb1qKO5MA4GA1UdDwEB/wQEAwIHgDAT +BgNVHSUEDDAKBggrBgEFBQcDAzBzBgNVHR8EbDBqMDOgMaAvhi1odHRwOi8vY3Js +My5kaWdpY2VydC5jb20vYXNzdXJlZC1jcy0yMDExYS5jcmwwM6AxoC+GLWh0dHA6 +Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9hc3N1cmVkLWNzLTIwMTFhLmNybDCCAcQGA1Ud +IASCAbswggG3MIIBswYJYIZIAYb9bAMBMIIBpDA6BggrBgEFBQcCARYuaHR0cDov +L3d3dy5kaWdpY2VydC5jb20vc3NsLWNwcy1yZXBvc2l0b3J5Lmh0bTCCAWQGCCsG +AQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMAZQAgAG8AZgAgAHQAaABpAHMAIABD +AGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8AbgBzAHQAaQB0AHUAdABlAHMAIABh +AGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAAdABoAGUAIABEAGkAZwBpAEMAZQBy +AHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAAdABoAGUAIABSAGUAbAB5AGkAbgBn +ACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0AZQBuAHQAIAB3AGgAaQBjAGgAIABs +AGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQAeQAgAGEAbgBkACAAYQByAGUAIABp +AG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgAZQByAGUAaQBuACAAYgB5ACAAcgBl +AGYAZQByAGUAbgBjAGUALjCBggYIKwYBBQUHAQEEdjB0MCQGCCsGAQUFBzABhhho +dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTAYIKwYBBQUHMAKGQGh0dHA6Ly9jYWNl +cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENvZGVTaWduaW5nQ0Et +MS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOCAQEAPTTQvpOIikXI +hTLnNbajaFRR5GhQpTzUNgBfF9VYSlNw/wMjpGsrh5RxaJCip52jbehmTgjMRhft +jRYyml44PAVsCcR9uEoDpCZYpI1fHI1R+F8jd1C9rqprbSwwOG4xlg4SmvTHYs6e +gBItQ/1p9XY+Sf4Wv1qOuOFL1qvV/5VyR2zdlOQCmKCeMgxt6a/tHLBDiAA67D44 +/vfdoNJl0CU2It0PO60jdCPFNWIRcxL+OSDqAoePeUC7xQ+JsTEIxuUE8+d6w6fc +BV2mYb1flh22t46GLjh4gyo7xw3aL6L0L0jzlTT6IcEw6NIbaPbIKj/npQnHobYj +XMuKLxbh7g== +-----END CERTIFICATE----- + +// Subject: CN=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME, +// O=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME, +// L=S?o Paulo, +// ST=S?o Paulo, +// C=BR +// Issuer: CN=DigiCert Assured ID Code Signing CA-1, +// OU=www.digicert.com, +// O=DigiCert Inc, +// C=US +// Serial: 0a:38:9b:95:ee:73:6d:d1:3b:c0:ed:74:3f:d7:4d:2f +-----BEGIN CERTIFICATE----- +MIIG4DCCBcigAwIBAgIQCjible5zbdE7wO10P9dNLzANBgkqhkiG9w0BAQUFADBv +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv +ZGUgU2lnbmluZyBDQS0xMB4XDTEyMTEwOTAwMDAwMFoXDTEzMTExNDEyMDAwMFow +gasxCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMRMwEQYDVQQHDApT +w6NvIFBhdWxvMTgwNgYDVQQKEy9CVVNURVIgQVNTSVNURU5DSUEgVEVDTklDQSBF +TEVUUk9OSUNBIExUREEgLSBNRTE4MDYGA1UEAxMvQlVTVEVSIEFTU0lTVEVOQ0lB +IFRFQ05JQ0EgRUxFVFJPTklDQSBMVERBIC0gTUUwggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQDAqNeEs5/B2CTXGjTOkUIdu6jV6qulOZwdw4sefHWYj1UR +4z6zPk9kjpUgbnb402RFq88QtfInwddZ/wXn9OxMtDd/3TnC7HrhNS7ga79ZFL2V +JnmzKHum2Yvh0q82QEJ9tHBR2X9VdKpUIH08Zs3k6cWWM1H0YX0cxA/HohhesQJW +kwJ3urOIJiH/HeByDk8a1NS8safcCxk5vxvW4WvCg43iT09LeHY5Aa8abKw8lqVb +0tD5ZSIjdmdj3TT1U37iAHLLRM2DXbxfdbhouUX1c5U1ZHAMA67HwjKiseOiDaHj +NUGbC37C+cgbc9VVM/cURD8WvS0Kj6fQv7F2QtJDAgMBAAGjggM5MIIDNTAfBgNV +HSMEGDAWgBR7aM4pqsAXvkl64eU/1qf3RY81MjAdBgNVHQ4EFgQU88EXKAyDsh30 +o9+Gu9a4xUy+FSMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMD +MHMGA1UdHwRsMGowM6AxoC+GLWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9hc3N1 +cmVkLWNzLTIwMTFhLmNybDAzoDGgL4YtaHR0cDovL2NybDQuZGlnaWNlcnQuY29t +L2Fzc3VyZWQtY3MtMjAxMWEuY3JsMIIBxAYDVR0gBIIBuzCCAbcwggGzBglghkgB +hv1sAwEwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9z +c2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUHAgIwggFWHoIBUgBBAG4A +eQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQByAHQAaQBmAGkAYwBhAHQA +ZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBjAGUAcAB0AGEAbgBjAGUA +IABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAgAEMAUAAvAEMAUABTACAA +YQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQAGEAcgB0AHkAIABBAGcA +cgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBtAGkAdAAgAGwAaQBhAGIA +aQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBjAG8AcgBwAG8AcgBhAHQA +ZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBlAHIAZQBuAGMAZQAuMIGC +BggrBgEFBQcBAQR2MHQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0 +LmNvbTBMBggrBgEFBQcwAoZAaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp +Z2lDZXJ0QXNzdXJlZElEQ29kZVNpZ25pbmdDQS0xLmNydDAMBgNVHRMBAf8EAjAA +MA0GCSqGSIb3DQEBBQUAA4IBAQAei1QmiXepje8OIfo/WonD4MIXgpPr2dfRaquQ +A8q63OpTRSveyqdQDCSPpDRF/nvO1Y30yksZvIH1tNBsW5LBdxAKN3lFdBlqBwtE +Q3jHc0KVVYRJ0FBaGE/PJHmRajscdAhYIcMPhTga0u0tDK+wOHEq3993dfl6yHjA +XHU2iW5pnk75ZoE39zALD5eKXT8ZXrET5c3XUFJKWA+XuGmdmyzqo0Au49PanBv9 +UlZnabYfqoMArqMS0tGSX4cGgi9/2E+pHG9BX4sFW+ZDumroOA2pxyMWEKjxePEL +zCOfhbsRWdMLYepauaNZOIMZXmFwcrIl0TGMkTAtATz+XmZc +-----END CERTIFICATE----- + +// Subject: CN=CLEARESULT CONSULTING INC., OU=Corporate IT, +// O=CLEARESULT CONSULTING INC., L=Austin, ST=TX, C=US +// Issuer: SERIALNUMBER=07969287, +// CN=Go Daddy Secure Certification Authority, +// OU=http://certificates.godaddy.com/repository, +// O="GoDaddy.com, Inc.", +// L=Scottsdale, +// ST=Arizona, +// C=US +// Serial: 2b:73:43:2a:a8:4f:44 +-----BEGIN CERTIFICATE----- +MIIFYjCCBEqgAwIBAgIHK3NDKqhPRDANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY +BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm +aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5 +IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky +ODcwHhcNMTIwMjE1MjEwOTA2WhcNMTQwMjE1MjEwOTA2WjCBjDELMAkGA1UEBgwC +VVMxCzAJBgNVBAgMAlRYMQ8wDQYDVQQHDAZBdXN0aW4xIzAhBgNVBAoMGkNMRUFS +RVNVTFQgQ09OU1VMVElORyBJTkMuMRUwEwYDVQQLDAxDb3Jwb3JhdGUgSVQxIzAh +BgNVBAMMGkNMRUFSRVNVTFQgQ09OU1VMVElORyBJTkMuMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAtIOjCKeAicull+7ZIzt0/4ya3IeXUFlfypqKMLkU +IbKjn0P5uMj6VE3rlbZr44RCegxvdnR6umBh1c0ZXoN3o+yc0JKcKcLiApmJJ277 +p7IbLwYDhBXRQNoIJm187IOMRPIxsKN4hL91txn9jGBmW+9zKlJlNhR5R7vjwU2E +jrH/6oqsc9EM2yYpfjlNv6+3jSwAYZCkSWr+27PQOV+YHKmIxtJjX0upFz5FdIrV +9CCX+L2Kji1THOkSgG4QTbYxmEcHqGViWz8hXLeNXjcbEsPuIiAu3hknxRHfUTE/ +U0Lh0Ug1e3LrJu+WnxM2SmUY4krsZ22c0yWUW9hzWITIjQIDAQABo4IBhzCCAYMw +DwYDVR0TAQH/BAUwAwEBADATBgNVHSUEDDAKBggrBgEFBQcDAzAOBgNVHQ8BAf8E +BAMCB4AwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nb2RhZGR5LmNvbS9n +ZHM1LTE2LmNybDBTBgNVHSAETDBKMEgGC2CGSAGG/W0BBxcCMDkwNwYIKwYBBQUH +AgEWK2h0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS8w +gYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZ29kYWRk +eS5jb20vMEoGCCsGAQUFBzAChj5odHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHku +Y29tL3JlcG9zaXRvcnkvZ2RfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSMEGDAWgBT9 +rGEyk2xF1uLuhV+auud2mWjM5zAdBgNVHQ4EFgQUDtdeKqeN2QkcbEp1HovFieNB +XiowDQYJKoZIhvcNAQEFBQADggEBAD74Agw5tvi2aBl4/f/s7/VE/BClzDsKMb9K +v9qpeC45ZA/jelxV11HKbQnVF194gDb7D2H9OsAsRUy8HVKbXEcc/8dKvwOqb+BC +2i/EmfjLgmCfezNFtLq8xcPxF3zIRc44vPrK0z4YZsaHdH+yTEJ51p5EMdTqaLaP +4n5m8LX3RfqlQB9dYFe6dUoYZjKm9d/pIRww3VqfOzjl42Edi1w6dWmBVMx1NZuR +DBabJH1vJ9Gd+KwxMCmBZ6pQPl28JDimhJhI2LNqU349uADQVV0HJosddN/ARyyI +LSIQO7BnNVKVG9Iujf33bvPNeg0qNz5qw+rKKq97Pqeum+L5oKU= +-----END CERTIFICATE----- diff -r 376a52c9540c -r acabdf6da9db jdk/make/gendata/GendataBlacklistedCerts.gmk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/make/gendata/GendataBlacklistedCerts.gmk Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,36 @@ +# +# 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GENDATA_BLACKLISTED_CERTS_SRC := $(JDK_TOPDIR)/make/data/blacklistedcertsconverter/blacklisted.certs.pem +GENDATA_BLACKLISTED_CERTS := $(JDK_OUTPUTDIR)/lib/security/blacklisted.certs + +ifndef OPENJDK + GENDATA_BLACKLISTED_CERTS_SRC += $(wildcard $(JDK_TOPDIR)/make/closed/data/blacklistedcertsconverter/blacklisted.certs.pem) +endif + +$(GENDATA_BLACKLISTED_CERTS): $(BUILD_TOOLS) $(GENDATA_BLACKLISTED_CERTS_SRC) + $(ECHO) "Generating blacklisted certs" + $(MKDIR) -p $(@D) + ($(CAT) $(GENDATA_BLACKLISTED_CERTS_SRC) | $(TOOL_BLACKLISTED_CERTS) > $@) || exit 1 diff -r 376a52c9540c -r acabdf6da9db jdk/make/src/classes/build/tools/blacklistedcertsconverter/BlacklistedCertsConverter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/make/src/classes/build/tools/blacklistedcertsconverter/BlacklistedCertsConverter.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,111 @@ +/* + * 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. + */ + +package build.tools.blacklistedcertsconverter; + +import java.security.MessageDigest; +import java.security.cert.Certificate; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.Collection; +import java.util.Set; +import java.util.TreeSet; + + +/** + * Converts blacklisted.certs.pem from System.in to blacklisted.certs in + * System.out. The input must start with a #! line including the fingerprint + * algorithm. The output is sorted and unique. + */ +public class BlacklistedCertsConverter { + + public static void main(String[] args) throws Exception { + + byte[] pattern = "#! java BlacklistedCertsConverter ".getBytes(); + String mdAlg = ""; + + for (int i=0; ; i++) { + int n = System.in.read(); + if (n < 0) { + throw new Exception("Unexpected EOF"); + } + if (i < pattern.length) { + if (n != pattern[i]) { + throw new Exception("The first line must start with \"" + + new String(pattern) + "\""); + } + } else if (i < pattern.length + 100) { + if (n < 32) { + break; + } else { + mdAlg = mdAlg + String.format("%c", n); + } + } + } + + mdAlg = mdAlg.trim(); + System.out.println("Algorithm=" + mdAlg); + + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + Collection certs + = cf.generateCertificates(System.in); + + // Output sorted so that it's easy to locate an entry. + Set fingerprints = new TreeSet<>(); + for (Certificate cert: certs) { + fingerprints.add( + getCertificateFingerPrint(mdAlg, (X509Certificate)cert)); + } + + for (String s: fingerprints) { + System.out.println(s); + } + } + + /** + * Converts a byte to hex digit and writes to the supplied buffer + */ + private static void byte2hex(byte b, StringBuffer buf) { + char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', + '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + int high = ((b & 0xf0) >> 4); + int low = (b & 0x0f); + buf.append(hexChars[high]); + buf.append(hexChars[low]); + } + + /** + * Gets the requested finger print of the certificate. + */ + private static String getCertificateFingerPrint( + String mdAlg, X509Certificate cert) throws Exception { + byte[] encCertInfo = cert.getEncoded(); + MessageDigest md = MessageDigest.getInstance(mdAlg); + byte[] digest = md.digest(encCertInfo); + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < digest.length; i++) { + byte2hex(digest[i], buf); + } + return buf.toString(); + } +} diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/crypto/provider/JceKeyStore.java --- a/jdk/src/share/classes/com/sun/crypto/provider/JceKeyStore.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/crypto/provider/JceKeyStore.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, 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 @@ -107,7 +107,7 @@ { Key key = null; - Object entry = entries.get(alias.toLowerCase()); + Object entry = entries.get(alias.toLowerCase(Locale.ENGLISH)); if (!((entry instanceof PrivateKeyEntry) || (entry instanceof SecretKeyEntry))) { @@ -150,7 +150,7 @@ { Certificate[] chain = null; - Object entry = entries.get(alias.toLowerCase()); + Object entry = entries.get(alias.toLowerCase(Locale.ENGLISH)); if ((entry instanceof PrivateKeyEntry) && (((PrivateKeyEntry)entry).chain != null)) { @@ -178,7 +178,7 @@ public Certificate engineGetCertificate(String alias) { Certificate cert = null; - Object entry = entries.get(alias.toLowerCase()); + Object entry = entries.get(alias.toLowerCase(Locale.ENGLISH)); if (entry != null) { if (entry instanceof TrustedCertEntry) { @@ -203,7 +203,7 @@ public Date engineGetCreationDate(String alias) { Date date = null; - Object entry = entries.get(alias.toLowerCase()); + Object entry = entries.get(alias.toLowerCase(Locale.ENGLISH)); if (entry != null) { // We have to create a new instance of java.util.Date because @@ -266,7 +266,7 @@ } // store the entry - entries.put(alias.toLowerCase(), entry); + entries.put(alias.toLowerCase(Locale.ENGLISH), entry); } else { SecretKeyEntry entry = new SecretKeyEntry(); @@ -274,7 +274,7 @@ // seal and store the key entry.sealedKey = keyProtector.seal(key); - entries.put(alias.toLowerCase(), entry); + entries.put(alias.toLowerCase(Locale.ENGLISH), entry); } } catch (Exception e) { @@ -322,7 +322,7 @@ entry.chain = null; } - entries.put(alias.toLowerCase(), entry); + entries.put(alias.toLowerCase(Locale.ENGLISH), entry); } } @@ -345,7 +345,7 @@ { synchronized(entries) { - Object entry = entries.get(alias.toLowerCase()); + Object entry = entries.get(alias.toLowerCase(Locale.ENGLISH)); if (entry != null) { if (entry instanceof PrivateKeyEntry) { throw new KeyStoreException("Cannot overwrite own " @@ -358,7 +358,7 @@ TrustedCertEntry trustedCertEntry = new TrustedCertEntry(); trustedCertEntry.cert = cert; trustedCertEntry.date = new Date(); - entries.put(alias.toLowerCase(), trustedCertEntry); + entries.put(alias.toLowerCase(Locale.ENGLISH), trustedCertEntry); } } @@ -373,7 +373,7 @@ throws KeyStoreException { synchronized(entries) { - entries.remove(alias.toLowerCase()); + entries.remove(alias.toLowerCase(Locale.ENGLISH)); } } @@ -394,7 +394,7 @@ * @return true if the alias exists, false otherwise */ public boolean engineContainsAlias(String alias) { - return entries.containsKey(alias.toLowerCase()); + return entries.containsKey(alias.toLowerCase(Locale.ENGLISH)); } /** @@ -416,7 +416,7 @@ public boolean engineIsKeyEntry(String alias) { boolean isKey = false; - Object entry = entries.get(alias.toLowerCase()); + Object entry = entries.get(alias.toLowerCase(Locale.ENGLISH)); if ((entry instanceof PrivateKeyEntry) || (entry instanceof SecretKeyEntry)) { isKey = true; @@ -434,7 +434,7 @@ */ public boolean engineIsCertificateEntry(String alias) { boolean isCert = false; - Object entry = entries.get(alias.toLowerCase()); + Object entry = entries.get(alias.toLowerCase(Locale.ENGLISH)); if (entry instanceof TrustedCertEntry) { isCert = true; } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/crypto/provider/PBEKey.java --- a/jdk/src/share/classes/com/sun/crypto/provider/PBEKey.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/crypto/provider/PBEKey.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -27,6 +27,7 @@ import java.security.KeyRep; import java.security.spec.InvalidKeySpecException; +import java.util.Locale; import javax.crypto.SecretKey; import javax.crypto.spec.PBEKeySpec; @@ -91,7 +92,7 @@ for (int i = 1; i < this.key.length; i++) { retval += this.key[i] * i; } - return(retval ^= getAlgorithm().toLowerCase().hashCode()); + return(retval ^= getAlgorithm().toLowerCase(Locale.ENGLISH).hashCode()); } public boolean equals(Object obj) { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java --- a/jdk/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -32,6 +32,7 @@ import javax.crypto.SecretKeyFactorySpi; import javax.crypto.spec.PBEKeySpec; import java.util.HashSet; +import java.util.Locale; /** * This class implements a key factory for PBE keys according to PKCS#5, @@ -56,24 +57,24 @@ static { validTypes = new HashSet(17); - validTypes.add("PBEWithMD5AndDES".toUpperCase()); - validTypes.add("PBEWithSHA1AndDESede".toUpperCase()); - validTypes.add("PBEWithSHA1AndRC2_40".toUpperCase()); - validTypes.add("PBEWithSHA1AndRC2_128".toUpperCase()); - validTypes.add("PBEWithSHA1AndRC4_40".toUpperCase()); - validTypes.add("PBEWithSHA1AndRC4_128".toUpperCase()); + validTypes.add("PBEWithMD5AndDES".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithSHA1AndDESede".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithSHA1AndRC2_40".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithSHA1AndRC2_128".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithSHA1AndRC4_40".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithSHA1AndRC4_128".toUpperCase(Locale.ENGLISH)); // Proprietary algorithm. - validTypes.add("PBEWithMD5AndTripleDES".toUpperCase()); - validTypes.add("PBEWithHmacSHA1AndAES_128".toUpperCase()); - validTypes.add("PBEWithHmacSHA224AndAES_128".toUpperCase()); - validTypes.add("PBEWithHmacSHA256AndAES_128".toUpperCase()); - validTypes.add("PBEWithHmacSHA384AndAES_128".toUpperCase()); - validTypes.add("PBEWithHmacSHA512AndAES_128".toUpperCase()); - validTypes.add("PBEWithHmacSHA1AndAES_256".toUpperCase()); - validTypes.add("PBEWithHmacSHA224AndAES_256".toUpperCase()); - validTypes.add("PBEWithHmacSHA256AndAES_256".toUpperCase()); - validTypes.add("PBEWithHmacSHA384AndAES_256".toUpperCase()); - validTypes.add("PBEWithHmacSHA512AndAES_256".toUpperCase()); + validTypes.add("PBEWithMD5AndTripleDES".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA1AndAES_128".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA224AndAES_128".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA256AndAES_128".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA384AndAES_128".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA512AndAES_128".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA1AndAES_256".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA224AndAES_256".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA256AndAES_256".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA384AndAES_256".toUpperCase(Locale.ENGLISH)); + validTypes.add("PBEWithHmacSHA512AndAES_256".toUpperCase(Locale.ENGLISH)); } public static final class PBEWithMD5AndDES @@ -237,7 +238,7 @@ protected KeySpec engineGetKeySpec(SecretKey key, Class keySpecCl) throws InvalidKeySpecException { if ((key instanceof SecretKey) - && (validTypes.contains(key.getAlgorithm().toUpperCase())) + && (validTypes.contains(key.getAlgorithm().toUpperCase(Locale.ENGLISH))) && (key.getFormat().equalsIgnoreCase("RAW"))) { // Check if requested key spec is amongst the valid ones @@ -279,7 +280,7 @@ { try { if ((key != null) && - (validTypes.contains(key.getAlgorithm().toUpperCase())) && + (validTypes.contains(key.getAlgorithm().toUpperCase(Locale.ENGLISH))) && (key.getFormat().equalsIgnoreCase("RAW"))) { // Check if key originates from this factory diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/crypto/provider/PBKDF2KeyImpl.java --- a/jdk/src/share/classes/com/sun/crypto/provider/PBKDF2KeyImpl.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/crypto/provider/PBKDF2KeyImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, 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 @@ -30,6 +30,7 @@ import java.nio.CharBuffer; import java.nio.charset.Charset; import java.util.Arrays; +import java.util.Locale; import java.security.KeyRep; import java.security.GeneralSecurityException; import java.security.NoSuchAlgorithmException; @@ -143,7 +144,7 @@ @Override public int hashCode() { return Arrays.hashCode(password) * 41 + - prf.getAlgorithm().toLowerCase().hashCode(); + prf.getAlgorithm().toLowerCase(Locale.ENGLISH).hashCode(); } @Override public boolean equals(Object obj) { @@ -221,7 +222,7 @@ for (int i = 1; i < this.key.length; i++) { retval += this.key[i] * i; } - return(retval ^= getAlgorithm().toLowerCase().hashCode()); + return(retval ^= getAlgorithm().toLowerCase(Locale.ENGLISH).hashCode()); } public boolean equals(Object obj) { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/jndi/ldap/Connection.java --- a/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java Wed Jul 05 19:50:00 2017 +0200 @@ -111,6 +111,7 @@ private static final boolean debug = false; private static final int dump = 0; // > 0 r, > 1 rw + public static final long DEFAULT_READ_TIMEOUT_MILLIS = 15 * 1000; // 15 second timeout; final private Thread worker; // Initialized in constructor @@ -460,7 +461,7 @@ // available ldr.wait(readTimeout); } else { - ldr.wait(15 * 1000); // 15 second timeout + ldr.wait(DEFAULT_READ_TIMEOUT_MILLIS); } waited = true; } else { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/security/ntlm/Client.java --- a/jdk/src/share/classes/com/sun/security/ntlm/Client.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/security/ntlm/Client.java Wed Jul 05 19:50:00 2017 +0200 @@ -46,7 +46,7 @@ final private String hostname; final private String username; - private String domain; // might be updated by Type 2 msg + private String domain; private byte[] pw1, pw2; /** @@ -82,7 +82,7 @@ } this.hostname = hostname; this.username = username; - this.domain = domain; + this.domain = domain == null ? "" : domain; this.pw1 = getP1(password); this.pw2 = getP2(password); debug("NTLM Client: (h,u,t,version(v)) = (%s,%s,%s,%s(%s))\n", @@ -95,19 +95,13 @@ */ public byte[] type1() { Writer p = new Writer(1, 32); - int flags = 0x8203; - if (hostname != null) { - flags |= 0x2000; - } - if (domain != null) { - flags |= 0x1000; - } + // Negotiate always sign, Negotiate NTLM, + // Request Target, Negotiate OEM, Negotiate unicode + int flags = 0x8207; if (v != Version.NTLM) { flags |= 0x80000; } p.writeInt(12, flags); - p.writeSecurityBuffer(24, hostname, false); - p.writeSecurityBuffer(16, domain, false); debug("NTLM Client: Type 1 created\n"); debug(p.getBytes()); return p.getBytes(); @@ -133,13 +127,10 @@ byte[] challenge = r.readBytes(24, 8); int inputFlags = r.readInt(20); boolean unicode = (inputFlags & 1) == 1; - String domainFromServer = r.readSecurityBuffer(12, unicode); - if (domainFromServer != null) { - domain = domainFromServer; - } - if (domain == null) { - domain = ""; - } + + // IE uses domainFromServer to generate an alist if server has not + // provided one. Firefox/WebKit do not. Neither do we. + //String domainFromServer = r.readSecurityBuffer(12, unicode); int flags = 0x88200 | (inputFlags & 3); Writer p = new Writer(3, 64); @@ -163,7 +154,9 @@ if (writeLM) lm = calcV2(nthash, username.toUpperCase(Locale.US)+domain, nonce, challenge); if (writeNTLM) { - byte[] alist = type2.length > 48 ? + // Some client create a alist even if server does not send + // one: (i16)2 (i16)len target_in_unicode (i16)0 (i16) 0 + byte[] alist = ((inputFlags & 0x800000) != 0) ? r.readSecurityBuffer(40) : new byte[0]; byte[] blob = new byte[32+alist.length]; System.arraycopy(new byte[]{1,1,0,0,0,0,0,0}, 0, blob, 0, 8); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/security/ntlm/Server.java --- a/jdk/src/share/classes/com/sun/security/ntlm/Server.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/security/ntlm/Server.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,3 +1,4 @@ + /* * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -92,7 +93,9 @@ debug("NTLM Server: Type 1 received\n"); if (type1 != null) debug(type1); Writer p = new Writer(2, 32); - int flags = 0x80205; + // Negotiate NTLM2 Key, Target Type Domain, + // Negotiate NTLM, Request Target, Negotiate unicode + int flags = 0x90205; p.writeSecurityBuffer(12, domain, true); p.writeInt(20, flags); p.writeBytes(24, nonce); @@ -127,8 +130,9 @@ "Wrong domain: " + incomingDomain + " vs " + domain); // Needed? }*/ + boolean verified = false; - char[] password = getPassword(domain, username); + char[] password = getPassword(incomingDomain, username); if (password == null) { throw new NTLMException(NTLMException.USER_UNKNOWN, "Unknown user"); @@ -179,6 +183,8 @@ } } if (incomingNTLM.length > 0) { + // We didn't sent alist in type2(), so there + // is nothing to check here. byte[] clientBlob = Arrays.copyOfRange( incomingNTLM, 16, incomingNTLM.length); byte[] ntlmresponse = calcV2(nthash, diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/security/sasl/gsskerb/GssKrb5Base.java --- a/jdk/src/share/classes/com/sun/security/sasl/gsskerb/GssKrb5Base.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/security/sasl/gsskerb/GssKrb5Base.java Wed Jul 05 19:50:00 2017 +0200 @@ -26,11 +26,14 @@ package com.sun.security.sasl.gsskerb; +import java.util.Locale; import java.util.Map; import java.util.logging.Level; import javax.security.sasl.*; import com.sun.security.sasl.util.AbstractSaslImpl; import org.ietf.jgss.*; +import com.sun.security.jgss.ExtendedGSSContext; +import com.sun.security.jgss.InquireType; abstract class GssKrb5Base extends AbstractSaslImpl { @@ -61,6 +64,36 @@ return "GSSAPI"; } + @Override + public Object getNegotiatedProperty(String propName) { + if (!completed) { + throw new IllegalStateException("Authentication incomplete"); + } + String xprefix = "com.sun.security.jgss.inquiretype."; + if (propName.startsWith(xprefix)) { + String type = propName.substring(xprefix.length()); + if (logger.isLoggable(Level.FINEST)) { + logger.logp(Level.FINE, "GssKrb5Base", + "getNegotiatedProperty", propName); + } + for (InquireType t: InquireType.values()) { + if (t.name().toLowerCase(Locale.US).equals(type)) { + try { + return ((ExtendedGSSContext)secCtx).inquireSecContext(t); + } catch (GSSException e) { + if (logger.isLoggable(Level.FINEST)) { + logger.log(Level.WARNING, "inquireSecContext error", e); + } + return null; + } + } + } + // No such InquireType. Although not likely to be defined + // as a property in a parent class, still try it. + } + return super.getNegotiatedProperty(propName); + } + public byte[] unwrap(byte[] incoming, int start, int len) throws SaslException { if (!completed) { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java --- a/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java Wed Jul 05 19:50:00 2017 +0200 @@ -160,9 +160,17 @@ } } try { + String name = ncb.getName(); + if (name == null) { + name = authzid; + } + String domain = dcb.getText(); + if (domain == null) { + domain = serverName; + } client = new Client(version, hostname, - ncb.getName(), - dcb.getText(), + name, + domain, pcb.getPassword()); } catch (NTLMException ne) { throw new SaslException( diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java --- a/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java Wed Jul 05 19:50:00 2017 +0200 @@ -141,8 +141,10 @@ server = new Server(version, domain) { public char[] getPassword(String ntdomain, String username) { try { - RealmCallback rcb = new RealmCallback( - "Domain: ", ntdomain); + RealmCallback rcb = + (ntdomain == null || ntdomain.isEmpty()) + ? new RealmCallback("Domain: ") + : new RealmCallback("Domain: ", ntdomain); NameCallback ncb = new NameCallback( "Name: ", username); PasswordCallback pcb = new PasswordCallback( diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/java/awt/font/JavaAWTFontAccessImpl.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/java/awt/font/JavaAWTFontAccessImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,57 @@ +/* + * 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.awt.font; + +import java.lang.reflect.Field; +import sun.misc.JavaAWTFontAccess; + +class JavaAWTFontAccessImpl implements sun.misc.JavaAWTFontAccess { + + // java.awt.font.TextAttribute constants + public Object getTextAttributeConstant(String name) { + switch (name) { + case "RUN_DIRECTION": + case "NUMERIC_SHAPING": + case "BIDI_EMBEDDING": + case "RUN_DIRECTION_LTR": + try { + Field f = TextAttribute.class.getField(name); + return f.get(null); + } catch (NoSuchFieldException | IllegalAccessException x) { + throw new AssertionError(x); + } + } + + throw new AssertionError("Constant name is not recognized"); + } + + // java.awt.font.NumericShaper + public void shape(Object shaper, char[] text, int start, int count) { + assert shaper instanceof NumericShaper; + ((NumericShaper)shaper).shape(text, start,count); + } + +} diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/java/awt/font/NumericShaper.java --- a/jdk/src/share/classes/java/awt/font/NumericShaper.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/java/awt/font/NumericShaper.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -31,6 +31,7 @@ import java.util.Comparator; import java.util.EnumSet; import java.util.Set; +import sun.misc.SharedSecrets; /** * The NumericShaper class is used to convert Latin-1 (European) @@ -134,6 +135,14 @@ */ public final class NumericShaper implements java.io.Serializable { + + // For access from java.text.Bidi + static { + if (SharedSecrets.getJavaAWTFontAccess() == null) { + SharedSecrets.setJavaAWTFontAccess(new JavaAWTFontAccessImpl()); + } + } + /** * A {@code NumericShaper.Range} represents a Unicode range of a * script having its own decimal digits. For example, the {@link diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/java/awt/font/TextAttribute.java --- a/jdk/src/share/classes/java/awt/font/TextAttribute.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/java/awt/font/TextAttribute.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -44,6 +44,7 @@ import java.text.AttributedCharacterIterator.Attribute; import java.util.Map; import java.util.HashMap; +import sun.misc.SharedSecrets; /** * The TextAttribute class defines attribute keys and @@ -257,6 +258,13 @@ private static final Map instanceMap = new HashMap(29); + // For access from java.text.Bidi + static { + if (SharedSecrets.getJavaAWTFontAccess() == null) { + SharedSecrets.setJavaAWTFontAccess(new JavaAWTFontAccessImpl()); + } + } + /** * Constructs a TextAttribute with the specified name. * @param name the attribute name to assign to this diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/java/lang/Class.java --- a/jdk/src/share/classes/java/lang/Class.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/java/lang/Class.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 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 @@ -130,11 +130,15 @@ } /* - * Constructor. Only the Java Virtual Machine creates Class - * objects. + * Private constructor. Only the Java Virtual Machine creates Class objects. + * This constructor is not used and prevents the default constructor being + * generated. */ - private Class() {} - + private Class(ClassLoader loader) { + // Initialize final field for classLoader. The initialization value of non-null + // prevents future JIT optimizations from assuming this final field is null. + classLoader = loader; + } /** * Converts the object to a string. The string representation is the @@ -677,8 +681,10 @@ } // Package-private to allow ClassLoader access - native ClassLoader getClassLoader0(); - + ClassLoader getClassLoader0() { return classLoader; } + + // Initialized in JVM not by private constructor + private final ClassLoader classLoader; /** * Returns an array of {@code TypeVariable} objects that represent the diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/java/lang/reflect/AccessibleObject.java --- a/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -129,16 +129,24 @@ setAccessible0(this, flag); } - /* Check that you aren't exposing java.lang.Class.. */ + /* Check that you aren't exposing java.lang.Class. or sensitive + fields in java.lang.Class. */ private static void setAccessible0(AccessibleObject obj, boolean flag) throws SecurityException { if (obj instanceof Constructor && flag == true) { Constructor c = (Constructor)obj; if (c.getDeclaringClass() == Class.class) { - throw new SecurityException("Can not make a java.lang.Class" + + throw new SecurityException("Cannot make a java.lang.Class" + " constructor accessible"); } + } else if (obj instanceof Field && flag == true) { + Field f = (Field)obj; + if (f.getDeclaringClass() == Class.class && + f.getName().equals("classLoader")) { + throw new SecurityException("Cannot make java.lang.Class.classLoader" + + " accessible"); + } } obj.override = flag; } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/java/net/URL.java --- a/jdk/src/share/classes/java/net/URL.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/java/net/URL.java Wed Jul 05 19:50:00 2017 +0200 @@ -1071,7 +1071,7 @@ /** * The URLStreamHandler factory. */ - static URLStreamHandlerFactory factory; + private static volatile URLStreamHandlerFactory factory; /** * Sets an application's {@code URLStreamHandlerFactory}. @@ -1106,6 +1106,7 @@ security.checkSetFactory(); } handlers.clear(); + // safe publication of URLStreamHandlerFactory with volatile write factory = fac; } } @@ -1127,9 +1128,11 @@ boolean checkedWithFactory = false; - // Use the factory (if any) - if (factory != null) { - handler = factory.createURLStreamHandler(protocol); + // Use the factory (if any). Volatile read makes + // URLStreamHandlerFactory appear fully initialized to current thread. + URLStreamHandlerFactory fac = factory; + if (fac != null) { + handler = fac.createURLStreamHandler(protocol); checkedWithFactory = true; } @@ -1193,8 +1196,8 @@ // Check with factory if another thread set a // factory since our last check - if (!checkedWithFactory && factory != null) { - handler2 = factory.createURLStreamHandler(protocol); + if (!checkedWithFactory && (fac = factory) != null) { + handler2 = fac.createURLStreamHandler(protocol); } if (handler2 != null) { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/java/util/IdentityHashMap.java --- a/jdk/src/share/classes/java/util/IdentityHashMap.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/java/util/IdentityHashMap.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -25,7 +25,6 @@ package java.util; -import java.io.*; import java.lang.reflect.Array; import java.util.function.BiConsumer; import java.util.function.BiFunction; @@ -74,7 +73,7 @@ * maximum size and the number of buckets is unspecified. * *

If the size of the map (the number of key-value mappings) sufficiently - * exceeds the expected maximum size, the number of buckets is increased + * exceeds the expected maximum size, the number of buckets is increased. * Increasing the number of buckets ("rehashing") may be fairly expensive, so * it pays to create identity hash maps with a sufficiently large expected * maximum size. On the other hand, iteration over collection views requires @@ -160,6 +159,10 @@ * The maximum capacity, used if a higher value is implicitly specified * by either of the constructors with arguments. * MUST be a power of two <= 1<<29. + * + * In fact, the map can hold no more than MAXIMUM_CAPACITY-1 items + * because it has to have at least one slot with the key == null + * in order to avoid infinite loops in get(), put(), remove() */ private static final int MAXIMUM_CAPACITY = 1 << 29; @@ -181,11 +184,6 @@ transient int modCount; /** - * The next size value at which to resize (capacity * load factor). - */ - private transient int threshold; - - /** * Value representing null keys inside tables. */ static final Object NULL_KEY = new Object(); @@ -229,27 +227,18 @@ } /** - * Returns the appropriate capacity for the specified expected maximum - * size. Returns the smallest power of two between MINIMUM_CAPACITY - * and MAXIMUM_CAPACITY, inclusive, that is greater than - * (3 * expectedMaxSize)/2, if such a number exists. Otherwise - * returns MAXIMUM_CAPACITY. If (3 * expectedMaxSize)/2 is negative, it - * is assumed that overflow has occurred, and MAXIMUM_CAPACITY is returned. + * Returns the appropriate capacity for the given expected maximum size. + * Returns the smallest power of two between MINIMUM_CAPACITY and + * MAXIMUM_CAPACITY, inclusive, that is greater than (3 * + * expectedMaxSize)/2, if such a number exists. Otherwise returns + * MAXIMUM_CAPACITY. */ - private int capacity(int expectedMaxSize) { - // Compute min capacity for expectedMaxSize given a load factor of 2/3 - int minCapacity = (3 * expectedMaxSize)/2; - - // Compute the appropriate capacity - int result; - if (minCapacity > MAXIMUM_CAPACITY || minCapacity < 0) { - result = MAXIMUM_CAPACITY; - } else { - result = MINIMUM_CAPACITY; - while (result < minCapacity) - result <<= 1; - } - return result; + private static int capacity(int expectedMaxSize) { + // assert expectedMaxSize >= 0; + return + (expectedMaxSize > MAXIMUM_CAPACITY / 3) ? MAXIMUM_CAPACITY : + (expectedMaxSize <= 2 * MINIMUM_CAPACITY / 3) ? MINIMUM_CAPACITY : + Integer.highestOneBit(expectedMaxSize + (expectedMaxSize << 1)); } /** @@ -262,7 +251,6 @@ // assert initCapacity >= MINIMUM_CAPACITY; // assert initCapacity <= MAXIMUM_CAPACITY; - threshold = (initCapacity * 2)/3; table = new Object[2 * initCapacity]; } @@ -429,52 +417,58 @@ * @see #containsKey(Object) */ public V put(K key, V value) { - Object k = maskNull(key); - Object[] tab = table; - int len = tab.length; - int i = hash(k, len); + final Object k = maskNull(key); + + retryAfterResize: for (;;) { + final Object[] tab = table; + final int len = tab.length; + int i = hash(k, len); - Object item; - while ( (item = tab[i]) != null) { - if (item == k) { - @SuppressWarnings("unchecked") - V oldValue = (V) tab[i + 1]; - tab[i + 1] = value; - return oldValue; + for (Object item; (item = tab[i]) != null; + i = nextKeyIndex(i, len)) { + if (item == k) { + @SuppressWarnings("unchecked") + V oldValue = (V) tab[i + 1]; + tab[i + 1] = value; + return oldValue; + } } - i = nextKeyIndex(i, len); - } + + final int s = size + 1; + // Use optimized form of 3 * s. + // Next capacity is len, 2 * current capacity. + if (s + (s << 1) > len && resize(len)) + continue retryAfterResize; - modCount++; - tab[i] = k; - tab[i + 1] = value; - if (++size >= threshold) - resize(len); // len == 2 * current capacity. - return null; + modCount++; + tab[i] = k; + tab[i + 1] = value; + size = s; + return null; + } } /** - * Resize the table to hold given capacity. + * Resizes the table if necessary to hold given capacity. * * @param newCapacity the new capacity, must be a power of two. + * @return whether a resize did in fact take place */ - private void resize(int newCapacity) { + private boolean resize(int newCapacity) { // assert (newCapacity & -newCapacity) == newCapacity; // power of 2 int newLength = newCapacity * 2; Object[] oldTable = table; int oldLength = oldTable.length; - if (oldLength == 2*MAXIMUM_CAPACITY) { // can't expand any further - if (threshold == MAXIMUM_CAPACITY-1) + if (oldLength == 2 * MAXIMUM_CAPACITY) { // can't expand any further + if (size == MAXIMUM_CAPACITY - 1) throw new IllegalStateException("Capacity exhausted."); - threshold = MAXIMUM_CAPACITY-1; // Gigantic map! - return; + return false; } if (oldLength >= newLength) - return; + return false; Object[] newTable = new Object[newLength]; - threshold = newLength / 3; for (int j = 0; j < oldLength; j += 2) { Object key = oldTable[j]; @@ -490,6 +484,7 @@ } } table = newTable; + return true; } /** @@ -504,8 +499,8 @@ int n = m.size(); if (n == 0) return; - if (n > threshold) // conservatively pre-expand - resize(capacity(n)); + if (n > size) + resize(capacity(n)); // conservatively pre-expand for (Entry e : m.entrySet()) put(e.getKey(), e.getValue()); @@ -542,7 +537,6 @@ return null; i = nextKeyIndex(i, len); } - } /** @@ -1266,8 +1260,8 @@ private static final long serialVersionUID = 8188218128353913216L; /** - * Save the state of the IdentityHashMap instance to a stream - * (i.e., serialize it). + * Saves the state of the IdentityHashMap instance to a stream + * (i.e., serializes it). * * @serialData The size of the HashMap (the number of key-value * mappings) (int), followed by the key (Object) and @@ -1295,8 +1289,8 @@ } /** - * Reconstitute the IdentityHashMap instance from a stream (i.e., - * deserialize it). + * Reconstitutes the IdentityHashMap instance from a stream (i.e., + * deserializes it). */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { @@ -1305,9 +1299,10 @@ // Read in size (number of Mappings) int size = s.readInt(); - - // Allow for 33% growth (i.e., capacity is >= 2* size()). - init(capacity((size*4)/3)); + if (size < 0) + throw new java.io.StreamCorruptedException + ("Illegal mappings count: " + size); + init(capacity(size)); // Read the keys and values, and put the mappings in the table for (int i=0; iHandler. @@ -149,7 +157,7 @@ private FileChannel lockFileChannel; private File files[]; private static final int MAX_LOCKS = 100; - private static final java.util.HashMap locks = new java.util.HashMap<>(); + private static final Set locks = new HashSet<>(); /** * A metered stream is a subclass of OutputStream that @@ -428,34 +436,80 @@ // between processes (and not within a process), we first check // if we ourself already have the file locked. synchronized(locks) { - if (locks.get(lockFileName) != null) { + if (locks.contains(lockFileName)) { // We already own this lock, for a different FileHandler // object. Try again. continue; } - try { - lockFileChannel = FileChannel.open(Paths.get(lockFileName), - CREATE_NEW, WRITE); - } catch (FileAlreadyExistsException ix) { - // try the next lock file name in the sequence - continue; + final Path lockFilePath = Paths.get(lockFileName); + FileChannel channel = null; + int retries = -1; + boolean fileCreated = false; + while (channel == null && retries++ < 1) { + try { + channel = FileChannel.open(lockFilePath, + CREATE_NEW, WRITE); + fileCreated = true; + } catch (FileAlreadyExistsException ix) { + // This may be a zombie file left over by a previous + // execution. Reuse it - but only if we can actually + // write to its directory. + // Note that this is a situation that may happen, + // but not too frequently. + if (Files.isRegularFile(lockFilePath, LinkOption.NOFOLLOW_LINKS) + && Files.isWritable(lockFilePath.getParent())) { + try { + channel = FileChannel.open(lockFilePath, + WRITE, APPEND); + } catch (NoSuchFileException x) { + // Race condition - retry once, and if that + // fails again just try the next name in + // the sequence. + continue; + } catch(IOException x) { + // the file may not be writable for us. + // try the next name in the sequence + break; + } + } else { + // at this point channel should still be null. + // break and try the next name in the sequence. + break; + } + } } + if (channel == null) continue; // try the next name; + lockFileChannel = channel; + boolean available; try { available = lockFileChannel.tryLock() != null; // We got the lock OK. + // At this point we could call File.deleteOnExit(). + // However, this could have undesirable side effects + // as indicated by JDK-4872014. So we will instead + // rely on the fact that close() will remove the lock + // file and that whoever is creating FileHandlers should + // be responsible for closing them. } catch (IOException ix) { // We got an IOException while trying to get the lock. // This normally indicates that locking is not supported // on the target directory. We have to proceed without - // getting a lock. Drop through. - available = true; + // getting a lock. Drop through, but only if we did + // create the file... + available = fileCreated; + } catch (OverlappingFileLockException x) { + // someone already locked this file in this VM, through + // some other channel - that is - using something else + // than new FileHandler(...); + // continue searching for an available lock. + available = false; } if (available) { // We got the lock. Remember it. - locks.put(lockFileName, lockFileName); + locks.add(lockFileName); break; } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/crypto/spec/SecretKeySpec.java --- a/jdk/src/share/classes/javax/crypto/spec/SecretKeySpec.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/crypto/spec/SecretKeySpec.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, 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 @@ -26,6 +26,7 @@ package javax.crypto.spec; import java.security.spec.KeySpec; +import java.util.Locale; import javax.crypto.SecretKey; /** @@ -194,7 +195,8 @@ if (this.algorithm.equalsIgnoreCase("TripleDES")) return (retval ^= "desede".hashCode()); else - return (retval ^= this.algorithm.toLowerCase().hashCode()); + return (retval ^= + this.algorithm.toLowerCase(Locale.ENGLISH).hashCode()); } /** diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/security/sasl/SaslClient.java --- a/jdk/src/share/classes/javax/security/sasl/SaslClient.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/security/sasl/SaslClient.java Wed Jul 05 19:50:00 2017 +0200 @@ -204,6 +204,10 @@ * This method can be called only after the authentication exchange has * completed (i.e., when {@code isComplete()} returns true); otherwise, an * {@code IllegalStateException} is thrown. + *

+ * The {@link Sasl} class includes several well-known property names + * (For example, {@link Sasl#QOP}). A SASL provider can support other + * properties which are specific to the vendor and/or a mechanism. * * @param propName The non-null property name. * @return The value of the negotiated property. If null, the property was diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/security/sasl/SaslServer.java --- a/jdk/src/share/classes/javax/security/sasl/SaslServer.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/security/sasl/SaslServer.java Wed Jul 05 19:50:00 2017 +0200 @@ -196,6 +196,10 @@ * This method can be called only after the authentication exchange has * completed (i.e., when {@code isComplete()} returns true); otherwise, an * {@code IllegalStateException} is thrown. + *

+ * The {@link Sasl} class includes several well-known property names + * (For example, {@link Sasl#QOP}). A SASL provider can support other + * properties which are specific to the vendor and/or a mechanism. * * @param propName the property * @return The value of the negotiated property. If null, the property was diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/AbstractListModel.java --- a/jdk/src/share/classes/javax/swing/AbstractListModel.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/AbstractListModel.java Wed Jul 05 19:50:00 2017 +0200 @@ -202,6 +202,7 @@ * If no such listeners exist, * this method returns an empty array. * + * @param the type of {@code EventListener} class being requested * @param listenerType the type of listeners requested; * this parameter should specify an interface * that descends from java.util.EventListener diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/CellRendererPane.java --- a/jdk/src/share/classes/javax/swing/CellRendererPane.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/CellRendererPane.java Wed Jul 05 19:50:00 2017 +0200 @@ -190,8 +190,12 @@ // Accessibility support //////////////// + /** + * {@code AccessibleContext} associated with this {@code CellRendererPan} + */ protected AccessibleContext accessibleContext = null; + /** * Gets the AccessibleContext associated with this CellRendererPane. * For CellRendererPanes, the AccessibleContext takes the form of an diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/DefaultCellEditor.java --- a/jdk/src/share/classes/javax/swing/DefaultCellEditor.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/DefaultCellEditor.java Wed Jul 05 19:50:00 2017 +0200 @@ -353,6 +353,7 @@ * Returns true to indicate that editing has begun. * * @param anEvent the event + * @return true to indicate editing has begun */ public boolean startCellEditing(EventObject anEvent) { return true; diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/DefaultDesktopManager.java --- a/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Wed Jul 05 19:50:00 2017 +0200 @@ -462,7 +462,12 @@ f.revalidate(); } - /** Convenience method to remove the desktopIcon of f is necessary. */ + /** + * Convenience method to remove the desktopIcon of f is necessary. + * + * @param f the {@code JInternalFrame} for which to remove the + * {@code desktopIcon} + */ protected void removeIconFor(JInternalFrame f) { JInternalFrame.JDesktopIcon di = f.getDesktopIcon(); Container c = di.getParent(); @@ -472,10 +477,13 @@ } } - /** The iconifyFrame() code calls this to determine the proper bounds - * for the desktopIcon. - */ - + /** + * The {@code iconifyFrame()} code calls this to determine the proper bounds + * for the desktopIcon. + * + * @param f the {@code JInternalFrame} of interest + * @return a {@code Rectangle} containing bounds for the {@code desktopIcon} + */ protected Rectangle getBoundsForIconOf(JInternalFrame f) { // // Get the icon for this internal frame and its preferred size @@ -592,6 +600,9 @@ /** * Sets that the component has been iconized and the bounds of the * desktopIcon are valid. + * + * @param f the {@code JInternalFrame} of interest + * @param value a {@code Boolean} signifying if component has been iconized */ protected void setWasIcon(JInternalFrame f, Boolean value) { if (value != null) { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/DefaultListModel.java --- a/jdk/src/share/classes/javax/swing/DefaultListModel.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/DefaultListModel.java Wed Jul 05 19:50:00 2017 +0200 @@ -444,6 +444,7 @@ * (index < 0 || index >= size()). * * @param index index of element to return + * @return the element at the specified position in this list */ public E get(int index) { return delegate.elementAt(index); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java --- a/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java Wed Jul 05 19:50:00 2017 +0200 @@ -160,6 +160,9 @@ * Notifies ListSelectionListeners that the value * of the selection, in the closed interval firstIndex, * lastIndex, has changed. + * + * @param firstIndex the first index in the interval + * @param lastIndex the last index in the interval */ protected void fireValueChanged(int firstIndex, int lastIndex) { fireValueChanged(firstIndex, lastIndex, getValueIsAdjusting()); @@ -231,6 +234,7 @@ * If no such listeners exist, * this method returns an empty array. * + * @param the type of {@code EventListener} class being requested * @param listenerType the type of listeners requested; * this parameter should specify an interface * that descends from java.util.EventListener @@ -332,6 +336,8 @@ /** * Sets the value of the leadAnchorNotificationEnabled flag. + * + * @param flag boolean value for {@code leadAnchorNotificationEnabled} * @see #isLeadAnchorNotificationEnabled() */ public void setLeadAnchorNotificationEnabled(boolean flag) { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/DefaultRowSorter.java --- a/jdk/src/share/classes/javax/swing/DefaultRowSorter.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/DefaultRowSorter.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, 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 @@ -712,6 +712,8 @@ * * @param column the index of the column to test, in terms of the * underlying model + * @return true if values are to be converted to strings before doing + * comparisons when sorting * @throws IndexOutOfBoundsException if column is not valid */ protected boolean useToString(int column) { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/InputMap.java --- a/jdk/src/share/classes/javax/swing/InputMap.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/InputMap.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 @@ -32,15 +32,12 @@ import java.util.Set; /** - * InputMap provides a binding between an input event - * (currently only KeyStrokes are used) - * and an Object. InputMaps - * are usually used with an ActionMap, - * to determine an Action to perform - * when a key is pressed. - * An InputMap can have a parent - * that is searched for bindings not defined in the InputMap. - *

As with ActionMap if you create a cycle, eg: + * {@code InputMap} provides a binding between an input event (currently only + * {@code KeyStroke}s are used) and an {@code Object}. {@code InputMap}s are + * usually used with an {@code ActionMap}, to determine an {@code Action} to + * perform when a key is pressed. An {@code InputMap} can have a parent that + * is searched for bindings not defined in the {@code InputMap}. + *

As with {@code ActionMap} if you create a cycle, eg: *

  *   InputMap am = new InputMap();
  *   InputMap bm = new InputMap():
@@ -61,34 +58,37 @@
 
 
     /**
-     * Creates an InputMap with no parent and no mappings.
+     * Creates an {@code InputMap} with no parent and no mappings.
      */
     public InputMap() {
     }
 
     /**
-     * Sets this InputMap's parent.
+     * Sets this {@code InputMap}'s parent.
      *
-     * @param map  the InputMap that is the parent of this one
+     * @param map the {@code InputMap} that is the parent of this one
      */
     public void setParent(InputMap map) {
         this.parent = map;
     }
 
     /**
-     * Gets this InputMap's parent.
+     * Gets this {@code InputMap}'s parent.
      *
-     * @return map  the InputMap that is the parent of this one,
-     *              or null if this InputMap has no parent
+     * @return map the {@code InputMap} that is the parent of this one,
+     *             or null if this {@code InputMap} has no parent
      */
     public InputMap getParent() {
         return parent;
     }
 
     /**
-     * Adds a binding for keyStroke to actionMapKey.
-     * If actionMapKey is null, this removes the current binding
-     * for keyStroke.
+     * Adds a binding for {@code keyStroke} to {@code actionMapKey}.
+     * If {@code actionMapKey} is null, this removes the current binding
+     * for {@code keyStroke}.
+     *
+     * @param keyStroke a {@code KeyStroke}
+     * @param actionMapKey an action map key
      */
     public void put(KeyStroke keyStroke, Object actionMapKey) {
         if (keyStroke == null) {
@@ -106,8 +106,11 @@
     }
 
     /**
-     * Returns the binding for keyStroke, messaging the
-     * parent InputMap if the binding is not locally defined.
+     * Returns the binding for {@code keyStroke}, messaging the
+     * parent {@code InputMap} if the binding is not locally defined.
+     *
+     * @param keyStroke the {@code KeyStroke} for which to get the binding
+     * @return the binding for {@code keyStroke}
      */
     public Object get(KeyStroke keyStroke) {
         if (arrayTable == null) {
@@ -131,8 +134,9 @@
     }
 
     /**
-     * Removes the binding for key from this
-     * InputMap.
+     * Removes the binding for {@code key} from this {@code InputMap}.
+     *
+     * @param key the {@code KeyStroke} for which to remove the binding
      */
     public void remove(KeyStroke key) {
         if (arrayTable != null) {
@@ -141,7 +145,7 @@
     }
 
     /**
-     * Removes all the mappings from this InputMap.
+     * Removes all the mappings from this {@code InputMap}.
      */
     public void clear() {
         if (arrayTable != null) {
@@ -150,7 +154,10 @@
     }
 
     /**
-     * Returns the KeyStrokes that are bound in this InputMap.
+     * Returns the {@code KeyStroke}s that are bound in this {@code InputMap}.
+     *
+     * @return an array of the {@code KeyStroke}s that are bound in this
+     *         {@code InputMap}
      */
     public KeyStroke[] keys() {
         if (arrayTable == null) {
@@ -162,7 +169,9 @@
     }
 
     /**
-     * Returns the number of KeyStroke bindings.
+     * Returns the number of {@code KeyStroke} bindings.
+     *
+     * @return the number of {@code KeyStroke} bindings
      */
     public int size() {
         if (arrayTable == null) {
@@ -172,9 +181,12 @@
     }
 
     /**
-     * Returns an array of the KeyStrokes defined in this
-     * InputMap and its parent. This differs from keys() in that
-     * this method includes the keys defined in the parent.
+     * Returns an array of the {@code KeyStroke}s defined in this
+     * {@code InputMap} and its parent. This differs from {@code keys()}
+     * in that this method includes the keys defined in the parent.
+     *
+     * @return an array of the {@code KeyStroke}s defined in this
+     *         {@code InputMap} and its parent
      */
     public KeyStroke[] allKeys() {
         int             count = size();
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JCheckBox.java
--- a/jdk/src/share/classes/javax/swing/JCheckBox.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JCheckBox.java	Wed Jul 05 19:50:00 2017 +0200
@@ -132,6 +132,7 @@
      * Creates a check box where properties are taken from the
      * Action supplied.
      *
+     * @param a the {@code Action} used to specify the new check box
      * @since 1.3
      */
     public JCheckBox(Action a) {
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java
--- a/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java	Wed Jul 05 19:50:00 2017 +0200
@@ -109,7 +109,7 @@
     /**
      * Creates an initially unselected check box menu item with an icon.
      *
-     * @param icon the icon of the CheckBoxMenuItem.
+     * @param icon the icon of the {@code JCheckBoxMenuItem}.
      */
     public JCheckBoxMenuItem(Icon icon) {
         this(null, icon, false);
@@ -118,7 +118,7 @@
     /**
      * Creates an initially unselected check box menu item with text.
      *
-     * @param text the text of the CheckBoxMenuItem
+     * @param text the text of the {@code JCheckBoxMenuItem}
      */
     public JCheckBoxMenuItem(String text) {
         this(text, null, false);
@@ -128,6 +128,7 @@
      * Creates a menu item whose properties are taken from the
      * Action supplied.
      *
+     * @param a the action of the {@code JCheckBoxMenuItem}
      * @since 1.3
      */
     public JCheckBoxMenuItem(Action a) {
@@ -138,8 +139,8 @@
     /**
      * Creates an initially unselected check box menu item with the specified text and icon.
      *
-     * @param text the text of the CheckBoxMenuItem
-     * @param icon the icon of the CheckBoxMenuItem
+     * @param text the text of the {@code JCheckBoxMenuItem}
+     * @param icon the icon of the {@code JCheckBoxMenuItem}
      */
     public JCheckBoxMenuItem(String text, Icon icon) {
         this(text, icon, false);
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JEditorPane.java
--- a/jdk/src/share/classes/javax/swing/JEditorPane.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JEditorPane.java	Wed Jul 05 19:50:00 2017 +0200
@@ -1251,11 +1251,12 @@
     }
 
     /**
-     * Returns the currently registered EditorKit
-     * class name for the type type.
+     * Returns the currently registered {@code EditorKit} class name for the
+     * type {@code type}.
      *
-     * @param type  the non-null content type
-     *
+     * @param type  the non-{@code null} content type
+     * @return a {@code String} containing the {@code EditorKit} class name
+     *         for {@code type}
      * @since 1.3
      */
     public static String getEditorKitClassNameForContentType(String type) {
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JFileChooser.java
--- a/jdk/src/share/classes/javax/swing/JFileChooser.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JFileChooser.java	Wed Jul 05 19:50:00 2017 +0200
@@ -330,6 +330,8 @@
     /**
      * Constructs a JFileChooser using the given
      * FileSystemView.
+     *
+     * @param fsv a {@code FileSystemView}
      */
     public JFileChooser(FileSystemView fsv) {
         this((File) null, fsv);
@@ -339,6 +341,10 @@
     /**
      * Constructs a JFileChooser using the given current directory
      * and FileSystemView.
+     *
+     * @param currentDirectory a {@code File} object specifying the path to a
+     *                         file or directory
+     * @param fsv a {@code FileSystemView}
      */
     public JFileChooser(File currentDirectory, FileSystemView fsv) {
         setup(fsv);
@@ -348,6 +354,10 @@
     /**
      * Constructs a JFileChooser using the given current directory
      * path and FileSystemView.
+     *
+     * @param currentDirectoryPath a {@code String} specifying the path to a file
+     *                             or directory
+     * @param fsv a {@code FileSystemView}
      */
     public JFileChooser(String currentDirectoryPath, FileSystemView fsv) {
         setup(fsv);
@@ -360,6 +370,8 @@
 
     /**
      * Performs common constructor initialization and setup.
+     *
+     * @param view the {@code FileSystemView} used for setup
      */
     protected void setup(FileSystemView view) {
         installShowFilesListener();
@@ -512,6 +524,8 @@
     /**
      * Returns a list of selected files if the file chooser is
      * set to allow multiple selection.
+     *
+     * @return an array of selected {@code File}s
      */
     public File[] getSelectedFiles() {
         if(selectedFiles == null) {
@@ -525,6 +539,7 @@
      * Sets the list of selected files if the file chooser is
      * set to allow multiple selection.
      *
+     * @param selectedFiles an array {@code File}s to be selected
      * @beaninfo
      *       bound: true
      * description: The list of selected files if the chooser is in multiple selection mode.
@@ -971,6 +986,7 @@
     /**
      * Gets the string that goes in the JFileChooser's titlebar.
      *
+     * @return the string from the {@code JFileChooser} window's title bar
      * @see #setDialogTitle
      */
     public String getDialogTitle() {
@@ -1158,6 +1174,8 @@
      * Removes a filter from the list of user choosable file filters. Returns
      * true if the file filter was removed.
      *
+     * @param f the file filter to be removed
+     * @return true if the file filter was removed, false otherwise
      * @see #addChoosableFileFilter
      * @see #getChoosableFileFilters
      * @see #resetChoosableFileFilters
@@ -1215,6 +1233,8 @@
     /**
      * Returns the AcceptAll file filter.
      * For example, on Microsoft Windows this would be All Files (*.*).
+     *
+     * @return the {@code AcceptAll} file filter
      */
     public FileFilter getAcceptAllFileFilter() {
         FileFilter filter = null;
@@ -1240,8 +1260,10 @@
     * If false, the AcceptAll file filter is removed from
     * the list of available file filters.
     * If true, the AcceptAll file filter will become the
-    * the actively used file filter.
+    * actively used file filter.
     *
+    * @param b a {@code boolean} which determines whether the {@code AcceptAll}
+    *          file filter is an available choice in the choosable filter list
     * @beaninfo
     *   preferred: true
     *       bound: true
@@ -1284,6 +1306,7 @@
      * any listeners that the accessory might have registered with the
      * file chooser.
      *
+     * @param newAccessory the accessory component to be set
      * @beaninfo
      *   preferred: true
      *       bound: true
@@ -1355,6 +1378,7 @@
      * Convenience call that determines if files are selectable based on the
      * current file selection mode.
      *
+     * @return true if files are selectable, false otherwise
      * @see #setFileSelectionMode
      * @see #getFileSelectionMode
      */
@@ -1366,6 +1390,7 @@
      * Convenience call that determines if directories are selectable based
      * on the current file selection mode.
      *
+     * @return true if directories are selectable, false otherwise
      * @see #setFileSelectionMode
      * @see #getFileSelectionMode
      */
@@ -1487,9 +1512,10 @@
     }
 
     /**
-     * Sets the file view to used to retrieve UI information, such as
+     * Sets the file view to be used to retrieve UI information, such as
      * the icon that represents a file or the type description of a file.
      *
+     * @param fileView a {@code FileView} to be used to retrieve UI information
      * @beaninfo
      *   preferred: true
      *       bound: true
@@ -1506,6 +1532,7 @@
     /**
      * Returns the current file view.
      *
+     * @return the current file view
      * @see #setFileView
      */
     public FileView getFileView() {
@@ -1765,6 +1792,8 @@
      * notification on this event type. The event instance
      * is lazily created using the command parameter.
      *
+     * @param command a string that may specify a command associated with
+     *                the event
      * @see EventListenerList
      */
     protected void fireActionPerformed(String command) {
@@ -1973,6 +2002,9 @@
 // Accessibility support
 ////////////////
 
+    /**
+     * {@code AccessibleContext} associated with this {@code JFileChooser}
+     */
     protected AccessibleContext accessibleContext = null;
 
     /**
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JFrame.java
--- a/jdk/src/share/classes/javax/swing/JFrame.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JFrame.java	Wed Jul 05 19:50:00 2017 +0200
@@ -275,6 +275,8 @@
     /**
      * Called by the constructor methods to create the default
      * rootPane.
+     *
+     * @return a new {@code JRootPane}
      */
     protected JRootPane createRootPane() {
         JRootPane rp = new JRootPane();
@@ -874,7 +876,9 @@
 // Accessibility support
 ////////////////
 
-    /** The accessible context property. */
+    /**
+     * The accessible context property.
+     */
     protected AccessibleContext accessibleContext = null;
 
     /**
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JMenu.java
--- a/jdk/src/share/classes/javax/swing/JMenu.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JMenu.java	Wed Jul 05 19:50:00 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -608,16 +608,18 @@
      * it to the end of this menu.
      *
      * @param s the string for the menu item to be added
+     * @return the new {@code JMenuItem}
      */
     public JMenuItem add(String s) {
         return add(new JMenuItem(s));
     }
 
     /**
-     * Creates a new menu item attached to the specified
-     * Action object and appends it to the end of this menu.
+     * Creates a new menu item attached to the specified {@code Action} object
+     * and appends it to the end of this menu.
      *
-     * @param a the Action for the menu item to be added
+     * @param a the {@code Action} for the menu item to be added
+     * @return the new {@code JMenuItem}
      * @see Action
      */
     public JMenuItem add(Action a) {
@@ -653,8 +655,11 @@
     }
 
     /**
-     * Returns a properly configured PropertyChangeListener
-     * which updates the control as changes to the Action occur.
+     * Returns a properly configured {@code PropertyChangeListener}
+     * which updates the control as changes to the {@code Action} occur.
+     *
+     * @param b a menu item for which to create a {@code PropertyChangeListener}
+     * @return a {@code PropertyChangeListener} for {@code b}
      */
     protected PropertyChangeListener createActionChangeListener(JMenuItem b) {
         return b.createActionPropertyChangeListener0(b.getAction());
@@ -714,6 +719,7 @@
      * @param a the Action object for the menu item to add
      * @param pos an integer specifying the position at which to add the
      *               new menu item
+     * @return the new menu item
      * @exception IllegalArgumentException if the value of
      *                  pos < 0
      */
@@ -748,16 +754,16 @@
     }
 
     /**
-     * Returns the JMenuItem at the specified position.
-     * If the component at pos is not a menu item,
-     * null is returned.
+     * Returns the {@code JMenuItem} at the specified position.
+     * If the component at {@code pos} is not a menu item,
+     * {@code null} is returned.
      * This method is included for AWT compatibility.
      *
-     * @param pos    an integer specifying the position
-     * @exception   IllegalArgumentException if the value of
-     *                       pos < 0
+     * @param pos  an integer specifying the position
      * @return  the menu item at the specified position; or null
      *          if the item as the specified position is not a menu item
+     * @exception  IllegalArgumentException if the value of
+     *             {@code pos} < 0
      */
     public JMenuItem getItem(int pos) {
         if (pos < 0) {
@@ -975,6 +981,8 @@
     /**
      * Returns the popupmenu associated with this menu.  If there is
      * no popupmenu, it will create one.
+     *
+     * @return the {@code JPopupMenu} associated with this menu
      */
     public JPopupMenu getPopupMenu() {
         ensurePopupMenuCreated();
@@ -1159,6 +1167,8 @@
         JPopupMenu popupMenu;
         /**
          *  Create the window listener for the specified popup.
+         *
+         * @param p the popup menu for which to create a listener
          * @since 1.4
          */
         public WinListener(JPopupMenu p) {
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JMenuBar.java
--- a/jdk/src/share/classes/javax/swing/JMenuBar.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JMenuBar.java	Wed Jul 05 19:50:00 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -124,6 +124,8 @@
 
     /**
      * Returns the menubar's current UI.
+     *
+     * @return a {@code MenuBarUI} which is the menubar's current L&F object
      * @see #setUI
      */
     public MenuBarUI getUI() {
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JSlider.java
--- a/jdk/src/share/classes/javax/swing/JSlider.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JSlider.java	Wed Jul 05 19:50:00 2017 +0200
@@ -281,6 +281,8 @@
     /**
      * Creates a horizontal slider using the specified
      * BoundedRangeModel.
+     *
+     * @param brm a {@code BoundedRangeModel} for the slider
      */
     public JSlider(BoundedRangeModel brm)
     {
@@ -363,6 +365,8 @@
      * {@code fireStateChanged} method to forward {@code ChangeEvent}s
      * to the {@code ChangeListener}s that have been added directly to the
      * slider.
+     *
+     * @return a instance of new {@code ChangeListener}
      * @see #changeListener
      * @see #fireStateChanged
      * @see javax.swing.event.ChangeListener
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JTabbedPane.java
--- a/jdk/src/share/classes/javax/swing/JTabbedPane.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JTabbedPane.java	Wed Jul 05 19:50:00 2017 +0200
@@ -278,6 +278,7 @@
      * can override this to return a subclass of ModelListener or
      * another ChangeListener implementation.
      *
+     * @return a {@code ChangeListener}
      * @see #fireStateChanged
      */
     protected ChangeListener createChangeListener() {
@@ -423,6 +424,7 @@
     /**
      * Returns the model associated with this tabbedpane.
      *
+     * @return the {@code SingleSelectionModel} associated with this tabbedpane
      * @see #setModel
      */
     public SingleSelectionModel getModel() {
@@ -459,6 +461,8 @@
 
     /**
      * Returns the placement of the tabs for this tabbedpane.
+     *
+     * @return an {@code int} specifying the placement for the tabs
      * @see #setTabPlacement
      */
     public int getTabPlacement() {
@@ -507,6 +511,8 @@
     /**
      * Returns the policy used by the tabbedpane to layout the tabs when all the
      * tabs will not fit within a single run.
+     *
+     * @return an {@code int} specifying the policy used to layout the tabs
      * @see #setTabLayoutPolicy
      * @since 1.4
      */
@@ -664,6 +670,7 @@
      * will automatically set the selectedIndex to the index
      * corresponding to the specified component.
      *
+     * @param c the selected {@code Component} for this {@code TabbedPane}
      * @exception IllegalArgumentException if component not found in tabbed
      *          pane
      * @see #getSelectedComponent
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/JTable.java
--- a/jdk/src/share/classes/javax/swing/JTable.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/JTable.java	Wed Jul 05 19:50:00 2017 +0200
@@ -865,6 +865,8 @@
     /**
      * Equivalent to new JScrollPane(aTable).
      *
+     * @param aTable a {@code JTable} to be used for the scroll pane
+     * @return a {@code JScrollPane} created using {@code aTable}
      * @deprecated As of Swing version 1.0.2,
      * replaced by new JScrollPane(aTable).
      */
@@ -1961,6 +1963,7 @@
      * JList. See the setSelectionMode method
      * in JList for details about the modes.
      *
+     * @param selectionMode the mode used by the row and column selection models
      * @see JList#setSelectionMode
      * @beaninfo
      * description: The selection mode used by the row and column selection models.
@@ -2321,6 +2324,7 @@
      * Returns true if the specified index is in the valid range of rows,
      * and the row at that index is selected.
      *
+     * @param row a row in the row model
      * @return true if row is a valid index and the row at
      *              that index is selected (where 0 is the first row)
      */
@@ -3174,6 +3178,8 @@
 
     /**
      * Sizes the table columns to fit the available space.
+     *
+     * @param lastColumnOnly determines whether to resize last column only
      * @deprecated As of Swing version 1.0.3,
      * replaced by doLayout().
      * @see #doLayout
@@ -6692,7 +6698,7 @@
 
     // Listeners to echo changes to the AccessiblePropertyChange mechanism
 
-        /*
+        /**
          * Describes a change in the accessible table model.
          */
         protected class AccessibleJTableModelChange
@@ -6737,6 +6743,8 @@
 
         /**
          * Track changes to the table contents
+         *
+         * @param e a {@code TableModelEvent} describing the event
          */
         public void tableChanged(TableModelEvent e) {
            firePropertyChange(AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY,
@@ -6764,6 +6772,8 @@
 
         /**
          * Track changes to the table contents (row insertions)
+         *
+         * @param e a {@code TableModelEvent} describing the event
          */
         public void tableRowsInserted(TableModelEvent e) {
            firePropertyChange(AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY,
@@ -6789,6 +6799,8 @@
 
         /**
          * Track changes to the table contents (row deletions)
+         *
+         * @param e a {@code TableModelEvent} describing the event
          */
         public void tableRowsDeleted(TableModelEvent e) {
            firePropertyChange(AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY,
@@ -7922,6 +7934,11 @@
 
             /**
              *  Constructs an AccessibleJTableHeaderEntry.
+             *
+             * @param t a {@code JTable}
+             * @param r an {@code int} specifying a row
+             * @param c an {@code int} specifying a column
+             * @param i an {@code int} specifying the index to this cell
              * @since 1.4
              */
             public AccessibleJTableCell(JTable t, int r, int c, int i) {
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/MenuElement.java
--- a/jdk/src/share/classes/javax/swing/MenuElement.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/MenuElement.java	Wed Jul 05 19:50:00 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -29,7 +29,7 @@
 
 /**
  * Any component that can be placed into a menu should implement this interface.
- * This interface is used by MenuSelectionManager
+ * This interface is used by {@code MenuSelectionManager}
  * to handle selection and navigation in menu hierarchies.
  *
  * @author Arnaud Weber
@@ -39,46 +39,56 @@
 public interface MenuElement {
 
     /**
-     * Processes a mouse event. event is a MouseEvent
-     * with source being the receiving element's component.
-     * path is the path of the receiving element in the menu
-     * hierarchy including the receiving element itself.
-     * manager is the MenuSelectionManager
-     * for the menu hierarchy.
-     * This method should process the MouseEvent and change
-     * the menu selection if necessary
-     * by using MenuSelectionManager's API
-     * Note: you do not have to forward the event to sub-components.
-     * This is done automatically by the MenuSelectionManager.
+     * Processes a mouse event. {@code event} is a {@code MouseEvent} with
+     * source being the receiving element's component. {@code path} is the
+     * path of the receiving element in the menu hierarchy including the
+     * receiving element itself. {@code manager} is the
+     * {@code MenuSelectionManager}for the menu hierarchy. This method should
+     * process the {@code MouseEvent} and change the menu selection if necessary
+     * by using {@code MenuSelectionManager}'s API Note: you do not have to
+     * forward the event to sub-components. This is done automatically by the
+     * {@code MenuSelectionManager}.
+     *
+     * @param event a {@code MouseEvent} to be processed
+     * @param path the path of the receiving element in the menu hierarchy
+     * @param manager the {@code MenuSelectionManager} for the menu hierarchy
      */
-    public void processMouseEvent(MouseEvent event,MenuElement path[],MenuSelectionManager manager);
+    public void processMouseEvent(MouseEvent event, MenuElement path[], MenuSelectionManager manager);
 
 
     /**
      *  Process a key event.
+     *
+     * @param event a {@code KeyEvent} to be processed
+     * @param path the path of the receiving element in the menu hierarchy
+     * @param manager the {@code MenuSelectionManager} for the menu hierarchy
      */
-    public void processKeyEvent(KeyEvent event,MenuElement path[],MenuSelectionManager manager);
+    public void processKeyEvent(KeyEvent event, MenuElement path[], MenuSelectionManager manager);
 
     /**
-     * Call by the MenuSelectionManager when the
-     * MenuElement is added or remove from
-     * the menu selection.
+     * Call by the {@code MenuSelectionManager} when the {@code MenuElement} is
+     * added or removed from the menu selection.
+     *
+     * @param isIncluded can be used to indicate if this {@code MenuElement} is
+     *        active (if it is a menu) or is on the part of the menu path that
+     *        changed (if it is a menu item).
      */
     public void menuSelectionChanged(boolean isIncluded);
 
     /**
-     * This method should return an array containing the sub-elements for the receiving menu element
+     * This method should return an array containing the sub-elements for the
+     * receiving menu element.
      *
-     * @return an array of MenuElements
+     * @return an array of {@code MenuElement}s
      */
     public MenuElement[] getSubElements();
 
     /**
-     * This method should return the java.awt.Component used to paint the receiving element.
-     * The returned component will be used to convert events and detect if an event is inside
-     * a MenuElement's component.
+     * This method should return the {@code java.awt.Component} used to paint the
+     * receiving element. The returned component will be used to convert events
+     * and detect if an event is inside a {@code MenuElement}'s component.
      *
-     * @return the Component value
+     * @return the {@code Component} value
      */
     public Component getComponent();
 }
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/MenuSelectionManager.java
--- a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java	Wed Jul 05 19:50:00 2017 +0200
@@ -80,6 +80,7 @@
      * generated is always "this".
      */
     protected transient ChangeEvent changeEvent = null;
+    /** The collection of registered listeners */
     protected EventListenerList listenerList = new EventListenerList();
 
     /**
@@ -477,7 +478,11 @@
     }
 
     /**
-     * Return true if c is part of the currently used menu
+     * Return true if {@code c} is part of the currently used menu
+     *
+     * @param c a {@code Component}
+     * @return true if {@code c} is part of the currently used menu,
+     *         false otherwise
      */
     public boolean isComponentPartOfCurrentMenu(Component c) {
         if(selection.size() > 0) {
diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/RowFilter.java
--- a/jdk/src/share/classes/javax/swing/RowFilter.java	Sun Jun 15 08:41:57 2014 -0700
+++ b/jdk/src/share/classes/javax/swing/RowFilter.java	Wed Jul 05 19:50:00 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2013, 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
@@ -159,6 +159,8 @@
      * {@link java.util.regex.Pattern} for a complete description of
      * the supported regular-expression constructs.
      *
+     * @param  the type of the model to which the {@code RowFilter} applies
+     * @param  the type of the identifier passed to the {@code RowFilter}
      * @param regex the regular expression to filter on
      * @param indices the indices of the values to check.  If not supplied all
      *               values are evaluated
@@ -186,6 +188,8 @@
      *   RowFilter.dateFilter(ComparisonType.AFTER, new Date());
      * 
* + * @param the type of the model to which the {@code RowFilter} applies + * @param the type of the identifier passed to the {@code RowFilter} * @param type the type of comparison to perform * @param date the date to compare against * @param indices the indices of the values to check. If not supplied all @@ -214,7 +218,10 @@ * RowFilter.numberFilter(ComparisonType.EQUAL, 10); * * + * @param the type of the model to which the {@code RowFilter} applies + * @param the type of the identifier passed to the {@code RowFilter} * @param type the type of comparison to perform + * @param number a {@code Number} value to compare against * @param indices the indices of the values to check. If not supplied all * values are evaluated * @return a RowFilter implementing the specified criteria @@ -241,6 +248,8 @@ * RowFilter<Object,Object> fooBarFilter = RowFilter.orFilter(filters); * * + * @param the type of the model to which the {@code RowFilter} applies + * @param the type of the identifier passed to the {@code RowFilter} * @param filters the RowFilters to test * @throws IllegalArgumentException if any of the filters * are null @@ -267,6 +276,8 @@ * RowFilter<Object,Object> fooBarFilter = RowFilter.andFilter(filters); * * + * @param the type of the model the {@code RowFilter} applies to + * @param the type of the identifier passed to the {@code RowFilter} * @param filters the RowFilters to test * @return a RowFilter implementing the specified criteria * @throws IllegalArgumentException if any of the filters @@ -283,6 +294,8 @@ * Returns a RowFilter that includes entries if the * supplied filter does not include the entry. * + * @param the type of the model to which the {@code RowFilter} applies + * @param the type of the identifier passed to the {@code RowFilter} * @param filter the RowFilter to negate * @return a RowFilter implementing the specified criteria * @throws IllegalArgumentException if filter is diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java --- a/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java Wed Jul 05 19:50:00 2017 +0200 @@ -100,6 +100,8 @@ /** * Constructs a SortingFocusTraversalPolicy with the specified Comparator. + * + * @param comparator the {@code Comparator} to sort by */ public SortingFocusTraversalPolicy(Comparator comparator) { this.comparator = comparator; diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/Spring.java --- a/jdk/src/share/classes/javax/swing/Spring.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/Spring.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, 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 @@ -547,9 +547,10 @@ /** - * Returns -s: a spring running in the opposite direction to s. + * Returns {@code -s}: a spring running in the opposite direction to {@code s}. * - * @return -s: a spring running in the opposite direction to s + * @param s a {@code Spring} object + * @return {@code -s}: a spring running in the opposite direction to {@code s} * * @see Spring */ @@ -582,6 +583,8 @@ * the values of s1 and s2 is exactly equal to * the value of s3. * + * @param s1 a {@code Spring} object + * @param s2 a {@code Spring} object * @return s1+s2: a spring representing s1 and s2 in series * * @see Spring @@ -591,11 +594,13 @@ } /** - * Returns max(s1, s2): a spring whose value is always greater than (or equal to) - * the values of both s1 and s2. + * Returns {@code max(s1, s2)}: a spring whose value is always greater than (or equal to) + * the values of both {@code s1} and {@code s2}. * - * @return max(s1, s2): a spring whose value is always greater than (or equal to) - * the values of both s1 and s2 + * @param s1 a {@code Spring} object + * @param s2 a {@code Spring} object + * @return {@code max(s1, s2)}: a spring whose value is always greater than (or equal to) + * the values of both {@code s1} and {@code s2} * @see Spring */ public static Spring max(Spring s1, Spring s2) { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/javax/swing/UIManager.java --- a/jdk/src/share/classes/javax/swing/UIManager.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/javax/swing/UIManager.java Wed Jul 05 19:50:00 2017 +0200 @@ -1107,6 +1107,8 @@ * UI class is created or when the default look and feel is changed * on a component instance. *

Note these are not the same as the installed look and feels. + * + * @param laf the {@code LookAndFeel} to be removed * @return true if the LookAndFeel was removed from the list * @see #removeAuxiliaryLookAndFeel * @see #getAuxiliaryLookAndFeels diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java --- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java Wed Jul 05 19:50:00 2017 +0200 @@ -221,8 +221,17 @@ } OutputStream os = new UnsyncBufferedOutputStream(bos); + + DOMSubTreeData subTree = new DOMSubTreeData(localSiElem, true); try { - os.close(); + ((DOMCanonicalizationMethod) + canonicalizationMethod).canonicalize(subTree, context, os); + } catch (TransformException te) { + throw new XMLSignatureException(te); + } + + try { + os.flush(); } catch (IOException e) { if (log.isLoggable(java.util.logging.Level.FINE)) { log.log(java.util.logging.Level.FINE, e.getMessage(), e); @@ -230,15 +239,6 @@ // Impossible } - DOMSubTreeData subTree = new DOMSubTreeData(localSiElem, true); - - try { - ((DOMCanonicalizationMethod) - canonicalizationMethod).canonicalize(subTree, context, bos); - } catch (TransformException te) { - throw new XMLSignatureException(te); - } - byte[] signedInfoBytes = bos.toByteArray(); // this whole block should only be done if logging is enabled @@ -253,6 +253,15 @@ } this.canonData = new ByteArrayInputStream(signedInfoBytes); + + try { + os.close(); + } catch (IOException e) { + if (log.isLoggable(java.util.logging.Level.FINE)) { + log.log(java.util.logging.Level.FINE, e.getMessage(), e); + } + // Impossible + } } public void marshal(Node parent, String dsPrefix, DOMCryptoContext context) diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/monitor/event/MonitorStatusChangeEvent.java --- a/jdk/src/share/classes/sun/jvmstat/monitor/event/MonitorStatusChangeEvent.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/monitor/event/MonitorStatusChangeEvent.java Wed Jul 05 19:50:00 2017 +0200 @@ -27,6 +27,7 @@ import java.util.List; import sun.jvmstat.monitor.MonitoredVm; +import sun.jvmstat.monitor.Monitor; /** * Provides a description of a change in status of the instrumentation @@ -42,13 +43,13 @@ * List of instrumentation objects inserted since the last event. * Elements of this list will always be of type Monitor. */ - protected List inserted; + protected List inserted; /** * List of instrumentation objects removed since the last event. * Elements of this list will always be of type Monitor. */ - protected List removed; + protected List removed; /** * Construct a new MonitorStatusChangeEvent. @@ -59,8 +60,8 @@ * @param removed the list of instrumentation objects removed since * the last event. */ - public MonitorStatusChangeEvent(MonitoredVm vm, List inserted, - List removed) { + public MonitorStatusChangeEvent(MonitoredVm vm, List inserted, + List removed) { super(vm); this.inserted = inserted; this.removed = removed; @@ -75,7 +76,7 @@ * new instrumentation was inserted, an emply List is * returned. */ - public List getInserted() { + public List getInserted() { return inserted; } @@ -87,7 +88,7 @@ * instrumentation exported by the MonitoredHost. If no * instrumentation was removed, an emply List is returned. */ - public List getRemoved() { + public List getRemoved() { return removed; } } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/monitor/event/VmStatusChangeEvent.java --- a/jdk/src/share/classes/sun/jvmstat/monitor/event/VmStatusChangeEvent.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/monitor/event/VmStatusChangeEvent.java Wed Jul 05 19:50:00 2017 +0200 @@ -44,7 +44,7 @@ * active Java Virtual Machine on the MonitoredHost. This Set will only * contain Integer objects. */ - protected Set active; + protected Set active; /** * The set of Java Virtual Machines started on MonitoredHost since the @@ -52,7 +52,7 @@ * lvmid for each Java Virtual Machine started on the * MonitoredHost. This Set will only contain Integer objects. */ - protected Set started; + protected Set started; /** * The set of Java Virtual Machines terminated on MonitoredHost since the @@ -60,7 +60,7 @@ * lvmid for each Java Virtual Machine started on the * MonitoredHost. This Set will only contain Integer objects. */ - protected Set terminated; + protected Set terminated; /** * Construct a new VmStatusChangeEvent instance. @@ -72,8 +72,8 @@ * @param terminated the set of Java Virtual Machines terminated since * the last event. */ - public VmStatusChangeEvent(MonitoredHost host, Set active, - Set started, Set terminated) { + public VmStatusChangeEvent(MonitoredHost host, Set active, + Set started, Set terminated) { super(host); this.active = active; this.started = started; @@ -90,7 +90,7 @@ * there are no active Java Virtual Machines on the host, * an empty Set is returned. */ - public Set getActive() { + public Set getActive() { return active; } @@ -105,7 +105,7 @@ * no Java Virtual Machines were recently started on the * host, an empty Set is returned. */ - public Set getStarted() { + public Set getStarted() { return started; } @@ -120,7 +120,7 @@ * no Java Virtual Machines were recently terminated on the * host, an empty Set is returned. */ - public Set getTerminated() { + public Set getTerminated() { return terminated; } } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/perfdata/monitor/AbstractPerfDataBuffer.java --- a/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/AbstractPerfDataBuffer.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/AbstractPerfDataBuffer.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -169,7 +169,7 @@ try { Class implClass = Class.forName(classname); - Constructor cons = implClass.getConstructor(new Class[] { + Constructor cons = implClass.getConstructor(new Class[] { Class.forName("java.nio.ByteBuffer"), Integer.TYPE }); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/perfdata/monitor/MonitorStatus.java --- a/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/MonitorStatus.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/MonitorStatus.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -26,6 +26,7 @@ package sun.jvmstat.perfdata.monitor; import java.util.List; +import sun.jvmstat.monitor.Monitor; /** * Immutable class containing the list of inserted and deleted @@ -39,12 +40,12 @@ /** * The list of Monitors inserted since the last query. */ - protected List inserted; + protected List inserted; /** * The list of Monitors removed since the last query. */ - protected List removed; + protected List removed; /** * Create a MonitorStatus instance. @@ -52,7 +53,7 @@ * @param inserted the list of Monitors inserted * @param removed the list of Monitors removed */ - public MonitorStatus(List inserted, List removed) { + public MonitorStatus(List inserted, List removed) { this.inserted = inserted; this.removed = removed; } @@ -62,7 +63,7 @@ * * @return List - the List of Monitor objects inserted or an empty List. */ - public List getInserted() { + public List getInserted() { return inserted; } @@ -71,7 +72,7 @@ * * @return List - the List of Monitor objects removed or an empty List. */ - public List getRemoved() { + public List getRemoved() { return removed; } } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/perfdata/monitor/PerfDataBufferImpl.java --- a/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/PerfDataBufferImpl.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/PerfDataBufferImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -66,7 +66,7 @@ /** * A cache of resolved monitor aliases. */ - protected Map aliasCache; + protected Map aliasCache; /** @@ -79,9 +79,9 @@ protected PerfDataBufferImpl(ByteBuffer buffer, int lvmid) { this.buffer = buffer; this.lvmid = lvmid; - this.monitors = new TreeMap(); - this.aliasMap = new HashMap>(); - this.aliasCache = new HashMap(); + this.monitors = new TreeMap<>(); + this.aliasMap = new HashMap<>(); + this.aliasCache = new HashMap<>(); } /** @@ -200,12 +200,12 @@ protected Monitor findByAlias(String name) { assert Thread.holdsLock(this); - Monitor m = (Monitor)aliasCache.get(name); + Monitor m = aliasCache.get(name); if (m == null) { - ArrayList al = aliasMap.get(name); + ArrayList al = aliasMap.get(name); if (al != null) { - for (Iterator i = al.iterator(); i.hasNext() && m == null; ) { - String alias = (String)i.next(); + for (Iterator i = al.iterator(); i.hasNext() && m == null; ) { + String alias = i.next(); m = monitors.get(alias); } } @@ -287,21 +287,21 @@ Pattern pattern = Pattern.compile(patternString); Matcher matcher = pattern.matcher(""); - List matches = new ArrayList(); + List matches = new ArrayList<>(); - Set monitorSet = monitors.entrySet(); + Set> monitorSet = monitors.entrySet(); - for (Iterator i = monitorSet.iterator(); i.hasNext(); /* empty */) { - Map.Entry me = (Map.Entry)i.next(); - String name = (String)me.getKey(); - Monitor m = (Monitor)me.getValue(); + for (Iterator> i = monitorSet.iterator(); i.hasNext(); /* empty */) { + Map.Entry me = i.next(); + String name = me.getKey(); + Monitor m = me.getValue(); // apply pattern to monitor item name matcher.reset(name); // if the pattern matches, then add monitor to list if (matcher.lookingAt()) { - matches.add((Monitor)me.getValue()); + matches.add(me.getValue()); } } return matches; diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/LocalMonitoredVm.java --- a/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/LocalMonitoredVm.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/LocalMonitoredVm.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -143,16 +143,17 @@ * @param inserted List of Monitor objects inserted. * @param removed List of Monitor objects removed. */ - void fireMonitorStatusChangedEvents(List inserted, List removed) { + @SuppressWarnings("unchecked") // Cast of result of clone + void fireMonitorStatusChangedEvents(List inserted, List removed) { MonitorStatusChangeEvent ev = null; - ArrayList registered = null; + ArrayList registered = null; synchronized (listeners) { registered = (ArrayList)listeners.clone(); } - for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { - VmListener l = (VmListener)i.next(); + for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { + VmListener l = i.next(); // lazily create the event object; if (ev == null) { ev = new MonitorStatusChangeEvent(this, inserted, removed); @@ -190,8 +191,8 @@ super.run(); try { MonitorStatus status = getMonitorStatus(); - List inserted = status.getInserted(); - List removed = status.getRemoved(); + List inserted = status.getInserted(); + List removed = status.getRemoved(); if (!inserted.isEmpty() || !removed.isEmpty()) { fireMonitorStatusChangedEvents(inserted, removed); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/MonitoredHostProvider.java --- a/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/MonitoredHostProvider.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/MonitoredHostProvider.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -160,17 +160,18 @@ * @param terminated a set of Integer objects containing the vmid of * terminated Vms since last interval. */ - private void fireVmStatusChangedEvents(Set active, Set started, - Set terminated) { - ArrayList registered = null; + @SuppressWarnings("unchecked") // Cast of result of clone + private void fireVmStatusChangedEvents(Set active, Set started, + Set terminated) { + ArrayList registered = null; VmStatusChangeEvent ev = null; synchronized(listeners) { registered = (ArrayList)listeners.clone(); } - for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { - HostListener l = (HostListener)i.next(); + for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { + HostListener l = i.next(); if (ev == null) { ev = new VmStatusChangeEvent(this, active, started, terminated); } @@ -186,7 +187,7 @@ super.run(); // save the last set of active JVMs - Set lastActiveVms = activeVms; + Set lastActiveVms = activeVms; // get the current set of active JVMs activeVms = (HashSet)vmManager.activeVms(); @@ -194,20 +195,20 @@ if (activeVms.isEmpty()) { return; } - Set startedVms = new HashSet(); - Set terminatedVms = new HashSet(); + Set startedVms = new HashSet<>(); + Set terminatedVms = new HashSet<>(); - for (Iterator i = activeVms.iterator(); i.hasNext(); /* empty */) { - Integer vmid = (Integer)i.next(); + for (Iterator i = activeVms.iterator(); i.hasNext(); /* empty */) { + Integer vmid = i.next(); if (!lastActiveVms.contains(vmid)) { // a new file has been detected, add to set startedVms.add(vmid); } } - for (Iterator i = lastActiveVms.iterator(); i.hasNext(); + for (Iterator i = lastActiveVms.iterator(); i.hasNext(); /* empty */) { - Object o = i.next(); + Integer o = i.next(); if (!activeVms.contains(o)) { // JVM has terminated, remove it from the active list terminatedVms.add(o); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/rmi/MonitoredHostProvider.java --- a/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/rmi/MonitoredHostProvider.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/rmi/MonitoredHostProvider.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -246,17 +246,18 @@ * Vm Identifiers of terminated JVMs since last * interval. */ - private void fireVmStatusChangedEvents(Set active, Set started, - Set terminated) { - ArrayList registered = null; + @SuppressWarnings("unchecked") // Cast of result of clone + private void fireVmStatusChangedEvents(Set active, Set started, + Set terminated) { + ArrayList registered = null; VmStatusChangeEvent ev = null; synchronized(listeners) { registered = (ArrayList)listeners.clone(); } - for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { - HostListener l = (HostListener)i.next(); + for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { + HostListener l = i.next(); if (ev == null) { ev = new VmStatusChangeEvent(this, active, started, terminated); } @@ -267,16 +268,17 @@ /** * Fire hostDisconnectEvent events. */ + @SuppressWarnings("unchecked") // Cast of result of clone void fireDisconnectedEvents() { - ArrayList registered = null; + ArrayList registered = null; HostEvent ev = null; synchronized(listeners) { registered = (ArrayList)listeners.clone(); } - for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { - HostListener l = (HostListener)i.next(); + for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { + HostListener l = i.next(); if (ev == null) { ev = new HostEvent(this); } @@ -292,7 +294,7 @@ super.run(); // save the last set of active JVMs - Set lastActiveVms = activeVms; + Set lastActiveVms = activeVms; try { // get the current set of active JVMs @@ -313,20 +315,20 @@ return; } - Set startedVms = new HashSet(); - Set terminatedVms = new HashSet(); + Set startedVms = new HashSet<>(); + Set terminatedVms = new HashSet<>(); - for (Iterator i = activeVms.iterator(); i.hasNext(); /* empty */ ) { - Integer vmid = (Integer)i.next(); + for (Iterator i = activeVms.iterator(); i.hasNext(); /* empty */ ) { + Integer vmid = i.next(); if (!lastActiveVms.contains(vmid)) { // a new file has been detected, add to set startedVms.add(vmid); } } - for (Iterator i = lastActiveVms.iterator(); i.hasNext(); + for (Iterator i = lastActiveVms.iterator(); i.hasNext(); /* empty */ ) { - Object o = i.next(); + Integer o = i.next(); if (!activeVms.contains(o)) { // JVM has terminated, remove it from the active list terminatedVms.add(o); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/rmi/RemoteMonitoredVm.java --- a/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/rmi/RemoteMonitoredVm.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/rmi/RemoteMonitoredVm.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -198,16 +198,17 @@ * @param inserted List of Monitor objects inserted. * @param removed List of Monitor objects removed. */ - void fireMonitorStatusChangedEvents(List inserted, List removed) { - ArrayList registered = null; + @SuppressWarnings("unchecked") // Cast of result of clone + void fireMonitorStatusChangedEvents(List inserted, List removed) { + ArrayList registered = null; MonitorStatusChangeEvent ev = null; synchronized(listeners) { registered = (ArrayList)listeners.clone(); } - for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { - VmListener l = (VmListener)i.next(); + for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { + VmListener l = i.next(); if (ev == null) { ev = new MonitorStatusChangeEvent(this, inserted, removed); } @@ -218,16 +219,17 @@ /** * Fire MonitoredVmStructureChanged events. */ + @SuppressWarnings("unchecked") // Cast of result of clone void fireMonitorsUpdatedEvents() { - ArrayList registered = null; + ArrayList registered = null; VmEvent ev = null; synchronized(listeners) { registered = (ArrayList)listeners.clone(); } - for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { - VmListener l = (VmListener)i.next(); + for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) { + VmListener l = i.next(); if (ev == null) { ev = new VmEvent(this); } @@ -256,8 +258,8 @@ try { MonitorStatus status = getMonitorStatus(); - List inserted = status.getInserted(); - List removed = status.getRemoved(); + List inserted = status.getInserted(); + List removed = status.getRemoved(); if (!inserted.isEmpty() || !removed.isEmpty()) { fireMonitorStatusChangedEvents(inserted, removed); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/perfdata/monitor/v1_0/PerfDataBuffer.java --- a/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/v1_0/PerfDataBuffer.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/v1_0/PerfDataBuffer.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -47,7 +47,7 @@ private static final boolean DEBUG = false; private static final int syncWaitMs = Integer.getInteger("sun.jvmstat.perdata.syncWaitMs", 5000); - private static final ArrayList EMPTY_LIST = new ArrayList(0); + private static final ArrayList EMPTY_LIST = new ArrayList(0); /* * the following constants must be kept in sync with struct @@ -190,8 +190,8 @@ getNewMonitors(map); // current implementation doesn't support deletion or reuse of entries - ArrayList removed = EMPTY_LIST; - ArrayList inserted = insertedMonitors; + ArrayList removed = EMPTY_LIST; + ArrayList inserted = insertedMonitors; insertedMonitors = new ArrayList(); return new MonitorStatus(inserted, removed); @@ -618,14 +618,14 @@ /** * Method to dump debugging information */ - private void dumpAll(Map map, int lvmid) { + private void dumpAll(Map map, int lvmid) { if (DEBUG) { - Set keys = map.keySet(); + Set keys = map.keySet(); System.err.println("Dump for " + lvmid); int j = 0; - for (Iterator i = keys.iterator(); i.hasNext(); j++) { - Monitor monitor = (Monitor)map.get(i.next()); + for (Iterator i = keys.iterator(); i.hasNext(); j++) { + Monitor monitor = map.get(i.next()); System.err.println(j + "\t" + monitor.getName() + "=" + monitor.getValue()); } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/jvmstat/perfdata/monitor/v2_0/PerfDataBuffer.java --- a/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/v2_0/PerfDataBuffer.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/jvmstat/perfdata/monitor/v2_0/PerfDataBuffer.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -65,7 +65,7 @@ private static final boolean DEBUG = false; private static final int syncWaitMs = Integer.getInteger("sun.jvmstat.perdata.syncWaitMs", 5000); - private static final ArrayList EMPTY_LIST = new ArrayList(0); + private static final ArrayList EMPTY_LIST = new ArrayList<>(0); /* * These are primarily for documentary purposes and the match up @@ -198,10 +198,10 @@ getNewMonitors(map); // current implementation doesn't support deletion of reuse of entries - ArrayList removed = EMPTY_LIST; - ArrayList inserted = insertedMonitors; + ArrayList removed = EMPTY_LIST; + ArrayList inserted = insertedMonitors; - insertedMonitors = new ArrayList(); + insertedMonitors = new ArrayList<>(); return new MonitorStatus(inserted, removed); } @@ -524,7 +524,7 @@ System.err.println("Dump for " + lvmid); int j = 0; - for (Iterator i = keys.iterator(); i.hasNext(); j++) { + for (Iterator i = keys.iterator(); i.hasNext(); j++) { Monitor monitor = map.get(i.next()); System.err.println(j + "\t" + monitor.getName() + "=" + monitor.getValue()); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/management/DiagnosticCommandImpl.java --- a/jdk/src/share/classes/sun/management/DiagnosticCommandImpl.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/management/DiagnosticCommandImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -84,10 +84,10 @@ Exception cause = null; if (info.getPermissionClass() != null) { try { - Class c = Class.forName(info.getPermissionClass()); + Class c = Class.forName(info.getPermissionClass()); if (info.getPermissionAction() == null) { try { - Constructor constructor = c.getConstructor(String.class); + Constructor constructor = c.getConstructor(String.class); permission = (Permission) constructor.newInstance(info.getPermissionName()); } catch (InstantiationException | IllegalAccessException @@ -98,7 +98,7 @@ } if (permission == null) { try { - Constructor constructor = c.getConstructor(String.class, String.class); + Constructor constructor = c.getConstructor(String.class, String.class); permission = (Permission) constructor.newInstance( info.getPermissionName(), info.getPermissionAction()); @@ -158,7 +158,7 @@ SortedSet operations = new TreeSet<>(new OperationInfoComparator()); Map wrappersmap; if (!isSupported) { - wrappersmap = (Map) Collections.EMPTY_MAP; + wrappersmap = Collections.emptyMap(); } else { try { String[] command = getDiagnosticCommands(); @@ -189,7 +189,7 @@ } } } catch (IllegalArgumentException | UnsupportedOperationException e) { - wrappersmap = (Map) Collections.EMPTY_MAP; + wrappersmap = Collections.emptyMap(); } } wrappers = Collections.unmodifiableMap(wrappersmap); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/management/GarbageCollectionNotifInfoCompositeData.java --- a/jdk/src/share/classes/sun/management/GarbageCollectionNotifInfoCompositeData.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/management/GarbageCollectionNotifInfoCompositeData.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 @@ -65,7 +65,7 @@ final GcInfoBuilder builder = AccessController.doPrivileged (new PrivilegedAction() { public GcInfoBuilder run() { try { - Class cl = Class.forName("com.sun.management.GcInfo"); + Class cl = Class.forName("com.sun.management.GcInfo"); Field f = cl.getDeclaredField("builder"); f.setAccessible(true); return (GcInfoBuilder)f.get(gcNotifInfo.getGcInfo()); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/management/GcInfoBuilder.java --- a/jdk/src/share/classes/sun/management/GcInfoBuilder.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/management/GcInfoBuilder.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -98,7 +98,7 @@ // First, fill with the attributes in the GcInfo String[] gcInfoItemNames = GcInfoCompositeData.getBaseGcInfoItemNames(); - OpenType[] gcInfoItemTypes = GcInfoCompositeData.getBaseGcInfoItemTypes(); + OpenType[] gcInfoItemTypes = GcInfoCompositeData.getBaseGcInfoItemTypes(); int numGcInfoItems = gcInfoItemNames.length; int itemCount = numGcInfoItems + gcExtItemCount; diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/management/GcInfoCompositeData.java --- a/jdk/src/share/classes/sun/management/GcInfoCompositeData.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/management/GcInfoCompositeData.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -72,7 +72,7 @@ final GcInfoBuilder builder = AccessController.doPrivileged (new PrivilegedAction() { public GcInfoBuilder run() { try { - Class cl = Class.forName("com.sun.management.GcInfo"); + Class cl = Class.forName("com.sun.management.GcInfo"); Field f = cl.getDeclaredField("builder"); f.setAccessible(true); return (GcInfoBuilder)f.get(info); @@ -84,7 +84,7 @@ final Object[] extAttr = AccessController.doPrivileged (new PrivilegedAction() { public Object[] run() { try { - Class cl = Class.forName("com.sun.management.GcInfo"); + Class cl = Class.forName("com.sun.management.GcInfo"); Field f = cl.getDeclaredField("extAttributes"); f.setAccessible(true); return (Object[])f.get(info); @@ -182,8 +182,8 @@ return baseGcInfoItemNames; } - private static OpenType[] baseGcInfoItemTypes = null; - static synchronized OpenType[] getBaseGcInfoItemTypes() { + private static OpenType[] baseGcInfoItemTypes = null; + static synchronized OpenType[] getBaseGcInfoItemTypes() { if (baseGcInfoItemTypes == null) { OpenType memoryUsageOpenType = memoryUsageMapType.getOpenType(); baseGcInfoItemTypes = new OpenType[] { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/management/MappedMXBeanType.java --- a/jdk/src/share/classes/sun/management/MappedMXBeanType.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/management/MappedMXBeanType.java Wed Jul 05 19:50:00 2017 +0200 @@ -227,6 +227,7 @@ // Enum <-> enum's name // static class EnumMXBeanType extends MappedMXBeanType { + @SuppressWarnings("rawtypes") final Class enumClass; EnumMXBeanType(Class c) { this.enumClass = c; @@ -754,7 +755,7 @@ } } - private static class InProgress extends OpenType { + private static class InProgress extends OpenType { private static final String description = "Marker to detect recursive type use -- internal use only!"; @@ -783,7 +784,7 @@ static { OpenType t; try { - t = new InProgress(); + t = new InProgress<>(); } catch (OpenDataException e) { // Should not reach here throw new AssertionError(e); @@ -791,7 +792,7 @@ inProgress = t; } - private static final OpenType[] simpleTypes = { + private static final OpenType[] simpleTypes = { BIGDECIMAL, BIGINTEGER, BOOLEAN, BYTE, CHARACTER, DATE, DOUBLE, FLOAT, INTEGER, LONG, OBJECTNAME, SHORT, STRING, VOID, diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/misc/JavaAWTFontAccess.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/sun/misc/JavaAWTFontAccess.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,39 @@ +/* + * 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * SharedSecrets interface used for the access from java.text.Bidi + */ + +package sun.misc; + +public interface JavaAWTFontAccess { + + // java.awt.font.TextAttribute constants + public Object getTextAttributeConstant(String name); + + // java.awt.font.NumericShaper + public void shape(Object shaper, char[] text, int start, int count); +} diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/misc/SharedSecrets.java --- a/jdk/src/share/classes/sun/misc/SharedSecrets.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/misc/SharedSecrets.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 @@ -55,6 +55,7 @@ private static JavaSecurityAccess javaSecurityAccess; private static JavaUtilZipFileAccess javaUtilZipFileAccess; private static JavaAWTAccess javaAWTAccess; + private static JavaAWTFontAccess javaAWTFontAccess; private static JavaBeansIntrospectorAccess javaBeansIntrospectorAccess; public static JavaUtilJarAccess javaUtilJarAccess() { @@ -180,12 +181,19 @@ public static JavaAWTAccess getJavaAWTAccess() { // this may return null in which case calling code needs to // provision for. - if (javaAWTAccess == null) { - return null; - } return javaAWTAccess; } + public static void setJavaAWTFontAccess(JavaAWTFontAccess jafa) { + javaAWTFontAccess = jafa; + } + + public static JavaAWTFontAccess getJavaAWTFontAccess() { + // this may return null in which case calling code needs to + // provision for. + return javaAWTFontAccess; + } + public static JavaBeansIntrospectorAccess getJavaBeansIntrospectorAccess() { return javaBeansIntrospectorAccess; } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/security/jca/ProviderConfig.java --- a/jdk/src/share/classes/sun/security/jca/ProviderConfig.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/security/jca/ProviderConfig.java Wed Jul 05 19:50:00 2017 +0200 @@ -255,6 +255,14 @@ disableLoad(); } return null; + } catch (ExceptionInInitializerError err) { + // no sufficient permission to initialize provider class + if (debug != null) { + debug.println("Error loading provider " + ProviderConfig.this); + err.printStackTrace(); + } + disableLoad(); + return null; } } }); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java --- a/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 @@ -900,7 +900,7 @@ private static ObjectIdentifier mapPBEAlgorithmToOID(String algorithm) throws NoSuchAlgorithmException { // Check for PBES2 algorithms - if (algorithm.toLowerCase().startsWith("pbewithhmacsha")) { + if (algorithm.toLowerCase(Locale.ENGLISH).startsWith("pbewithhmacsha")) { return pbes2_OID; } return AlgorithmId.get(algorithm).getOID(); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/security/provider/ConfigFile.java --- a/jdk/src/share/classes/sun/security/provider/ConfigFile.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/security/provider/ConfigFile.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -451,7 +451,7 @@ // controlFlag (required, optional, etc) LoginModuleControlFlag controlFlag; - String sflag = match("controlFlag").toUpperCase(); + String sflag = match("controlFlag").toUpperCase(Locale.ENGLISH); switch (sflag) { case "REQUIRED": controlFlag = LoginModuleControlFlag.REQUIRED; diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/security/provider/PolicyParser.java --- a/jdk/src/share/classes/sun/security/provider/PolicyParser.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/security/provider/PolicyParser.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -707,7 +707,7 @@ } catch (PropertyExpander.ExpandException peee) { throw new IOException(peee.getLocalizedMessage()); } - properties.put(key.toLowerCase(), value); + properties.put(key.toLowerCase(Locale.ENGLISH), value); } return properties; diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/security/tools/keytool/Main.java --- a/jdk/src/share/classes/sun/security/tools/keytool/Main.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/security/tools/keytool/Main.java Wed Jul 05 19:50:00 2017 +0200 @@ -1540,7 +1540,7 @@ boolean useDefaultPBEAlgorithm = true; SecretKey secKey = null; - if (keyAlgName.toUpperCase().startsWith("PBE")) { + if (keyAlgName.toUpperCase(Locale.ENGLISH).startsWith("PBE")) { SecretKeyFactory factory = SecretKeyFactory.getInstance("PBE"); // User is prompted for PBE credential diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/text/bidi/BidiBase.java --- a/jdk/src/share/classes/sun/text/bidi/BidiBase.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/text/bidi/BidiBase.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 @@ -54,13 +54,12 @@ import java.io.IOException; import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.InvocationTargetException; import java.text.AttributedCharacterIterator; import java.text.Bidi; import java.util.Arrays; import java.util.MissingResourceException; +import sun.misc.JavaAWTFontAccess; +import sun.misc.SharedSecrets; import sun.text.normalizer.UBiDiProps; import sun.text.normalizer.UCharacter; import sun.text.normalizer.UTF16; @@ -3446,7 +3445,13 @@ * java.awt.font.TextAttribute without creating a static dependency. */ private static class TextAttributeConstants { - private static final Class clazz = getClass("java.awt.font.TextAttribute"); + // Make sure to load the AWT's TextAttribute class before using the constants, if any. + static { + try { + Class.forName("java.awt.font.TextAttribute", true, null); + } catch (ClassNotFoundException e) {} + } + static final JavaAWTFontAccess jafa = SharedSecrets.getJavaAWTFontAccess(); /** * TextAttribute instances (or a fake Attribute type if @@ -3462,88 +3467,41 @@ /** * TextAttribute.RUN_DIRECTION_LTR */ - static final Boolean RUN_DIRECTION_LTR = (clazz == null) ? - Boolean.FALSE : (Boolean)getStaticField(clazz, "RUN_DIRECTION_LTR"); - - - private static Class getClass(String name) { - try { - return Class.forName(name, true, null); - } catch (ClassNotFoundException e) { - return null; - } - } - - private static Object getStaticField(Class clazz, String name) { - try { - Field f = clazz.getField(name); - return f.get(null); - } catch (NoSuchFieldException | IllegalAccessException x) { - throw new AssertionError(x); - } - } + static final Boolean RUN_DIRECTION_LTR = (jafa == null) ? + Boolean.FALSE : (Boolean)jafa.getTextAttributeConstant("RUN_DIRECTION_LTR"); @SuppressWarnings("serial") private static AttributedCharacterIterator.Attribute getTextAttribute(String name) { - if (clazz == null) { + if (jafa == null) { // fake attribute return new AttributedCharacterIterator.Attribute(name) { }; } else { - return (AttributedCharacterIterator.Attribute)getStaticField(clazz, name); + return (AttributedCharacterIterator.Attribute)jafa.getTextAttributeConstant(name); } } } /** - * A class that provides access to java.awt.font.NumericShaping without + * A class that provides access to java.awt.font.NumericShaper without * creating a static dependency. */ private static class NumericShapings { - private static final Class clazz = - getClass("java.awt.font.NumericShaper"); - private static final Method shapeMethod = - getMethod(clazz, "shape", char[].class, int.class, int.class); - - private static Class getClass(String name) { + // Make sure to load the AWT's NumericShaper class before calling shape, if any. + static { try { - return Class.forName(name, true, null); - } catch (ClassNotFoundException e) { - return null; - } + Class.forName("java.awt.font.NumericShaper", true, null); + } catch (ClassNotFoundException e) {} } - - private static Method getMethod(Class clazz, - String name, - Class... paramTypes) - { - if (clazz != null) { - try { - return clazz.getMethod(name, paramTypes); - } catch (NoSuchMethodException e) { - throw new AssertionError(e); - } - } else { - return null; - } - } + static final JavaAWTFontAccess jafa = SharedSecrets.getJavaAWTFontAccess(); /** * Invokes NumericShaping shape(text,start,count) method. */ static void shape(Object shaper, char[] text, int start, int count) { - if (shapeMethod == null) - throw new AssertionError("Should not get here"); - try { - shapeMethod.invoke(shaper, text, start, count); - } catch (InvocationTargetException e) { - Throwable cause = e.getCause(); - if (cause instanceof RuntimeException) - throw (RuntimeException)cause; - throw new AssertionError(e); - } catch (IllegalAccessException iae) { - throw new AssertionError(iae); + if (jafa != null) { + jafa.shape(shaper, text, start, count); } } } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/tracing/ProviderSkeleton.java --- a/jdk/src/share/classes/sun/tracing/ProviderSkeleton.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/tracing/ProviderSkeleton.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 @@ -154,7 +154,7 @@ * @return always null, if the method is a user-defined probe */ public Object invoke(Object proxy, Method method, Object[] args) { - Class declaringClass = method.getDeclaringClass(); + Class declaringClass = method.getDeclaringClass(); // not a provider subtype's own method if (declaringClass != providerType) { try { diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/classes/sun/tracing/dtrace/DTraceProvider.java --- a/jdk/src/share/classes/sun/tracing/dtrace/DTraceProvider.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/classes/sun/tracing/dtrace/DTraceProvider.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 @@ -50,7 +50,7 @@ private Object proxy; // For proxy generation - private final static Class[] constructorParams = { InvocationHandler.class }; + private final static Class[] constructorParams = { InvocationHandler.class }; private final String proxyClassNamePrefix = "$DTraceTracingProxy"; static final String DEFAULT_MODULE = "java_tracing"; @@ -135,7 +135,7 @@ * Invoke its constructor with the designated invocation handler. */ try { - Constructor cons = proxyClass.getConstructor(constructorParams); + Constructor cons = proxyClass.getConstructor(constructorParams); return (T)cons.newInstance(new Object[] { this }); } catch (ReflectiveOperationException e) { throw new InternalError(e.toString(), e); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/javavm/export/jvm.h --- a/jdk/src/share/javavm/export/jvm.h Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/javavm/export/jvm.h Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -426,9 +426,6 @@ JNIEXPORT jobjectArray JNICALL JVM_GetClassInterfaces(JNIEnv *env, jclass cls); -JNIEXPORT jobject JNICALL -JVM_GetClassLoader(JNIEnv *env, jclass cls); - JNIEXPORT jboolean JNICALL JVM_IsInterface(JNIEnv *env, jclass cls); diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/lib/security/BlacklistedCertsConverter.java --- a/jdk/src/share/lib/security/BlacklistedCertsConverter.java Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +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. - */ - -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.security.cert.Certificate; -import java.security.cert.CertificateEncodingException; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; -import java.util.Collection; - -/** - * This is the tool to convert blacklisted.certs.pem to blacklisted.certs. - * Every time a new blacklisted certs is added, please append the PEM format - * to the end of blacklisted.certs.pem (with proper comments) and then use - * this tool to generate an updated blacklisted.certs. Make sure to include - * changes to both in a changeset. - */ -public class BlacklistedCertsConverter { - public static void main(String[] args) throws Exception { - if (args.length == 0) { - System.out.println("Usage: java BlacklistedCertsConverter SHA-256" + - " < blacklisted.certs.pem > blacklisted.certs"); - System.exit(1); - } - String mdAlg = args[0]; - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - Collection certs - = cf.generateCertificates(System.in); - System.out.println("Algorithm=" + mdAlg); - for (Certificate cert: certs) { - System.out.println( - getCertificateFingerPrint(mdAlg, (X509Certificate)cert)); - } - } - - /** - * Converts a byte to hex digit and writes to the supplied buffer - */ - private static void byte2hex(byte b, StringBuffer buf) { - char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', - '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - int high = ((b & 0xf0) >> 4); - int low = (b & 0x0f); - buf.append(hexChars[high]); - buf.append(hexChars[low]); - } - - /** - * Gets the requested finger print of the certificate. - */ - private static String getCertificateFingerPrint(String mdAlg, - X509Certificate cert) { - String fingerPrint = ""; - try { - byte[] encCertInfo = cert.getEncoded(); - MessageDigest md = MessageDigest.getInstance(mdAlg); - byte[] digest = md.digest(encCertInfo); - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < digest.length; i++) { - byte2hex(digest[i], buf); - } - fingerPrint = buf.toString(); - } catch (NoSuchAlgorithmException | CertificateEncodingException e) { - // ignored - } - return fingerPrint; - } -} diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/lib/security/blacklisted.certs --- a/jdk/src/share/lib/security/blacklisted.certs Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -Algorithm=SHA-256 -76A45A496031E4DD2D7ED23E8F6FF97DBDEA980BAAC8B0BA94D7EDB551348645 -4CBBF8256BC9888A8007B2F386940A2E394378B0D903CBB3863C5A6394B889CE -D24566BF315F4E597D6E381C87119FB4198F5E9E2607F5F4AB362EF7E2E7672F -14E6D2764A4B06701C6CBC376A253775F79C782FBCB6C0EE6F99DE4BA1024ADD -D3A936E1A7775A45217C8296A1F22AC5631DCDEC45594099E78EEEBBEDCBA967 -5E83124D68D24E8E177E306DF643D5EA99C5A94D6FC34B072F7544A1CABB7C7B -9ED8F9B0E8E42A1656B8E1DD18F42BA42DC06FE52686173BA2FC70E756F207DC -FDEDB5BDFCB67411513A61AEE5CB5B5D7C52AF06028EFC996CC1B05B1D6CEA2B -A686FEE577C88AB664D0787ECDFFF035F4806F3DE418DC9E4D516324FFF02083 -4FEE0163686ECBD65DB968E7494F55D84B25486D438E9DE558D629D28CD4D176 -8A1BD21661C60015065212CC98B1ABB50DFD14C872A208E66BAE890F25C448AF -B8686723E415534BC0DBD16326F9486F85B0B0799BF6639334E61DAAE67F36CD -3946901F46B0071E90D78279E82FABABCA177231A704BE72C5B0E8918566EA66 -31C8FD37DB9B56E708B03D1F01848B068C6DA66F36FB5D82C008C6040FA3E133 -450F1B421BB05C8609854884559C323319619E8B06B001EA2DCBB74A23AA3BE2 -FC02FD48DB92D4DCE6F11679D38354CF750CFC7F584A520EB90BDE80E241F2BD -DF21016B00FC54F9FE3BC8B039911BB216E9162FAD2FD14D990AB96E951B49BE -F5B6F88F75D391A4B1EB336F9E201239FB6B1377DB8CFA7B84736216E5AFFFD7 diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/lib/security/blacklisted.certs.pem --- a/jdk/src/share/lib/security/blacklisted.certs.pem Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,721 +0,0 @@ -// Subject: CN=Digisign Server ID (Enrich), -// OU=457608-K, -// O=Digicert Sdn. Bhd., -// C=MY -// Issuer: CN=GTE CyberTrust Global Root, -// OU=GTE CyberTrust Solutions, Inc., -// O=GTE Corporation, -// C=US -// Serial: 120001705 (07:27:14:a9) ------BEGIN CERTIFICATE----- -MIIDyzCCAzSgAwIBAgIEBycUqTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MB4XDTA3MDcxNzE1MTc0OFoXDTEyMDcxNzE1MTY1NFowYzELMAkG -A1UEBhMCTVkxGzAZBgNVBAoTEkRpZ2ljZXJ0IFNkbi4gQmhkLjERMA8GA1UECxMI -NDU3NjA4LUsxJDAiBgNVBAMTG0RpZ2lzaWduIFNlcnZlciBJRCAoRW5yaWNoKTCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArahkS02Hx4RZufuQRqCmicDx/tXa -VII3DZkrRSYK6Fawf8qo9I5HhAGCKeOzarWR8/uVhbxyqGToCkCcxfRxrnt7agfq -kBRPjYmvlKuyBtQCanuYH1m5Os1U+iDfsioK6bjdaZDAKdNO0JftZszFGUkGf/pe -LHx7hRsyQt97lSUCAwEAAaOCAXgwggF0MBIGA1UdEwEB/wQIMAYBAf8CAQAwXAYD -VR0gBFUwUzBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcCARYtaHR0cDovL2N5YmVy -dHJ1c3Qub21uaXJvb3QuY29tL3JlcG9zaXRvcnkuY2ZtMAcGBWCDSgEBMA4GA1Ud -DwEB/wQEAwIB5jCBiQYDVR0jBIGBMH+heaR3MHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0 -LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFMYWk04WF+wW -royUdvOGbcV0boR3MA0GCSqGSIb3DQEBBQUAA4GBAHYAe6Z4K2Ydjl42xqSOBfIj -knyTZ9P0wAp9iy3Z6tVvGvPhSilaIoRNUC9LDPL/hcJ7VdREgr5trGeOvLQfkpxR -gBoU9m6rYYgLrRx/90tQUdZlG6ZHcRVesHHzNRTyN71jyNXwk1o0X9g96F33xR7A -5c8fhiSpPAdmzcHSNmNZ ------END CERTIFICATE----- - -// Subject: CN=Digisign Server ID - (Enrich), -// OU=457608-K, -// O=Digicert Sdn. Bhd., -// C=MY -// Issuer: CN=Entrust.net Certification Authority (2048) -// OU=(c) 1999 Entrust.net Limited, -// OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), -// O=Entrust.net -// Serial: 1184644297 (4c:0e:63:6a) ------BEGIN CERTIFICATE----- -MIIEzjCCA7agAwIBAgIETA5jajANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0xMDA3MTYxNzIzMzdaFw0xNTA3 -MTYxNzUzMzdaMGUxCzAJBgNVBAYTAk1ZMRswGQYDVQQKExJEaWdpY2VydCBTZG4u -IEJoZC4xETAPBgNVBAsTCDQ1NzYwOC1LMSYwJAYDVQQDEx1EaWdpc2lnbiBTZXJ2 -ZXIgSUQgLSAoRW5yaWNoKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AMWJ5PQNBkCSWccaszXRDkwqM/n4r8qef+65p21g9FTob9Wb8xtjMQRoctE0Foy0 -FyyX3nPF2JAVoBor9cuzSIZE8B2ITM5BQhrv9Qze/kDaOSD3BlU6ap1GwdJvpbLI -Vz4po5zg6YV3ZuiYpyR+vsBZIOVEb7ZX2L7OwmV3WMZhQdF0BMh/SULFcqlyFu6M -3RJdtErU0a9Qt9iqdXZorT5dqjBtYairEFs+E78z4K9EnTgiW+9ML6ZxJhUmyiiM -2fqOjqmiFDXimySItPR/hZ2DTwehthSQNsQ0HI0mYW0Tb3i+6I8nx0uElqOGaAwj -vgvsjJQAqQSKE5D334VsDLECAwEAAaOCATQwggEwMA4GA1UdDwEB/wQEAwIBBjAS -BgNVHRMBAf8ECDAGAQH/AgEAMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcD -AgYIKwYBBQUHAwQwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8v -b2NzcC5lbnRydXN0Lm5ldDBEBgNVHSAEPTA7MDkGBWCDSgEBMDAwLgYIKwYBBQUH -AgEWImh0dHA6Ly93d3cuZGlnaWNlcnQuY29tLm15L2Nwcy5odG0wMgYDVR0fBCsw -KTAnoCWgI4YhaHR0cDovL2NybC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMBEGA1Ud -DgQKBAhMTswlKAMpgTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDAN -BgkqhkiG9w0BAQUFAAOCAQEAl0zvSjpJrHL8MCBrtClbp8WVBJD5MtXChWreA6E3 -+YkAsFqsVX7bQzX/yQH4Ub7MJsrIaqTEVD4mHucMo82XZ5TdpkLrXM2POXlrM3kh -Bnn6gkQVmczBtznTRmJ8snDrb84gqj4Zt+l0gpy0pUtNYQA35IfS8hQ6ZHy4qXth -4JMi59WfPkfmNnagU9gAAzoPtTP+lsrT0oI6Lt3XSOHkp2nMHOmZSufKcEXXCwcO -mnUb0C+Sb/akB8O9HEumhLZ9qJqp0qcp8QtXaR6XVybsK0Os1EWDBQDp4/BGQAf6 -6rFRc5Mcpd1TETfIKqcVJx20qsx/qjEw/LhFn0gJ7RDixQ== ------END CERTIFICATE----- - -// Subject: CN=Java Media APIs, -// OU=Java Signed Extensions, -// OU=Corporate Object Signing, -// O=Sun Microsystems Inc -// Issuer: CN=Object Signing CA, -// OU=Class 2 OnSite Subscriber CA, -// OU=VeriSign Trust Network, -// O=Sun Microsystems Inc -// Serial: 6a:8b:99:91:37:59:4f:89:53:e2:97:18:9f:19:1e:4e ------BEGIN CERTIFICATE----- -MIIFdzCCBF+gAwIBAgIQaouZkTdZT4lT4pcYnxkeTjANBgkqhkiG9w0BAQUFADCB -gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj -cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDUxMjAw -MDAwMFoXDTEyMDUxMTIzNTk1OVowfTEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt -cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE -CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEYMBYGA1UEAxQPSmF2YSBNZWRpYSBB -UElzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl5blzoKTVE8y4Hpz -q6E15RZz1bF5HnYEyYqgHkZXnAKedmYCoMzm1XK8s+gQWShLEvGEAvs5yqarx9gE -nnC21N28aEZgIJMa2/arKxCUkS4pxdGPYGexL9UzSRkUpoBShCZKEGdmX7gfJE2K -/sd9MFvGV5/yZtWXrADzvm0Kd/9mg1KRv1gfrZIq0TJbupoXPYYqb73AkI9eT2ZD -q9MdwD4E5+oojsDFXt8GU/D00fUhtXpYwuplU7D667WHYdJhIah0ST6JywyqcLXG -XSuFTXOgITT2idSHluZVmx3dqJ72u9kPkO4JdJTMDfaK8zgNLaRkiU8Qcj+qhLYH -ytaqcwIDAQABo4IB6jCCAeYwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCB4AwfwYD -VR0fBHgwdjB0oHKgcIZuaHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vU3Vu -TWljcm9zeXN0ZW1zSW5jQ29ycG9yYXRlT2JqZWN0U2lnbmluZ0phdmFTaWduZWRF -eHRlbnNpb25zQ2xhc3NCL0xhdGVzdENSTC5jcmwwHwYDVR0jBBgwFoAUs0crgn5T -tHPKuLsZt76BTQeVx+0wHQYDVR0OBBYEFKS32mVx0gNWTeS4ProHEaeSpvvIMDsG -CCsGAQUFBwEBBC8wLTArBggrBgEFBQcwAYYfaHR0cDovL29uc2l0ZS1vY3NwLnZl -cmlzaWduLmNvbTCBtQYDVR0gBIGtMIGqMDkGC2CGSAGG+EUBBxcCMCowKAYIKwYB -BQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwbQYLYIZIAYb3AIN9 -nD8wXjAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuc3VuLmNvbS9wa2kvY3BzMDMG -CCsGAQUFBwICMCcaJVZhbGlkYXRlZCBGb3IgU3VuIEJ1c2luZXNzIE9wZXJhdGlv -bnMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcNAQEFBQADggEBAAe6BO4W -3TSNWfezyelJs6kE3HfulT6Bdyz4UUoh9ykXcV8nRwT+kh25I5MdyG2GfkJoADPR -VhC5DYo13UFpIsTNVjq+hGYe2hML93bN7ad9SxCCyjHUo3yMz2qgBbHZI3VA9ZHA -aWM4Tx0saMwbcnVvlbuGh+PXvStfypJqYT6lzcdFfjNVX4FI/QQNGhBswMY51tC8 -GTBCL2qhJon0gSCU4zaawDOf7+XxJWirLamYL1Aal1/h2z2sFrvA/1ftxtU3kZ6I -7De8DyoHeZg7pYGdrj7g+lPhCga/WvEhN152I+aP08YbFcJHYmK05ngl/Ye4c6Bd -cdrdfbw6QzEUIYY= ------END CERTIFICATE----- - -// Subject: CN=JavaFX 1.0 Runtime, -// OU=Java Signed Extensions, -// OU=Corporate Object Signing, -// O=Sun Microsystems Inc -// Issuer: CN=Object Signing CA, -// OU=Class 2 OnSite Subscriber CA, -// OU=VeriSign Trust Network, -// O=Sun Microsystems Inc -// Serial: 55:c0:e6:44:59:59:79:9e:d9:26:f1:b0:4a:1e:f0:27 ------BEGIN CERTIFICATE----- -MIIFezCCBGOgAwIBAgIQVcDmRFlZeZ7ZJvGwSh7wJzANBgkqhkiG9w0BAQUFADCB -gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj -cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA4MTAwOTAw -MDAwMFoXDTExMTAwOTIzNTk1OVowgYAxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl -bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxHzAdBgNV -BAsUFkphdmEgU2lnbmVkIEV4dGVuc2lvbnMxGzAZBgNVBAMUEkphdmFGWCAxLjAg -UnVudGltZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+WDc6+bu+4 -tmAcS/lBtUc02WOt9QZpVsXg9cG2pu/8bUtmDELa8iiYBVFpIs8DU58HLrGQtCUY -SIAGOVPsOJoN29UKCDWfY9j5JeVhfhMGqk9DwrWhzgsjy4cpZ1pIp+k/fJ8zT8Ul -aYLpow1vg3UNddsmwz02tN7cOrMw9WYIG4CRYnY1OrtJSfe2pYzheC4zyvR+aiVl -nang2OtqikSQsNFOFHsLOJFxngy9LrO8evDSu25VTKI6zlWU6/bMeqtztJPN0VOn -NyUrJZvkxZ207Jg0T693BGSxNC1n+ihztXogql8950M/pEuUbDjylv5FFvlp6DSB -dDT2MkutmyMCAwEAAaOCAeowggHmMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeA -MH8GA1UdHwR4MHYwdKByoHCGbmh0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29t -L1N1bk1pY3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdKYXZhU2ln -bmVkRXh0ZW5zaW9uc0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaAFLNH -K4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBTjgufVi3XJ3gx1ewsA6Rr7BR4Z -zjA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUtb2Nz -cC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAqMCgG -CCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CGSAGG -9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtpL2Nw -czAzBggrBgEFBQcCAjAnGiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBPcGVy -YXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IBAQAB -YVJTTVe7rzyTO4jc3zajErOT/COkdQTfNo0eIX1QbNynFieJvwY/jRzUZwjktIFR -2p4JtbpHGAtKtjOAOTieQ8xdDOoC1djzpE7/AbMvuvlTavtUKT+F7tPdhfXgWXJV -6Wbt8jryKyk3zZGiEhauIwZUkfjRkEtffEmZWLUd8c8rURJjfC/XHH2oyurscoxc -CjX29c9ynxSiS/VvQp1an0HvErGh69N48wj7cj8mtZ1yHzd2XCzSSR1OfTPfk0Pt -yg51p7yJaFiH21PTZegEL6zyVNOYBTKwwIi2OzpwYalD3uvK6e3OKDrfFCOxu17u -4PveESbrdyrmvLe7IVez ------END CERTIFICATE----- - -// Subject: CN=JavaFX Runtime, -// OU=Java Signed Extensions, -// OU=Corporate Object Signing, -// O=Sun Microsystems Inc -// Issuer: CN=Object Signing CA, -// OU=Class 2 OnSite Subscriber CA, -// OU=VeriSign Trust Network, -// O=Sun Microsystems Inc -// Serial: 47:f4:55:f1:da:4a:5e:f9:e3:f7:a8:03:62:17:c0:ff ------BEGIN CERTIFICATE----- -MIIFdjCCBF6gAwIBAgIQR/RV8dpKXvnj96gDYhfA/zANBgkqhkiG9w0BAQUFADCB -gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj -cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDEyOTAw -MDAwMFoXDTEyMDEyOTIzNTk1OVowfDEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt -cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE -CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEXMBUGA1UEAxQOSmF2YUZYIFJ1bnRp -bWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIzd0fAk8mI9ONc6RJ -aGieioK2FLdXEwj8zL3vdGDVmBwyR1zwYkaOIFFgF9IW/8qc4iAYA5sGUY+0g8q3 -5DuYAxfTzBB5KdaYvbuq6GGnoHIWmTirXY+1friFp8lyXSvtuEaGB1VHaBoZchEg -k+UgeVDA43dHwcT1Ov3DePczJRUes8T/QHzLX+BxUDG43vjyncCEO/AjqLZxXEz2 -xrNbKLcH3lGMJK7hdbfssUfF5BjC38Hn71HauYlA43b2no+2y0Sjulwzez2YPbDC -0GLR3TnKtA8dqOrnl5t3DniDbfOBNtBE3VOydJO0XW57Ng1HRXD023nm9ECPY2xp -0N/pAgMBAAGjggHqMIIB5jAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDB/BgNV -HR8EeDB2MHSgcqBwhm5odHRwOi8vb25zaXRlY3JsLnZlcmlzaWduLmNvbS9TdW5N -aWNyb3N5c3RlbXNJbmNDb3Jwb3JhdGVPYmplY3RTaWduaW5nSmF2YVNpZ25lZEV4 -dGVuc2lvbnNDbGFzc0IvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBSzRyuCflO0 -c8q4uxm3voFNB5XH7TAdBgNVHQ4EFgQUvOdd0cKPj+Yik/iOBwTdphh5A+gwOwYI -KwYBBQUHAQEELzAtMCsGCCsGAQUFBzABhh9odHRwOi8vb25zaXRlLW9jc3AudmVy -aXNpZ24uY29tMIG1BgNVHSAEga0wgaowOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEF -BQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTBtBgtghkgBhvcAg32c -PzBeMCcGCCsGAQUFBwIBFhtodHRwczovL3d3dy5zdW4uY29tL3BraS9jcHMwMwYI -KwYBBQUHAgIwJxolVmFsaWRhdGVkIEZvciBTdW4gQnVzaW5lc3MgT3BlcmF0aW9u -czATBgNVHSUEDDAKBggrBgEFBQcDAzANBgkqhkiG9w0BAQUFAAOCAQEAbGcf2NjL -AI93HG6ny2BbepaZA1a8xa/R6uUc7xV+Qw6MgLwFD4Q4i6LWUztQDvg9l68MM2/i -Y9LEi1KM4lcNbK5+D+t9x98wXBiuojXhVdp5ZmC03EyEBbriopdBsmXVLDSu/Y3+ -zowOO5xwpMK3dbgsSDs2Vt0UosD3FTcRaD3GNfOhXMp+o1grHNiXF9YgkmdQbPPZ -DQ2KBhFPCRJXBGvyKOqno/DTg0sQ3crGH/C4/4t7mnQXWldZotmJUZ0ONc9oD+Q1 -JAaguUKqIwn9yZ093ie+JWHbYNid9IIIPXYgtRxmf9a376WBhqhu56uJftBJ7x9g -eQ7Lot6CSWCiFw== ------END CERTIFICATE----- - -// Subject: CN=Solaris INTERNAL DEVELOPMENT USE ONLY, -// OU=Solaris Cryptographic Framework, -// OU=Corporate Object Signing, -// O=Sun Microsystems Inc -// Issuer: CN=Object Signing CA, -// OU=Class 2 OnSite Subscriber CA, -// OU=VeriSign Trust Network, -// O=Sun Microsystems Inc -// Serial: 77:29:77:52:6a:19:7b:9a:a6:a2:c7:99:a0:e1:cd:8c ------BEGIN CERTIFICATE----- -MIIFHjCCBAagAwIBAgIQdyl3UmoZe5qmoseZoOHNjDANBgkqhkiG9w0BAQUFADCB -gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj -cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA3MDEwNDAw -MDAwMFoXDTEwMDEwMzIzNTk1OVowgZwxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl -bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxKDAmBgNV -BAsUH1NvbGFyaXMgQ3J5cHRvZ3JhcGhpYyBGcmFtZXdvcmsxLjAsBgNVBAMUJVNv -bGFyaXMgSU5URVJOQUwgREVWRUxPUE1FTlQgVVNFIE9OTFkwgZ8wDQYJKoZIhvcN -AQEBBQADgY0AMIGJAoGBALbNU4hf3mD5ArDI9pjgioAyvV3bjMPRQdCZniIeGJBp -odFlSEH+Mh64W1DsY8coeZ7FvvGJkx9IpTMJW9k8w1oJK9UNqHyAQfaYjQyXi3xQ -LJp62EvYdGfDlwOZejEcR/MbzZG+GOPMMvQj5+xyFDvLXNGfQNTnxw2qnBgCJXjj -AgMBAAGjggH1MIIB8TAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDCBiQYDVR0f -BIGBMH8wfaB7oHmGd2h0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29tL1N1bk1p -Y3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdTb2xhcmlzQ3J5cHRv -Z3JhcGhpY0ZyYW1ld29ya0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaA -FLNHK4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBRpfiGYkehTnsIzuN2H6AFb -VCZG8jA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUt -b2NzcC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAq -MCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CG -SAGG9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtp -L2NwczAzBggrBgEFBQcCAjAnFiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBP -cGVyYXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IB -AQCG5soy3LFHTFbA8/5SzDRhQoJkHUnOP0t3b6nvX6vZYRp649fje7TQOPRm1pFd -CZ17J+tggdZwgzTqY4aYpJ00jZaK6pV37q/vgFC/ia6jDs8Q+ly9cEcadBZ5loYg -cmxp9p57W2MNWx8VA8oFdNtKfF0jUNXbLNtvwGHmgR6YcwLrGN1b6/9Lt9bO3ODl -FO+ZDwkfQz5ClUVrTx2dGBvKRYFqSG5S8JAfsgYhPvcacUQkA7ExyKvfRXLWVrce -ZiPpcElbx+819H2sAPvVvparVeAruZGMAtejHZp9NFoowKen5drJp9VxePS4eM49 -3DepB6lKRrNRw66LNQol4ZBz ------END CERTIFICATE----- - -// Subject: EMAILADDRESS=info@diginotar.nl, CN=DigiNotar Cyber CA, -// O=DigiNotar, C=NL -// Issuer: CN=GTE CyberTrust Global Root, -// OU=GTE CyberTrust Solutions, Inc., -// O=GTE Corporation, -// C=US -// Serial: 120000525 (07:27:10:0D) ------BEGIN CERTIFICATE----- -MIIFWjCCBMOgAwIBAgIEBycQDTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MB4XDTA2MTAwNDEwNTQxMVoXDTExMTAwNDEwNTMxMVowYDELMAkG -A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy -IEN5YmVyIENBMSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANLOFQotqF6EZ639vu9Gx8i5z3P8 -9DS5+SxD52ATPXrjss87Z2yQrcC5P4RS8DVC3HTcKDu9UrSnrHJFF8bwieu0qiXy -XUte0dmHutZ9fPXOMp8QM8WxSrtekTHC0OlBwpFkfglBO9uLCDdqqspS3rU5HsCI -A6U/i5kTYUO1m4Kz7iBvz6FEouova0CfjytXraFTwoUiaZ2gP1HfC0GRDaXhqKpc -SQhdvd5wQbEPyWNr0380dAIvNFp4dRxoeoFnivPaQPBgY/SSINcDpj2jHmfEhBtB -pcmM5r3qSLYFFgizNxJa92E89zhvLpfgb1Y4VNMota0Ubi5LZLUnZbd1JQm2Bz2V -VgIKgmCyc0XgMyZRdJq51FAc9k1bW1JSE1qmf6cO4ehBVGeYjIfVydNsy9NUkgYJ -NEH3gW8/nsl8dVWw58Gzd+jDxAA1lUBwEEoF3iW7n1mlZLxHYL9g43aLE1Xd4XR6 -uc8kpmp/3mQiRFhogmoQ+T3lPhu5vfwi9GAEibtVbShV+t6OjRshFNc3izR7Tfay -shDPM7F9HGKZSMsrbHaWVb8ZDR0fu2WqG46ZtcYokOWCLXhQIJr9eS8kf/CJKWn0 -fc1zvrPtTsHR7VJej/e4142HrbLZG1ES/1az4a80fVykeIgQnp0DxqWqoiRR90kU -xbHuWUOV36toKDA/AgMBAAGjggGGMIIBgjASBgNVHRMBAf8ECDAGAQH/AgEBMFMG -A1UdIARMMEowSAYJKwYBBAGxPgEAMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cu -cHVibGljLXRydXN0LmNvbS9DUFMvT21uaVJvb3QuaHRtbDAOBgNVHQ8BAf8EBAMC -AQYwgaAGA1UdIwSBmDCBlYAUpgwdn2H/Bxe1vzhG20Mw1Y6wUgaheaR3MHUxCzAJ -BgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdU -RSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVy -VHJ1c3QgR2xvYmFsIFJvb3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93 -d3cucHVibGljLXRydXN0LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYD -VR0OBBYEFKv5aN/PSjfXe0WMX3LeQETDZbvCMA0GCSqGSIb3DQEBBQUAA4GBAI9o -a6VbB7pEZg4cqFwwezPkCiYE/O+eGjjWLqEf0JlHwnVkJP2eOyh2uSYoYZEMbSz4 -BJ98UAHV42mv7xXSRZskCSpmBU8lgcpdvqrBWSeuM46C9990sFWzjvjnN8huqlZE -9r1TgSOWPbT6MopTZkQloiXGpjwljPDgKAYityZB ------END CERTIFICATE----- - -// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL -// Issuer: CN=GTE CyberTrust Global Root, -// OU=GTE CyberTrust Solutions, Inc., -// O=GTE Corporation, -// C=US -// Serial: 120000505 (07:27:0F:F9) ------BEGIN CERTIFICATE----- -MIIFODCCBKGgAwIBAgIEBycP+TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MB4XDTA2MDkyMDA5NDUzMloXDTEzMDkyMDA5NDQwNlowPjELMAkG -A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy -IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o -XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S -tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7 -24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp -naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj -9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu -LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU -Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk -vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6 -3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt -eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4 -iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB -/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC -ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s -MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV -jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv -bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD -VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6 -oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw -MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI -hvcNAQEFBQADgYEACcpiD427SuDUejUrBi3RKGG2rAH7g0m8rtQvLYauGYOl1h0T -4he+/jJ06XoUOMqUXvcpAWlxG5Ea/aO7qh3Ke+IW/aGjDvMMX7LhIDGUK16Sdu36 -6bUjpr8KOwOpb1JgVM1f6bcvfKIn/UGDdbYN+3gm87FF6TKVKho1IZXFonU= ------END CERTIFICATE----- - -// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL -// Issuer: CN=GTE CyberTrust Global Root, -// OU=GTE CyberTrust Solutions, Inc., -// O=GTE Corporation, -// C=US -// Serial: 120000515 (07:27:10:03) ------BEGIN CERTIFICATE----- -MIIFODCCBKGgAwIBAgIEBycQAzANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MB4XDTA2MDkyNzEwNTMzMloXDTExMDkyNzEwNTIzMFowPjELMAkG -A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy -IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o -XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S -tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7 -24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp -naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj -9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu -LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU -Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk -vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6 -3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt -eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4 -iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB -/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC -ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s -MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV -jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv -bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD -VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6 -oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw -MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI -hvcNAQEFBQADgYEAWcyGZhizJlRP1jjNupZey+yZG6oMDW4Z11boriMHbYPCndBE -bVh07zmPbZsihOw9w/vm5KbVX5CgxUv4Rhzh/20Faixf3P3bpWg0qgzHVVusNVR/ -P50aKkpdK3hp+QLl56e+lWOddSAINIpmcuyDI1hyuzB+GJEASm9tNU/6rs8= ------END CERTIFICATE----- - -// Subject: EMAILADDRESS=info@diginotar.nl, -// CN=DigiNotar Root CA, -// O=DigiNotar, C=NL -// Issuer: CN=Entrust.net Secure Server Certification Authority -// OU=(c) 1999 Entrust.net Limited, -// OU=www.entrust.net/CPS incorp. by ref. (limits liab.), -// O=Entrust.net, -// C=US, -// Serial: 1184644297 (46:9C:3C:C9) ------BEGIN CERTIFICATE----- -MIIFSDCCBLGgAwIBAgIERpw8yTANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA0 -MjYwNTAwMDBaFw0xMzA4MTQyMDEyMzZaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK -EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI -hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt -OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx -hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7 -gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D -IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T -BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs -Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8 -5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf -DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX -9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e -7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj -ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB -BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF -BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD -VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy -bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G -A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob -BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAI979rBep8tu3TeLunapgsZ0jtXp -GDFjKWSk87dj1jCyYi+q/GyDyZ6ZQZNRP0sF+6twscq05lClWNy3TROMp7QeuoLO -G7Utw3OJaswUtp4YglANMRTHEe3g9ltifUXRH5tSuy7u6yi4LD4WTm5ULP6r/g6l -0CnjXYb0+b1Fmz6U ------END CERTIFICATE----- - -// Subject: EMAILADDRESS=info@diginotar.nl, -// CN=DigiNotar Root CA, -// O=DigiNotar, C=NL -// Issuer: CN=Entrust.net Secure Server Certification Authority -// OU=(c) 1999 Entrust.net Limited, -// OU=www.entrust.net/CPS incorp. by ref. (limits liab.), -// O=Entrust.net, -// C=US, -// Serial: 1184640175 (46:9C:2C:AF) ------BEGIN CERTIFICATE----- -MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3 -MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK -EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI -hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt -OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx -hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7 -gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D -IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T -BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs -Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8 -5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf -DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX -9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e -7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj -ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB -BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF -BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD -VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy -bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G -A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob -BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh -xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd -ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP -ZFdYf+hthc3m6IcJ ------END CERTIFICATE----- - -// Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2, -// O=DigiNotar B.V., -// C=NL -// Issuer: CN=Staat der Nederlanden Organisatie CA - G2, -// O=Staat der Nederlanden, -// C=NL -// Serial: 20001983 (01:31:34:bf) ------BEGIN CERTIFICATE----- -MIIGnDCCBISgAwIBAgIEATE0vzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTIwMAYDVQQDDClTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gT3JnYW5pc2F0aWUgQ0EgLSBHMjAeFw0xMDA1MTIw -ODUxMzhaFw0yMDAzMjMwOTUwMDRaMFoxCzAJBgNVBAYTAk5MMRcwFQYDVQQKDA5E -aWdpTm90YXIgQi5WLjEyMDAGA1UEAwwpRGlnaU5vdGFyIFBLSW92ZXJoZWlkIENB -IE9yZ2FuaXNhdGllIC0gRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCxExkPJ+Zs1FWGS9DsiYpFkXisR71HK+T8RetPtCZzWzfTw3/2497Xo/gtaMUI -PkuU1uSHJTZrhLUYdPMoWHMvm2rPvAQe9t7dr/xLqvXbZmIlASWC3vKXWhBu3V2p -IrEEqSNzOvhxrR3PhETrR9Gvbch8KKvH8jd6dF9fxQIUiqNa4xtsAeNdjtlo1vQJ -GzLckbUs9SDrjANtJkm4k8SFXdjSm69WaswFM8ygQp40VUSca6DUEtArVM23iQ3l -9uvo+4UBM096a/GdcjOWDveyhKWlJ8Qn8VFzKXe6Z27+TNy04qGhgS85SY1DOBPO -0KVcwoc6AGdlQiPxNlkKHaNRyLyjlCox3+M88p0aPASw77EKMBNzttfzo0wBdRSF -eMDXijlYhVD6LubFvs+LP6+PNtQlCS3SD6xyk/K/i9RQs/kVUJuZ9RTZ+4uRozIm -JqD43ztggYaDeVsr6xM9KTrBbd29no6H1kquNJcF7hSm9tw4fkrpJFQHPZdoN0Zr -DceoIa8TVOQJavFNRgrJXfubT73e+7dUy7g4nKc5+2otwHuNq6WnV+xKkoozxeEg -XHPYkJIrgNUPhhhpfDlPhIa890xb89W0yqDC8DciynlSH1PmqvOQsDvd8ij9rOvF -BiSgydQvD1j9tZ7sD8+yWdCiBHo4aq5y+73wJWKUCacFCwIDAQABo4IBYTCCAV0w -SAYDVR0gBEEwPzA9BgRVHSAAMDUwMwYIKwYBBQUHAgEWJ2h0dHA6Ly93d3cuZGln -aW5vdGFyLm5sL2Nwcy9wa2lvdmVyaGVpZDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjCBhQYDVR0jBH4wfIAUORCLSZJc22ESIM1JnRqO2pxnQLmhXqRc -MFoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4x -KzApBgNVBAMMIlN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENBIC0gRzKCBACY -lvQwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5wa2lvdmVyaGVpZC5ubC9E -b21PcmdhbmlzYXRpZUxhdGVzdENSTC1HMi5jcmwwHQYDVR0OBBYEFLxdlDvZq3sD -JXNhwtst7vyrj2WhMA0GCSqGSIb3DQEBCwUAA4ICAQCP/C1Mt9kt1R+978v0t2gX -dZ1O1ffdnPEqJu2forYcA9VTs+wIzzTi48P0tRYvyMO+19NzqwA2+RpKftZj6V5G -uqW2jhW3oyrYQx3vXcgfgYWzi/f/PPTZ9EYIP5y8HaDZqEzNJVJOCrEg9x/pQ9lU -RoETmsBedGwqmDLq/He7DaWiMZgifnx859qkrey3LhoZcfhIUNpDjyyE3cFAJ+O1 -8BVOltT4XOOGKUYr1zsH6zh/yIZXl9PvKjPEF1DVZGlrK2tFXl0vF8paTs/D1zk8 -9TufRrmb5w5Jl53W1eMbD+qPAU6aE5RZCgIHSEsaYKt/T+0L2FUNaG9VnGllFULs -wNzdbKzDFs4LHVabpMTE0i7gD+JEJytQaaTcYuiKISlCbMwAOpZ2m+9AwKRed4Qy -bCYqOWauXeO5ubIsaB8empADOfCqs6TMSYsYNOk3yXspx4R8b0QVL+xhWQTJRcui -1lKifH8pktZKxYtCqNT+6tjHhyMY5J16fXNAUpigrm7jBT8FD+Clxm1N7YM3iJzH -89xCmmq21yFJNnfy7xhPxXDZnunetyuL9Lx+KN8NQMmFXK6dxTH/0FwOtah+8Okv -uq+IruW10Vilr5xxpykBkINpN4IFuvwJwQhujHg7wzMCgD9EhQgd31VWCK0shS1d -sQPhrqp0xaTzTro3mHuCuQ== ------END CERTIFICATE----- - -// Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven, -// O=DigiNotar B.V., -// C=NL -// Issuer: CN=Staat der Nederlanden Overheid CA -// O=Staat der Nederlanden, -// C=NL -// Serial: 20015536 (01:31:69:b0) ------BEGIN CERTIFICATE----- -MIIEiDCCA3CgAwIBAgIEATFpsDANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO -TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDcwNzA1MDg0MjA3WhcN -MTUwNzI3MDgzOTQ2WjBfMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy -IEIuVi4xNzA1BgNVBAMTLkRpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp -ZCBlbiBCZWRyaWp2ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc -vdKnTmoKuzuiheF/AK2+tDBomAfNoHrElM9x+Yo35FPrV3bMi+Zs/u6HVcg+uwQ5 -AKeAeKxbT370vbhUuHE7BzFJOZNUfCA7eSuPu2GQfbGs5h+QLp1FAalkLU3DL7nn -UNVOKlyrdnY3Rtd57EKZ96LspIlw3Dgrh6aqJOadkiQbvvb91C8ZF3rmMgeUVAVT -Q+lsvK9Hy7zL/b07RBKB8WtLu+20z6slTxjSzAL8o0+1QjPLWc0J3NNQ/aB2jKx+ -ZopC9q0ckvO2+xRG603XLzDgbe5bNr5EdLcgBVeFTegAGaL2DOauocBC36esgl3H -aLcY5olLmmv6znn58yynAgMBAAGjggFQMIIBTDBIBgNVHSAEQTA/MD0GBFUdIAAw -NTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5kaWdpbm90YXIubmwvY3BzL3BraW92 -ZXJoZWlkMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMIGABgNVHSME -eTB3gBQLhtYPd6NosftkCcOIblwEHFfpPaFZpFcwVTELMAkGA1UEBhMCTkwxHjAc -BgNVBAoTFVN0YWF0IGRlciBOZWRlcmxhbmRlbjEmMCQGA1UEAxMdU3RhYXQgZGVy -IE5lZGVybGFuZGVuIFJvb3QgQ0GCBACYmnkwPQYDVR0fBDYwNDAyoDCgLoYsaHR0 -cDovL2NybC5wa2lvdmVyaGVpZC5ubC9Eb21PdkxhdGVzdENSTC5jcmwwHQYDVR0O -BBYEFEwIyY128ZjHPt881y91DbF2eZfMMA0GCSqGSIb3DQEBBQUAA4IBAQAMlIca -v03jheLu19hjeQ5Q38aEW9K72fUxCho1l3TfFPoqDz7toOMI9tVOW6+mriXiRWsi -D7dUKH6S3o0UbNEc5W50BJy37zRERd/Jgx0ZH8Apad+J1T/CsFNt5U4X5HNhIxMm -cUP9TFnLw98iqiEr2b+VERqKpOKrp11Lbyn1UtHk0hWxi/7wA8+nfemZhzizDXMU -5HIs4c71rQZIZPrTKbmi2Lv01QulQERDjqC/zlqlUkxk0xcxYczopIro5Ij76eUv -BjMzm5RmZrGrUDqhCYF0U1onuabSJc/Tw6f/ltAv6uAejVLpGBwgCkegllYOQJBR -RKwa/fHuhR/3Qlpl ------END CERTIFICATE----- - -// Subject: CN=DigiNotar PKIoverheid CA Overheid -// O=DigiNotar B.V., -// C=NL -// Issuer: CN=Staat der Nederlanden Overheid CA -// O=Staat der Nederlanden, -// C=NL -// Serial: 20006006 (01:31:44:76) ------BEGIN CERTIFICATE----- -MIIEezCCA2OgAwIBAgIEATFEdjANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO -TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDQwNjI0MDgxOTMyWhcN -MTAwNjIzMDgxNzM2WjBSMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy -IEIuVi4xKjAoBgNVBAMTIURpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp -ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANSlrubta5tlOjVCi/gb -yLCvRqfBjxG8H594VcKHu0WAYc99SPZF9cycj5mw2GyfQvy/WIrGrL4iyNq1gSqR -0QA/mTXKZIaPqzpDhdm+VvrKkmjrbZfaQxgMSs3ChtBsjcP9Lc0X1zXZ4Q8nBe3k -BTp+zehINfmbjoEgXLxsMR5RQ6GxzKjuC04PQpbJQgTIakglKaqYcDDZbEscWgPV -Hgj/2aoHlj6leW/ThHZ+O41jUguEmBLZA3mu3HrCfrHntb5dPt0ihzSx7GtD/SaX -5HBLxnP189YuqMk5iRA95CtiSdKauvon/xRKRLNgG6XAz0ctSoY7xLDdiBVU5kJd -FScCAwEAAaOCAVAwggFMMEgGA1UdIARBMD8wPQYEVR0gADA1MDMGCCsGAQUFBwIB -FidodHRwOi8vd3d3LmRpZ2lub3Rhci5ubC9jcHMvcGtpb3ZlcmhlaWQwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgYAGA1UdIwR5MHeAFAuG1g93o2ix -+2QJw4huXAQcV+k9oVmkVzBVMQswCQYDVQQGEwJOTDEeMBwGA1UEChMVU3RhYXQg -ZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQYIEAJiaeTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnBraW92 -ZXJoZWlkLm5sL0RvbU92TGF0ZXN0Q1JMLmNybDAdBgNVHQ4EFgQUvRaYQh2+kdE9 -wpcl4CjXWOC1f+IwDQYJKoZIhvcNAQEFBQADggEBAGhQsCWLiaN2EOhPAW+JQP6o -XBOrLv5w6joahzBFVn1BiefzmlMKjibqKYxURRvMAsMkh82/MfL8V0w6ugxl81lu -i42dcxl9cKSVXKMw4bbBzJ2VQI5HTIABwefeNuy/eX6idVwYdt3ajAH7fUA8Q9Cq -vr6H8B+8mwoEqTVTEVlCSsC/EXsokYEUr06PPzRudKjDmijgj7zFaIioZNc8hk7g -ufEgrs/tmcNGylrwRHgCXjCRBt2NHlZ08l7A1AGU8HcHlSbG9Un/2q9kVHUkps0D -gtUaEK+x6jpAu/R8Ojezu/+ZEcwwjI/KOhG+84+ejFmtyEkrUdsAdEdLf/2dKsw= ------END CERTIFICATE----- - -// Subject: EMAILADDRESS=info@diginotar.nl, -// CN=DigiNotar Services 1024 CA -// O=DigiNotar, C=NL -// Issuer: CN=Entrust.net Secure Server Certification Authority, -// OU=(c) 1999 Entrust.net Limited, -// OU=www.entrust.net/CPS incorp. by ref. (limits liab.), -// O=Entrust.net, -// C=US -// Serial: 1184640176 (46:9c:2c:b0) ------BEGIN CERTIFICATE----- -MIIDzTCCAzagAwIBAgIERpwssDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3 -MjYxNTU5MDBaFw0xMzA4MjYxNjI5MDBaMGgxCzAJBgNVBAYTAk5MMRIwEAYDVQQK -EwlEaWdpTm90YXIxIzAhBgNVBAMTGkRpZ2lOb3RhciBTZXJ2aWNlcyAxMDI0IENB -MSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA2ptNXTz50eKLxsYIIMXZHkjsZlhneWIrQWP0iY1o2q+4 -lDaLGSSkoJPSmQ+yrS01Tc0vauH5mxkrvAQafi09UmTN8T5nD4ku6PJPrqYIoYX+ -oakJ5sarPkP8r3oDkdqmOaZh7phPGKjTs69mgumfvN1y+QYEvRLZGCTnq5NTi1kC -AwEAAaOCASYwggEiMBIGA1UdEwEB/wQIMAYBAf8CAQAwJwYDVR0lBCAwHgYIKwYB -BQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDBDARBgNVHSAECjAIMAYGBFUdIAAwMwYI -KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5l -dDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L3NlcnZl -cjEuY3JsMB0GA1UdDgQWBBT+3JRJDG/vXH/G8RKZTxZJrfuCZTALBgNVHQ8EBAMC -AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowGQYJKoZIhvZ9B0EA -BAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEFBQADgYEAY3RqN6k/lpxmyFisCcnv -9WWUf6MCxDgxvV0jh+zUVrLJsm7kBQb87PX6iHBZ1O7m3bV6oKNgLwIMq94SXa/w -NUuqikeRGvWFLELHHe+VQ7NeuJWTpdrFKKqtci0xrZlrbP+MISevrZqRK8fdWMNu -B8WfedLHjFW/TMcnXlEWKz4= ------END CERTIFICATE----- - -// Subject: CN=Buster Paper Comercial Ltda, -// O=Buster Paper Comercial Ltda, -// L=S?o Jos? Dos Campos, -// ST=S?o Paulo, -// C=BR -// Issuer: CN=DigiCert Assured ID Code Signing CA-1, -// OU=www.digicert.com, -// O=DigiCert Inc, -// C=US -// Serial: 07:b4:4c:db:ff:fb:78:de:05:f4:26:16:72:a6:73:12 ------BEGIN CERTIFICATE----- -MIIGwzCCBaugAwIBAgIQB7RM2//7eN4F9CYWcqZzEjANBgkqhkiG9w0BAQUFADBv -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv -ZGUgU2lnbmluZyBDQS0xMB4XDTEzMDExNzAwMDAwMFoXDTE0MDEyMjEyMDAwMFow -gY4xCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMR4wHAYDVQQHDBVT -w6NvIEpvc8OpIERvcyBDYW1wb3MxJDAiBgNVBAoTG0J1c3RlciBQYXBlciBDb21l -cmNpYWwgTHRkYTEkMCIGA1UEAxMbQnVzdGVyIFBhcGVyIENvbWVyY2lhbCBMdGRh -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzO0l6jWIpEfO2oUpVHpL -HETj5lzivNb0S9jKHgGJax917czh81PnGTxwxFXd6gLJuy/XFHvmiSi8g8jzlymn -2Ji5zQ3CPaz7nomJokSUDlMVJ2qYWtctw4jrdjuI4qtn+koXXUFkWjkf8h8251I4 -tUs7S49HE2Go5owCYP3byajj7fsFAYR/Xb7TdVtndkZsUB/YgOjHovyACjouaNCi -mDiRyQ6zLLjZGiyeD65Yiseuhp5b8/BL5h1p7w76QYMYMVQNAdtDKut2R8MBpuWf -Ny7Eoi0x/gm1p9X5Rcl5aN7K0G4UtTAJKbkuUfXddsyFoM0Nx8uo8SgNQ8Y/X5Jx -BwIDAQABo4IDOTCCAzUwHwYDVR0jBBgwFoAUe2jOKarAF75JeuHlP9an90WPNTIw -HQYDVR0OBBYEFFLZ3n5nt/Eer7n1bvtOqMb1qKO5MA4GA1UdDwEB/wQEAwIHgDAT -BgNVHSUEDDAKBggrBgEFBQcDAzBzBgNVHR8EbDBqMDOgMaAvhi1odHRwOi8vY3Js -My5kaWdpY2VydC5jb20vYXNzdXJlZC1jcy0yMDExYS5jcmwwM6AxoC+GLWh0dHA6 -Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9hc3N1cmVkLWNzLTIwMTFhLmNybDCCAcQGA1Ud -IASCAbswggG3MIIBswYJYIZIAYb9bAMBMIIBpDA6BggrBgEFBQcCARYuaHR0cDov -L3d3dy5kaWdpY2VydC5jb20vc3NsLWNwcy1yZXBvc2l0b3J5Lmh0bTCCAWQGCCsG -AQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMAZQAgAG8AZgAgAHQAaABpAHMAIABD -AGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8AbgBzAHQAaQB0AHUAdABlAHMAIABh -AGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAAdABoAGUAIABEAGkAZwBpAEMAZQBy -AHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAAdABoAGUAIABSAGUAbAB5AGkAbgBn -ACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0AZQBuAHQAIAB3AGgAaQBjAGgAIABs -AGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQAeQAgAGEAbgBkACAAYQByAGUAIABp -AG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgAZQByAGUAaQBuACAAYgB5ACAAcgBl -AGYAZQByAGUAbgBjAGUALjCBggYIKwYBBQUHAQEEdjB0MCQGCCsGAQUFBzABhhho -dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTAYIKwYBBQUHMAKGQGh0dHA6Ly9jYWNl -cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENvZGVTaWduaW5nQ0Et -MS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOCAQEAPTTQvpOIikXI -hTLnNbajaFRR5GhQpTzUNgBfF9VYSlNw/wMjpGsrh5RxaJCip52jbehmTgjMRhft -jRYyml44PAVsCcR9uEoDpCZYpI1fHI1R+F8jd1C9rqprbSwwOG4xlg4SmvTHYs6e -gBItQ/1p9XY+Sf4Wv1qOuOFL1qvV/5VyR2zdlOQCmKCeMgxt6a/tHLBDiAA67D44 -/vfdoNJl0CU2It0PO60jdCPFNWIRcxL+OSDqAoePeUC7xQ+JsTEIxuUE8+d6w6fc -BV2mYb1flh22t46GLjh4gyo7xw3aL6L0L0jzlTT6IcEw6NIbaPbIKj/npQnHobYj -XMuKLxbh7g== ------END CERTIFICATE----- - -// Subject: CN=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME, -// O=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME, -// L=S?o Paulo, -// ST=S?o Paulo, -// C=BR -// Issuer: CN=DigiCert Assured ID Code Signing CA-1, -// OU=www.digicert.com, -// O=DigiCert Inc, -// C=US -// Serial: 0a:38:9b:95:ee:73:6d:d1:3b:c0:ed:74:3f:d7:4d:2f ------BEGIN CERTIFICATE----- -MIIG4DCCBcigAwIBAgIQCjible5zbdE7wO10P9dNLzANBgkqhkiG9w0BAQUFADBv -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv -ZGUgU2lnbmluZyBDQS0xMB4XDTEyMTEwOTAwMDAwMFoXDTEzMTExNDEyMDAwMFow -gasxCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMRMwEQYDVQQHDApT -w6NvIFBhdWxvMTgwNgYDVQQKEy9CVVNURVIgQVNTSVNURU5DSUEgVEVDTklDQSBF -TEVUUk9OSUNBIExUREEgLSBNRTE4MDYGA1UEAxMvQlVTVEVSIEFTU0lTVEVOQ0lB -IFRFQ05JQ0EgRUxFVFJPTklDQSBMVERBIC0gTUUwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQDAqNeEs5/B2CTXGjTOkUIdu6jV6qulOZwdw4sefHWYj1UR -4z6zPk9kjpUgbnb402RFq88QtfInwddZ/wXn9OxMtDd/3TnC7HrhNS7ga79ZFL2V -JnmzKHum2Yvh0q82QEJ9tHBR2X9VdKpUIH08Zs3k6cWWM1H0YX0cxA/HohhesQJW -kwJ3urOIJiH/HeByDk8a1NS8safcCxk5vxvW4WvCg43iT09LeHY5Aa8abKw8lqVb -0tD5ZSIjdmdj3TT1U37iAHLLRM2DXbxfdbhouUX1c5U1ZHAMA67HwjKiseOiDaHj -NUGbC37C+cgbc9VVM/cURD8WvS0Kj6fQv7F2QtJDAgMBAAGjggM5MIIDNTAfBgNV -HSMEGDAWgBR7aM4pqsAXvkl64eU/1qf3RY81MjAdBgNVHQ4EFgQU88EXKAyDsh30 -o9+Gu9a4xUy+FSMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMD -MHMGA1UdHwRsMGowM6AxoC+GLWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9hc3N1 -cmVkLWNzLTIwMTFhLmNybDAzoDGgL4YtaHR0cDovL2NybDQuZGlnaWNlcnQuY29t -L2Fzc3VyZWQtY3MtMjAxMWEuY3JsMIIBxAYDVR0gBIIBuzCCAbcwggGzBglghkgB -hv1sAwEwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9z -c2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUHAgIwggFWHoIBUgBBAG4A -eQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQByAHQAaQBmAGkAYwBhAHQA -ZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBjAGUAcAB0AGEAbgBjAGUA -IABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAgAEMAUAAvAEMAUABTACAA -YQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQAGEAcgB0AHkAIABBAGcA -cgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBtAGkAdAAgAGwAaQBhAGIA -aQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBjAG8AcgBwAG8AcgBhAHQA -ZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBlAHIAZQBuAGMAZQAuMIGC -BggrBgEFBQcBAQR2MHQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0 -LmNvbTBMBggrBgEFBQcwAoZAaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp -Z2lDZXJ0QXNzdXJlZElEQ29kZVNpZ25pbmdDQS0xLmNydDAMBgNVHRMBAf8EAjAA -MA0GCSqGSIb3DQEBBQUAA4IBAQAei1QmiXepje8OIfo/WonD4MIXgpPr2dfRaquQ -A8q63OpTRSveyqdQDCSPpDRF/nvO1Y30yksZvIH1tNBsW5LBdxAKN3lFdBlqBwtE -Q3jHc0KVVYRJ0FBaGE/PJHmRajscdAhYIcMPhTga0u0tDK+wOHEq3993dfl6yHjA -XHU2iW5pnk75ZoE39zALD5eKXT8ZXrET5c3XUFJKWA+XuGmdmyzqo0Au49PanBv9 -UlZnabYfqoMArqMS0tGSX4cGgi9/2E+pHG9BX4sFW+ZDumroOA2pxyMWEKjxePEL -zCOfhbsRWdMLYepauaNZOIMZXmFwcrIl0TGMkTAtATz+XmZc ------END CERTIFICATE----- - -// Subject: CN=CLEARESULT CONSULTING INC., OU=Corporate IT, -// O=CLEARESULT CONSULTING INC., L=Austin, ST=TX, C=US -// Issuer: SERIALNUMBER=07969287, -// CN=Go Daddy Secure Certification Authority, -// OU=http://certificates.godaddy.com/repository, -// O="GoDaddy.com, Inc.", -// L=Scottsdale, -// ST=Arizona, -// C=US -// Serial: 2b:73:43:2a:a8:4f:44 ------BEGIN CERTIFICATE----- -MIIFYjCCBEqgAwIBAgIHK3NDKqhPRDANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE -BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY -BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm -aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5 -IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky -ODcwHhcNMTIwMjE1MjEwOTA2WhcNMTQwMjE1MjEwOTA2WjCBjDELMAkGA1UEBgwC -VVMxCzAJBgNVBAgMAlRYMQ8wDQYDVQQHDAZBdXN0aW4xIzAhBgNVBAoMGkNMRUFS -RVNVTFQgQ09OU1VMVElORyBJTkMuMRUwEwYDVQQLDAxDb3Jwb3JhdGUgSVQxIzAh -BgNVBAMMGkNMRUFSRVNVTFQgQ09OU1VMVElORyBJTkMuMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAtIOjCKeAicull+7ZIzt0/4ya3IeXUFlfypqKMLkU -IbKjn0P5uMj6VE3rlbZr44RCegxvdnR6umBh1c0ZXoN3o+yc0JKcKcLiApmJJ277 -p7IbLwYDhBXRQNoIJm187IOMRPIxsKN4hL91txn9jGBmW+9zKlJlNhR5R7vjwU2E -jrH/6oqsc9EM2yYpfjlNv6+3jSwAYZCkSWr+27PQOV+YHKmIxtJjX0upFz5FdIrV -9CCX+L2Kji1THOkSgG4QTbYxmEcHqGViWz8hXLeNXjcbEsPuIiAu3hknxRHfUTE/ -U0Lh0Ug1e3LrJu+WnxM2SmUY4krsZ22c0yWUW9hzWITIjQIDAQABo4IBhzCCAYMw -DwYDVR0TAQH/BAUwAwEBADATBgNVHSUEDDAKBggrBgEFBQcDAzAOBgNVHQ8BAf8E -BAMCB4AwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nb2RhZGR5LmNvbS9n -ZHM1LTE2LmNybDBTBgNVHSAETDBKMEgGC2CGSAGG/W0BBxcCMDkwNwYIKwYBBQUH -AgEWK2h0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS8w -gYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZ29kYWRk -eS5jb20vMEoGCCsGAQUFBzAChj5odHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHku -Y29tL3JlcG9zaXRvcnkvZ2RfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSMEGDAWgBT9 -rGEyk2xF1uLuhV+auud2mWjM5zAdBgNVHQ4EFgQUDtdeKqeN2QkcbEp1HovFieNB -XiowDQYJKoZIhvcNAQEFBQADggEBAD74Agw5tvi2aBl4/f/s7/VE/BClzDsKMb9K -v9qpeC45ZA/jelxV11HKbQnVF194gDb7D2H9OsAsRUy8HVKbXEcc/8dKvwOqb+BC -2i/EmfjLgmCfezNFtLq8xcPxF3zIRc44vPrK0z4YZsaHdH+yTEJ51p5EMdTqaLaP -4n5m8LX3RfqlQB9dYFe6dUoYZjKm9d/pIRww3VqfOzjl42Edi1w6dWmBVMx1NZuR -DBabJH1vJ9Gd+KwxMCmBZ6pQPl28JDimhJhI2LNqU349uADQVV0HJosddN/ARyyI -LSIQO7BnNVKVG9Iujf33bvPNeg0qNz5qw+rKKq97Pqeum+L5oKU= ------END CERTIFICATE----- diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/lib/security/java.policy --- a/jdk/src/share/lib/security/java.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/lib/security/java.policy Wed Jul 05 19:50:00 2017 +0200 @@ -26,15 +26,36 @@ }; grant codeBase "file:${java.home}/lib/ext/sunec.jar" { - permission java.security.AllPermission; + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunec"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunEC"; + permission java.security.SecurityPermission "clearProviderProperties.SunEC"; + permission java.security.SecurityPermission "removeProviderProperty.SunEC"; }; grant codeBase "file:${java.home}/lib/ext/sunjce_provider.jar" { - permission java.security.AllPermission; + permission java.lang.RuntimePermission "accessClassInPackage.sun.misc"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunJCE"; + permission java.security.SecurityPermission "clearProviderProperties.SunJCE"; + permission java.security.SecurityPermission "removeProviderProperty.SunJCE"; }; grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" { - permission java.security.AllPermission; + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2pkcs11"; + // needs "security.pkcs11.allowSingleThreadedModules" + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.*"; + permission java.security.SecurityPermission "clearProviderProperties.*"; + permission java.security.SecurityPermission "removeProviderProperty.*"; + permission java.security.SecurityPermission "getProperty.auth.login.defaultCallbackHandler"; + permission java.security.SecurityPermission "authProvider.*"; + // Needed for reading PKCS11 config file and NSS library check + permission java.io.FilePermission "<>", "read"; }; // default permissions granted to all domains diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/lib/security/java.security-aix --- a/jdk/src/share/lib/security/java.security-aix Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/lib/security/java.security-aix Wed Jul 05 19:50:00 2017 +0200 @@ -206,7 +206,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ @@ -253,7 +252,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/lib/security/java.security-linux --- a/jdk/src/share/lib/security/java.security-linux Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/lib/security/java.security-linux Wed Jul 05 19:50:00 2017 +0200 @@ -206,7 +206,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ @@ -253,7 +252,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/lib/security/java.security-macosx --- a/jdk/src/share/lib/security/java.security-macosx Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/lib/security/java.security-macosx Wed Jul 05 19:50:00 2017 +0200 @@ -207,7 +207,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ @@ -254,7 +253,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/lib/security/java.security-solaris --- a/jdk/src/share/lib/security/java.security-solaris Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/lib/security/java.security-solaris Wed Jul 05 19:50:00 2017 +0200 @@ -208,7 +208,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ @@ -254,7 +253,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/lib/security/java.security-windows --- a/jdk/src/share/lib/security/java.security-windows Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/lib/security/java.security-windows Wed Jul 05 19:50:00 2017 +0200 @@ -207,7 +207,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ @@ -254,7 +253,6 @@ com.sun.org.glassfish.,\ com.oracle.xmlns.internal.,\ com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ org.jcp.xml.dsig.internal.,\ jdk.internal.,\ jdk.nashorn.internal.,\ diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/native/common/check_code.c --- a/jdk/src/share/native/common/check_code.c Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/native/common/check_code.c Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 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 @@ -1357,16 +1357,9 @@ } (*env)->DeleteLocalRef(env, super); - /* The optimizer make cause this to happen on local code */ + /* The optimizer may cause this to happen on local code */ if (not_found) { -#ifdef BROKEN_JAVAC - jobject loader = JVM_GetClassLoader(env, context->class); - int has_loader = (loader != 0); - (*env)->DeleteLocalRef(env, loader); - if (has_loader) -#endif /* BROKEN_JAVAC */ - CCerror(context, - "Illegal use of nonvirtual function call"); + CCerror(context, "Illegal use of nonvirtual function call"); } } } diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/native/java/lang/Class.c --- a/jdk/src/share/native/java/lang/Class.c Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/native/java/lang/Class.c Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 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 @@ -45,7 +45,6 @@ #define CLS "Ljava/lang/Class;" #define CPL "Lsun/reflect/ConstantPool;" #define STR "Ljava/lang/String;" -#define JCL "Ljava/lang/ClassLoader;" #define FLD "Ljava/lang/reflect/Field;" #define MHD "Ljava/lang/reflect/Method;" #define CTR "Ljava/lang/reflect/Constructor;" @@ -56,7 +55,6 @@ {"getName0", "()" STR, (void *)&JVM_GetClassName}, {"getSuperclass", "()" CLS, NULL}, {"getInterfaces0", "()[" CLS, (void *)&JVM_GetClassInterfaces}, - {"getClassLoader0", "()" JCL, (void *)&JVM_GetClassLoader}, {"isInterface", "()Z", (void *)&JVM_IsInterface}, {"getSigners", "()[" OBJ, (void *)&JVM_GetClassSigners}, {"setSigners", "([" OBJ ")V", (void *)&JVM_SetClassSigners}, @@ -81,7 +79,6 @@ #undef OBJ #undef CLS #undef STR -#undef JCL #undef FLD #undef MHD #undef CTR diff -r 376a52c9540c -r acabdf6da9db jdk/src/share/native/java/lang/java_props.h --- a/jdk/src/share/native/java/lang/java_props.h Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/share/native/java/lang/java_props.h Wed Jul 05 19:50:00 2017 +0200 @@ -117,7 +117,7 @@ char *exceptionList; - char *awt_headless /* java.awt.headless setting, if NULL (default) will not be set */ + char *awt_headless; /* java.awt.headless setting, if NULL (default) will not be set */ #endif } java_props_t; diff -r 376a52c9540c -r acabdf6da9db jdk/src/solaris/classes/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java --- a/jdk/src/solaris/classes/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/solaris/classes/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java Wed Jul 05 19:50:00 2017 +0200 @@ -77,8 +77,7 @@ static { defaultDomain = java.security.AccessController.doPrivileged( - new sun.security.action.GetPropertyAction("http.auth.ntlm.domain", - "domain")); + new sun.security.action.GetPropertyAction("http.auth.ntlm.domain", "")); }; public static boolean supportsTransparentAuth () { @@ -100,17 +99,13 @@ public String run() { String localhost; try { - localhost = InetAddress.getLocalHost().getHostName().toUpperCase(); + localhost = InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { localhost = "localhost"; } return localhost; } }); - int x = hostname.indexOf ('.'); - if (x != -1) { - hostname = hostname.substring (0, x); - } }; PasswordAuthentication pw; diff -r 376a52c9540c -r acabdf6da9db jdk/src/solaris/native/java/lang/locale_str.h --- a/jdk/src/solaris/native/java/lang/locale_str.h Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/solaris/native/java/lang/locale_str.h Wed Jul 05 19:50:00 2017 +0200 @@ -135,7 +135,7 @@ "sr_SP", "sr_YU", "tchinese", "zh_TW", #endif - "" + "", "", }; /* @@ -188,7 +188,7 @@ "japanese", "ja", "korean", "ko", #endif - "", + "", "", }; /* @@ -201,7 +201,7 @@ "iqtelif", "Latn", "latin", "Latn", #endif - "", + "", "", }; /* @@ -212,7 +212,7 @@ "RN", "US", // used on Linux, not clear what it stands for #endif "YU", "CS", // YU has been removed from ISO 3166 - "", + "", "", }; /* @@ -220,5 +220,5 @@ */ static char *variant_names[] = { "nynorsk", "NY", - "", + "", "", }; diff -r 376a52c9540c -r acabdf6da9db jdk/src/windows/lib/security/java.policy --- a/jdk/src/windows/lib/security/java.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/windows/lib/security/java.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,3 +1,8 @@ grant codeBase "file:${java.home}/lib/ext/sunmscapi.jar" { - permission java.security.AllPermission; + Permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunmscapi"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunMSCAPI"; + permission java.security.SecurityPermission "clearProviderProperties.SunMSCAPI"; + permission java.security.SecurityPermission "removeProviderProperty.SunMSCAPI"; }; diff -r 376a52c9540c -r acabdf6da9db jdk/src/windows/native/java/net/net_util_md.c --- a/jdk/src/windows/native/java/net/net_util_md.c Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/windows/native/java/net/net_util_md.c Wed Jul 05 19:50:00 2017 +0200 @@ -443,6 +443,13 @@ { int rv; + if (level == IPPROTO_IPV6 && optname == IPV6_TCLASS) { + int *intopt = (int *)optval; + *intopt = 0; + *optlen = sizeof(*intopt); + return 0; + } + rv = getsockopt(s, level, optname, optval, optlen); diff -r 376a52c9540c -r acabdf6da9db jdk/src/windows/native/sun/nio/ch/Net.c --- a/jdk/src/windows/native/sun/nio/ch/Net.c Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/src/windows/native/sun/nio/ch/Net.c Wed Jul 05 19:50:00 2017 +0200 @@ -295,9 +295,9 @@ /** * HACK: IP_TOS is deprecated on Windows and querying the option * returns a protocol error. NET_GetSockOpt handles this and uses - * a fallback mechanism. + * a fallback mechanism. Same applies to IPV6_TCLASS */ - if (level == IPPROTO_IP && opt == IP_TOS) { + if ((level == IPPROTO_IP && opt == IP_TOS) || (level == IPPROTO_IPV6 && opt == IPV6_TCLASS)) { mayNeedConversion = JNI_TRUE; } @@ -340,6 +340,11 @@ arglen = sizeof(arg); } + if (level == IPPROTO_IPV6 && opt == IPV6_TCLASS) { + /* No op */ + return; + } + if (mayNeedConversion) { n = NET_SetSockOpt(fdval(env, fdo), level, opt, parg, arglen); } else { diff -r 376a52c9540c -r acabdf6da9db jdk/test/TEST.groups --- a/jdk/test/TEST.groups Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/TEST.groups Wed Jul 05 19:50:00 2017 +0200 @@ -362,7 +362,8 @@ sun/reflect/CallerSensitive/CallerSensitiveFinder.java \ sun/reflect/CallerSensitive/MissingCallerSensitive.java \ sun/security/util/Resources/NewNamesFormat.java \ - vm/verifier/defaultMethods/DefaultMethodRegressionTestsRun.java + vm/verifier/defaultMethods/DefaultMethodRegressionTestsRun.java \ + javax/xml/ws/clientjar/TestWsImport.java # JRE adds further tests to compact3 # @@ -388,6 +389,7 @@ java/security/Security/ClassLoaderDeadlock/Deadlock.sh \ java/util/jar/Manifest/CreateManifest.java \ java/util/logging/TestMainAppContext.java \ + java/util/logging/TestLoggingWithMainAppContext.java \ java/util/ResourceBundle/Control/Bug6530694.java \ java/text/Bidi/BidiConformance.java \ java/text/Bidi/BidiEmbeddingTest.java \ diff -r 376a52c9540c -r acabdf6da9db jdk/test/com/sun/crypto/provider/Cipher/PBE/PBESealedObject.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/crypto/provider/Cipher/PBE/PBESealedObject.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2012, 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.PrintStream; +import java.security.AlgorithmParameters; +import java.security.InvalidKeyException; +import java.security.Provider; +import java.security.Security; +import java.security.spec.AlgorithmParameterSpec; +import java.util.Arrays; +import java.util.Random; +import java.util.StringTokenizer; +import javax.crypto.Cipher; +import javax.crypto.SealedObject; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.PBEParameterSpec; + +/** + * @test + * @bug 8041781 + * @summary test if seal/unseal works correctly with PBE algorithms + * @author Yun Ke + * @author Bill Situ + * @author Alexander Fomin + * @run main PBESealedObject + */ +public class PBESealedObject { + + private static final String[] PBEAlgorithms = { + "pbeWithMD5ANDdes", + "PBEWithMD5AndDES/CBC/PKCS5Padding", + "PBEWithMD5AndTripleDES", + "PBEWithMD5AndTripleDES/CBC/PKCS5Padding", + "PBEwithSHA1AndDESede", + "PBEwithSHA1AndDESede/CBC/PKCS5Padding", + "PBEwithSHA1AndRC2_40", + "PBEwithSHA1Andrc2_40/CBC/PKCS5Padding", + "PBEWithSHA1AndRC2_128", + "PBEWithSHA1andRC2_128/CBC/PKCS5Padding", + "PBEWithSHA1AndRC4_40", + "PBEWithsha1AndRC4_40/ECB/NoPadding", + "PBEWithSHA1AndRC4_128", + "pbeWithSHA1AndRC4_128/ECB/NoPadding", + "PBEWithHmacSHA1AndAES_128", + "PBEWithHmacSHA224AndAES_128", + "PBEWithHmacSHA256AndAES_128", + "PBEWithHmacSHA384AndAES_128", + "PBEWithHmacSHA512AndAES_128", + "PBEWithHmacSHA1AndAES_256", + "PBEWithHmacSHA224AndAES_256", + "PBEWithHmacSHA256AndAES_256", + "PBEWithHmacSHA384AndAES_256", + "PBEWithHmacSHA512AndAES_256" + }; + + public static void main(String[] args) { + PBESealedObject test = new PBESealedObject(); + Provider sunjce = Security.getProvider("SunJCE"); + + if (!test.runAll(sunjce, System.out)) { + throw new RuntimeException("One or more tests have failed...."); + } + } + + public boolean runAll(Provider p, PrintStream out) { + boolean finalResult = true; + + for (String algorithm : PBEAlgorithms) { + out.println("Running test with " + algorithm + ":"); + try { + if (!runTest(p, algorithm, out)) { + finalResult = false; + out.println("STATUS: Failed"); + } else { + out.println("STATUS: Passed"); + } + } catch (Exception ex) { + finalResult = false; + ex.printStackTrace(out); + out.println("STATUS:Failed"); + } + } + + return finalResult; + } + + // Have a generic throws Exception as it can throw many different exceptions + public boolean runTest(Provider p, String algo, PrintStream out) + throws Exception { + + byte[] salt = new byte[8]; + int ITERATION_COUNT = 1000; + AlgorithmParameters pbeParams = null; + + String baseAlgo + = new StringTokenizer(algo, "/").nextToken().toUpperCase(); + boolean isAES = baseAlgo.contains("AES"); + + try { + // Initialization + Cipher ci = Cipher.getInstance(algo, p); + new Random().nextBytes(salt); + AlgorithmParameterSpec aps = new PBEParameterSpec(salt, + ITERATION_COUNT); + SecretKeyFactory skf = SecretKeyFactory.getInstance(baseAlgo, p); + SecretKey key = skf.generateSecret( + new PBEKeySpec("Secret Lover".toCharArray())); + + // Seal + if (isAES) { + ci.init(Cipher.ENCRYPT_MODE, key); + pbeParams = ci.getParameters(); + } else { + ci.init(Cipher.ENCRYPT_MODE, key, aps); + } + + SealedObject so = new SealedObject(key, ci); + + // Unseal and compare + if (isAES) { + ci.init(Cipher.DECRYPT_MODE, key, pbeParams); + } else { + ci.init(Cipher.DECRYPT_MODE, key, aps); + } + + SecretKey unsealedKey; + + unsealedKey = (SecretKey) so.getObject(ci); + if (!Arrays.equals(unsealedKey.getEncoded(), key.getEncoded())) { + return false; + } + + unsealedKey = (SecretKey) so.getObject(key); + if (!Arrays.equals(unsealedKey.getEncoded(), key.getEncoded())) { + return false; + } + + unsealedKey = (SecretKey) so.getObject(key, "SunJCE"); + return Arrays.equals(unsealedKey.getEncoded(), key.getEncoded()); + } catch (InvalidKeyException ex) { + if (baseAlgo.endsWith("TRIPLEDES") || baseAlgo.endsWith("AES_256")) { + out.println( + "Expected exception , keyStrength > 128 within" + algo); + return true; + } + + throw ex; + } + } + +} diff -r 376a52c9540c -r acabdf6da9db jdk/test/com/sun/crypto/provider/Cipher/PBE/PBKDF2Translate.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/crypto/provider/Cipher/PBE/PBKDF2Translate.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,311 @@ +/* + * Copyright (c) 2012, 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.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; +import java.util.Arrays; +import java.util.Random; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.interfaces.PBEKey; +import javax.crypto.spec.PBEKeySpec; + +/** + * @test + * @bug 8041781 + * @summary Verify if the SecretKeyFactory.translateKey() method works + * @author Alexander Fomin + * @run main PBKDF2Translate + */ +public class PBKDF2Translate { + + private static final String[] ALGO_TO_TEST = { + "PBKDF2WithHmacSHA1", + "PBKDF2WithHmacSHA224", + "PBKDF2WithHmacSHA256", + "PBKDF2WithHmacSHA384", + "PBKDF2WithHmacSHA512" + }; + + private static final String PASS_PHRASE = "some hidden string"; + private static final int ITERATION_COUNT = 1000; + private static final int KEY_SIZE = 128; + + private final String algoToTest; + private final byte[] salt = new byte[8]; + + public static void main(String[] args) throws Exception { + + boolean failed = false; + + for (String algo : ALGO_TO_TEST) { + + System.out.println("Testing " + algo + ":"); + PBKDF2Translate theTest = new PBKDF2Translate(algo); + + try { + if (!theTest.testMyOwnSecretKey() + || !theTest.generateAndTranslateKey() + || !theTest.translateSpoiledKey()) { + // we don't want to set failed to false + failed = true; + } + } catch (InvalidKeyException | NoSuchAlgorithmException | + InvalidKeySpecException e) { + e.printStackTrace(System.err); + failed = true; + } + } + + if (failed) { + throw new RuntimeException("One or more tests failed...."); + } + } + + public PBKDF2Translate(String algoToTest) { + this.algoToTest = algoToTest; + new Random().nextBytes(this.salt); + } + + /** + * The test case scenario implemented in the method: - derive PBKDF2 key + * using the given algorithm; - translate the key - check if the translated + * and original keys have the same key value. + * + * @return true if the test case passed; false - otherwise. + * @throws NoSuchAlgorithmException + * @throws InvalidKeySpecException + * @throws InvalidKeyException + */ + public boolean generateAndTranslateKey() throws NoSuchAlgorithmException, + InvalidKeySpecException, InvalidKeyException { + // derive PBKDF2 key + SecretKey key1 = getSecretKeyForPBKDF2(algoToTest); + + // translate key + SecretKeyFactory skf = SecretKeyFactory.getInstance(algoToTest); + SecretKey key2 = skf.translateKey(key1); + + // check if it still the same after translation + if (!Arrays.equals(key1.getEncoded(), key2.getEncoded())) { + System.err.println("generateAndTranslateKey test case failed: the " + + "key1 and key2 values in its primary encoding format are " + + "not the same for " + algoToTest + "algorithm."); + return false; + } + + return true; + } + + /** + * The test case scenario implemented in the method: - derive Key1 for the + * given PBKDF2 algorithm - create my own secret Key2 as an instance of a + * class implements PBEKey - translate Key2 - check if the key value of the + * translated key and Key1 are the same. + * + * @return true if the test case passed; false - otherwise. + * @throws NoSuchAlgorithmException + * @throws InvalidKeySpecException + * @throws InvalidKeyException + */ + public boolean testMyOwnSecretKey() + throws NoSuchAlgorithmException, InvalidKeySpecException, + InvalidKeyException { + SecretKey key1 = getSecretKeyForPBKDF2(algoToTest); + SecretKey key2 = getMyOwnSecretKey(); + + // Is it actually the same? + if (!Arrays.equals(key1.getEncoded(), key2.getEncoded())) { + System.err.println("We shouldn't be here. The key1 and key2 values " + + "in its primary encoding format have to be the same!"); + return false; + } + + // Translate key + SecretKeyFactory skf = SecretKeyFactory.getInstance(algoToTest); + SecretKey key3 = skf.translateKey(key2); + + // Check if it still the same after translation + if (!Arrays.equals(key1.getEncoded(), key3.getEncoded())) { + System.err.println("testMyOwnSecretKey test case failed: the key1 " + + "and key3 values in its primary encoding format are not " + + "the same for " + algoToTest + "algorithm."); + return false; + } + + return true; + } + + /** + * The test case scenario implemented in the method: - create my own secret + * Key2 as an instance of a class implements PBEKey - spoil the key (set + * iteration count to 0, for example) - try to translate key - + * InvalidKeyException is expected. + * + * @return true if InvalidKeyException occurred; false - otherwise. + * @throws NoSuchAlgorithmException + * @throws InvalidKeySpecException + */ + public boolean translateSpoiledKey() throws NoSuchAlgorithmException, + InvalidKeySpecException { + // derive the key + SecretKey key1 = getMyOwnSecretKey(); + + // spoil the key + ((MyPBKDF2SecretKey) key1).spoil(); + + // translate key + SecretKeyFactory skf = SecretKeyFactory.getInstance(algoToTest); + try { + SecretKey key2 = skf.translateKey(key1); + } catch (InvalidKeyException ike) { + // this is expected + return true; + } + + return false; + } + + /** + * Generate a PBKDF2 secret key using given algorithm. + * + * @param algoToDeriveKey PBKDF2 algorithm + * @return PBKDF2 secret key + * @throws NoSuchAlgorithmException + * @throws InvalidKeySpecException + */ + private SecretKey getSecretKeyForPBKDF2(String algoToDeriveKey) + throws NoSuchAlgorithmException, InvalidKeySpecException { + SecretKeyFactory skf = SecretKeyFactory.getInstance(algoToDeriveKey); + + PBEKeySpec spec = new PBEKeySpec(PASS_PHRASE.toCharArray(), + this.salt, ITERATION_COUNT, KEY_SIZE); + + return skf.generateSecret(spec); + } + + /** + * Generate a secrete key as an instance of a class implements PBEKey. + * + * @return secrete key + * @throws InvalidKeySpecException + * @throws NoSuchAlgorithmException + */ + private SecretKey getMyOwnSecretKey() throws InvalidKeySpecException, + NoSuchAlgorithmException { + return new MyPBKDF2SecretKey(PASS_PHRASE, this.algoToTest, this.salt, + ITERATION_COUNT, KEY_SIZE); + } +} + +/** + * An utility class to check the SecretKeyFactory.translateKey() method. + */ +class MyPBKDF2SecretKey implements PBEKey { + + private final byte[] key; + private final byte[] salt; + private final String algorithm; + private final int keySize, keyLength; + private int itereationCount; + private final String pass; + + @Override + public String getAlgorithm() { + return algorithm; + } + + @Override + public String getFormat() { + return "RAW"; + } + + @Override + public byte[] getEncoded() { + byte[] copy = new byte[keyLength]; + System.arraycopy(this.key, 0, copy, 0, keyLength); + return copy; + } + + /** + * The key is generating by SecretKeyFactory and its value just copying in + * the key field of MySecretKey class. So, this is real key derived using + * the given algorithm. + * + * @param passPhrase some string intended to be a password + * @param algo PBKDF2 algorithm + * @param salt slat for PBKDF2 + * @param iterationCount iteration count + * @param keySize key size in bits + * @throws InvalidKeySpecException + * @throws NoSuchAlgorithmException + */ + public MyPBKDF2SecretKey(String passPhrase, String algo, byte[] salt, + int iterationCount, int keySize) + throws InvalidKeySpecException, NoSuchAlgorithmException { + this.algorithm = algo; + this.salt = salt; + this.itereationCount = iterationCount; + this.keySize = keySize; + this.pass = passPhrase; + + PBEKeySpec spec = new PBEKeySpec(passPhrase.toCharArray(), + this.salt, iterationCount, this.keySize); + + SecretKeyFactory keyFactory + = SecretKeyFactory.getInstance(algo); + + SecretKey realKey = keyFactory.generateSecret(spec); + + this.keyLength = realKey.getEncoded().length; + + this.key = new byte[this.keyLength]; + System.arraycopy(realKey.getEncoded(), 0, this.key, 0, + this.keyLength); + } + + @Override + public int getIterationCount() { + return itereationCount; + } + + @Override + public byte[] getSalt() { + return salt; + } + + @Override + public char[] getPassword() { + return this.pass.toCharArray(); + } + + /** + * Spoil the generated key (before translation) to cause an + * InvalidKeyException + */ + public void spoil() { + this.itereationCount = -1; + } + +} diff -r 376a52c9540c -r acabdf6da9db jdk/test/com/sun/crypto/provider/Cipher/PBE/TestCipherKeyWrapperPBEKey.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/crypto/provider/Cipher/PBE/TestCipherKeyWrapperPBEKey.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2012, 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.PrintStream; +import java.security.AlgorithmParameters; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.Provider; +import java.security.Security; +import java.security.spec.AlgorithmParameterSpec; +import java.util.Arrays; +import java.util.Random; +import java.util.StringTokenizer; +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.PBEParameterSpec; + +/** + * @test + * @bug 8041781 + * @summary Test to see if key wrapper works correctly with PBEKey + * @author Yu-Ching (Valerie) PENG + * @author Bill Situ + * @author Yun Ke + * @run main TestCipherKeyWrapperPBEKey + */ +public class TestCipherKeyWrapperPBEKey { + + private static final String[] PBEAlgorithms = { + "pbeWithMD5ANDdes", + "PBEWithMD5AndDES/CBC/PKCS5Padding", + "PBEWithMD5AndTripleDES", + "PBEWithMD5AndTripleDES/CBC/PKCS5Padding", + "PBEwithSHA1AndDESede", + "PBEwithSHA1AndDESede/CBC/PKCS5Padding", + "PBEwithSHA1AndRC2_40", + "PBEwithSHA1Andrc2_40/CBC/PKCS5Padding", + "PBEWithSHA1AndRC2_128", + "PBEWithSHA1andRC2_128/CBC/PKCS5Padding", + "PBEWithSHA1AndRC4_40", + "PBEWithsha1AndRC4_40/ECB/NoPadding", + "PBEWithSHA1AndRC4_128", + "pbeWithSHA1AndRC4_128/ECB/NoPadding", + "PBEWithHmacSHA1AndAES_128", + "PBEWithHmacSHA224AndAES_128", + "PBEWithHmacSHA256AndAES_128", + "PBEWithHmacSHA384AndAES_128", + "PBEWithHmacSHA512AndAES_128", + "PBEWithHmacSHA1AndAES_256", + "PBEWithHmacSHA224AndAES_256", + "PBEWithHmacSHA256AndAES_256", + "PBEWithHmacSHA384AndAES_256", + "PBEWithHmacSHA512AndAES_256" + }; + + public static void main(String[] args) { + + TestCipherKeyWrapperPBEKey test = new TestCipherKeyWrapperPBEKey(); + Provider sunjce = Security.getProvider("SunJCE"); + + if (!test.runAll(sunjce, System.out)) { + throw new RuntimeException("One or more tests have failed...."); + } + } + + public boolean runAll(Provider p, PrintStream out) { + boolean finalResult = true; + + for (String algorithm : PBEAlgorithms) { + out.println("Running test with " + algorithm + ":"); + try { + if (!runTest(p, algorithm, out)) { + finalResult = false; + out.println("STATUS: Failed"); + } else { + out.println("STATUS: Passed"); + } + } catch (Exception ex) { + finalResult = false; + ex.printStackTrace(out); + out.println("STATUS:Failed"); + } + } + + return finalResult; + } + + // Have a generic throws Exception as it can throw many different exceptions + public boolean runTest(Provider p, String algo, PrintStream out) + throws Exception { + + byte[] salt = new byte[8]; + int ITERATION_COUNT = 1000; + AlgorithmParameters pbeParams = null; + + String baseAlgo + = new StringTokenizer(algo, "/").nextToken().toUpperCase(); + boolean isAES = baseAlgo.contains("AES"); + + try { + // Initialization + new Random().nextBytes(salt); + AlgorithmParameterSpec aps = new PBEParameterSpec(salt, + ITERATION_COUNT); + SecretKeyFactory skf = SecretKeyFactory.getInstance(baseAlgo, p); + SecretKey key = skf.generateSecret(new PBEKeySpec( + "Secret Key".toCharArray())); + Cipher ci = Cipher.getInstance(algo); + + if (isAES) { + ci.init(Cipher.WRAP_MODE, key); + pbeParams = ci.getParameters(); + } else { + ci.init(Cipher.WRAP_MODE, key, aps); + } + + byte[] keyWrapper = ci.wrap(key); + if (isAES) { + ci.init(Cipher.UNWRAP_MODE, key, pbeParams); + } else { + ci.init(Cipher.UNWRAP_MODE, key, aps); + } + + Key unwrappedKey = ci.unwrap(keyWrapper, algo, Cipher.SECRET_KEY); + + if (baseAlgo.endsWith("TRIPLEDES") + || baseAlgo.endsWith("AES_256")) { + out.print( + "InvalidKeyException not thrown when keyStrength > 128"); + return false; + } + + return (Arrays.equals(key.getEncoded(), unwrappedKey.getEncoded())); + + } catch (InvalidKeyException ex) { + + if ((baseAlgo.endsWith("TRIPLEDES") + || baseAlgo.endsWith("AES_256"))) { + out.println("Expected InvalidKeyException, keyStrength > 128"); + return true; + } else { + throw ex; + } + } + } +} diff -r 376a52c9540c -r acabdf6da9db jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java --- a/jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java Wed Jul 05 19:50:00 2017 +0200 @@ -23,10 +23,13 @@ /** * @test + * @run main/othervm LdapTimeoutTest * @bug 7094377 8000487 6176036 7056489 * @summary Timeout tests for ldap */ +import com.sun.jndi.ldap.Connection; + import java.net.Socket; import java.net.ServerSocket; import java.net.SocketTimeoutException; @@ -38,7 +41,9 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; + +import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static java.util.concurrent.TimeUnit.NANOSECONDS; public class LdapTimeoutTest { private static final ScheduledExecutorService pool = @@ -85,7 +90,7 @@ void ldapReadTimeoutTest(Hashtable env, boolean ssl) { InitialContext ctx = null; if (ssl) env.put(Context.SECURITY_PROTOCOL, "ssl"); - ScheduledFuture killer = killSwitch(5000); + ScheduledFuture killer = killSwitch(5_000); long start = System.nanoTime(); try { ctx = new InitialDirContext(env); @@ -113,7 +118,7 @@ void simpleAuthConnectTest(Hashtable env) { InitialContext ctx = null; - ScheduledFuture killer = killSwitch(5000); + ScheduledFuture killer = killSwitch(5_000); long start = System.nanoTime(); try { ctx = new InitialDirContext(env); @@ -123,7 +128,7 @@ } catch (NamingException e) { long end = System.nanoTime(); if (e.getCause() instanceof SocketTimeoutException) { - if (TimeUnit.NANOSECONDS.toMillis(end - start) < 2900) { + if (NANOSECONDS.toMillis(end - start) < 2_900) { pass(); } else { System.err.println("Fail: Waited too long"); @@ -142,8 +147,8 @@ void deadServerNoTimeout(Hashtable env) { InitialContext ctx = null; - ScheduledFuture killer = killSwitch(30000); - long start = System.nanoTime(); + ScheduledFuture killer = killSwitch(30_000); + long start = System.currentTimeMillis(); try { ctx = new InitialDirContext(env); SearchControls scl = new SearchControls(); @@ -153,10 +158,12 @@ // shouldn't reach here fail(); } catch (NamingException e) { - long end = System.nanoTime(); - if (TimeUnit.NANOSECONDS.toMillis(end - start) < 14000) { - System.err.println("fail: timeout should be at least 15 seconds, actual time: " - + TimeUnit.NANOSECONDS.toMillis(end - start)); + long elapsed = System.currentTimeMillis() - start; + if (elapsed < Connection.DEFAULT_READ_TIMEOUT_MILLIS) { + System.err.printf("fail: timeout should be at least %s ms, " + + "actual time is %s ms%n", + Connection.DEFAULT_READ_TIMEOUT_MILLIS, elapsed); + e.printStackTrace(); fail(); } else { pass(); @@ -184,7 +191,7 @@ System.exit(0); return null; } - }, ms, TimeUnit.MILLISECONDS); + }, ms, MILLISECONDS); } static class Server extends Thread { diff -r 376a52c9540c -r acabdf6da9db jdk/test/com/sun/security/sasl/ntlm/NTLMTest.java --- a/jdk/test/com/sun/security/sasl/ntlm/NTLMTest.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/com/sun/security/sasl/ntlm/NTLMTest.java Wed Jul 05 19:50:00 2017 +0200 @@ -23,7 +23,7 @@ /* * @test - * @bug 6911951 + * @bug 6911951 7150092 * @summary NTLM should be a supported Java SASL mechanism */ import java.io.IOException; @@ -59,7 +59,6 @@ checkAuthOnly(); checkClientNameOverride(); - checkServerDomainOverride(); checkClientDomainOverride(); checkVersions(); checkClientHostname(); @@ -116,15 +115,12 @@ Map ps = new HashMap<>(); ps.put("com.sun.security.sasl.ntlm.version", vs); SaslClient clnt = Sasl.createSaslClient( - new String[]{MECH}, USER1, PROTOCOL, null, pc, + new String[]{MECH}, USER1, PROTOCOL, REALM, pc, new CallbackHandler() { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback cb: callbacks) { - if (cb instanceof NameCallback) { - NameCallback ncb = (NameCallback)cb; - ncb.setName(ncb.getDefaultName()); - } else if (cb instanceof PasswordCallback) { + if (cb instanceof PasswordCallback) { ((PasswordCallback)cb).setPassword(PASS1); } } @@ -159,15 +155,12 @@ Map pc = new HashMap<>(); pc.put("com.sun.security.sasl.ntlm.hostname", "this.is.com"); SaslClient clnt = Sasl.createSaslClient( - new String[]{MECH}, USER1, PROTOCOL, null, pc, + new String[]{MECH}, USER1, PROTOCOL, REALM, pc, new CallbackHandler() { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback cb: callbacks) { - if (cb instanceof NameCallback) { - NameCallback ncb = (NameCallback)cb; - ncb.setName(ncb.getDefaultName()); - } else if (cb instanceof PasswordCallback) { + if (cb instanceof PasswordCallback) { ((PasswordCallback)cb).setPassword(PASS1); } } @@ -212,12 +205,8 @@ public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback cb: callbacks) { - if (cb instanceof NameCallback) { - NameCallback ncb = (NameCallback)cb; - ncb.setName(ncb.getDefaultName()); - } else if(cb instanceof RealmCallback) { - RealmCallback dcb = (RealmCallback)cb; - dcb.setText("THIRDDOMAIN"); + if (cb instanceof RealmCallback) { + ((RealmCallback)cb).setText(REALM); } else if (cb instanceof PasswordCallback) { ((PasswordCallback)cb).setPassword(PASS1); } @@ -255,13 +244,13 @@ */ private static void checkClientNameOverride() throws Exception { SaslClient clnt = Sasl.createSaslClient( - new String[]{MECH}, null, PROTOCOL, null, null, + new String[]{MECH}, "someone", PROTOCOL, REALM, null, new CallbackHandler() { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback cb: callbacks) { if (cb instanceof NameCallback) { - NameCallback ncb = (NameCallback)cb; + NameCallback ncb = (NameCallback) cb; ncb.setName(USER1); } else if (cb instanceof PasswordCallback) { ((PasswordCallback)cb).setPassword(PASS1); @@ -270,54 +259,7 @@ } }); - SaslServer srv = Sasl.createSaslServer(MECH, PROTOCOL, REALM, null, - new CallbackHandler() { - public void handle(Callback[] callbacks) - throws IOException, UnsupportedCallbackException { - String domain = null, name = null; - PasswordCallback pcb = null; - for (Callback cb: callbacks) { - if (cb instanceof NameCallback) { - name = ((NameCallback)cb).getDefaultName(); - } else if (cb instanceof RealmCallback) { - domain = ((RealmCallback)cb).getDefaultText(); - } else if (cb instanceof PasswordCallback) { - pcb = (PasswordCallback)cb; - } - } - if (pcb != null) { - pcb.setPassword(getPass(domain, name)); - } - } - }); - - handshake(clnt, srv); - } - - /** - * server side domain provided in props. - * @throws Exception - */ - private static void checkServerDomainOverride() throws Exception { - SaslClient clnt = Sasl.createSaslClient( - new String[]{MECH}, USER1, PROTOCOL, null, null, - new CallbackHandler() { - public void handle(Callback[] callbacks) - throws IOException, UnsupportedCallbackException { - for (Callback cb: callbacks) { - if (cb instanceof NameCallback) { - NameCallback ncb = (NameCallback)cb; - ncb.setName(ncb.getDefaultName()); - } else if (cb instanceof PasswordCallback) { - ((PasswordCallback)cb).setPassword(PASS1); - } - } - } - }); - - Map ps = new HashMap<>(); - ps.put("com.sun.security.sasl.ntlm.domain", REALM); - SaslServer srv = Sasl.createSaslServer(MECH, PROTOCOL, null, ps, + SaslServer srv = Sasl.createSaslServer(MECH, PROTOCOL, "FAKE", null, new CallbackHandler() { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/io/Serializable/subclassGC/security.policy --- a/jdk/test/java/io/Serializable/subclassGC/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/io/Serializable/subclassGC/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,3 @@ -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; grant { permission java.lang.RuntimePermission "createClassLoader"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/lang/Class/forName/NonJavaNames.sh --- a/jdk/test/java/lang/Class/forName/NonJavaNames.sh Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/lang/Class/forName/NonJavaNames.sh Wed Jul 05 19:50:00 2017 +0200 @@ -25,19 +25,17 @@ # @bug 4952558 # @summary Verify names that aren't legal Java names are accepted by forName. # @author Joseph D. Darcy -# @compile -source 1.5 -target 1.5 NonJavaNames.java +# @compile NonJavaNames.java # @run shell NonJavaNames.sh # This test uses hand-generated class files stored in the ./classes # directory. After the renaming done below, those class files have -# single character names that are legal class names under class file -# version 49 but *not* legal Java language identifiers; e.g. "3" and -# "+". First, Z.java is compiled to Z.class using "-target 1.5." -# Next, to create a test class file, the appropriate name structures -# within the class files are updated, as is the "Hello world" string -# the class's main method prints out. If the definition of the -# semantics of "-target 1.5" changes, the test class files should be -# regenerated. +# single character names that are legal class names under in the class +# file but *not* legal Java language identifiers; e.g. "3" and "+". +# First, Z.java is compiled to Z.class. Next, to create a test class +# file, the appropriate name structures within the class files are +# updated, as is the "Hello world" string the class's main method +# prints out. # Verify directory context variables are set if [ "${TESTJAVA}" = "" ] diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/lang/SecurityManager/CheckPackageAccess.java --- a/jdk/test/java/lang/SecurityManager/CheckPackageAccess.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/lang/SecurityManager/CheckPackageAccess.java Wed Jul 05 19:50:00 2017 +0200 @@ -80,7 +80,6 @@ "com.sun.org.glassfish.", "com.oracle.xmlns.internal.", "com.oracle.webservices.internal.", - "oracle.jrockit.jfr.", "org.jcp.xml.dsig.internal.", "jdk.internal.", "jdk.nashorn.internal.", diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/lang/System/System.policy --- a/jdk/test/java/lang/System/System.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/lang/System/System.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,10 +1,5 @@ // // Used by SecurityRace.java -// Standard extensions get all permissions by default - -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; // default permissions granted to all domains diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/net/URLPermission/policy.1 --- a/jdk/test/java/net/URLPermission/policy.1 Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/net/URLPermission/policy.1 Wed Jul 05 19:50:00 2017 +0200 @@ -37,9 +37,56 @@ }; // Normal permissions that aren't granted when run under jtreg +grant codeBase "file:${java.home}/lib/ext/ucrypto.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2ucrypto"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.OracleUcrypto"; + permission java.security.SecurityPermission "clearProviderProperties.OracleUcrypto"; + permission java.security.SecurityPermission "removeProviderProperty.OracleUcrypto"; + permission java.io.FilePermission "${java.home}/lib/security/ucrypto-solaris.cfg", "read"; +}; -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; +grant codeBase "file:${java.home}/lib/ext/sunec.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunec"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunEC"; + permission java.security.SecurityPermission "clearProviderProperties.SunEC"; + permission java.security.SecurityPermission "removeProviderProperty.SunEC"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunjce_provider.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.misc"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunJCE"; + permission java.security.SecurityPermission "clearProviderProperties.SunJCE"; + permission java.security.SecurityPermission "removeProviderProperty.SunJCE"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2pkcs11"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.*"; + permission java.security.SecurityPermission "clearProviderProperties.*"; + permission java.security.SecurityPermission "removeProviderProperty.*"; + permission java.security.SecurityPermission "getProperty.auth.login.defaultCallbackHandler"; + permission java.security.SecurityPermission "authProvider.*"; + // Needed for reading PKCS11 config file and NSS library check + permission java.io.FilePermission "<>", "read"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunmscapi.jar" { + Permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunmscapi"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunMSCAPI"; + permission java.security.SecurityPermission "clearProviderProperties.SunMSCAPI"; + permission java.security.SecurityPermission "removeProviderProperty.SunMSCAPI"; }; grant codeBase "file:${{java.home}}/jre/lib/rt.jar" { diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/net/URLPermission/policy.2 --- a/jdk/test/java/net/URLPermission/policy.2 Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/net/URLPermission/policy.2 Wed Jul 05 19:50:00 2017 +0200 @@ -36,8 +36,57 @@ permission "java.lang.RuntimePermission" "setFactory"; }; -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; +// Normal permissions that aren't granted when run under jtreg +grant codeBase "file:${java.home}/lib/ext/ucrypto.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2ucrypto"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.OracleUcrypto"; + permission java.security.SecurityPermission "clearProviderProperties.OracleUcrypto"; + permission java.security.SecurityPermission "removeProviderProperty.OracleUcrypto"; + permission java.io.FilePermission "${java.home}/lib/security/ucrypto-solaris.cfg", "read"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunec.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunec"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunEC"; + permission java.security.SecurityPermission "clearProviderProperties.SunEC"; + permission java.security.SecurityPermission "removeProviderProperty.SunEC"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunjce_provider.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.misc"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunJCE"; + permission java.security.SecurityPermission "clearProviderProperties.SunJCE"; + permission java.security.SecurityPermission "removeProviderProperty.SunJCE"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2pkcs11"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.*"; + permission java.security.SecurityPermission "clearProviderProperties.*"; + permission java.security.SecurityPermission "removeProviderProperty.*"; + permission java.security.SecurityPermission "getProperty.auth.login.defaultCallbackHandler"; + permission java.security.SecurityPermission "authProvider.*"; + // Needed for reading PKCS11 config file and NSS library check + permission java.io.FilePermission "<>", "read"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunmscapi.jar" { + Permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunmscapi"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunMSCAPI"; + permission java.security.SecurityPermission "clearProviderProperties.SunMSCAPI"; + permission java.security.SecurityPermission "removeProviderProperty.SunMSCAPI"; }; grant codeBase "file:///export/repos/jdk8/build/linux-x86_64-normal-server-fastdebug/images/j2sdk-image/jre/lib/rt.jar" { diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/net/URLPermission/policy.3 --- a/jdk/test/java/net/URLPermission/policy.3 Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/net/URLPermission/policy.3 Wed Jul 05 19:50:00 2017 +0200 @@ -37,9 +37,56 @@ }; // Normal permissions that aren't granted when run under jtreg +grant codeBase "file:${java.home}/lib/ext/ucrypto.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2ucrypto"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.OracleUcrypto"; + permission java.security.SecurityPermission "clearProviderProperties.OracleUcrypto"; + permission java.security.SecurityPermission "removeProviderProperty.OracleUcrypto"; + permission java.io.FilePermission "${java.home}/lib/security/ucrypto-solaris.cfg", "read"; +}; -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; +grant codeBase "file:${java.home}/lib/ext/sunec.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunec"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunEC"; + permission java.security.SecurityPermission "clearProviderProperties.SunEC"; + permission java.security.SecurityPermission "removeProviderProperty.SunEC"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunjce_provider.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.misc"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunJCE"; + permission java.security.SecurityPermission "clearProviderProperties.SunJCE"; + permission java.security.SecurityPermission "removeProviderProperty.SunJCE"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2pkcs11"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.*"; + permission java.security.SecurityPermission "clearProviderProperties.*"; + permission java.security.SecurityPermission "removeProviderProperty.*"; + permission java.security.SecurityPermission "getProperty.auth.login.defaultCallbackHandler"; + permission java.security.SecurityPermission "authProvider.*"; + // Needed for reading PKCS11 config file and NSS library check + permission java.io.FilePermission "<>", "read"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunmscapi.jar" { + Permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunmscapi"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunMSCAPI"; + permission java.security.SecurityPermission "clearProviderProperties.SunMSCAPI"; + permission java.security.SecurityPermission "removeProviderProperty.SunMSCAPI"; }; grant codeBase "file:${{java.home}}/jre/lib/rt.jar" { diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/nio/charset/spi/default-pol --- a/jdk/test/java/nio/charset/spi/default-pol Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/nio/charset/spi/default-pol Wed Jul 05 19:50:00 2017 +0200 @@ -1,9 +1,3 @@ - -// Standard extensions get all permissions by default - -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; // default permissions granted to all domains diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy --- a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // test explicitly acccesses sun.rmi.server.ActivatableRef permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy --- a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy --- a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // need to move some classes out of the tests classpath; specific to this test permission java.io.FilePermission "${test.classes}", "read,write,delete"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy --- a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy --- a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy --- a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // need to move some classes out of the tests classpath; specific to this test permission java.io.FilePermission "${test.classes}", "read,write,delete"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy --- a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // Needed because of bug#: 4182104 permission java.lang.RuntimePermission "modifyThreadGroup"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/extLoadedImpl/security.policy --- a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,3 @@ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; grant { // standard activation permissions diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy --- a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy --- a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy --- a/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy --- a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy --- a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy --- a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/restartService/security.policy --- a/jdk/test/java/rmi/activation/Activatable/restartService/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/restartService/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy --- a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy --- a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/ActivationSystem/activeGroup/security.policy --- a/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,3 @@ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; grant { // standard test activation permissions diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/security.policy --- a/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/security.policy --- a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/activation/CommandEnvironment/security.policy --- a/jdk/test/java/rmi/activation/CommandEnvironment/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/activation/CommandEnvironment/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // standard test activation permissions permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/dgc/VMID/security.policy --- a/jdk/test/java/rmi/dgc/VMID/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/dgc/VMID/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,11 +1,6 @@ /* * security policy used by MarshalForeignStub test */ - -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // used by TestLibrary to determine test environment diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/dgc/dgcImplInsulation/security.policy --- a/jdk/test/java/rmi/dgc/dgcImplInsulation/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/dgc/dgcImplInsulation/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,11 +1,6 @@ /* * security policy used by the test process */ - -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // so that synchronous DGC dirty call will succeed permission java.net.SocketPermission "*:1024-", "accept,connect,listen"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/registry/classPathCodebase/security.policy --- a/jdk/test/java/rmi/registry/classPathCodebase/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/registry/classPathCodebase/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // need to move some classes out of the test's classpath; specific to this test permission java.io.FilePermission "${test.classes}", "read,write,delete"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMIClassLoader/delegateToContextLoader/security.policy --- a/jdk/test/java/rmi/server/RMIClassLoader/delegateToContextLoader/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMIClassLoader/delegateToContextLoader/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // test must create a context loader for the current thread. permission java.lang.RuntimePermission "createClassLoader"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMIClassLoader/downloadArrayClass/security.policy --- a/jdk/test/java/rmi/server/RMIClassLoader/downloadArrayClass/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMIClassLoader/downloadArrayClass/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { permission java.util.PropertyPermission "java.rmi.server.codebase", "read,write"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMIClassLoader/getClassLoader/security.policy --- a/jdk/test/java/rmi/server/RMIClassLoader/getClassLoader/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMIClassLoader/getClassLoader/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // permissions needed to move classes into separate codebase directories permission java.io.FilePermission diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMIClassLoader/loadProxyClasses/security.policy --- a/jdk/test/java/rmi/server/RMIClassLoader/loadProxyClasses/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMIClassLoader/loadProxyClasses/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // permissions needed to move classes into separate codebase directories diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMIClassLoader/spi/security.policy --- a/jdk/test/java/rmi/server/RMIClassLoader/spi/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMIClassLoader/spi/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // permissions needed to move classes into separate codebase directories diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMIClassLoader/useCodebaseOnly/security.policy --- a/jdk/test/java/rmi/server/RMIClassLoader/useCodebaseOnly/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMIClassLoader/useCodebaseOnly/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // specific property access needed by this test diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMIClassLoader/useGetURLs/security.policy --- a/jdk/test/java/rmi/server/RMIClassLoader/useGetURLs/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMIClassLoader/useGetURLs/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // the test needs to move classfiles out of its classpath permission java.io.FilePermission "${test.classes}", "read,write,delete"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/security.policy --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // property specifically accessed by this test permission java.util.PropertyPermission "user.name", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/security.policy --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // used by TestLibrary to determine extra commandline properties permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/security.policy --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // used by TestLibrary to determine extra commandline properties permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/RemoteServer/setLogPermission/java.policy --- a/jdk/test/java/rmi/server/RemoteServer/setLogPermission/java.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/RemoteServer/setLogPermission/java.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,7 +1,3 @@ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { permission java.util.logging.LoggingPermission "control"; }; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/clientStackTrace/security.policy --- a/jdk/test/java/rmi/server/clientStackTrace/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/clientStackTrace/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // test needs to export rmid and communicate with objects on arbitrary ports permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/server/useCustomRef/security.policy --- a/jdk/test/java/rmi/server/useCustomRef/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/server/useCustomRef/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // the test uses a class in the package sun.rmi.server permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/transport/checkLeaseInfoLeak/security.policy --- a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // used by TestLibrary to determine extra commandline properties permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/transport/dgcDeadLock/security.policy --- a/jdk/test/java/rmi/transport/dgcDeadLock/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/transport/dgcDeadLock/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by the test process */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // used by TestLibrary to determine extra commandline properties permission java.io.FilePermission "..${/}..${/}test.props", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/rmi/transport/httpSocket/security.policy --- a/jdk/test/java/rmi/transport/httpSocket/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/rmi/transport/httpSocket/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,3 @@ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; grant { permission java.net.SocketPermission "*:1024-", "accept,connect,listen"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/security/KeyRep/Serial.policy --- a/jdk/test/java/security/KeyRep/Serial.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/security/KeyRep/Serial.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,10 @@ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; +grant codeBase "file:${java.home}/lib/ext/sunjce_provider.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.misc"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunJCE"; + permission java.security.SecurityPermission "clearProviderProperties.SunJCE"; + permission java.security.SecurityPermission "removeProviderProperty.SunJCE"; }; grant { diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/security/KeyRep/SerialOld.policy --- a/jdk/test/java/security/KeyRep/SerialOld.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/security/KeyRep/SerialOld.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,53 @@ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; +grant codeBase "file:${java.home}/lib/ext/ucrypto.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2ucrypto"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.OracleUcrypto"; + permission java.security.SecurityPermission "clearProviderProperties.OracleUcrypto"; + permission java.security.SecurityPermission "removeProviderProperty.OracleUcrypto"; + permission java.io.FilePermission "${java.home}/lib/security/ucrypto-solaris.cfg", "read"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunec.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunec"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunEC"; + permission java.security.SecurityPermission "clearProviderProperties.SunEC"; + permission java.security.SecurityPermission "removeProviderProperty.SunEC"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunjce_provider.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.misc"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunJCE"; + permission java.security.SecurityPermission "clearProviderProperties.SunJCE"; + permission java.security.SecurityPermission "removeProviderProperty.SunJCE"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2pkcs11"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.*"; + permission java.security.SecurityPermission "clearProviderProperties.*"; + permission java.security.SecurityPermission "removeProviderProperty.*"; + permission java.security.SecurityPermission "getProperty.auth.login.defaultCallbackHandler"; + permission java.security.SecurityPermission "authProvider.*"; + // Needed for reading PKCS11 config file and NSS library check + permission java.io.FilePermission "<>", "read"; +}; + +grant codeBase "file:${java.home}/lib/ext/sunmscapi.jar" { + Permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "loadLibrary.sunmscapi"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunMSCAPI"; + permission java.security.SecurityPermission "clearProviderProperties.SunMSCAPI"; + permission java.security.SecurityPermission "removeProviderProperty.SunMSCAPI"; }; grant { @@ -8,11 +56,11 @@ permission java.util.PropertyPermission "test.src", "read"; permission java.lang.RuntimePermission - "accessClassInPackage.sun.security.provider"; + "accessClassInPackage.sun.security.provider"; permission java.lang.RuntimePermission - "accessClassInPackage.sun.security.pkcs"; + "accessClassInPackage.sun.security.pkcs"; permission java.lang.RuntimePermission - "accessClassInPackage.sun.security.x509"; + "accessClassInPackage.sun.security.x509"; permission java.lang.RuntimePermission - "accessClassInPackage.sun.security.rsa"; + "accessClassInPackage.sun.security.rsa"; }; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/security/Policy/GetInstance/GetInstance.policy --- a/jdk/test/java/security/Policy/GetInstance/GetInstance.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/security/Policy/GetInstance/GetInstance.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,3 @@ -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; grant { permission java.security.SecurityPermission diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/security/Policy/GetInstance/GetInstance.policyURL --- a/jdk/test/java/security/Policy/GetInstance/GetInstance.policyURL Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/security/Policy/GetInstance/GetInstance.policyURL Wed Jul 05 19:50:00 2017 +0200 @@ -1,7 +1,3 @@ -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; - grant { permission java.security.SecurityPermission "GetInstanceTest"; }; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/security/Policy/GetInstance/GetInstanceSecurity.policy --- a/jdk/test/java/security/Policy/GetInstance/GetInstanceSecurity.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/security/Policy/GetInstance/GetInstanceSecurity.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,7 +1,3 @@ -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; - grant { // do not grant this: // diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/security/Security/AddProvider.policy.1 --- a/jdk/test/java/security/Security/AddProvider.policy.1 Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/security/Security/AddProvider.policy.1 Wed Jul 05 19:50:00 2017 +0200 @@ -1,7 +1,3 @@ -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; - grant { permission java.security.SecurityPermission "insertProvider"; }; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/security/Security/AddProvider.policy.2 --- a/jdk/test/java/security/Security/AddProvider.policy.2 Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/security/Security/AddProvider.policy.2 Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,3 @@ -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; grant { permission java.security.SecurityPermission "insertProvider.Test1"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/security/Security/AddProvider.policy.3 --- a/jdk/test/java/security/Security/AddProvider.policy.3 Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/security/Security/AddProvider.policy.3 Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,3 @@ -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; grant { permission java.security.SecurityPermission "insertProvider.*"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/security/Security/removing/RemoveStaticProvider.policy --- a/jdk/test/java/security/Security/removing/RemoveStaticProvider.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/security/Security/removing/RemoveStaticProvider.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,10 +1,15 @@ + +grant codeBase "file:${java.home}/lib/ext/sunjce_provider.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.misc"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.SunJCE"; + permission java.security.SecurityPermission "clearProviderProperties.SunJCE"; + permission java.security.SecurityPermission "removeProviderProperty.SunJCE"; +}; + grant { permission java.security.SecurityPermission "removeProvider.SunJCE"; permission java.security.SecurityPermission "insertProvider.SunJCE"; }; -// Standard extensions get all permissions -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/text/Bidi/Bug7051769.java --- a/jdk/test/java/text/Bidi/Bug7051769.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/text/Bidi/Bug7051769.java Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 @@ -23,8 +23,11 @@ /* * @test - * @bug 7051769 + * @bug 7051769 8038092 * @summary verify that Bidi.toString() returns the corect result. + * The second run is intended to test lazy SharedSectets init for 8038092 + * @run main Bug7051769 + * @run main/othervm -DpreloadBidi=true Bug7051769 */ import java.awt.font.*; import java.text.*; @@ -32,6 +35,18 @@ public class Bug7051769 { + static { + if (System.getProperty("preloadBidi", "").equals("true")) { + // Make sure the SharedSecret is lazily initialized correctly + try { + Class.forName("sun.text.bidi.BidiBase"); + System.out.println("BidiBase class has been pre-loaded."); + } catch (ClassNotFoundException e) { + System.out.println("BidiBase class could not be pre-loaded."); + } + } + } + private static boolean err = false; public static void main(String[] args) { diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/util/IdentityHashMap/Capacity.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/IdentityHashMap/Capacity.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,226 @@ +/* + * 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.reflect.Field; +import java.util.ArrayList; +import java.util.Collections; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Random; + +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import static org.testng.Assert.*; + +/* + * @test + * @bug 6904367 + * @summary IdentityHashMap reallocates storage when inserting expected + * number of elements + * @run testng Capacity + */ + +@Test +public class Capacity { + static final Field tableField; + static final Random random = new Random(); + static final Object[][] sizesData; + + @DataProvider(name="sizes", parallel = true) + public Object[][] sizesToTest() { return sizesData; } + + static { + try { + tableField = IdentityHashMap.class.getDeclaredField("table"); + tableField.setAccessible(true); + } catch (NoSuchFieldException e) { + throw new LinkageError("table", e); + } + + ArrayList sizes = new ArrayList<>(); + for (int size = 0; size < 200; size++) + sizes.add(new Object[] { size }); + + // some numbers known to demonstrate bug 6904367 + for (int size : new int[] {682, 683, 1365, 2730, 2731, 5461}) + sizes.add(new Object[] { size }); + + // a few more random sizes to try + for (int i = 0; i != 128; i++) + sizes.add(new Object[] { random.nextInt(5000) }); + + sizesData = sizes.toArray(new Object[0][]); + } + + static int capacity(IdentityHashMap map) { + try { + return ((Object[]) tableField.get(map)).length / 2; + } catch (Throwable t) { + throw new LinkageError("table", t); + } + } + + static void assertCapacity(IdentityHashMap map, + int expectedCapacity) { + assertEquals(capacity(map), expectedCapacity); + } + + static void growUsingPut(IdentityHashMap map, + int elementsToAdd) { + for (int i = 0; i < elementsToAdd; i++) + map.put(new Object(), new Object()); + } + + static void growUsingPutAll(IdentityHashMap map, + int elementsToAdd) { + IdentityHashMap other = new IdentityHashMap<>(); + growUsingPut(other, elementsToAdd); + map.putAll(other); + } + + static void growUsingRepeatedPutAll(IdentityHashMap map, + int elementsToAdd) { + for (int i = 0; i < elementsToAdd; i++) + map.putAll(Collections.singletonMap(new Object(), + new Object())); + } + + /** + * Checks that expected number of items can be inserted into + * the map without resizing of the internal storage + */ + @Test(dataProvider = "sizes") + public void canInsertExpectedItemsWithoutResizing(int size) + throws Throwable { + // First try growing using put() + IdentityHashMap m = new IdentityHashMap<>(size); + int initialCapacity = capacity(m); + growUsingPut(m, size); + assertCapacity(m, initialCapacity); + + // Doubling from the expected size will cause exactly one + // resize, except near minimum capacity. + if (size > 1) { + growUsingPut(m, size); + assertCapacity(m, 2 * initialCapacity); + } + + // Try again, growing with putAll() + m = new IdentityHashMap<>(size); + initialCapacity = capacity(m); + growUsingPutAll(m, size); + assertCapacity(m, initialCapacity); + + // Doubling from the expected size will cause exactly one + // resize, except near minimum capacity. + if (size > 1) { + growUsingPutAll(m, size); + assertCapacity(m, 2 * initialCapacity); + } + } + + /** + * Given the expected size, computes such a number N of items that + * inserting (N+1) items will trigger resizing of the internal storage + */ + static int threshold(int size) throws Throwable { + IdentityHashMap m = new IdentityHashMap<>(size); + int initialCapacity = capacity(m); + while (capacity(m) == initialCapacity) + growUsingPut(m, 1); + return m.size() - 1; + } + + /** + * Checks that inserting (threshold+1) item causes resizing + * of the internal storage + */ + @Test(dataProvider = "sizes") + public void passingThresholdCausesResize(int size) throws Throwable { + final int threshold = threshold(size); + IdentityHashMap m = new IdentityHashMap<>(threshold); + int initialCapacity = capacity(m); + + growUsingPut(m, threshold); + assertCapacity(m, initialCapacity); + + growUsingPut(m, 1); + assertCapacity(m, 2 * initialCapacity); + } + + /** + * Checks that 4 methods of requiring capacity lead to the same + * internal capacity, unless sized below default capacity. + */ + @Test(dataProvider = "sizes") + public void differentGrowthPatternsResultInSameCapacity(int size) + throws Throwable { + if (size < 21) // 21 is default maxExpectedSize + return; + + IdentityHashMap m; + m = new IdentityHashMap(size); + int capacity1 = capacity(m); + + m = new IdentityHashMap<>(); + growUsingPut(m, size); + int capacity2 = capacity(m); + + m = new IdentityHashMap<>(); + growUsingPutAll(m, size); + int capacity3 = capacity(m); + + m = new IdentityHashMap<>(); + growUsingRepeatedPutAll(m, size); + int capacity4 = capacity(m); + + if (capacity1 != capacity2 || + capacity2 != capacity3 || + capacity3 != capacity4) + throw new AssertionError("Capacities not equal: " + + capacity1 + " " + + capacity2 + " " + + capacity3 + " " + + capacity4); + } + + public void defaultExpectedMaxSizeIs21() { + assertCapacity(new IdentityHashMap(), 32); + assertCapacity(new IdentityHashMap(21), 32); + } + + public void minimumCapacityIs4() { + assertCapacity(new IdentityHashMap(0), 4); + assertCapacity(new IdentityHashMap(1), 4); + assertCapacity(new IdentityHashMap(2), 4); + assertCapacity(new IdentityHashMap(3), 8); + } + + @Test(enabled = false) + /** needs too much memory to run normally */ + public void maximumCapacityIs2ToThe29() { + assertCapacity(new IdentityHashMap(Integer.MAX_VALUE), + 1 << 29); + } +} diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/util/logging/CheckZombieLockTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/logging/CheckZombieLockTest.java Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,369 @@ +/* + * 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 + * @bug 8048020 + * @author Daniel Fuchs + * @summary Regression on java.util.logging.FileHandler. + * The fix is to avoid filling up the file system with zombie lock files. + * + * @run main/othervm CheckZombieLockTest WRITABLE CLOSE CLEANUP + * @run main/othervm CheckZombieLockTest CLEANUP + * @run main/othervm CheckZombieLockTest WRITABLE + * @run main/othervm CheckZombieLockTest CREATE_FIRST + * @run main/othervm CheckZombieLockTest CREATE_NEXT + * @run main/othervm CheckZombieLockTest CREATE_NEXT + * @run main/othervm CheckZombieLockTest CLEANUP + * @run main/othervm CheckZombieLockTest REUSE + * @run main/othervm CheckZombieLockTest CLEANUP + */ +import java.io.File; +import java.io.IOException; +import java.nio.channels.FileChannel; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.logging.FileHandler; +import java.util.logging.Level; +import java.util.logging.LogRecord; +public class CheckZombieLockTest { + + private static final String WRITABLE_DIR = "writable-dir"; + private static volatile boolean supportsLocking = true; + + static enum TestCase { + WRITABLE, // just verifies that we can create a file in our 'writable-dir' + CLOSE, // checks that closing a FileHandler removes its lock file + CREATE_FIRST, // verifies that 'writable-dir' contains no lock, then creates a first FileHandler. + CREATE_NEXT, // verifies that 'writable-dir' contains a single lock, then creates the next FileHandler + REUSE, // verifies that zombie lock files can be reused + CLEANUP // removes "writable-dir" + }; + + public static void main(String... args) throws IOException { + // we'll base all file creation attempts on the system temp directory, + // %t + File writableDir = setup(); + System.out.println("Writable dir is: "+writableDir.getAbsolutePath()); + // we now have one writable directory to work with: + // writableDir + if (args == null || args.length == 0) { + args = new String[] { "WRITABLE", "CLOSE", "CLEANUP" }; + } + try { + runTests(writableDir, args); + } catch (RuntimeException | IOException | Error x) { + // some error occured: cleanup + delete(writableDir); + throw x; + } + } + + /** + * @param writableDir in which log and lock file are created + * @throws SecurityException + * @throws RuntimeException + * @throws IOException + */ + private static void runTests(File writableDir, String... args) throws SecurityException, + RuntimeException, IOException { + for (String arg : args) { + switch(TestCase.valueOf(arg)) { + // Test 1: makes sure we can create FileHandler in writable directory + case WRITABLE: checkWritable(writableDir); break; + // Test 2: verifies that FileHandler.close() cleans up its lock file + case CLOSE: testFileHandlerClose(writableDir); break; + // Test 3: creates the first file handler + case CREATE_FIRST: testFileHandlerCreate(writableDir, true); break; + // Test 4, 5, ... creates the next file handler + case CREATE_NEXT: testFileHandlerCreate(writableDir, false); break; + // Checks that zombie lock files are reused appropriatly + case REUSE: testFileHandlerReuse(writableDir); break; + // Removes the writableDir + case CLEANUP: delete(writableDir); break; + default: throw new RuntimeException("No such test case: "+arg); + } + } + } + + /** + * @param writableDir in which log and lock file are created + * @throws SecurityException + * @throws RuntimeException + * @throws IOException + */ + private static void checkWritable(File writableDir) throws SecurityException, + RuntimeException, IOException { + // Test 1: make sure we can create/delete files in the writable dir. + final File file = new File(writableDir, "test.txt"); + if (!createFile(file, false)) { + throw new IOException("Can't create "+file+"\n\tUnable to run test"); + } else { + delete(file); + } + } + + + private static FileHandler createFileHandler(File writableDir) throws SecurityException, + RuntimeException, IOException { + // Test 1: make sure we can create FileHandler in writable directory + try { + FileHandler handler = new FileHandler("%t/" + WRITABLE_DIR + "/log.log"); + handler.publish(new LogRecord(Level.INFO, handler.toString())); + handler.flush(); + return handler; + } catch (IOException ex) { + throw new RuntimeException("Test failed: should have been able" + + " to create FileHandler for " + "%t/" + WRITABLE_DIR + + "/log.log in writable directory.", ex); + } + } + + private static List listLocks(File writableDir, boolean print) + throws IOException { + List locks = new ArrayList<>(); + for (File f : writableDir.listFiles()) { + if (print) { + System.out.println("Found file: " + f.getName()); + } + if (f.getName().endsWith(".lck")) { + locks.add(f); + } + } + return locks; + } + + private static void testFileHandlerClose(File writableDir) throws IOException { + File fakeLock = new File(writableDir, "log.log.lck"); + if (!createFile(fakeLock, false)) { + throw new IOException("Can't create fake lock file: "+fakeLock); + } + try { + List before = listLocks(writableDir, true); + System.out.println("before: " +before.size() + " locks found"); + FileHandler handler = createFileHandler(writableDir); + System.out.println("handler created: "+handler); + List after = listLocks(writableDir, true); + System.out.println("after creating handler: " + after.size() + " locks found"); + handler.close(); + System.out.println("handler closed: "+handler); + List afterClose = listLocks(writableDir, true); + System.out.println("after closing handler: " + afterClose.size() + " locks found"); + afterClose.removeAll(before); + if (!afterClose.isEmpty()) { + throw new RuntimeException("Zombie lock file detected: "+ afterClose); + } + } finally { + if (fakeLock.canRead()) delete(fakeLock); + } + List finalLocks = listLocks(writableDir, false); + System.out.println("After cleanup: " + finalLocks.size() + " locks found"); + } + + + private static void testFileHandlerReuse(File writableDir) throws IOException { + List before = listLocks(writableDir, true); + System.out.println("before: " +before.size() + " locks found"); + try { + if (!before.isEmpty()) { + throw new RuntimeException("Expected no lock file! Found: "+before); + } + } finally { + before.stream().forEach(CheckZombieLockTest::delete); + } + + FileHandler handler1 = createFileHandler(writableDir); + System.out.println("handler created: "+handler1); + List after = listLocks(writableDir, true); + System.out.println("after creating handler: " + after.size() + " locks found"); + if (after.size() != 1) { + throw new RuntimeException("Unexpected number of lock files found for "+handler1+": "+after); + } + final File lock = after.get(0); + after.clear(); + handler1.close(); + after = listLocks(writableDir, true); + System.out.println("after closing handler: " + after.size() + " locks found"); + if (!after.isEmpty()) { + throw new RuntimeException("Unexpected number of lock files found for "+handler1+": "+after); + } + if (!createFile(lock, false)) { + throw new IOException("Can't create fake lock file: "+lock); + } + try { + before = listLocks(writableDir, true); + System.out.println("before: " +before.size() + " locks found"); + if (before.size() != 1) { + throw new RuntimeException("Unexpected number of lock files found: "+before+" expected [" + +lock+"]."); + } + FileHandler handler2 = createFileHandler(writableDir); + System.out.println("handler created: "+handler2); + after = listLocks(writableDir, true); + System.out.println("after creating handler: " + after.size() + " locks found"); + after.removeAll(before); + if (!after.isEmpty()) { + throw new RuntimeException("Unexpected lock file found: "+after + + "\n\t" + lock + " should have been reused"); + } + handler2.close(); + System.out.println("handler closed: "+handler2); + List afterClose = listLocks(writableDir, true); + System.out.println("after closing handler: " + afterClose.size() + " locks found"); + if (!afterClose.isEmpty()) { + throw new RuntimeException("Zombie lock file detected: "+ afterClose); + } + + if (supportsLocking) { + FileChannel fc = FileChannel.open(Paths.get(lock.getAbsolutePath()), + StandardOpenOption.CREATE_NEW, StandardOpenOption.APPEND, + StandardOpenOption.WRITE); + try { + if (fc.tryLock() != null) { + System.out.println("locked: "+lock); + handler2 = createFileHandler(writableDir); + System.out.println("handler created: "+handler2); + after = listLocks(writableDir, true); + System.out.println("after creating handler: " + after.size() + " locks found"); + after.removeAll(before); + if (after.size() != 1) { + throw new RuntimeException("Unexpected lock files found: "+after + + "\n\t" + lock + " should not have been reused"); + } + } else { + throw new RuntimeException("Failed to lock: "+lock); + } + } finally { + delete(lock); + } + } + } finally { + List finalLocks = listLocks(writableDir, false); + System.out.println("end: " + finalLocks.size() + " locks found"); + delete(writableDir); + } + } + + + private static void testFileHandlerCreate(File writableDir, boolean first) + throws IOException { + List before = listLocks(writableDir, true); + System.out.println("before: " +before.size() + " locks found"); + try { + if (first && !before.isEmpty()) { + throw new RuntimeException("Expected no lock file! Found: "+before); + } else if (!first && before.size() != 1) { + throw new RuntimeException("Expected a single lock file! Found: "+before); + } + } finally { + before.stream().forEach(CheckZombieLockTest::delete); + } + FileHandler handler = createFileHandler(writableDir); + System.out.println("handler created: "+handler); + List after = listLocks(writableDir, true); + System.out.println("after creating handler: " + after.size() + " locks found"); + if (after.size() != 1) { + throw new RuntimeException("Unexpected number of lock files found for "+handler+": "+after); + } + } + + + /** + * Setup all the files and directories needed for the tests + * + * @return writable directory created that needs to be deleted when done + * @throws RuntimeException + */ + private static File setup() throws RuntimeException { + // First do some setup in the temporary directory (using same logic as + // FileHandler for %t pattern) + String tmpDir = System.getProperty("java.io.tmpdir"); // i.e. %t + if (tmpDir == null) { + tmpDir = System.getProperty("user.home"); + } + File tmpOrHomeDir = new File(tmpDir); + // Create a writable directory here (%t/writable-dir) + File writableDir = new File(tmpOrHomeDir, WRITABLE_DIR); + if (!createFile(writableDir, true)) { + throw new RuntimeException("Test setup failed: unable to create" + + " writable working directory " + + writableDir.getAbsolutePath() ); + } + + // try to determine whether file locking is supported + try { + FileChannel fc = FileChannel.open(Paths.get(writableDir.getAbsolutePath(), + UUID.randomUUID().toString()+".lck"), + StandardOpenOption.CREATE_NEW, StandardOpenOption.APPEND, + StandardOpenOption.DELETE_ON_CLOSE); + try { + fc.tryLock(); + } catch(IOException x) { + supportsLocking = false; + } finally { + fc.close(); + } + } catch(Throwable t) { + // should not happen + t.printStackTrace(); + } + return writableDir; + } + + /** + * @param newFile + * @return true if file already exists or creation succeeded + */ + private static boolean createFile(File newFile, boolean makeDirectory) { + if (newFile.exists()) { + return true; + } + if (makeDirectory) { + return newFile.mkdir(); + } else { + try { + return newFile.createNewFile(); + } catch (IOException ioex) { + ioex.printStackTrace(); + return false; + } + } + } + + /* + * Recursively delete all files starting at specified file + */ + private static void delete(File f) { + if (f != null && f.isDirectory()) { + for (File c : f.listFiles()) + delete(c); + } + if (!f.delete()) + System.err.println( + "WARNING: unable to delete/cleanup writable test directory: " + + f ); + } +} diff -r 376a52c9540c -r acabdf6da9db jdk/test/java/util/logging/LoggingDeadlock2.java --- a/jdk/test/java/util/logging/LoggingDeadlock2.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/java/util/logging/LoggingDeadlock2.java Wed Jul 05 19:50:00 2017 +0200 @@ -28,7 +28,7 @@ * @author Serguei Spitsyn / Hitachi / Martin Buchholz * * @build LoggingDeadlock2 - * @run main/timeout=15 LoggingDeadlock2 + * @run main LoggingDeadlock2 * * There is a clear deadlock between LogManager. and * Cleaner.run() methods. diff -r 376a52c9540c -r acabdf6da9db jdk/test/javax/security/auth/login/Configuration/GetInstanceSecurity.grantedPolicy --- a/jdk/test/javax/security/auth/login/Configuration/GetInstanceSecurity.grantedPolicy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/javax/security/auth/login/Configuration/GetInstanceSecurity.grantedPolicy Wed Jul 05 19:50:00 2017 +0200 @@ -1,7 +1,3 @@ -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; - grant { permission java.util.PropertyPermission "test.src", "read"; permission java.io.FilePermission "${test.src}${/}*", "read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/javax/security/auth/login/Configuration/GetInstanceSecurity.policy --- a/jdk/test/javax/security/auth/login/Configuration/GetInstanceSecurity.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/javax/security/auth/login/Configuration/GetInstanceSecurity.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,6 +1,3 @@ -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; grant { diff -r 376a52c9540c -r acabdf6da9db jdk/test/jdk/nio/zipfs/test.policy --- a/jdk/test/jdk/nio/zipfs/test.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/jdk/nio/zipfs/test.policy Wed Jul 05 19:50:00 2017 +0200 @@ -4,10 +4,6 @@ permission java.util.PropertyPermission "*", "read"; }; -grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" { - permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; -}; - grant { permission java.io.FilePermission "<>","read,write,delete"; permission java.util.PropertyPermission "test.jdk","read"; diff -r 376a52c9540c -r acabdf6da9db jdk/test/lib/security/CheckBlacklistedCerts.java --- a/jdk/test/lib/security/CheckBlacklistedCerts.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/lib/security/CheckBlacklistedCerts.java Wed Jul 05 19:50:00 2017 +0200 @@ -62,9 +62,9 @@ // a -testonly JPRT job. File[] blacklists = { new File(System.getProperty("test.src"), - "../../../src/share/lib/security/blacklisted.certs.pem"), + "../../../make/data/blacklistedcertsconverter/blacklisted.certs.pem"), new File(System.getProperty("test.src"), - "../../../src/closed/share/lib/security/blacklisted.certs.pem") + "../../../make/closed/data/blacklistedcertsconverter/blacklisted.certs.pem") }; // Is this an OPENJDK build? diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/net/www/http/HttpClient/IsKeepingAlive.policy --- a/jdk/test/sun/net/www/http/HttpClient/IsKeepingAlive.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/net/www/http/HttpClient/IsKeepingAlive.policy Wed Jul 05 19:50:00 2017 +0200 @@ -5,13 +5,6 @@ permission java.lang.RuntimePermission "accessClassInPackage.sun.net.www.http"; }; -// From system java.policy -// Standard extensions get all permissions by default - -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - // default permissions granted to all domains grant { diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/net/www/http/HttpClient/OpenServer.policy --- a/jdk/test/sun/net/www/http/HttpClient/OpenServer.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/net/www/http/HttpClient/OpenServer.policy Wed Jul 05 19:50:00 2017 +0200 @@ -5,13 +5,6 @@ permission java.lang.RuntimePermission "accessClassInPackage.sun.net.www.http"; }; -// From system java.policy -// Standard extensions get all permissions by default - -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - // default permissions granted to all domains grant { diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/rmi/rmic/minimizeWrapperInstances/run.sh --- a/jdk/test/sun/rmi/rmic/minimizeWrapperInstances/run.sh Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/rmi/rmic/minimizeWrapperInstances/run.sh Wed Jul 05 19:50:00 2017 +0200 @@ -45,9 +45,3 @@ ${TESTJAVA}/bin/rmic -classpath ${TESTCLASSES:-.} -d ${TESTCLASSES:-.} -vcompat PImpl ${TESTJAVA}/bin/java ${TESTVMOPTS} -classpath ${TESTCLASSES:-.} Test - -${TESTJAVA}/bin/rmic -Xnew -classpath ${TESTCLASSES:-.} -d ${TESTCLASSES:-.} PImpl -${TESTJAVA}/bin/java ${TESTVMOPTS} -classpath ${TESTCLASSES:-.} Test - -${TESTJAVA}/bin/rmic -Xnew -classpath ${TESTCLASSES:-.} -d ${TESTCLASSES:-.} -vcompat PImpl -${TESTJAVA}/bin/java ${TESTVMOPTS} -classpath ${TESTCLASSES:-.} Test diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/rmi/server/MarshalOutputStream/marshalForeignStub/security.policy --- a/jdk/test/sun/rmi/server/MarshalOutputStream/marshalForeignStub/security.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/rmi/server/MarshalOutputStream/marshalForeignStub/security.policy Wed Jul 05 19:50:00 2017 +0200 @@ -2,10 +2,6 @@ * security policy used by MarshalForeignStub test */ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - grant { // used by TestLibrary to determine test environment diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/security/krb5/auto/SaslBasic.java --- a/jdk/test/sun/security/krb5/auto/SaslBasic.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/security/krb5/auto/SaslBasic.java Wed Jul 05 19:50:00 2017 +0200 @@ -29,6 +29,8 @@ * @run main/othervm SaslBasic bound * @run main/othervm SaslBasic unbound */ +import com.sun.security.jgss.InquireType; + import java.io.IOException; import java.util.Arrays; import java.util.HashMap; @@ -82,11 +84,17 @@ } } if (!bound) { - String boundName = (String)ss.getNegotiatedProperty(Sasl.BOUND_SERVER_NAME); + String boundName = (String)ss.getNegotiatedProperty( + Sasl.BOUND_SERVER_NAME); if (!boundName.equals(name)) { throw new Exception("Wrong bound server name"); } } + Object key = ss.getNegotiatedProperty( + "com.sun.security.jgss.inquiretype.krb5_get_session_key"); + if (key == null) { + throw new Exception("Extended negotiated property not read"); + } byte[] hello = "hello".getBytes(); token = sc.wrap(hello, 0, hello.length); token = ss.unwrap(token, 0, token.length); diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/security/pkcs11/KeyStore/Basic.policy --- a/jdk/test/sun/security/pkcs11/KeyStore/Basic.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/security/pkcs11/KeyStore/Basic.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,15 @@ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; +grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2pkcs11"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.*"; + permission java.security.SecurityPermission "clearProviderProperties.*"; + permission java.security.SecurityPermission "removeProviderProperty.*"; + permission java.security.SecurityPermission "getProperty.auth.login.defaultCallbackHandler"; + permission java.security.SecurityPermission "authProvider.*"; + // Needed for reading PKCS11 config file and NSS library check + permission java.io.FilePermission "<>", "read"; }; grant codebase "file:${user.dir}${/}loader.jar" { diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/security/pkcs11/Provider/Login.policy --- a/jdk/test/sun/security/pkcs11/Provider/Login.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/security/pkcs11/Provider/Login.policy Wed Jul 05 19:50:00 2017 +0200 @@ -1,5 +1,16 @@ -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; +grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" { + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; + permission java.lang.RuntimePermission "loadLibrary.j2pkcs11"; + permission java.util.PropertyPermission "*", "read"; + permission java.security.SecurityPermission "putProviderProperty.*"; + permission java.security.SecurityPermission "clearProviderProperties.*"; + permission java.security.SecurityPermission "removeProviderProperty.*"; + permission java.security.SecurityPermission "getProperty.auth.login.defaultCallbackHandler"; + + permission java.security.SecurityPermission "authProvider.*"; + // Needed for reading PKCS11 config file and NSS library check + permission java.io.FilePermission "<>", "read"; }; grant { diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/security/provider/PolicyFile/Alias.policy --- a/jdk/test/sun/security/provider/PolicyFile/Alias.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/security/provider/PolicyFile/Alias.policy Wed Jul 05 19:50:00 2017 +0200 @@ -10,9 +10,3 @@ principal com.sun.security.auth.UnixPrincipal "unix" { permission java.security.SecurityPermission "ALIAS"; }; - -// Standard extensions get all permissions -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/security/provider/PolicyFile/AliasExpansion.policy --- a/jdk/test/sun/security/provider/PolicyFile/AliasExpansion.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/security/provider/PolicyFile/AliasExpansion.policy Wed Jul 05 19:50:00 2017 +0200 @@ -20,9 +20,3 @@ permission java.security.SecurityPermission "${{alias}}"; }; - -// Standard extensions get all permissions -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - diff -r 376a52c9540c -r acabdf6da9db jdk/test/sun/security/provider/PolicyFile/TrustedCert.policy --- a/jdk/test/sun/security/provider/PolicyFile/TrustedCert.policy Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/sun/security/provider/PolicyFile/TrustedCert.policy Wed Jul 05 19:50:00 2017 +0200 @@ -9,8 +9,3 @@ permission java.util.PropertyPermission "foo", "read"; }; -// Standard extensions get all permissions -grant codeBase "file:${java.home}/lib/ext/*" { - permission java.security.AllPermission; -}; - diff -r 376a52c9540c -r acabdf6da9db jdk/test/tools/pack200/PackageVersionTest.java --- a/jdk/test/tools/pack200/PackageVersionTest.java Sun Jun 15 08:41:57 2014 -0700 +++ b/jdk/test/tools/pack200/PackageVersionTest.java Wed Jul 05 19:50:00 2017 +0200 @@ -59,13 +59,10 @@ } File out = new File("test.pack"); - createClassFile("Test5"); createClassFile("Test6"); createClassFile("Test7"); verify6991164(); - verifyPack("Test5.class", JAVA5_PACKAGE_MAJOR_VERSION, - JAVA5_PACKAGE_MINOR_VERSION); verifyPack("Test6.class", JAVA6_PACKAGE_MAJOR_VERSION, JAVA6_PACKAGE_MINOR_VERSION); @@ -98,7 +95,7 @@ String target = name.substring(name.length() - 1); String javacCmds[] = { "-source", - "5", + "6", "-target", name.substring(name.length() - 1), name + ".java" diff -r 376a52c9540c -r acabdf6da9db make/jprt.properties --- a/make/jprt.properties Sun Jun 15 08:41:57 2014 -0700 +++ b/make/jprt.properties Wed Jul 05 19:50:00 2017 +0200 @@ -193,9 +193,7 @@ ${my.make.rule.test.targets.core}, \ ${my.make.rule.test.targets.svc}, \ ${my.test.target.set:TESTNAME=jdk_awt}, \ - ${my.test.target.set:TESTNAME=jdk_beans1}, \ - ${my.test.target.set:TESTNAME=jdk_beans2}, \ - ${my.test.target.set:TESTNAME=jdk_beans3}, \ + ${my.test.target.set:TESTNAME=jdk_beans}, \ ${my.test.target.set:TESTNAME=jdk_sound}, \ ${my.test.target.set:TESTNAME=jdk_swing} diff -r 376a52c9540c -r acabdf6da9db nashorn/.hgtags --- a/nashorn/.hgtags Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/.hgtags Wed Jul 05 19:50:00 2017 +0200 @@ -255,3 +255,4 @@ 46e36a92e37c06dea50f8c829549d9d0bfed4e3c jdk9-b19 d703c59c556f9fcd9604272806ef7acf55c92363 jdk9-b20 174cf53bce4e93a3d5d880ed7915ce8d0f08bc5e jdk9-b21 +a9d39bcfeb1bb3f7de929c56a2ecbea10a554ca1 jdk9-b22 diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/api/scripting/NashornException.java --- a/nashorn/src/jdk/nashorn/api/scripting/NashornException.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/api/scripting/NashornException.java Wed Jul 05 19:50:00 2017 +0200 @@ -53,9 +53,6 @@ // underlying ECMA error object - lazily initialized private Object ecmaError; - /** script source name used for "engine.js" */ - public static final String ENGINE_SCRIPT_SOURCE_NAME = "nashorn:engine/resources/engine.js"; - /** * Constructor * diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java --- a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java Wed Jul 05 19:50:00 2017 +0200 @@ -25,8 +25,6 @@ package jdk.nashorn.api.scripting; -import static jdk.nashorn.internal.runtime.ECMAErrors.referenceError; -import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; import static jdk.nashorn.internal.runtime.Source.sourceFor; import java.io.IOException; @@ -34,13 +32,10 @@ import java.lang.invoke.MethodHandles; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.net.URL; import java.security.AccessControlContext; import java.security.AccessController; import java.security.Permissions; import java.security.PrivilegedAction; -import java.security.PrivilegedActionException; -import java.security.PrivilegedExceptionAction; import java.security.ProtectionDomain; import java.text.MessageFormat; import java.util.Locale; @@ -58,7 +53,6 @@ import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ErrorManager; -import jdk.nashorn.internal.runtime.Property; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; import jdk.nashorn.internal.runtime.ScriptRuntime; @@ -98,9 +92,6 @@ // This is the initial default Nashorn global object. // This is used as "shared" global if above option is true. private final Global global; - // initialized bit late to be made 'final'. - // Property object for "context" property of global object. - private volatile Property contextProperty; // default options passed to Nashorn Options object private static final String[] DEFAULT_OPTIONS = new String[] { "-doe" }; @@ -122,30 +113,6 @@ } } - // load engine.js - private static Source loadEngineJSSource() { - final String script = "resources/engine.js"; - try { - return AccessController.doPrivileged( - new PrivilegedExceptionAction() { - @Override - public Source run() throws IOException { - final URL url = NashornScriptEngine.class.getResource(script); - return sourceFor(NashornException.ENGINE_SCRIPT_SOURCE_NAME, url); - } - } - ); - } catch (final PrivilegedActionException e) { - if (Context.DEBUG) { - e.printStackTrace(); - } - throw new RuntimeException(e); - } - } - - // Source object for engine.js - private static final Source ENGINE_SCRIPT_SRC = loadEngineJSSource(); - NashornScriptEngine(final NashornScriptEngineFactory factory, final ClassLoader appLoader) { this(factory, DEFAULT_OPTIONS, appLoader); } @@ -248,33 +215,6 @@ return getInterfaceInner(thiz, clazz); } - // These are called from the "engine.js" script - - /** - * This hook is used to search js global variables exposed from Java code. - * - * @param self 'this' passed from the script - * @param ctxt current ScriptContext in which name is searched - * @param name name of the variable searched - * @return the value of the named variable - */ - public Object __noSuchProperty__(final Object self, final ScriptContext ctxt, final String name) { - if (ctxt != null) { - final int scope = ctxt.getAttributesScope(name); - final Global ctxtGlobal = getNashornGlobalFrom(ctxt); - if (scope != -1) { - return ScriptObjectMirror.unwrap(ctxt.getAttribute(name, scope), ctxtGlobal); - } - - if (self == UNDEFINED) { - // scope access and so throw ReferenceError - throw referenceError(ctxtGlobal, "not.defined", name); - } - } - - return UNDEFINED; - } - // Implementation only below this point private static Source makeSource(final Reader reader, final ScriptContext ctxt) throws ScriptException { @@ -426,47 +366,12 @@ } }, CREATE_GLOBAL_ACC_CTXT); - nashornContext.initGlobal(newGlobal); + nashornContext.initGlobal(newGlobal, this); + newGlobal.setScriptContext(ctxt); - final int NON_ENUMERABLE_CONSTANT = Property.NOT_ENUMERABLE | Property.NOT_CONFIGURABLE | Property.NOT_WRITABLE; - // current ScriptContext exposed as "context" - // "context" is non-writable from script - but script engine still - // needs to set it and so save the context Property object - contextProperty = newGlobal.addOwnProperty("context", NON_ENUMERABLE_CONSTANT, ctxt); - // current ScriptEngine instance exposed as "engine". We added @SuppressWarnings("LeakingThisInConstructor") as - // NetBeans identifies this assignment as such a leak - this is a false positive as we're setting this property - // in the Global of a Context we just created - both the Context and the Global were just created and can not be - // seen from another thread outside of this constructor. - newGlobal.addOwnProperty("engine", NON_ENUMERABLE_CONSTANT, this); - // global script arguments with undefined value - newGlobal.addOwnProperty("arguments", Property.NOT_ENUMERABLE, UNDEFINED); - // file name default is null - newGlobal.addOwnProperty(ScriptEngine.FILENAME, Property.NOT_ENUMERABLE, null); - // evaluate engine.js initialization script this new global object - try { - evalImpl(compileImpl(ENGINE_SCRIPT_SRC, newGlobal), ctxt, newGlobal); - } catch (final ScriptException exp) { - throw new RuntimeException(exp); - } return newGlobal; } - // scripts should see "context" and "engine" as variables in the given global object - private void setContextVariables(final Global ctxtGlobal, final ScriptContext ctxt) { - // set "context" global variable via contextProperty - because this - // property is non-writable - contextProperty.setValue(ctxtGlobal, ctxtGlobal, ctxt, false); - Object args = ScriptObjectMirror.unwrap(ctxt.getAttribute("arguments"), ctxtGlobal); - if (args == null || args == UNDEFINED) { - args = ScriptRuntime.EMPTY_ARRAY; - } - // if no arguments passed, expose it - if (! (args instanceof ScriptObject)) { - args = ctxtGlobal.wrapAsObject(args); - ctxtGlobal.set("arguments", args, false); - } - } - private Object invokeImpl(final Object selfObject, final String name, final Object... args) throws ScriptException, NoSuchMethodException { name.getClass(); // null check @@ -533,11 +438,7 @@ } final ScriptFunction script = mgcs.getFunction(ctxtGlobal); - - // set ScriptContext variables if ctxt is non-null - if (ctxt != null) { - setContextVariables(ctxtGlobal, ctxt); - } + ctxtGlobal.setScriptContext(ctxt); return ScriptObjectMirror.translateUndefined(ScriptObjectMirror.wrap(ScriptRuntime.apply(script, ctxtGlobal), ctxtGlobal)); } catch (final Exception e) { throwAsScriptException(e, ctxtGlobal); @@ -560,10 +461,7 @@ Context.setGlobal(ctxtGlobal); } - // set ScriptContext variables if ctxt is non-null - if (ctxt != null) { - setContextVariables(ctxtGlobal, ctxt); - } + ctxtGlobal.setScriptContext(ctxt); return ScriptObjectMirror.translateUndefined(ScriptObjectMirror.wrap(ScriptRuntime.apply(script, ctxtGlobal), ctxtGlobal)); } catch (final Exception e) { throwAsScriptException(e, ctxtGlobal); diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/api/scripting/ScriptUtils.java --- a/nashorn/src/jdk/nashorn/api/scripting/ScriptUtils.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/api/scripting/ScriptUtils.java Wed Jul 05 19:50:00 2017 +0200 @@ -25,6 +25,8 @@ package jdk.nashorn.api.scripting; +import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; + import java.lang.invoke.MethodHandle; import jdk.internal.dynalink.beans.StaticClass; import jdk.internal.dynalink.linker.LinkerServices; @@ -69,12 +71,15 @@ * Create a wrapper function that calls {@code func} synchronized on {@code sync} or, if that is undefined, * {@code self}. Used to implement "sync" function in resources/mozilla_compat.js. * - * @param func the function to invoke + * @param func the function to wrap * @param sync the object to synchronize on * @return a synchronizing wrapper function */ - public static Object makeSynchronizedFunction(final ScriptFunction func, final Object sync) { - return func.makeSynchronizedFunction(sync); + public static Object makeSynchronizedFunction(final Object func, final Object sync) { + if (func instanceof ScriptFunction) { + return ((ScriptFunction)func).makeSynchronizedFunction(sync); + } + throw typeError("not.a.function", ScriptRuntime.safeToString(func)); } /** diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/api/scripting/resources/engine.js --- a/nashorn/src/jdk/nashorn/api/scripting/resources/engine.js Sun Jun 15 08:41:57 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2010, 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. - */ - -/** - * This script file is executed by script engine at the construction - * of the every new Global object. The functions here assume global variables - * "context" of type javax.script.ScriptContext and "engine" of the type - * jdk.nashorn.api.scripting.NashornScriptEngine. - **/ - -Object.defineProperty(this, "__noSuchProperty__", { - configurable: true, - enumerable: false, - writable: true, - value: function (name) { - 'use strict'; - return engine.__noSuchProperty__(this, context, name); - } -}); - -function print() { - var writer = context != null? context.writer : engine.context.writer; - if (! (writer instanceof java.io.PrintWriter)) { - writer = new java.io.PrintWriter(writer); - } - - var buf = new java.lang.StringBuilder(); - for (var i = 0; i < arguments.length; i++) { - if (i != 0) { - buf.append(' '); - } - buf.append(String(arguments[i])); - } - writer.println(buf.toString()); -} - -/** - * This is C-like printf - * - * @param format string to format the rest of the print items - * @param args variadic argument list - */ -Object.defineProperty(this, "printf", { - configurable: true, - enumerable: false, - writable: true, - value: function (format, args/*, more args*/) { - print(sprintf.apply(this, arguments)); - } -}); - -/** - * This is C-like sprintf - * - * @param format string to format the rest of the print items - * @param args variadic argument list - */ -Object.defineProperty(this, "sprintf", { - configurable: true, - enumerable: false, - writable: true, - value: function (format, args/*, more args*/) { - var len = arguments.length - 1; - var array = []; - - if (len < 0) { - return ""; - } - - for (var i = 0; i < len; i++) { - if (arguments[i+1] instanceof Date) { - array[i] = arguments[i+1].getTime(); - } else { - array[i] = arguments[i+1]; - } - } - - array = Java.to(array); - return Packages.jdk.nashorn.api.scripting.ScriptUtils.format(format, array); - } -}); diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java --- a/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java Wed Jul 05 19:50:00 2017 +0200 @@ -1317,20 +1317,14 @@ // Load up self (scope). method.loadCompilerConstant(SCOPE); - final CallNode.EvalArgs evalArgs = callNode.getEvalArgs(); + final List evalArgs = callNode.getEvalArgs().getArgs(); // load evaluated code - loadExpressionAsObject(evalArgs.getCode()); + loadExpressionAsObject(evalArgs.get(0)); // load second and subsequent args for side-effect - final List callArgs = callNode.getArgs(); - final int numArgs = callArgs.size(); + final int numArgs = evalArgs.size(); for (int i = 1; i < numArgs; i++) { - loadExpressionUnbounded(callArgs.get(i)).pop(); + loadAndDiscard(evalArgs.get(i)); } - // special/extra 'eval' arguments - loadExpressionUnbounded(evalArgs.getThis()); - method.load(evalArgs.getLocation()); - method.load(evalArgs.getStrictMode()); - method.convert(Type.OBJECT); method._goto(invoke_direct_eval); method.label(is_not_eval); @@ -1339,7 +1333,7 @@ // This is some scope 'eval' or global eval replaced by user // but not the built-in ECMAScript 'eval' function call method.loadNull(); - argsCount = loadArgs(callArgs); + argsCount = loadArgs(callNode.getArgs()); } @Override @@ -1349,6 +1343,11 @@ method._goto(eval_done); method.label(invoke_direct_eval); + // Special/extra 'eval' arguments. These can be loaded late (in consumeStack) as we know none of + // them can ever be optimistic. + method.loadCompilerConstant(THIS); + method.load(callNode.getEvalArgs().getLocation()); + method.load(CodeGenerator.this.lc.getCurrentFunction().isStrict()); // direct call to Global.directEval globalDirectEval(); convertOptimisticReturnValue(); @@ -4438,7 +4437,7 @@ private MethodEmitter globalDirectEval() { return method.invokestatic(GLOBAL_OBJECT, "directEval", - methodDescriptor(Object.class, Object.class, Object.class, Object.class, Object.class, Object.class)); + methodDescriptor(Object.class, Object.class, Object.class, Object.class, Object.class, boolean.class)); } private abstract class OptimisticOperation { diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/codegen/Lower.java --- a/nashorn/src/jdk/nashorn/internal/codegen/Lower.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/codegen/Lower.java Wed Jul 05 19:50:00 2017 +0200 @@ -27,7 +27,6 @@ import static jdk.nashorn.internal.codegen.CompilerConstants.EVAL; import static jdk.nashorn.internal.codegen.CompilerConstants.RETURN; -import static jdk.nashorn.internal.codegen.CompilerConstants.THIS; import static jdk.nashorn.internal.ir.Expression.isAlwaysTrue; import java.util.ArrayList; @@ -603,13 +602,11 @@ // 'eval' call with at least one argument if (args.size() >= 1 && EVAL.symbolName().equals(callee.getName())) { - final FunctionNode currentFunction = lc.getCurrentFunction(); - return callNode.setEvalArgs( - new CallNode.EvalArgs( - (Expression)ensureUniqueNamesIn(args.get(0)).accept(this), - compilerConstant(THIS), - evalLocation(callee), - currentFunction.isStrict())); + final List evalArgs = new ArrayList<>(args.size()); + for(final Expression arg: args) { + evalArgs.add((Expression)ensureUniqueNamesIn(arg).accept(this)); + } + return callNode.setEvalArgs(new CallNode.EvalArgs(evalArgs, evalLocation(callee))); } } diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/ir/CallNode.java --- a/nashorn/src/jdk/nashorn/internal/ir/CallNode.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/ir/CallNode.java Wed Jul 05 19:50:00 2017 +0200 @@ -65,61 +65,35 @@ * Arguments to be passed to builtin {@code eval} function */ public static class EvalArgs { - /** evaluated code */ - private final Expression code; - - /** 'this' passed to evaluated code */ - private final IdentNode evalThis; + private final List args; /** location string for the eval call */ private final String location; - /** is this call from a strict context? */ - private final boolean strictMode; - /** * Constructor * - * @param code code to evaluate - * @param evalThis this node - * @param location location for the eval call - * @param strictMode is this a call from a strict context? + * @param args arguments to eval + * @param location location for the eval call */ - public EvalArgs(final Expression code, final IdentNode evalThis, final String location, final boolean strictMode) { - this.code = code; - this.evalThis = evalThis; + public EvalArgs(final List args, final String location) { + this.args = args; this.location = location; - this.strictMode = strictMode; } /** * Return the code that is to be eval:ed by this eval function * @return code as an AST node */ - public Expression getCode() { - return code; - } - - private EvalArgs setCode(final Expression code) { - if (this.code == code) { - return this; - } - return new EvalArgs(code, evalThis, location, strictMode); + public List getArgs() { + return Collections.unmodifiableList(args); } - /** - * Get the {@code this} symbol used to invoke this eval call - * @return the {@code this} symbol - */ - public IdentNode getThis() { - return this.evalThis; - } - - private EvalArgs setThis(final IdentNode evalThis) { - if (this.evalThis == evalThis) { + private EvalArgs setArgs(final List args) { + if (this.args == args) { return this; } - return new EvalArgs(code, evalThis, location, strictMode); + return new EvalArgs(args, location); } /** @@ -129,14 +103,6 @@ public String getLocation() { return this.location; } - - /** - * Check whether this eval call is executed in strict mode - * @return true if executed in strict mode, false otherwise - */ - public boolean getStrictMode() { - return this.strictMode; - } } /** arguments for 'eval' call. Non-null only if this call node is 'eval' */ @@ -212,8 +178,7 @@ setArgs(Node.accept(visitor, Expression.class, args)). setEvalArgs(evalArgs == null ? null : - evalArgs.setCode((Expression)evalArgs.getCode().accept(visitor)). - setThis((IdentNode)evalArgs.getThis().accept(visitor)))); + evalArgs.setArgs(Node.accept(visitor, Expression.class, evalArgs.getArgs())))); // Theoretically, we'd need to instead pass lc to every setter and do a replacement on each. In practice, // setType from TypeOverride can't accept a lc, and we don't necessarily want to go there now. if (this != newCallNode) { diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/objects/Global.java --- a/nashorn/src/jdk/nashorn/internal/objects/Global.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/Global.java Wed Jul 05 19:50:00 2017 +0200 @@ -27,6 +27,7 @@ import static jdk.nashorn.internal.codegen.CompilerConstants.staticCall; import static jdk.nashorn.internal.lookup.Lookup.MH; +import static jdk.nashorn.internal.runtime.ECMAErrors.referenceError; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; @@ -45,8 +46,11 @@ import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReference; +import javax.script.ScriptContext; +import javax.script.ScriptEngine; import jdk.internal.dynalink.linker.GuardedInvocation; import jdk.internal.dynalink.linker.LinkRequest; +import jdk.nashorn.api.scripting.ScriptObjectMirror; import jdk.nashorn.internal.codegen.ApplySpecialization; import jdk.nashorn.internal.codegen.CompilerConstants.Call; import jdk.nashorn.internal.lookup.Lookup; @@ -107,6 +111,10 @@ /** Name invalidator for things like call/apply */ public static final Call BOOTSTRAP = staticCall(MethodHandles.lookup(), Global.class, "invalidateNameBootstrap", CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + /** Nashorn extension: arguments array */ + @Property(attributes = Attribute.NOT_ENUMERABLE | Attribute.NOT_CONFIGURABLE) + public Object arguments; + /** ECMA 15.1.2.2 parseInt (string , radix) */ @Property(attributes = Attribute.NOT_ENUMERABLE) public Object parseInt; @@ -411,12 +419,13 @@ // Used to store the last RegExp result to support deprecated RegExp constructor properties private RegExpResult lastRegExpResult; - private static final MethodHandle EVAL = findOwnMH_S("eval", Object.class, Object.class, Object.class); - private static final MethodHandle PRINT = findOwnMH_S("print", Object.class, Object.class, Object[].class); - private static final MethodHandle PRINTLN = findOwnMH_S("println", Object.class, Object.class, Object[].class); - private static final MethodHandle LOAD = findOwnMH_S("load", Object.class, Object.class, Object.class); - private static final MethodHandle LOADWITHNEWGLOBAL = findOwnMH_S("loadWithNewGlobal", Object.class, Object.class, Object[].class); - private static final MethodHandle EXIT = findOwnMH_S("exit", Object.class, Object.class, Object.class); + private static final MethodHandle EVAL = findOwnMH_S("eval", Object.class, Object.class, Object.class); + private static final MethodHandle NO_SUCH_PROPERTY = findOwnMH_S(NO_SUCH_PROPERTY_NAME, Object.class, Object.class, Object.class); + private static final MethodHandle PRINT = findOwnMH_S("print", Object.class, Object.class, Object[].class); + private static final MethodHandle PRINTLN = findOwnMH_S("println", Object.class, Object.class, Object[].class); + private static final MethodHandle LOAD = findOwnMH_S("load", Object.class, Object.class, Object.class); + private static final MethodHandle LOADWITHNEWGLOBAL = findOwnMH_S("loadWithNewGlobal", Object.class, Object.class, Object[].class); + private static final MethodHandle EXIT = findOwnMH_S("exit", Object.class, Object.class, Object.class); /** Invalidate a reserved name, such as "apply" or "call" if assigned */ public MethodHandle INVALIDATE_RESERVED_NAME = MH.bindTo(findOwnMH_V("invalidateReservedName", void.class, String.class), this); @@ -427,6 +436,20 @@ // context to which this global belongs to private final Context context; + // current ScriptContext to use - can be null. + private ScriptContext scontext; + // associated Property object for "context" property. + private jdk.nashorn.internal.runtime.Property scontextProperty; + + /** + * Set the current script context + * @param scontext script context + */ + public void setScriptContext(final ScriptContext scontext) { + this.scontext = scontext; + scontextProperty.setValue(this, this, scontext, false); + } + // global constants for this global - they can be replaced with MethodHandle.constant until invalidated private static AtomicReference gcsInstance = new AtomicReference<>(); @@ -447,12 +470,7 @@ // null check on context context.getClass(); - /* - * Duplicate global's map and use it. This way the initial Map filled - * by nasgen (referenced from static field in this class) is retained - * 'as is' (as that one is process wide singleton. - */ - return $nasgenmap$.duplicate(); + return $nasgenmap$; } /** @@ -483,6 +501,10 @@ return global; } + private static Global instanceFrom(final Object self) { + return self instanceof Global? (Global)self : instance(); + } + /** * Return the global constants map for fields that * can be accessed as MethodHandle.constant @@ -542,13 +564,13 @@ * as well as our extension builtin objects like "Java", "JSAdapter" as properties * of the global scope object. */ - public void initBuiltinObjects() { + public void initBuiltinObjects(final ScriptEngine engine) { if (this.builtinObject != null) { // already initialized, just return return; } - init(); + init(engine); } /** @@ -849,6 +871,32 @@ } /** + * Hook to search missing variables in ScriptContext if available + * @param self used to detect if scope call or not (this function is 'strict') + * @param name name of the variable missing + * @return value of the missing variable or undefined (or TypeError for scope search) + */ + public static Object __noSuchProperty__(final Object self, final Object name) { + final Global global = Global.instance(); + final ScriptContext sctxt = global.scontext; + final String nameStr = name.toString(); + + if (sctxt != null) { + final int scope = sctxt.getAttributesScope(nameStr); + if (scope != -1) { + return ScriptObjectMirror.unwrap(sctxt.getAttribute(nameStr, scope), global); + } + } + + if (self == UNDEFINED) { + // scope access and so throw ReferenceError + throw referenceError(global, "not.defined", nameStr); + } + + return UNDEFINED; + } + + /** * This is the eval used when 'indirect' eval call is made. * * var global = this; @@ -860,7 +908,7 @@ * @return the result of eval */ public static Object eval(final Object self, final Object str) { - return directEval(self, str, UNDEFINED, UNDEFINED, UNDEFINED); + return directEval(self, str, UNDEFINED, UNDEFINED, false); } /** @@ -876,14 +924,14 @@ * * This is directly invoked from generated when eval(code) is called in user code */ - public static Object directEval(final Object self, final Object str, final Object callThis, final Object location, final Object strict) { + public static Object directEval(final Object self, final Object str, final Object callThis, final Object location, final boolean strict) { if (!(str instanceof String || str instanceof ConsString)) { return str; } - final Global global = Global.instance(); + final Global global = Global.instanceFrom(self); final ScriptObject scope = self instanceof ScriptObject ? (ScriptObject)self : global; - return global.getContext().eval(scope, str.toString(), callThis, location, Boolean.TRUE.equals(strict), true); + return global.getContext().eval(scope, str.toString(), callThis, location, strict, true); } /** @@ -895,7 +943,7 @@ * @return result of print (undefined) */ public static Object print(final Object self, final Object... objects) { - return printImpl(false, objects); + return Global.instanceFrom(self).printImpl(false, objects); } /** @@ -907,7 +955,7 @@ * @return result of println (undefined) */ public static Object println(final Object self, final Object... objects) { - return printImpl(true, objects); + return Global.instanceFrom(self).printImpl(true, objects); } /** @@ -921,7 +969,7 @@ * @throws IOException if source could not be read */ public static Object load(final Object self, final Object source) throws IOException { - final Global global = Global.instance(); + final Global global = Global.instanceFrom(self); final ScriptObject scope = self instanceof ScriptObject ? (ScriptObject)self : global; return global.getContext().load(scope, source); } @@ -937,7 +985,7 @@ * @throws IOException if source could not be read */ public static Object loadWithNewGlobal(final Object self, final Object...args) throws IOException { - final Global global = Global.instance(); + final Global global = Global.instanceFrom(self); final int length = args.length; final boolean hasArgs = 0 < length; final Object from = hasArgs ? args[0] : UNDEFINED; @@ -1604,7 +1652,7 @@ splitState = state; } - private void init() { + private void init(final ScriptEngine engine) { assert Context.getGlobal() == this : "this global is not set as current"; final ScriptEnvironment env = getContext().getEnv(); @@ -1705,12 +1753,19 @@ copyBuiltins(); // expose script (command line) arguments as "arguments" property of global - final Object argumentsObject = wrapAsObject(env.getArguments().toArray()); - final int argumentsFlags = Attribute.NOT_ENUMERABLE; - addOwnProperty("arguments", argumentsFlags, argumentsObject); + arguments = wrapAsObject(env.getArguments().toArray()); if (env._scripting) { // synonym for "arguments" in scripting mode - addOwnProperty("$ARG", argumentsFlags, argumentsObject); + addOwnProperty("$ARG", Attribute.NOT_ENUMERABLE, arguments); + } + + if (engine != null) { + final int NOT_ENUMERABLE_NOT_CONFIG = Attribute.NOT_ENUMERABLE | Attribute.NOT_CONFIGURABLE; + scontextProperty = addOwnProperty("context", NOT_ENUMERABLE_NOT_CONFIG, null); + addOwnProperty("engine", NOT_ENUMERABLE_NOT_CONFIG, engine); + // __noSuchProperty__ hook for ScriptContext search of missing variables + final ScriptFunction noSuchProp = ScriptFunctionImpl.makeStrictFunction(NO_SUCH_PROPERTY_NAME, NO_SUCH_PROPERTY); + addOwnProperty(NO_SUCH_PROPERTY_NAME, Attribute.NOT_ENUMERABLE, noSuchProp); } } @@ -1878,8 +1933,8 @@ this.addOwnProperty("Debug", Attribute.NOT_ENUMERABLE, initConstructor("Debug")); } - private static Object printImpl(final boolean newLine, final Object... objects) { - final PrintWriter out = Global.getEnv().getOut(); + private Object printImpl(final boolean newLine, final Object... objects) { + final PrintWriter out = scontext != null? new PrintWriter(scontext.getWriter()) : getContext().getEnv().getOut(); final StringBuilder sb = new StringBuilder(); for (final Object object : objects) { @@ -2023,12 +2078,11 @@ for (final jdk.nashorn.internal.runtime.Property property : properties) { final Object key = property.getKey(); - final Object value = ObjectPrototype.get(key); - if (key.equals("constructor")) { continue; } + final Object value = ObjectPrototype.get(key); if (value instanceof ScriptFunction) { final ScriptFunction func = (ScriptFunction)value; final ScriptObject prototype = ScriptFunction.getPrototype(func); diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/objects/NativeDebug.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeDebug.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeDebug.java Wed Jul 05 19:50:00 2017 +0200 @@ -222,7 +222,6 @@ out.println("ScriptFunction allocations " + ScriptFunction.getAllocations()); out.println("PropertyMap count " + PropertyMap.getCount()); out.println("PropertyMap cloned " + PropertyMap.getClonedCount()); - out.println("PropertyMap duplicated " + PropertyMap.getDuplicatedCount()); out.println("PropertyMap history hit " + PropertyMap.getHistoryHit()); out.println("PropertyMap proto invalidations " + PropertyMap.getProtoInvalidations()); out.println("PropertyMap proto history hit " + PropertyMap.getProtoHistoryHit()); diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/objects/NativeJava.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java Wed Jul 05 19:50:00 2017 +0200 @@ -36,6 +36,7 @@ import jdk.internal.dynalink.beans.StaticClass; import jdk.internal.dynalink.support.TypeUtilities; import jdk.nashorn.api.scripting.JSObject; +import jdk.nashorn.api.scripting.ScriptUtils; import jdk.nashorn.internal.objects.annotations.Attribute; import jdk.nashorn.internal.objects.annotations.Function; import jdk.nashorn.internal.objects.annotations.ScriptClass; @@ -45,6 +46,7 @@ import jdk.nashorn.internal.runtime.ListAdapter; import jdk.nashorn.internal.runtime.PropertyMap; import jdk.nashorn.internal.runtime.ScriptObject; +import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptRuntime; import jdk.nashorn.internal.runtime.linker.Bootstrap; import jdk.nashorn.internal.runtime.linker.JavaAdapterFactory; @@ -80,6 +82,73 @@ } /** + * Returns synchronized wrapper version of the given ECMAScript function. + * @param self not used + * @param func the ECMAScript function whose synchronized version is returned. + * @param obj the object (i.e, lock) on which the function synchronizes. + * @return synchronized wrapper version of the given ECMAScript function. + */ + @Function(name="synchronized", attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) + public static Object synchronizedFunc(final Object self, final Object func, final Object obj) { + return ScriptUtils.makeSynchronizedFunction(func, obj); + } + + /** + * Returns true if the specified object is a Java method. + * @param self not used + * @param obj the object that is checked if it is a Java method object or not + * @return tells whether given object is a Java method object or not. + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) + public static boolean isJavaMethod(final Object self, final Object obj) { + return Bootstrap.isDynamicMethod(obj); + } + + /** + * Returns true if the specified object is a java function (but not script function) + * @param self not used + * @param obj the object that is checked if it is a Java function or not + * @return tells whether given object is a Java function or not + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) + public static boolean isJavaFunction(final Object self, final Object obj) { + return Bootstrap.isCallable(obj) && !(obj instanceof ScriptFunction); + } + + /** + * Returns true if the specified object is a Java object but not a script object + * @param self not used + * @param obj the object that is checked + * @return tells whether given object is a Java object but not a script object + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) + public static boolean isJavaObject(final Object self, final Object obj) { + return obj != null && !(obj instanceof ScriptObject); + } + + /** + * Returns true if the specified object is a ECMAScript object, that is an instance of {@link ScriptObject}. + * @param self not used + * @param obj the object that is checked if it is a ECMAScript object or not + * @return tells whether given object is a ECMAScript object or not. + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) + public static boolean isScriptObject(final Object self, final Object obj) { + return obj instanceof ScriptObject; + } + + /** + * Returns true if the specified object is a ECMAScript function, that is an instance of {@link ScriptFunction}. + * @param self not used + * @param obj the object that is checked if it is a ECMAScript function or not + * @return tells whether given object is a ECMAScript function or not. + */ + @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) + public static boolean isScriptFunction(final Object self, final Object obj) { + return obj instanceof ScriptFunction; + } + + /** *

* Given a name of a Java type, returns an object representing that type in Nashorn. The Java class of the objects * used to represent Java types in Nashorn is not {@link java.lang.Class} but rather {@link StaticClass}. They are diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java --- a/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java Wed Jul 05 19:50:00 2017 +0200 @@ -184,6 +184,15 @@ return new AnonymousFunction(); } + private static ScriptFunction makeFunction(final String name, final MethodHandle methodHandle, final MethodHandle[] specs, final int flags) { + final ScriptFunctionImpl func = new ScriptFunctionImpl(name, methodHandle, null, specs, flags); + func.setPrototype(UNDEFINED); + // Non-constructor built-in functions do not have "prototype" property + func.deleteOwnProperty(func.getMap().findProperty("prototype")); + + return func; + } + /** * Factory method for non-constructor built-in functions * @@ -193,12 +202,18 @@ * @return new ScriptFunction */ static ScriptFunction makeFunction(final String name, final MethodHandle methodHandle, final MethodHandle[] specs) { - final ScriptFunctionImpl func = new ScriptFunctionImpl(name, methodHandle, null, specs, ScriptFunctionData.IS_BUILTIN); - func.setPrototype(UNDEFINED); - // Non-constructor built-in functions do not have "prototype" property - func.deleteOwnProperty(func.getMap().findProperty("prototype")); + return makeFunction(name, methodHandle, specs, ScriptFunctionData.IS_BUILTIN); + } - return func; + /** + * Factory method for non-constructor built-in, strict functions + * + * @param name function name + * @param methodHandle handle for invocation + * @return new ScriptFunction + */ + static ScriptFunction makeStrictFunction(final String name, final MethodHandle methodHandle) { + return makeFunction(name, methodHandle, null, ScriptFunctionData.IS_BUILTIN | ScriptFunctionData.IS_STRICT ); } /** diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/runtime/Context.java --- a/nashorn/src/jdk/nashorn/internal/runtime/Context.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/Context.java Wed Jul 05 19:50:00 2017 +0200 @@ -62,6 +62,7 @@ import java.util.function.Consumer; import java.util.function.Supplier; import java.util.logging.Level; +import javax.script.ScriptEngine; import jdk.internal.org.objectweb.asm.ClassReader; import jdk.internal.org.objectweb.asm.util.CheckClassAdapter; import jdk.nashorn.api.scripting.ScriptObjectMirror; @@ -954,16 +955,17 @@ * Initialize given global scope object. * * @param global the global + * @param engine the associated ScriptEngine instance, can be null * @return the initialized global scope object. */ - public Global initGlobal(final Global global) { + public Global initGlobal(final Global global, final ScriptEngine engine) { // Need only minimal global object, if we are just compiling. if (!env._compile_only) { final Global oldGlobal = Context.getGlobal(); try { Context.setGlobal(global); // initialize global scope with builtin global objects - global.initBuiltinObjects(); + global.initBuiltinObjects(engine); } finally { Context.setGlobal(oldGlobal); } @@ -973,6 +975,16 @@ } /** + * Initialize given global scope object. + * + * @param global the global + * @return the initialized global scope object. + */ + public Global initGlobal(final Global global) { + return initGlobal(global, null); + } + + /** * Return the current global's context * @return current global's context */ diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/runtime/ECMAErrors.java --- a/nashorn/src/jdk/nashorn/internal/runtime/ECMAErrors.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/ECMAErrors.java Wed Jul 05 19:50:00 2017 +0200 @@ -405,12 +405,8 @@ // Look for script package in class name (into which compiler puts generated code) if (className.startsWith(scriptPackage) && !CompilerConstants.isInternalMethodName(frame.getMethodName())) { final String source = frame.getFileName(); - /* - * Make sure that it is not some Java code that Nashorn has in that package! - * also, we don't want to report JavaScript code that lives in script engine implementation - * We want to report only user's own scripts and not any of our own scripts like "engine.js" - */ - return source != null && !source.endsWith(".java") && !source.contains(NashornException.ENGINE_SCRIPT_SOURCE_NAME); + // Make sure that it is not some Java code that Nashorn has in that package! + return source != null && !source.endsWith(".java"); } return false; } diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/runtime/PropertyMap.java --- a/nashorn/src/jdk/nashorn/internal/runtime/PropertyMap.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/PropertyMap.java Wed Jul 05 19:50:00 2017 +0200 @@ -145,21 +145,6 @@ this(propertyMap, propertyMap.properties); } - /** - * Duplicates this PropertyMap instance. This is used to duplicate 'shared' - * maps {@link PropertyMap} used as process wide singletons. Shared maps are - * duplicated for every global scope object. That way listeners, proto and property - * histories are scoped within a global scope. - * - * @return Duplicated {@link PropertyMap}. - */ - public PropertyMap duplicate() { - if (Context.DEBUG) { - duplicatedCount++; - } - return new PropertyMap(this.properties, this.className, 0, 0, 0, containsArrayKeys()); - } - private void writeObject(final ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeObject(properties.getProperties()); @@ -968,7 +953,6 @@ // counters updated only in debug mode private static int count; private static int clonedCount; - private static int duplicatedCount; private static int historyHit; private static int protoInvalidations; private static int protoHistoryHit; @@ -989,13 +973,6 @@ } /** - * @return The number of maps that are duplicated. - */ - public static int getDuplicatedCount() { - return duplicatedCount; - } - - /** * @return The number of times history was successfully used. */ public static int getHistoryHit() { diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java Wed Jul 05 19:50:00 2017 +0200 @@ -103,10 +103,10 @@ public static final String PROTO_PROPERTY_NAME = "__proto__"; /** Search fall back routine name for "no such method" */ - static final String NO_SUCH_METHOD_NAME = "__noSuchMethod__"; + public static final String NO_SUCH_METHOD_NAME = "__noSuchMethod__"; /** Search fall back routine name for "no such property" */ - static final String NO_SUCH_PROPERTY_NAME = "__noSuchProperty__"; + public static final String NO_SUCH_PROPERTY_NAME = "__noSuchProperty__"; /** Per ScriptObject flag - is this a scope object? */ public static final int IS_SCOPE = 1 << 0; @@ -160,7 +160,8 @@ static final MethodHandle GLOBALFILTER = findOwnMH_S("globalFilter", Object.class, Object.class); private static final MethodHandle TRUNCATINGFILTER = findOwnMH_S("truncatingFilter", Object[].class, int.class, Object[].class); - private static final MethodHandle KNOWNFUNCPROPGUARD = findOwnMH_S("knownFunctionPropertyGuard", boolean.class, Object.class, PropertyMap.class, MethodHandle.class, Object.class, ScriptFunction.class); + private static final MethodHandle KNOWNFUNCPROPGUARDSELF = findOwnMH_S("knownFunctionPropertyGuardSelf", boolean.class, Object.class, PropertyMap.class, MethodHandle.class, ScriptFunction.class); + private static final MethodHandle KNOWNFUNCPROPGUARDPROTO = findOwnMH_S("knownFunctionPropertyGuardProto", boolean.class, Object.class, PropertyMap.class, MethodHandle.class, int.class, ScriptFunction.class); private static final ArrayList PROTO_FILTERS = new ArrayList<>(); @@ -2271,13 +2272,20 @@ if (scopeAccess && func.isStrict()) { mh = bindTo(mh, UNDEFINED); } + return new GuardedInvocation( mh, - //TODO this always does a scriptobject check - getKnownFunctionPropertyGuard( + find.isSelf()? + getKnownFunctionPropertyGuardSelf( getMap(), find.getGetter(Object.class, INVALID_PROGRAM_POINT), - find.getOwner(), + func) + : + //TODO this always does a scriptobject check + getKnownFunctionPropertyGuardProto( + getMap(), + find.getGetter(Object.class, INVALID_PROGRAM_POINT), + find.getProtoChainLength(), func), getProtoSwitchPoint(NO_SUCH_PROPERTY_NAME, find.getOwner()), //TODO this doesn't need a ClassCastException as guard always checks script object @@ -3595,15 +3603,51 @@ return MH.findStatic(MethodHandles.lookup(), ScriptObject.class, name, MH.type(rtype, types)); } - private static MethodHandle getKnownFunctionPropertyGuard(final PropertyMap map, final MethodHandle getter, final Object where, final ScriptFunction func) { - return MH.insertArguments(KNOWNFUNCPROPGUARD, 1, map, getter, where, func); + private static MethodHandle getKnownFunctionPropertyGuardSelf(final PropertyMap map, final MethodHandle getter, final ScriptFunction func) { + return MH.insertArguments(KNOWNFUNCPROPGUARDSELF, 1, map, getter, func); } @SuppressWarnings("unused") - private static boolean knownFunctionPropertyGuard(final Object self, final PropertyMap map, final MethodHandle getter, final Object where, final ScriptFunction func) { + private static boolean knownFunctionPropertyGuardSelf(final Object self, final PropertyMap map, final MethodHandle getter, final ScriptFunction func) { if (self instanceof ScriptObject && ((ScriptObject)self).getMap() == map) { try { - return getter.invokeExact(where) == func; + return getter.invokeExact(self) == func; + } catch (final RuntimeException | Error e) { + throw e; + } catch (final Throwable t) { + throw new RuntimeException(t); + } + } + + return false; + } + + private static MethodHandle getKnownFunctionPropertyGuardProto(final PropertyMap map, final MethodHandle getter, final int depth, final ScriptFunction func) { + return MH.insertArguments(KNOWNFUNCPROPGUARDPROTO, 1, map, getter, depth, func); + } + + @SuppressWarnings("unused") + private static ScriptObject getProto(final ScriptObject self, final int depth) { + ScriptObject proto = self; + for (int d = 0; d < depth; d++) { + proto = proto.getProto(); + if (proto == null) { + return null; + } + } + + return proto; + } + + @SuppressWarnings("unused") + private static boolean knownFunctionPropertyGuardProto(final Object self, final PropertyMap map, final MethodHandle getter, final int depth, final ScriptFunction func) { + if (self instanceof ScriptObject && ((ScriptObject)self).getMap() == map) { + final ScriptObject proto = getProto((ScriptObject)self, depth); + if (proto == null) { + return false; + } + try { + return getter.invokeExact((Object)proto) == func; } catch (final RuntimeException | Error e) { throw e; } catch (final Throwable t) { diff -r 376a52c9540c -r acabdf6da9db nashorn/src/jdk/nashorn/internal/runtime/linker/BoundDynamicMethod.java --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/BoundDynamicMethod.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/BoundDynamicMethod.java Wed Jul 05 19:50:00 2017 +0200 @@ -25,6 +25,7 @@ package jdk.nashorn.internal.runtime.linker; +import java.util.Objects; import jdk.internal.dynalink.beans.BeansLinker; /** @@ -48,4 +49,9 @@ Object getBoundThis() { return boundThis; } + + @Override + public String toString() { + return dynamicMethod.toString() + " on " + Objects.toString(boundThis); + } } diff -r 376a52c9540c -r acabdf6da9db nashorn/test/script/basic/JDK-8047057.js --- a/nashorn/test/script/basic/JDK-8047057.js Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/test/script/basic/JDK-8047057.js Wed Jul 05 19:50:00 2017 +0200 @@ -49,7 +49,7 @@ makeFuncAndCall("L: { { break L; } return; }"); makeFuncAndCall("L: { while(0) break L; return; }"); makeFuncExpectError("L: {while(0) break L; return [](); }", TypeError); -// makeFuncAndCall("do with({}) break ; while(0);"); +makeFuncAndCall("do with({}) break ; while(0);"); makeFuncAndCall("while(0) with({}) continue ;"); makeFuncAndCall("eval([]);"); makeFuncAndCall("try{} finally{[]}"); @@ -59,10 +59,10 @@ makeFuncAndCall("try { var x = 1, x = null; } finally { }"); makeFuncAndCall("try { var x = {}, x = []; } catch(x3) { }"); makeFuncAndCall("[delete this]"); -// makeFuncAndCall("if(eval('', eval('', function() {}))) { }"); -// makeFuncAndCall("if(eval('', eval('', function() {}))) { }"); -// makeFuncAndCall("eval(\"[,,];\", [11,12,13,14].some)"); -// makeFuncAndCall("eval(\"1.2e3\", ({})[ /x/ ])"); +makeFuncAndCall("if(eval('', eval('', function() {}))) { }"); +makeFuncAndCall("if(eval('', eval('', function() {}))) { }"); +makeFuncAndCall("eval(\"[,,];\", [11,12,13,14].some)"); +makeFuncAndCall("eval(\"1.2e3\", ({})[ /x/ ])"); makeFuncExpectError("eval(\"x4\", x3);", ReferenceError); makeFuncAndCall("with({5.0000000000000000000000: String()}){(false); }"); makeFuncAndCall("try { var x = undefined, x = 5.0000000000000000000000; } catch(x) { x = undefined; }"); @@ -72,4 +72,4 @@ makeFuncAndCall("with({8: 'fafafa'.replace()}){ }"); makeFuncAndCall("(function (x) '' )(true)"); makeFuncExpectError("new eval(function(){})", TypeError); -//** makeFuncAndCall('eval("23", ({})[/x/])'); +makeFuncAndCall('eval("23", ({})[/x/])'); diff -r 376a52c9540c -r acabdf6da9db nashorn/test/script/basic/JDK-8047067.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8047067.js Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,36 @@ +/* + * 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. + */ + +/** + * JDK-8047067: all eval arguments need to be copied in Lower + * + * @test + * @run + */ + +// The second expression triggers optimistic deoptimization, and if not +// all eval arguments were copied in Lower, we'd end up with duplicate +// program points that'd cause incorrect continuation program point in +// the rest-of, and therefore a bad stack, and therefore an AIOOBE in +// the continuation setup code. +eval("23", ({})[/x/]) diff -r 376a52c9540c -r acabdf6da9db nashorn/test/script/basic/JDK-8049086.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8049086.js Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,144 @@ +/* + * 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. + */ + +/** + * JDK-8049086: Minor API convenience functions on "Java" object + * + * @test + * @run + */ + +var System = Java.type("java.lang.System"); +var out = System.out; +var println = out.println; +var getProperty = System.getProperty; +var File = Java.type("java.io.File")["(String)"]; + +print("println is java method? " + Java.isJavaMethod(println)); +print("println is script function? " + Java.isScriptFunction(println)); +print("getProperty is java method? " + Java.isJavaMethod(getProperty)); +print("getProperty is script function? " + Java.isScriptFunction(getProperty)); +print("File is java method? " + Java.isJavaMethod(File)); +print("File is script function? " + Java.isScriptFunction(File)); + +print("eval is script function? " + Java.isScriptFunction(eval)); +print("eval is java method? " + Java.isJavaMethod(eval)); +function hello() {} +print("hello is script function? " + Java.isScriptFunction(hello)); +print("hello is java method? " + Java.isJavaMethod(hello)); + +print("out is script object? " + Java.isScriptObject(out)); +print("System is script object? " + Java.isScriptObject(System)); +print("Object is script object? " + Java.isScriptObject(Object)); +print("{} is script object? " + Java.isScriptObject({})); +print("/foo/ is script object? " + Java.isScriptObject(/foo/)); + +// Java function is anything whose 'typeof' is 'function' but it is not +// a script function! This includes: +// (a) Java methods (b) Java classes (as these respond to new) +// (c) FunctionalInterface objects (d) JSObjects that are 'functions' + +print("java.awt.Color is java function? " + Java.isJavaFunction(java.awt.Color)); +print("java.lang.Runnable instance is java function? " + + Java.isJavaFunction(new java.lang.Runnable(function() {}))); +print("eval is java function? " + Java.isJavaFunction(eval)); +print("println is java function? " + Java.isJavaFunction(println)); +print("getProperty is java function? " + Java.isJavaFunction(getProperty)); + +var JSObject = Java.type("jdk.nashorn.api.scripting.JSObject"); +print("callable JSObject is function? " + + Java.isJavaFunction(new JSObject() { + isFunction: function() true, + call: function() {} + }) +); + +print("Non callable JSObject is function? " + + Java.isJavaFunction(new JSObject() { + isFunction: function() false, + }) +); + +// synchronized function +var lock = new java.lang.Object(); + +print("lock is java object? " + Java.isJavaObject(lock)); +print("eval is java object? " + Java.isJavaObject(eval)); +print("{} is java object? " + Java.isJavaObject({})); +print("/foo/ is java object? " + Java.isJavaObject(/foo/)); +print("[] is java object? " + Java.isJavaObject([])); +print("java.io.File is java object? " + Java.isJavaObject(java.io.File)); + +// synchornized function checks +Java.synchronized(function() { + var th = new java.lang.Thread(Java.synchronized(function() { + print("new thread"); + print("notifying.."); + lock.notifyAll(); + }, lock)); + th.start(); + print("about to wait.."); + lock.wait(); + th.join(); + print("done waiting!"); +}, lock)(); + +// try Mozilla "sync" as well +load("nashorn:mozilla_compat.js"); +sync(function() { + var th = new java.lang.Thread(sync(function() { + print("new thread"); + print("notifying.."); + lock.notifyAll(); + }, lock)); + th.start(); + print("about to wait.."); + lock.wait(); + th.join(); + print("done waiting!"); +}, lock)(); + +function expectTypeError(func) { + try { + func(); + throw new Error("should have thrown TypeError"); + } catch (e) { + if (! (e instanceof TypeError)) { + fail("Expected TypeError, got " +e); + } + print(e); + } +} + +expectTypeError(function() Java.synchronized(232)); +expectTypeError(function() sync(232)); +expectTypeError(function() Java.synchronized({})); +expectTypeError(function() sync({})); +expectTypeError(function() Java.synchronized([])); +expectTypeError(function() sync([])); +expectTypeError(function() Java.synchronized("hello")); +expectTypeError(function() sync("hello")); +expectTypeError(function() Java.synchronized(null)); +expectTypeError(function() sync(null)); +expectTypeError(function() Java.synchronized(undefined)); +expectTypeError(function() sync(undefined)); diff -r 376a52c9540c -r acabdf6da9db nashorn/test/script/basic/JDK-8049086.js.EXPECTED --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8049086.js.EXPECTED Wed Jul 05 19:50:00 2017 +0200 @@ -0,0 +1,48 @@ +println is java method? true +println is script function? false +getProperty is java method? true +getProperty is script function? false +File is java method? true +File is script function? false +eval is script function? true +eval is java method? false +hello is script function? true +hello is java method? false +out is script object? false +System is script object? false +Object is script object? true +{} is script object? true +/foo/ is script object? true +java.awt.Color is java function? true +java.lang.Runnable instance is java function? true +eval is java function? false +println is java function? true +getProperty is java function? true +callable JSObject is function? true +Non callable JSObject is function? false +lock is java object? true +eval is java object? false +{} is java object? false +/foo/ is java object? false +[] is java object? false +java.io.File is java object? true +about to wait.. +new thread +notifying.. +done waiting! +about to wait.. +new thread +notifying.. +done waiting! +TypeError: 232 is not a function +TypeError: 232 is not a function +TypeError: [object Object] is not a function +TypeError: [object Object] is not a function +TypeError: [object Array] is not a function +TypeError: [object Array] is not a function +TypeError: hello is not a function +TypeError: hello is not a function +TypeError: null is not a function +TypeError: null is not a function +TypeError: undefined is not a function +TypeError: undefined is not a function diff -r 376a52c9540c -r acabdf6da9db nashorn/test/src/jdk/nashorn/internal/runtime/CodeStoreAndPathTest.java --- a/nashorn/test/src/jdk/nashorn/internal/runtime/CodeStoreAndPathTest.java Sun Jun 15 08:41:57 2014 -0700 +++ b/nashorn/test/src/jdk/nashorn/internal/runtime/CodeStoreAndPathTest.java Wed Jul 05 19:50:00 2017 +0200 @@ -136,8 +136,7 @@ // Check that a new compiled script is stored in existing code cache e.eval(code1); final DirectoryStream stream = Files.newDirectoryStream(codeCachePath); - // Already one compiled script has been stored in the cache during initialization - checkCompiledScripts(stream, 2); + checkCompiledScripts(stream, 1); // Setting to default current working dir } finally { System.setProperty("user.dir", oldUserDir); @@ -154,9 +153,8 @@ e.eval(code1); e.eval(code2); e.eval(code3);// less than minimum size for storing - // Already one compiled script has been stored in the cache during initialization // adding code1 and code2. final DirectoryStream stream = Files.newDirectoryStream(codeCachePath); - checkCompiledScripts(stream, 3); + checkCompiledScripts(stream, 2); } }