--- a/.hgtags-top-repo Thu Mar 31 18:14:29 2011 -0700
+++ b/.hgtags-top-repo Wed Jul 05 17:39:50 2017 +0200
@@ -110,3 +110,4 @@
c6f380693342feadccc5fe2c5adf500e861361aa jdk7-b133
ddc2fcb3682ffd27f44354db666128827be7e3c3 jdk7-b134
783bd02b4ab4596059c74b10a1793d7bd2f1c157 jdk7-b135
+2fe76e73adaa5133ac559f0b3c2c0707eca04580 jdk7-b136
--- a/corba/.hgtags Thu Mar 31 18:14:29 2011 -0700
+++ b/corba/.hgtags Wed Jul 05 17:39:50 2017 +0200
@@ -110,3 +110,4 @@
671fe2e623ffefb4b7c312be919fc71eb48c1df1 jdk7-b133
918003855fa0dba5acf4bf1fe36526d2fc4c1ba8 jdk7-b134
e0b72ae5dc5e824b342801c8d1d336a55eb54e2c jdk7-b135
+48ef0c712e7cbf272f47f9224db92a3c6a9e2612 jdk7-b136
--- a/hotspot/.hgtags Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/.hgtags Wed Jul 05 17:39:50 2017 +0200
@@ -158,3 +158,5 @@
3c76374706ea8a77e15aec8310e831e5734f8775 hs21-b04
b898f0fc3cedc972d884d31a751afd75969531cf jdk7-b135
b898f0fc3cedc972d884d31a751afd75969531cf hs21-b05
+bd586e392d93b7ed7a1636dcc8da2b6a4203a102 jdk7-b136
+bd586e392d93b7ed7a1636dcc8da2b6a4203a102 hs21-b06
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ClassObjectReferenceImpl.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ClassObjectReferenceImpl.java Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, 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,7 +27,7 @@
import com.sun.jdi.*;
import sun.jvm.hotspot.oops.Instance;
import sun.jvm.hotspot.oops.Klass;
-import sun.jvm.hotspot.oops.OopUtilities;
+import sun.jvm.hotspot.oops.java_lang_Class;
public class ClassObjectReferenceImpl extends ObjectReferenceImpl
implements ClassObjectReference {
@@ -39,7 +39,7 @@
public ReferenceType reflectedType() {
if (reflectedType == null) {
- Klass k = OopUtilities.classOopToKlass(ref());
+ Klass k = java_lang_Class.asKlass(ref());
reflectedType = vm.referenceType(k);
}
return reflectedType;
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Instance.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Instance.java Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -64,7 +64,7 @@
public void iterateFields(OopVisitor visitor, boolean doVMFields) {
super.iterateFields(visitor, doVMFields);
- ((InstanceKlass) getKlass()).iterateNonStaticFields(visitor);
+ ((InstanceKlass) getKlass()).iterateNonStaticFields(visitor, this);
}
public void printValueOn(PrintStream tty) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java Wed Jul 05 17:39:50 2017 +0200
@@ -241,6 +241,10 @@
// Byteside of the header
private static long headerSize;
+ public long getObjectSize(Oop object) {
+ return getSizeHelper() * VM.getVM().getAddressSize();
+ }
+
public static long getHeaderSize() { return headerSize; }
// Accessors for declared fields
@@ -459,7 +463,22 @@
visitor.doCInt(vtableLen, true);
visitor.doCInt(itableLen, true);
}
+ }
+ /*
+ * Visit the static fields of this InstanceKlass with the obj of
+ * the visitor set to the oop holding the fields, which is
+ * currently the java mirror.
+ */
+ public void iterateStaticFields(OopVisitor visitor) {
+ visitor.setObj(getJavaMirror());
+ visitor.prologue();
+ iterateStaticFieldsInternal(visitor);
+ visitor.epilogue();
+
+ }
+
+ void iterateStaticFieldsInternal(OopVisitor visitor) {
TypeArray fields = getFields();
int length = (int) fields.getLength();
for (int index = 0; index < length; index += NEXT_OFFSET) {
@@ -477,9 +496,9 @@
return getSuper();
}
- public void iterateNonStaticFields(OopVisitor visitor) {
+ public void iterateNonStaticFields(OopVisitor visitor, Oop obj) {
if (getSuper() != null) {
- ((InstanceKlass) getSuper()).iterateNonStaticFields(visitor);
+ ((InstanceKlass) getSuper()).iterateNonStaticFields(visitor, obj);
}
TypeArray fields = getFields();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceMirrorKlass.java Wed Jul 05 17:39:50 2017 +0200
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2011, 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.oops;
+
+import java.io.*;
+import java.util.*;
+import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.memory.*;
+import sun.jvm.hotspot.runtime.*;
+import sun.jvm.hotspot.types.*;
+import sun.jvm.hotspot.utilities.*;
+
+// An InstanceKlass is the VM level representation of a Java class.
+
+public class InstanceMirrorKlass extends InstanceKlass {
+ static {
+ VM.registerVMInitializedObserver(new Observer() {
+ public void update(Observable o, Object data) {
+ initialize(VM.getVM().getTypeDataBase());
+ }
+ });
+ }
+
+ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
+ // Just make sure it's there for now
+ Type type = db.lookupType("instanceMirrorKlass");
+ }
+
+ InstanceMirrorKlass(OopHandle handle, ObjectHeap heap) {
+ super(handle, heap);
+ }
+
+ public long getObjectSize(Oop o) {
+ return java_lang_Class.getOopSize(o) * VM.getVM().getAddressSize();
+ }
+
+ public void iterateNonStaticFields(OopVisitor visitor, Oop obj) {
+ super.iterateNonStaticFields(visitor, obj);
+ // Fetch the real klass from the mirror object
+ Klass klass = java_lang_Class.asKlass(obj);
+ if (klass instanceof InstanceKlass) {
+ ((InstanceKlass)klass).iterateStaticFields(visitor);
+ }
+ }
+}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, 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
@@ -362,7 +362,16 @@
if (klass.equals(compiledICHolderKlassHandle)) return new CompiledICHolder(handle, this);
if (klass.equals(methodDataKlassHandle)) return new MethodData(handle, this);
}
- if (klass.equals(instanceKlassKlassHandle)) return new InstanceKlass(handle, this);
+ if (klass.equals(instanceKlassKlassHandle)) {
+ InstanceKlass ik = new InstanceKlass(handle, this);
+ if (ik.getName().asString().equals("java/lang/Class")) {
+ // We would normally do this using the vtable style
+ // lookup but since it's not used for these currently
+ // it's simpler to just check for the name.
+ return new InstanceMirrorKlass(handle, this);
+ }
+ return ik;
+ }
if (klass.equals(objArrayKlassKlassHandle)) return new ObjArrayKlass(handle, this);
if (klass.equals(typeArrayKlassKlassHandle)) return new TypeArrayKlass(handle, this);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, 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
@@ -103,12 +103,8 @@
// Returns the byte size of this object
public long getObjectSize() {
Klass k = getKlass();
- if (k instanceof InstanceKlass) {
- return ((InstanceKlass)k).getSizeHelper()
- * VM.getVM().getAddressSize();
- }
- // If it is not an instance, this method should be replaced.
- return getHeaderSize();
+ // All other types should be overriding getObjectSize directly
+ return ((InstanceKlass)k).getObjectSize(this);
}
// Type test operations
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java Wed Jul 05 17:39:50 2017 +0200
@@ -74,9 +74,6 @@
private static int THREAD_STATUS_TERMINATED;
*/
- // java.lang.Class fields
- private static OopField hcKlassField;
-
// java.util.concurrent.locks.AbstractOwnableSynchronizer fields
private static OopField absOwnSyncOwnerThreadField;
@@ -268,27 +265,6 @@
return null;
}
- // initialize fields for java.lang.Class
- private static void initClassFields() {
- if (hcKlassField == null) {
- // hc_klass is a HotSpot magic field and hence we can't
- // find it from InstanceKlass for java.lang.Class.
- TypeDataBase db = VM.getVM().getTypeDataBase();
- int hcKlassOffset = (int) db.lookupType("java_lang_Class").getCIntegerField("klass_offset").getValue();
- if (VM.getVM().isCompressedOopsEnabled()) {
- hcKlassField = new NarrowOopField(new NamedFieldIdentifier("hc_klass"), hcKlassOffset, true);
- } else {
- hcKlassField = new OopField(new NamedFieldIdentifier("hc_klass"), hcKlassOffset, true);
- }
- }
- }
-
- /** get klassOop field at offset hc_klass_offset from a java.lang.Class object */
- public static Klass classOopToKlass(Oop aClass) {
- initClassFields();
- return (Klass) hcKlassField.getValue(aClass);
- }
-
// initialize fields for j.u.c.l AbstractOwnableSynchornizer class
private static void initAbsOwnSyncFields() {
if (absOwnSyncOwnerThreadField == null) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/java_lang_Class.java Wed Jul 05 17:39:50 2017 +0200
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2011, 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.oops;
+
+import java.util.*;
+
+import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.memory.*;
+import sun.jvm.hotspot.runtime.*;
+import sun.jvm.hotspot.types.Type;
+import sun.jvm.hotspot.types.TypeDataBase;
+import sun.jvm.hotspot.utilities.*;
+import sun.jvm.hotspot.jdi.JVMTIThreadState;
+
+/** A utility class encapsulating useful oop operations */
+
+// initialize fields for java.lang.Class
+public class java_lang_Class {
+
+ // java.lang.Class fields
+ static OopField klassField;
+ static IntField oopSizeField;
+
+ static {
+ VM.registerVMInitializedObserver(new Observer() {
+ public void update(Observable o, Object data) {
+ initialize(VM.getVM().getTypeDataBase());
+ }
+ });
+ }
+
+ private static synchronized void initialize(TypeDataBase db) {
+ // klass and oop_size are HotSpot magic fields and hence we can't
+ // find them from InstanceKlass for java.lang.Class.
+ Type jlc = db.lookupType("java_lang_Class");
+ int klassOffset = (int) jlc.getCIntegerField("klass_offset").getValue();
+ if (VM.getVM().isCompressedOopsEnabled()) {
+ klassField = new NarrowOopField(new NamedFieldIdentifier("klass"), klassOffset, true);
+ } else {
+ klassField = new OopField(new NamedFieldIdentifier("klass"), klassOffset, true);
+ }
+ int oopSizeOffset = (int) jlc.getCIntegerField("oop_size_offset").getValue();
+ oopSizeField = new IntField(new NamedFieldIdentifier("oop_size"), oopSizeOffset, true);
+ }
+
+ /** get klassOop field at offset hc_klass_offset from a java.lang.Class object */
+ public static Klass asKlass(Oop aClass) {
+ return (Klass) java_lang_Class.klassField.getValue(aClass);
+ }
+
+ /** get oop_size field at offset oop_size_offset from a java.lang.Class object */
+ public static long getOopSize(Oop aClass) {
+ return java_lang_Class.oopSizeField.getValue(aClass);
+ }
+}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Wed Jul 05 17:39:50 2017 +0200
@@ -839,20 +839,18 @@
}
private void readSystemProperties() {
- final InstanceKlass systemKls = getSystemDictionary().getSystemKlass();
- systemKls.iterate(new DefaultOopVisitor() {
- ObjectReader objReader = new ObjectReader();
- public void doOop(sun.jvm.hotspot.oops.OopField field, boolean isVMField) {
- if (field.getID().getName().equals("props")) {
- try {
- sysProps = (Properties) objReader.readObject(field.getValue(systemKls.getJavaMirror()));
- } catch (Exception e) {
- if (Assert.ASSERTS_ENABLED) {
- e.printStackTrace();
- }
- }
- }
- }
- }, false);
+ final InstanceKlass systemKls = getSystemDictionary().getSystemKlass();
+ systemKls.iterateStaticFields(new DefaultOopVisitor() {
+ ObjectReader objReader = new ObjectReader();
+ public void doOop(sun.jvm.hotspot.oops.OopField field, boolean isVMField) {
+ if (field.getID().getName().equals("props")) {
+ try {
+ sysProps = (Properties) objReader.readObject(field.getValue(getObj()));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ });
}
}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/FinalizerInfo.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/FinalizerInfo.java Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -64,16 +64,16 @@
*/
InstanceKlass ik =
SystemDictionaryHelper.findInstanceKlass("java.lang.ref.Finalizer");
- final OopField queueField[] = new OopField[1];
- ik.iterateFields(new DefaultOopVisitor() {
+ final Oop[] queueref = new Oop[1];
+ ik.iterateStaticFields(new DefaultOopVisitor() {
public void doOop(OopField field, boolean isVMField) {
- String name = field.getID().getName();
- if (name.equals("queue")) {
- queueField[0] = field;
- }
+ String name = field.getID().getName();
+ if (name.equals("queue")) {
+ queueref[0] = field.getValue(getObj());
+ }
}
- }, false);
- Oop queue = queueField[0].getValue(ik);
+ });
+ Oop queue = queueref[0];
InstanceKlass k = (InstanceKlass) queue.getKlass();
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapGXLWriter.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapGXLWriter.java Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, 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
@@ -164,7 +164,7 @@
protected void writeClass(Instance instance) throws IOException {
writeObjectHeader(instance);
- Klass reflectedType = OopUtilities.classOopToKlass(instance);
+ Klass reflectedType = java_lang_Class.asKlass(instance);
boolean isInstanceKlass = (reflectedType instanceof InstanceKlass);
// reflectedType is null for primitive types (int.class etc).
if (reflectedType != null) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Wed Jul 05 17:39:50 2017 +0200
@@ -455,7 +455,7 @@
}
protected void writeClass(Instance instance) throws IOException {
- Klass reflectedKlass = OopUtilities.classOopToKlass(instance);
+ Klass reflectedKlass = java_lang_Class.asKlass(instance);
// dump instance record only for primitive type Class objects.
// all other Class objects are covered by writeClassDumpRecords.
if (reflectedKlass == null) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, 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
@@ -117,10 +117,10 @@
public boolean doObj(Oop obj) {
if (obj instanceof InstanceKlass) {
final InstanceKlass ik = (InstanceKlass) obj;
- ik.iterateFields(
+ ik.iterateStaticFields(
new DefaultOopVisitor() {
public void doOop(OopField field, boolean isVMField) {
- Oop next = field.getValue(ik);
+ Oop next = field.getValue(getObj());
LivenessPathElement lp = new LivenessPathElement(null,
new NamedFieldIdentifier("Static field \"" +
field.getID().getName() +
@@ -142,8 +142,7 @@
System.err.println();
}
}
- },
- false);
+ });
}
return false;
}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFactoryImpl.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFactoryImpl.java Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, 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
@@ -158,7 +158,7 @@
} else if (className.equals(javaLangThread())) {
res = new JSJavaThread(instance, this);
} else if (className.equals(javaLangClass())) {
- Klass reflectedType = OopUtilities.classOopToKlass(instance);
+ Klass reflectedType = java_lang_Class.asKlass(instance);
if (reflectedType != null) {
JSJavaKlass jk = newJSJavaKlass(reflectedType);
// we don't support mirrors of VM internal Klasses
--- a/hotspot/make/hotspot_version Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/make/hotspot_version Wed Jul 05 17:39:50 2017 +0200
@@ -35,7 +35,7 @@
HS_MAJOR_VER=21
HS_MINOR_VER=0
-HS_BUILD_NUMBER=06
+HS_BUILD_NUMBER=07
JDK_MAJOR_VER=1
JDK_MINOR_VER=7
--- a/hotspot/make/linux/makefiles/adlc.make Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/make/linux/makefiles/adlc.make Wed Jul 05 17:39:50 2017 +0200
@@ -102,7 +102,7 @@
$(EXEC) : $(OBJECTS)
@echo Making adlc
- $(QUIETLY) $(LINK_NOPROF.CC) -o $(EXEC) $(OBJECTS)
+ $(QUIETLY) $(HOST.LINK_NOPROF.CC) -o $(EXEC) $(OBJECTS)
# Random dependencies:
$(OBJECTS): opcodes.hpp classes.hpp adlc.hpp adlcVMDeps.hpp adlparse.hpp archDesc.hpp arena.hpp dict2.hpp filebuff.hpp forms.hpp formsopt.hpp formssel.hpp
@@ -204,14 +204,14 @@
$(OUTDIR)/%.o: %.cpp
@echo Compiling $<
$(QUIETLY) $(REMOVE_TARGET)
- $(QUIETLY) $(COMPILE.CC) -o $@ $< $(COMPILE_DONE)
+ $(QUIETLY) $(HOST.COMPILE.CC) -o $@ $< $(COMPILE_DONE)
# Some object files are given a prefix, to disambiguate
# them from objects of the same name built for the VM.
$(OUTDIR)/adlc-%.o: %.cpp
@echo Compiling $<
$(QUIETLY) $(REMOVE_TARGET)
- $(QUIETLY) $(COMPILE.CC) -o $@ $< $(COMPILE_DONE)
+ $(QUIETLY) $(HOST.COMPILE.CC) -o $@ $< $(COMPILE_DONE)
# #########################################################################
--- a/hotspot/make/linux/makefiles/gcc.make Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/make/linux/makefiles/gcc.make Wed Jul 05 17:39:50 2017 +0200
@@ -30,9 +30,13 @@
ifdef CROSS_COMPILE_ARCH
CPP = $(ALT_COMPILER_PATH)/g++
CC = $(ALT_COMPILER_PATH)/gcc
+HOSTCPP = g++
+HOSTCC = gcc
else
CPP = g++
CC = gcc
+HOSTCPP = $(CPP)
+HOSTCC = $(CC)
endif
AS = $(CC) -c
--- a/hotspot/make/linux/makefiles/rules.make Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/make/linux/makefiles/rules.make Wed Jul 05 17:39:50 2017 +0200
@@ -55,6 +55,14 @@
LINK_LIB.CC = $(CCC) $(LFLAGS) $(SHARED_FLAG)
PREPROCESS.CC = $(CC_COMPILE) -E
+# cross compiling the jvm with c2 requires host compilers to build
+# adlc tool
+
+HOST.CC_COMPILE = $(HOSTCPP) $(CPPFLAGS) $(CFLAGS)
+HOST.COMPILE.CC = $(HOST.CC_COMPILE) -c
+HOST.LINK_NOPROF.CC = $(HOSTCPP) $(LFLAGS) $(AOUT_FLAGS)
+
+
# Effect of REMOVE_TARGET is to delete out-of-date files during "gnumake -k".
REMOVE_TARGET = rm -f $@
--- a/hotspot/make/linux/makefiles/sparcWorks.make Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/make/linux/makefiles/sparcWorks.make Wed Jul 05 17:39:50 2017 +0200
@@ -29,6 +29,9 @@
CC = cc
AS = $(CC) -c
+HOSTCPP = $(CPP)
+HOSTCC = $(CC)
+
ARCHFLAG = $(ARCHFLAG/$(BUILDARCH))
ARCHFLAG/i486 = -m32
ARCHFLAG/amd64 = -m64
--- a/hotspot/make/windows/create.bat Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/make/windows/create.bat Wed Jul 05 17:39:50 2017 +0200
@@ -93,16 +93,15 @@
echo Will generate VC9 {Visual Studio 2008}
) else (
if "%MSC_VER%" == "1600" (
-echo Detected Visual Studio 2010, but
-echo will generate VC9 {Visual Studio 2008}
-echo Use conversion wizard in VS 2010.
+echo Will generate VC10 {Visual Studio 2010}
+set ProjectFile=%HotSpotBuildSpace%\jvm.vcxproj
) else (
echo Will generate VC7 project {Visual Studio 2003 .NET}
)
)
)
)
-echo %ProjectFile%
+echo %ProjectFile%
echo **************************************************************
REM Test all variables to see whether the directories they
--- a/hotspot/make/windows/makefiles/projectcreator.make Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/make/windows/makefiles/projectcreator.make Wed Jul 05 17:39:50 2017 +0200
@@ -27,10 +27,6 @@
# This is used externally by both batch and IDE builds, so can't
# reference any of the HOTSPOTWORKSPACE, HOTSPOTBUILDSPACE,
# HOTSPOTRELEASEBINDEST, or HOTSPOTDEBUGBINDEST environment variables.
-#
-# NOTE: unfortunately the ProjectCreatorSources list must be kept
-# synchronized between this and the Solaris version
-# (make/solaris/makefiles/projectcreator.make).
ProjectCreatorSources=\
$(WorkSpace)\src\share\tools\ProjectCreator\DirectoryTree.java \
@@ -42,6 +38,7 @@
$(WorkSpace)\src\share\tools\ProjectCreator\WinGammaPlatformVC7.java \
$(WorkSpace)\src\share\tools\ProjectCreator\WinGammaPlatformVC8.java \
$(WorkSpace)\src\share\tools\ProjectCreator\WinGammaPlatformVC9.java \
+ $(WorkSpace)\src\share\tools\ProjectCreator\WinGammaPlatformVC10.java \
$(WorkSpace)\src\share\tools\ProjectCreator\Util.java \
$(WorkSpace)\src\share\tools\ProjectCreator\BuildConfig.java \
$(WorkSpace)\src\share\tools\ProjectCreator\ArgsParser.java
--- a/hotspot/make/windows/makefiles/rules.make Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/make/windows/makefiles/rules.make Wed Jul 05 17:39:50 2017 +0200
@@ -65,8 +65,8 @@
!elseif "$(MSC_VER)" == "1600"
-# for compatibility - we don't yet have a ProjectCreator for VC10
-VcVersion=VC9
+VcVersion=VC10
+ProjectFile=jvm.vcxproj
!else
--- a/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1188,8 +1188,8 @@
__ st_ptr(O2, XXX_STATE(_stack)); // PREPUSH
__ lduh(max_stack, O3); // Full size expression stack
- guarantee(!EnableMethodHandles, "no support yet for java.lang.invoke.MethodHandle"); //6815692
- //6815692//if (EnableMethodHandles)
+ guarantee(!EnableInvokeDynamic, "no support yet for java.lang.invoke.MethodHandle"); //6815692
+ //6815692//if (EnableInvokeDynamic)
//6815692// __ inc(O3, methodOopDesc::extra_stack_entries());
__ sll(O3, LogBytesPerWord, O3);
__ sub(O2, O3, O3);
--- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -743,12 +743,12 @@
if (index_size == sizeof(u2)) {
get_2_byte_integer_at_bcp(bcp_offset, cache, tmp, Unsigned);
} else if (index_size == sizeof(u4)) {
- assert(EnableInvokeDynamic, "giant index used only for EnableInvokeDynamic");
+ assert(EnableInvokeDynamic, "giant index used only for JSR 292");
get_4_byte_integer_at_bcp(bcp_offset, cache, tmp);
assert(constantPoolCacheOopDesc::decode_secondary_index(~123) == 123, "else change next line");
xor3(tmp, -1, tmp); // convert to plain index
} else if (index_size == sizeof(u1)) {
- assert(EnableMethodHandles, "tiny index used only for EnableMethodHandles");
+ assert(EnableInvokeDynamic, "tiny index used only for JSR 292");
ldub(Lbcp, bcp_offset, tmp);
} else {
ShouldNotReachHere();
--- a/hotspot/src/cpu/sparc/vm/interpreter_sparc.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/sparc/vm/interpreter_sparc.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -262,7 +262,7 @@
// Method handle invoker
// Dispatch a method of the form java.lang.invoke.MethodHandles::invoke(...)
address InterpreterGenerator::generate_method_handle_entry(void) {
- if (!EnableMethodHandles) {
+ if (!EnableInvokeDynamic) {
return generate_abstract_entry();
}
--- a/hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, 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
@@ -1769,6 +1769,7 @@
// returns.
nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler* masm,
methodHandle method,
+ int compile_id,
int total_in_args,
int comp_args_on_stack, // in VMRegStackSlots
BasicType *in_sig_bt,
@@ -2462,6 +2463,7 @@
__ flush();
nmethod *nm = nmethod::new_native_nmethod(method,
+ compile_id,
masm->code(),
vep_offset,
frame_complete,
--- a/hotspot/src/cpu/sparc/vm/sparc.ad Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/sparc/vm/sparc.ad Wed Jul 05 17:39:50 2017 +0200
@@ -1843,6 +1843,10 @@
// registers? True for Intel but false for most RISCs
const bool Matcher::clone_shift_expressions = false;
+// Do we need to mask the count passed to shift instructions or does
+// the cpu only look at the lower 5/6 bits anyway?
+const bool Matcher::need_masked_shift_count = false;
+
bool Matcher::narrow_oop_use_complex_address() {
NOT_LP64(ShouldNotCallThis());
assert(UseCompressedOops, "only for compressed oops code");
--- a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -334,8 +334,8 @@
void TemplateTable::fast_aldc(bool wide) {
transition(vtos, atos);
- if (!EnableMethodHandles) {
- // We should not encounter this bytecode if !EnableMethodHandles.
+ if (!EnableInvokeDynamic) {
+ // We should not encounter this bytecode if !EnableInvokeDynamic.
// The verifier will stop it. However, if we get past the verifier,
// this will stop the thread in a reasonable way, without crashing the JVM.
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
--- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -3510,7 +3510,6 @@
// anywhere in the codeCache then we are always reachable.
// This would have to change if we ever save/restore shared code
// to be more pessimistic.
-
disp = (int64_t)adr._target - ((int64_t)CodeCache::low_bound() + sizeof(int));
if (!is_simm32(disp)) return false;
disp = (int64_t)adr._target - ((int64_t)CodeCache::high_bound() + sizeof(int));
@@ -3534,6 +3533,14 @@
return is_simm32(disp);
}
+// Check if the polling page is not reachable from the code cache using rip-relative
+// addressing.
+bool Assembler::is_polling_page_far() {
+ intptr_t addr = (intptr_t)os::get_polling_page();
+ return !is_simm32(addr - (intptr_t)CodeCache::low_bound()) ||
+ !is_simm32(addr - (intptr_t)CodeCache::high_bound());
+}
+
void Assembler::emit_data64(jlong data,
relocInfo::relocType rtype,
int format) {
@@ -6886,6 +6893,11 @@
}
}
+void MacroAssembler::testl(Register dst, AddressLiteral src) {
+ assert(reachable(src), "Address should be reachable");
+ testl(dst, as_Address(src));
+}
+
//////////////////////////////////////////////////////////////////////////////////
#ifndef SERIALGC
@@ -7121,17 +7133,6 @@
LP64_ONLY(subq(dst, src)) NOT_LP64(subl(dst, src));
}
-void MacroAssembler::test32(Register src1, AddressLiteral src2) {
- // src2 must be rval
-
- if (reachable(src2)) {
- testl(src1, as_Address(src2));
- } else {
- lea(rscratch1, src2);
- testl(src1, Address(rscratch1, 0));
- }
-}
-
// C++ bool manipulation
void MacroAssembler::testbool(Register dst) {
if(sizeof(bool) == 1)
@@ -7768,6 +7769,28 @@
}
}
+void MacroAssembler::cmov32(Condition cc, Register dst, Address src) {
+ if (VM_Version::supports_cmov()) {
+ cmovl(cc, dst, src);
+ } else {
+ Label L;
+ jccb(negate_condition(cc), L);
+ movl(dst, src);
+ bind(L);
+ }
+}
+
+void MacroAssembler::cmov32(Condition cc, Register dst, Register src) {
+ if (VM_Version::supports_cmov()) {
+ cmovl(cc, dst, src);
+ } else {
+ Label L;
+ jccb(negate_condition(cc), L);
+ movl(dst, src);
+ bind(L);
+ }
+}
+
void MacroAssembler::verify_oop(Register reg, const char* s) {
if (!VerifyOops) return;
@@ -9018,14 +9041,7 @@
movl(result, cnt1);
subl(cnt1, cnt2);
push(cnt1);
- if (VM_Version::supports_cmov()) {
- cmovl(Assembler::lessEqual, cnt2, result);
- } else {
- Label GT_LABEL;
- jccb(Assembler::greater, GT_LABEL);
- movl(cnt2, result);
- bind(GT_LABEL);
- }
+ cmov32(Assembler::lessEqual, cnt2, result);
// Is the minimum length zero?
testl(cnt2, cnt2);
--- a/hotspot/src/cpu/x86/vm/assembler_x86.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/assembler_x86.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -580,7 +580,6 @@
void emit_data64(jlong data, relocInfo::relocType rtype, int format = 0);
void emit_data64(jlong data, RelocationHolder const& rspec, int format = 0);
-
bool reachable(AddressLiteral adr) NOT_LP64({ return true;});
// These are all easily abused and hence protected
@@ -683,6 +682,8 @@
static bool is_simm32(int32_t x) { return true; }
#endif // _LP64
+ static bool is_polling_page_far() NOT_LP64({ return false;});
+
// Generic instructions
// Does 32bit or 64bit as needed for the platform. In some sense these
// belong in macro assembler but there is no need for both varieties to exist
@@ -2094,7 +2095,10 @@
void leal32(Register dst, Address src) { leal(dst, src); }
- void test32(Register src1, AddressLiteral src2);
+ // Import other testl() methods from the parent class or else
+ // they will be hidden by the following overriding declaration.
+ using Assembler::testl;
+ void testl(Register dst, AddressLiteral src);
void orptr(Register dst, Address src) { LP64_ONLY(orq(dst, src)) NOT_LP64(orl(dst, src)); }
void orptr(Register dst, Register src) { LP64_ONLY(orq(dst, src)) NOT_LP64(orl(dst, src)); }
@@ -2240,10 +2244,13 @@
// Data
- void cmov(Condition cc, Register dst, Register src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmovl(cc, dst, src)); }
-
- void cmovptr(Condition cc, Register dst, Address src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmovl(cc, dst, src)); }
- void cmovptr(Condition cc, Register dst, Register src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmovl(cc, dst, src)); }
+ void cmov32( Condition cc, Register dst, Address src);
+ void cmov32( Condition cc, Register dst, Register src);
+
+ void cmov( Condition cc, Register dst, Register src) { cmovptr(cc, dst, src); }
+
+ void cmovptr(Condition cc, Register dst, Address src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmov32(cc, dst, src)); }
+ void cmovptr(Condition cc, Register dst, Register src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmov32(cc, dst, src)); }
void movoop(Register dst, jobject obj);
void movoop(Address dst, jobject obj);
--- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -23,6 +23,7 @@
*/
#include "precompiled.hpp"
+#include "asm/assembler.hpp"
#include "c1/c1_Compilation.hpp"
#include "c1/c1_LIRAssembler.hpp"
#include "c1/c1_MacroAssembler.hpp"
@@ -569,24 +570,13 @@
__ lea (rdi, Address(rdi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR)));
// compute minimum length (in rax) and difference of lengths (on top of stack)
- if (VM_Version::supports_cmov()) {
- __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
- __ movl (rax, Address(rax, java_lang_String::count_offset_in_bytes()));
- __ mov (rcx, rbx);
- __ subptr (rbx, rax); // subtract lengths
- __ push (rbx); // result
- __ cmov (Assembler::lessEqual, rax, rcx);
- } else {
- Label L;
- __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
- __ movl (rcx, Address(rax, java_lang_String::count_offset_in_bytes()));
- __ mov (rax, rbx);
- __ subptr (rbx, rcx);
- __ push (rbx);
- __ jcc (Assembler::lessEqual, L);
- __ mov (rax, rcx);
- __ bind (L);
- }
+ __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
+ __ movl (rax, Address(rax, java_lang_String::count_offset_in_bytes()));
+ __ mov (rcx, rbx);
+ __ subptr(rbx, rax); // subtract lengths
+ __ push (rbx); // result
+ __ cmov (Assembler::lessEqual, rax, rcx);
+
// is minimum length 0?
Label noLoop, haveResult;
__ testptr (rax, rax);
@@ -648,12 +638,13 @@
AddressLiteral polling_page(os::get_polling_page() + (SafepointPollOffset % os::vm_page_size()),
relocInfo::poll_return_type);
- // NOTE: the requires that the polling page be reachable else the reloc
- // goes to the movq that loads the address and not the faulting instruction
- // which breaks the signal handler code
-
- __ test32(rax, polling_page);
-
+ if (Assembler::is_polling_page_far()) {
+ __ lea(rscratch1, polling_page);
+ __ relocate(relocInfo::poll_return_type);
+ __ testl(rax, Address(rscratch1, 0));
+ } else {
+ __ testl(rax, polling_page);
+ }
__ ret(0);
}
@@ -661,20 +652,17 @@
int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) {
AddressLiteral polling_page(os::get_polling_page() + (SafepointPollOffset % os::vm_page_size()),
relocInfo::poll_type);
-
- if (info != NULL) {
+ guarantee(info != NULL, "Shouldn't be NULL");
+ int offset = __ offset();
+ if (Assembler::is_polling_page_far()) {
+ __ lea(rscratch1, polling_page);
+ offset = __ offset();
add_debug_info_for_branch(info);
+ __ testl(rax, Address(rscratch1, 0));
} else {
- ShouldNotReachHere();
+ add_debug_info_for_branch(info);
+ __ testl(rax, polling_page);
}
-
- int offset = __ offset();
-
- // NOTE: the requires that the polling page be reachable else the reloc
- // goes to the movq that loads the address and not the faulting instruction
- // which breaks the signal handler code
-
- __ test32(rax, polling_page);
return offset;
}
--- a/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -23,6 +23,7 @@
*/
#include "precompiled.hpp"
+#include "asm/assembler.hpp"
#include "c1/c1_Defs.hpp"
#include "c1/c1_MacroAssembler.hpp"
#include "c1/c1_Runtime1.hpp"
--- a/hotspot/src/cpu/x86/vm/frame_x86.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/frame_x86.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, 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
@@ -125,7 +125,7 @@
// Entry frames
#ifdef AMD64
#ifdef _WIN64
- entry_frame_after_call_words = 8,
+ entry_frame_after_call_words = 28,
entry_frame_call_wrapper_offset = 2,
arg_reg_save_area_bytes = 32, // Register argument save area
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -215,7 +215,7 @@
if (index_size == sizeof(u2)) {
load_unsigned_short(reg, Address(rsi, bcp_offset));
} else if (index_size == sizeof(u4)) {
- assert(EnableInvokeDynamic, "giant index used only for EnableInvokeDynamic");
+ assert(EnableInvokeDynamic, "giant index used only for JSR 292");
movl(reg, Address(rsi, bcp_offset));
// Check if the secondary index definition is still ~x, otherwise
// we have to change the following assembler code to calculate the
@@ -223,7 +223,7 @@
assert(constantPoolCacheOopDesc::decode_secondary_index(~123) == 123, "else change next line");
notl(reg); // convert to plain index
} else if (index_size == sizeof(u1)) {
- assert(EnableMethodHandles, "tiny index used only for EnableMethodHandles");
+ assert(EnableInvokeDynamic, "tiny index used only for JSR 292");
load_unsigned_byte(reg, Address(rsi, bcp_offset));
} else {
ShouldNotReachHere();
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -213,7 +213,7 @@
if (index_size == sizeof(u2)) {
load_unsigned_short(index, Address(r13, bcp_offset));
} else if (index_size == sizeof(u4)) {
- assert(EnableInvokeDynamic, "giant index used only for EnableInvokeDynamic");
+ assert(EnableInvokeDynamic, "giant index used only for JSR 292");
movl(index, Address(r13, bcp_offset));
// Check if the secondary index definition is still ~x, otherwise
// we have to change the following assembler code to calculate the
@@ -221,7 +221,7 @@
assert(constantPoolCacheOopDesc::decode_secondary_index(~123) == 123, "else change next line");
notl(index); // convert to plain index
} else if (index_size == sizeof(u1)) {
- assert(EnableMethodHandles, "tiny index used only for EnableMethodHandles");
+ assert(EnableInvokeDynamic, "tiny index used only for JSR 292");
load_unsigned_byte(index, Address(r13, bcp_offset));
} else {
ShouldNotReachHere();
--- a/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -233,7 +233,7 @@
// Method handle invoker
// Dispatch a method of the form java.lang.invoke.MethodHandles::invoke(...)
address InterpreterGenerator::generate_method_handle_entry(void) {
- if (!EnableMethodHandles) {
+ if (!EnableInvokeDynamic) {
return generate_abstract_entry();
}
--- a/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -320,7 +320,7 @@
// Method handle invoker
// Dispatch a method of the form java.lang.invoke.MethodHandles::invoke(...)
address InterpreterGenerator::generate_method_handle_entry(void) {
- if (!EnableMethodHandles) {
+ if (!EnableInvokeDynamic) {
return generate_abstract_entry();
}
--- a/hotspot/src/cpu/x86/vm/nativeInst_x86.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/nativeInst_x86.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, 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
@@ -519,7 +519,11 @@
class NativeTstRegMem: public NativeInstruction {
public:
enum Intel_specific_constants {
- instruction_code_memXregl = 0x85
+ instruction_rex_prefix_mask = 0xF0,
+ instruction_rex_prefix = Assembler::REX,
+ instruction_code_memXregl = 0x85,
+ modrm_mask = 0x38, // select reg from the ModRM byte
+ modrm_reg = 0x00 // rax
};
};
@@ -533,12 +537,25 @@
(ubyte_at(0) & 0xF0) == 0x70; /* short jump */ }
inline bool NativeInstruction::is_safepoint_poll() {
#ifdef AMD64
- if ( ubyte_at(0) == NativeTstRegMem::instruction_code_memXregl &&
- ubyte_at(1) == 0x05 ) { // 00 rax 101
- address fault = addr_at(6) + int_at(2);
- return os::is_poll_address(fault);
+ if (Assembler::is_polling_page_far()) {
+ // two cases, depending on the choice of the base register in the address.
+ if (((ubyte_at(0) & NativeTstRegMem::instruction_rex_prefix_mask) == NativeTstRegMem::instruction_rex_prefix &&
+ ubyte_at(1) == NativeTstRegMem::instruction_code_memXregl &&
+ (ubyte_at(2) & NativeTstRegMem::modrm_mask) == NativeTstRegMem::modrm_reg) ||
+ ubyte_at(0) == NativeTstRegMem::instruction_code_memXregl &&
+ (ubyte_at(1) & NativeTstRegMem::modrm_mask) == NativeTstRegMem::modrm_reg) {
+ return true;
+ } else {
+ return false;
+ }
} else {
- return false;
+ if (ubyte_at(0) == NativeTstRegMem::instruction_code_memXregl &&
+ ubyte_at(1) == 0x05) { // 00 rax 101
+ address fault = addr_at(6) + int_at(2);
+ return os::is_poll_address(fault);
+ } else {
+ return false;
+ }
}
#else
return ( ubyte_at(0) == NativeMovRegMem::instruction_code_mem2reg ||
--- a/hotspot/src/cpu/x86/vm/relocInfo_x86.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/relocInfo_x86.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, 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,41 +198,44 @@
void poll_Relocation::fix_relocation_after_move(const CodeBuffer* src, CodeBuffer* dest) {
#ifdef _LP64
- typedef Assembler::WhichOperand WhichOperand;
- WhichOperand which = (WhichOperand) format();
- // This format is imm but it is really disp32
- which = Assembler::disp32_operand;
- address orig_addr = old_addr_for(addr(), src, dest);
- NativeInstruction* oni = nativeInstruction_at(orig_addr);
- int32_t* orig_disp = (int32_t*) Assembler::locate_operand(orig_addr, which);
- // This poll_addr is incorrect by the size of the instruction it is irrelevant
- intptr_t poll_addr = (intptr_t)oni + *orig_disp;
+ if (!Assembler::is_polling_page_far()) {
+ typedef Assembler::WhichOperand WhichOperand;
+ WhichOperand which = (WhichOperand) format();
+ // This format is imm but it is really disp32
+ which = Assembler::disp32_operand;
+ address orig_addr = old_addr_for(addr(), src, dest);
+ NativeInstruction* oni = nativeInstruction_at(orig_addr);
+ int32_t* orig_disp = (int32_t*) Assembler::locate_operand(orig_addr, which);
+ // This poll_addr is incorrect by the size of the instruction it is irrelevant
+ intptr_t poll_addr = (intptr_t)oni + *orig_disp;
- NativeInstruction* ni = nativeInstruction_at(addr());
- intptr_t new_disp = poll_addr - (intptr_t) ni;
+ NativeInstruction* ni = nativeInstruction_at(addr());
+ intptr_t new_disp = poll_addr - (intptr_t) ni;
- int32_t* disp = (int32_t*) Assembler::locate_operand(addr(), which);
- * disp = (int32_t)new_disp;
-
+ int32_t* disp = (int32_t*) Assembler::locate_operand(addr(), which);
+ * disp = (int32_t)new_disp;
+ }
#endif // _LP64
}
void poll_return_Relocation::fix_relocation_after_move(const CodeBuffer* src, CodeBuffer* dest) {
#ifdef _LP64
- typedef Assembler::WhichOperand WhichOperand;
- WhichOperand which = (WhichOperand) format();
- // This format is imm but it is really disp32
- which = Assembler::disp32_operand;
- address orig_addr = old_addr_for(addr(), src, dest);
- NativeInstruction* oni = nativeInstruction_at(orig_addr);
- int32_t* orig_disp = (int32_t*) Assembler::locate_operand(orig_addr, which);
- // This poll_addr is incorrect by the size of the instruction it is irrelevant
- intptr_t poll_addr = (intptr_t)oni + *orig_disp;
+ if (!Assembler::is_polling_page_far()) {
+ typedef Assembler::WhichOperand WhichOperand;
+ WhichOperand which = (WhichOperand) format();
+ // This format is imm but it is really disp32
+ which = Assembler::disp32_operand;
+ address orig_addr = old_addr_for(addr(), src, dest);
+ NativeInstruction* oni = nativeInstruction_at(orig_addr);
+ int32_t* orig_disp = (int32_t*) Assembler::locate_operand(orig_addr, which);
+ // This poll_addr is incorrect by the size of the instruction it is irrelevant
+ intptr_t poll_addr = (intptr_t)oni + *orig_disp;
- NativeInstruction* ni = nativeInstruction_at(addr());
- intptr_t new_disp = poll_addr - (intptr_t) ni;
+ NativeInstruction* ni = nativeInstruction_at(addr());
+ intptr_t new_disp = poll_addr - (intptr_t) ni;
- int32_t* disp = (int32_t*) Assembler::locate_operand(addr(), which);
- * disp = (int32_t)new_disp;
+ int32_t* disp = (int32_t*) Assembler::locate_operand(addr(), which);
+ * disp = (int32_t)new_disp;
+ }
#endif // _LP64
}
--- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_32.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_32.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1111,6 +1111,7 @@
// returns.
nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm,
methodHandle method,
+ int compile_id,
int total_in_args,
int comp_args_on_stack,
BasicType *in_sig_bt,
@@ -1854,6 +1855,7 @@
__ flush();
nmethod *nm = nmethod::new_native_nmethod(method,
+ compile_id,
masm->code(),
vep_offset,
frame_complete,
--- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1174,6 +1174,7 @@
// returns.
nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm,
methodHandle method,
+ int compile_id,
int total_in_args,
int comp_args_on_stack,
BasicType *in_sig_bt,
@@ -1881,6 +1882,7 @@
__ flush();
nmethod *nm = nmethod::new_native_nmethod(method,
+ compile_id,
masm->code(),
vep_offset,
frame_complete,
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -144,8 +144,11 @@
// [ return_from_Java ] <--- rsp
// [ argument word n ]
// ...
- // -8 [ argument word 1 ]
- // -7 [ saved r15 ] <--- rsp_after_call
+ // -28 [ argument word 1 ]
+ // -27 [ saved xmm15 ] <--- rsp_after_call
+ // [ saved xmm7-xmm14 ]
+ // -9 [ saved xmm6 ] (each xmm register takes 2 slots)
+ // -7 [ saved r15 ]
// -6 [ saved r14 ]
// -5 [ saved r13 ]
// -4 [ saved r12 ]
@@ -169,8 +172,11 @@
// Call stub stack layout word offsets from rbp
enum call_stub_layout {
#ifdef _WIN64
- rsp_after_call_off = -7,
- r15_off = rsp_after_call_off,
+ xmm_save_first = 6, // save from xmm6
+ xmm_save_last = 15, // to xmm15
+ xmm_save_base = -9,
+ rsp_after_call_off = xmm_save_base - 2 * (xmm_save_last - xmm_save_first), // -27
+ r15_off = -7,
r14_off = -6,
r13_off = -5,
r12_off = -4,
@@ -208,6 +214,13 @@
#endif
};
+#ifdef _WIN64
+ Address xmm_save(int reg) {
+ assert(reg >= xmm_save_first && reg <= xmm_save_last, "XMM register number out of range");
+ return Address(rbp, (xmm_save_base - (reg - xmm_save_first) * 2) * wordSize);
+ }
+#endif
+
address generate_call_stub(address& return_address) {
assert((int)frame::entry_frame_after_call_words == -(int)rsp_after_call_off + 1 &&
(int)frame::entry_frame_call_wrapper_offset == (int)call_wrapper_off,
@@ -256,8 +269,11 @@
__ movptr(r13_save, r13);
__ movptr(r14_save, r14);
__ movptr(r15_save, r15);
-
#ifdef _WIN64
+ for (int i = 6; i <= 15; i++) {
+ __ movdqu(xmm_save(i), as_XMMRegister(i));
+ }
+
const Address rdi_save(rbp, rdi_off * wordSize);
const Address rsi_save(rbp, rsi_off * wordSize);
@@ -360,6 +376,11 @@
#endif
// restore regs belonging to calling function
+#ifdef _WIN64
+ for (int i = 15; i >= 6; i--) {
+ __ movdqu(as_XMMRegister(i), xmm_save(i));
+ }
+#endif
__ movptr(r15, r15_save);
__ movptr(r14, r14_save);
__ movptr(r13, r13_save);
@@ -2428,8 +2449,8 @@
//
address generate_generic_copy(const char *name,
address byte_copy_entry, address short_copy_entry,
- address int_copy_entry, address long_copy_entry,
- address oop_copy_entry, address checkcast_copy_entry) {
+ address int_copy_entry, address oop_copy_entry,
+ address long_copy_entry, address checkcast_copy_entry) {
Label L_failed, L_failed_0, L_objArray;
Label L_copy_bytes, L_copy_shorts, L_copy_ints, L_copy_longs;
--- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1527,7 +1527,7 @@
if (interpreter_frame != NULL) {
#ifdef ASSERT
- if (!EnableMethodHandles)
+ if (!EnableInvokeDynamic)
// @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences?
// Probably, since deoptimization doesn't work yet.
assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable");
--- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1541,7 +1541,7 @@
tempcount* Interpreter::stackElementWords + popframe_extra_args;
if (interpreter_frame != NULL) {
#ifdef ASSERT
- if (!EnableMethodHandles)
+ if (!EnableInvokeDynamic)
// @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences?
// Probably, since deoptimization doesn't work yet.
assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable");
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -23,6 +23,7 @@
*/
#include "precompiled.hpp"
+#include "asm/assembler.hpp"
#include "interpreter/interpreter.hpp"
#include "interpreter/interpreterRuntime.hpp"
#include "interpreter/templateTable.hpp"
@@ -391,8 +392,8 @@
void TemplateTable::fast_aldc(bool wide) {
transition(vtos, atos);
- if (!EnableMethodHandles) {
- // We should not encounter this bytecode if !EnableMethodHandles.
+ if (!EnableInvokeDynamic) {
+ // We should not encounter this bytecode if !EnableInvokeDynamic.
// The verifier will stop it. However, if we get past the verifier,
// this will stop the thread in a reasonable way, without crashing the JVM.
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
@@ -1939,18 +1940,10 @@
__ movl(temp, Address(array, h, Address::times_8, 0*wordSize));
__ bswapl(temp);
__ cmpl(key, temp);
- if (VM_Version::supports_cmov()) {
- __ cmovl(Assembler::less , j, h); // j = h if (key < array[h].fast_match())
- __ cmovl(Assembler::greaterEqual, i, h); // i = h if (key >= array[h].fast_match())
- } else {
- Label set_i, end_of_if;
- __ jccb(Assembler::greaterEqual, set_i); // {
- __ mov(j, h); // j = h;
- __ jmp(end_of_if); // }
- __ bind(set_i); // else {
- __ mov(i, h); // i = h;
- __ bind(end_of_if); // }
- }
+ // j = h if (key < array[h].fast_match())
+ __ cmov32(Assembler::less , j, h);
+ // i = h if (key >= array[h].fast_match())
+ __ cmov32(Assembler::greaterEqual, i, h);
// while (i+1 < j)
__ bind(entry);
__ leal(h, Address(i, 1)); // i+1
@@ -3478,22 +3471,14 @@
// find a free slot in the monitor block (result in rdx)
{ Label entry, loop, exit;
- __ movptr(rcx, monitor_block_top); // points to current entry, starting with top-most entry
- __ lea(rbx, monitor_block_bot); // points to word before bottom of monitor block
+ __ movptr(rcx, monitor_block_top); // points to current entry, starting with top-most entry
+
+ __ lea(rbx, monitor_block_bot); // points to word before bottom of monitor block
__ jmpb(entry);
__ bind(loop);
__ cmpptr(Address(rcx, BasicObjectLock::obj_offset_in_bytes()), (int32_t)NULL_WORD); // check if current entry is used
-
-// TODO - need new func here - kbt
- if (VM_Version::supports_cmov()) {
- __ cmov(Assembler::equal, rdx, rcx); // if not used then remember entry in rdx
- } else {
- Label L;
- __ jccb(Assembler::notEqual, L);
- __ mov(rdx, rcx); // if not used then remember entry in rdx
- __ bind(L);
- }
+ __ cmovptr(Assembler::equal, rdx, rcx); // if not used then remember entry in rdx
__ cmpptr(rax, Address(rcx, BasicObjectLock::obj_offset_in_bytes())); // check if current entry is for same object
__ jccb(Assembler::equal, exit); // if same object then stop searching
__ addptr(rcx, entry_size); // otherwise advance to next entry
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -405,8 +405,8 @@
void TemplateTable::fast_aldc(bool wide) {
transition(vtos, atos);
- if (!EnableMethodHandles) {
- // We should not encounter this bytecode if !EnableMethodHandles.
+ if (!EnableInvokeDynamic) {
+ // We should not encounter this bytecode if !EnableInvokeDynamic.
// The verifier will stop it. However, if we get past the verifier,
// this will stop the thread in a reasonable way, without crashing the JVM.
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
--- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -429,6 +429,11 @@
UseXmmI2D = false;
}
}
+ if( FLAG_IS_DEFAULT(UseSSE42Intrinsics) ) {
+ if( supports_sse4_2() && UseSSE >= 4 ) {
+ UseSSE42Intrinsics = true;
+ }
+ }
// Use count leading zeros count instruction if available.
if (supports_lzcnt()) {
--- a/hotspot/src/cpu/x86/vm/x86_32.ad Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/x86_32.ad Wed Jul 05 17:39:50 2017 +0200
@@ -1393,6 +1393,10 @@
// registers? True for Intel but false for most RISCs
const bool Matcher::clone_shift_expressions = true;
+// Do we need to mask the count passed to shift instructions or does
+// the cpu only look at the lower 5/6 bits anyway?
+const bool Matcher::need_masked_shift_count = false;
+
bool Matcher::narrow_oop_use_complex_address() {
ShouldNotCallThis();
return true;
--- a/hotspot/src/cpu/x86/vm/x86_64.ad Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/x86_64.ad Wed Jul 05 17:39:50 2017 +0200
@@ -574,12 +574,11 @@
// In os_cpu .ad file
// int MachCallRuntimeNode::ret_addr_offset()
-// Indicate if the safepoint node needs the polling page as an input.
-// Since amd64 does not have absolute addressing but RIP-relative
-// addressing and the polling page is within 2G, it doesn't.
+// Indicate if the safepoint node needs the polling page as an input,
+// it does if the polling page is more than disp32 away.
bool SafePointNode::needs_polling_address_input()
{
- return false;
+ return Assembler::is_polling_page_far();
}
//
@@ -992,15 +991,21 @@
framesize -= 2*wordSize;
if (framesize) {
- st->print_cr("addq\trsp, %d\t# Destroy frame", framesize);
+ st->print_cr("addq rsp, %d\t# Destroy frame", framesize);
st->print("\t");
}
- st->print_cr("popq\trbp");
+ st->print_cr("popq rbp");
if (do_polling() && C->is_method_compilation()) {
- st->print_cr("\ttestl\trax, [rip + #offset_to_poll_page]\t"
- "# Safepoint: poll for GC");
st->print("\t");
+ if (Assembler::is_polling_page_far()) {
+ st->print_cr("movq rscratch1, #polling_page_address\n\t"
+ "testl rax, [rscratch1]\t"
+ "# Safepoint: poll for GC");
+ } else {
+ st->print_cr("testl rax, [rip + #offset_to_poll_page]\t"
+ "# Safepoint: poll for GC");
+ }
}
}
#endif
@@ -1033,45 +1038,22 @@
emit_opcode(cbuf, 0x58 | RBP_enc);
if (do_polling() && C->is_method_compilation()) {
- // testl %rax, off(%rip) // Opcode + ModRM + Disp32 == 6 bytes
- // XXX reg_mem doesn't support RIP-relative addressing yet
- cbuf.set_insts_mark();
- cbuf.relocate(cbuf.insts_mark(), relocInfo::poll_return_type, 0); // XXX
- emit_opcode(cbuf, 0x85); // testl
- emit_rm(cbuf, 0x0, RAX_enc, 0x5); // 00 rax 101 == 0x5
- // cbuf.insts_mark() is beginning of instruction
- emit_d32_reloc(cbuf, os::get_polling_page());
-// relocInfo::poll_return_type,
+ MacroAssembler _masm(&cbuf);
+ AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_return_type);
+ if (Assembler::is_polling_page_far()) {
+ __ lea(rscratch1, polling_page);
+ __ relocate(relocInfo::poll_return_type);
+ __ testl(rax, Address(rscratch1, 0));
+ } else {
+ __ testl(rax, polling_page);
+ }
}
}
uint MachEpilogNode::size(PhaseRegAlloc* ra_) const
{
- Compile* C = ra_->C;
- int framesize = C->frame_slots() << LogBytesPerInt;
- assert((framesize & (StackAlignmentInBytes-1)) == 0, "frame size not aligned");
- // Remove word for return adr already pushed
- // and RBP
- framesize -= 2*wordSize;
-
- uint size = 0;
-
- if (do_polling() && C->is_method_compilation()) {
- size += 6;
- }
-
- // count popq rbp
- size++;
-
- if (framesize) {
- if (framesize < 0x80) {
- size += 4;
- } else if (framesize) {
- size += 7;
- }
- }
-
- return size;
+ return MachNode::size(ra_); // too many variables; just compute it
+ // the hard way
}
int MachEpilogNode::reloc() const
@@ -2000,6 +1982,10 @@
// into registers? True for Intel but false for most RISCs
const bool Matcher::clone_shift_expressions = true;
+// Do we need to mask the count passed to shift instructions or does
+// the cpu only look at the lower 5/6 bits anyway?
+const bool Matcher::need_masked_shift_count = false;
+
bool Matcher::narrow_oop_use_complex_address() {
assert(UseCompressedOops, "only for compressed oops code");
return (LogMinObjAlignmentInBytes <= 3);
@@ -3406,8 +3392,8 @@
}
if (EmitSync & 1) {
// Without cast to int32_t a movptr will destroy r10 which is typically obj
- masm.movptr (Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())) ;
- masm.cmpptr(rsp, (int32_t)NULL_WORD) ;
+ masm.movptr (Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())) ;
+ masm.cmpptr(rsp, (int32_t)NULL_WORD) ;
} else
if (EmitSync & 2) {
Label DONE_LABEL;
@@ -3435,10 +3421,10 @@
} else {
Label DONE_LABEL, IsInflated, Egress;
- masm.movptr(tmpReg, Address(objReg, 0)) ;
+ masm.movptr(tmpReg, Address(objReg, 0)) ;
masm.testl (tmpReg, 0x02) ; // inflated vs stack-locked|neutral|biased
- masm.jcc (Assembler::notZero, IsInflated) ;
-
+ masm.jcc (Assembler::notZero, IsInflated) ;
+
// it's stack-locked, biased or neutral
// TODO: optimize markword triage order to reduce the number of
// conditional branches in the most common cases.
@@ -3452,9 +3438,9 @@
}
// was q will it destroy high?
- masm.orl (tmpReg, 1) ;
- masm.movptr(Address(boxReg, 0), tmpReg) ;
- if (os::is_MP()) { masm.lock(); }
+ masm.orl (tmpReg, 1) ;
+ masm.movptr(Address(boxReg, 0), tmpReg) ;
+ if (os::is_MP()) { masm.lock(); }
masm.cmpxchgptr(boxReg, Address(objReg, 0)); // Updates tmpReg
if (_counters != NULL) {
masm.cond_inc32(Assembler::equal,
@@ -3481,16 +3467,16 @@
// fetched _owner. If the CAS is successful we may
// avoid an RTO->RTS upgrade on the $line.
// Without cast to int32_t a movptr will destroy r10 which is typically obj
- masm.movptr(Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())) ;
-
- masm.mov (boxReg, tmpReg) ;
- masm.movptr (tmpReg, Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ;
- masm.testptr(tmpReg, tmpReg) ;
- masm.jcc (Assembler::notZero, DONE_LABEL) ;
+ masm.movptr(Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())) ;
+
+ masm.mov (boxReg, tmpReg) ;
+ masm.movptr (tmpReg, Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ;
+ masm.testptr(tmpReg, tmpReg) ;
+ masm.jcc (Assembler::notZero, DONE_LABEL) ;
// It's inflated and appears unlocked
- if (os::is_MP()) { masm.lock(); }
- masm.cmpxchgptr(r15_thread, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)) ;
+ if (os::is_MP()) { masm.lock(); }
+ masm.cmpxchgptr(r15_thread, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)) ;
// Intentional fall-through into DONE_LABEL ...
masm.bind (DONE_LABEL) ;
@@ -3509,8 +3495,8 @@
Register tmpReg = as_Register($tmp$$reg);
MacroAssembler masm(&cbuf);
- if (EmitSync & 4) {
- masm.cmpptr(rsp, 0) ;
+ if (EmitSync & 4) {
+ masm.cmpptr(rsp, 0) ;
} else
if (EmitSync & 8) {
Label DONE_LABEL;
@@ -3537,25 +3523,25 @@
if (UseBiasedLocking && !UseOptoBiasInlining) {
masm.biased_locking_exit(objReg, tmpReg, DONE_LABEL);
}
-
- masm.movptr(tmpReg, Address(objReg, 0)) ;
- masm.cmpptr(Address(boxReg, 0), (int32_t)NULL_WORD) ;
- masm.jcc (Assembler::zero, DONE_LABEL) ;
- masm.testl (tmpReg, 0x02) ;
- masm.jcc (Assembler::zero, Stacked) ;
-
+
+ masm.movptr(tmpReg, Address(objReg, 0)) ;
+ masm.cmpptr(Address(boxReg, 0), (int32_t)NULL_WORD) ;
+ masm.jcc (Assembler::zero, DONE_LABEL) ;
+ masm.testl (tmpReg, 0x02) ;
+ masm.jcc (Assembler::zero, Stacked) ;
+
// It's inflated
- masm.movptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ;
- masm.xorptr(boxReg, r15_thread) ;
- masm.orptr (boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)) ;
- masm.jcc (Assembler::notZero, DONE_LABEL) ;
- masm.movptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)) ;
- masm.orptr (boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)) ;
- masm.jcc (Assembler::notZero, CheckSucc) ;
- masm.movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), (int32_t)NULL_WORD) ;
- masm.jmp (DONE_LABEL) ;
-
- if ((EmitSync & 65536) == 0) {
+ masm.movptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ;
+ masm.xorptr(boxReg, r15_thread) ;
+ masm.orptr (boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)) ;
+ masm.jcc (Assembler::notZero, DONE_LABEL) ;
+ masm.movptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)) ;
+ masm.orptr (boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)) ;
+ masm.jcc (Assembler::notZero, CheckSucc) ;
+ masm.movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), (int32_t)NULL_WORD) ;
+ masm.jmp (DONE_LABEL) ;
+
+ if ((EmitSync & 65536) == 0) {
Label LSuccess, LGoSlowPath ;
masm.bind (CheckSucc) ;
masm.cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), (int32_t)NULL_WORD) ;
@@ -3587,9 +3573,9 @@
masm.jmp (DONE_LABEL) ;
}
- masm.bind (Stacked) ;
+ masm.bind (Stacked) ;
masm.movptr(tmpReg, Address (boxReg, 0)) ; // re-fetch
- if (os::is_MP()) { masm.lock(); }
+ if (os::is_MP()) { masm.lock(); }
masm.cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses RAX which is box
if (EmitSync & 65536) {
@@ -3910,22 +3896,6 @@
// done:
%}
-
- // Safepoint Poll. This polls the safepoint page, and causes an
- // exception if it is not readable. Unfortunately, it kills
- // RFLAGS in the process.
- enc_class enc_safepoint_poll
- %{
- // testl %rax, off(%rip) // Opcode + ModRM + Disp32 == 6 bytes
- // XXX reg_mem doesn't support RIP-relative addressing yet
- cbuf.set_insts_mark();
- cbuf.relocate(cbuf.insts_mark(), relocInfo::poll_type, 0); // XXX
- emit_opcode(cbuf, 0x85); // testl
- emit_rm(cbuf, 0x0, RAX_enc, 0x5); // 00 rax 101 == 0x5
- // cbuf.insts_mark() is beginning of instruction
- emit_d32_reloc(cbuf, os::get_polling_page());
-// relocInfo::poll_type,
- %}
%}
@@ -4229,6 +4199,15 @@
interface(CONST_INTER);
%}
+operand immP_poll() %{
+ predicate(n->get_ptr() != 0 && n->get_ptr() == (intptr_t)os::get_polling_page());
+ match(ConP);
+
+ // formats are generated automatically for constants and base registers
+ format %{ %}
+ interface(CONST_INTER);
+%}
+
// Pointer Immediate
operand immN() %{
match(ConN);
@@ -4836,7 +4815,7 @@
%}
// Double register operands
-operand regD()
+operand regD()
%{
constraint(ALLOC_IN_RC(double_reg));
match(RegD);
@@ -6564,6 +6543,16 @@
ins_pipe(ialu_reg);
%}
+instruct loadConP_poll(rRegP dst, immP_poll src) %{
+ match(Set dst src);
+ format %{ "movq $dst, $src\t!ptr" %}
+ ins_encode %{
+ AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_type);
+ __ lea($dst$$Register, polling_page);
+ %}
+ ins_pipe(ialu_reg_fat);
+%}
+
instruct loadConP31(rRegP dst, immP31 src, rFlagsReg cr)
%{
match(Set dst src);
@@ -7237,11 +7226,11 @@
instruct bytes_reverse_unsigned_short(rRegI dst) %{
match(Set dst (ReverseBytesUS dst));
- format %{ "bswapl $dst\n\t"
+ format %{ "bswapl $dst\n\t"
"shrl $dst,16\n\t" %}
ins_encode %{
__ bswapl($dst$$Register);
- __ shrl($dst$$Register, 16);
+ __ shrl($dst$$Register, 16);
%}
ins_pipe( ialu_reg );
%}
@@ -7249,11 +7238,11 @@
instruct bytes_reverse_short(rRegI dst) %{
match(Set dst (ReverseBytesS dst));
- format %{ "bswapl $dst\n\t"
+ format %{ "bswapl $dst\n\t"
"sar $dst,16\n\t" %}
ins_encode %{
__ bswapl($dst$$Register);
- __ sarl($dst$$Register, 16);
+ __ sarl($dst$$Register, 16);
%}
ins_pipe( ialu_reg );
%}
@@ -7476,7 +7465,7 @@
effect(KILL cr);
ins_cost(400);
- format %{
+ format %{
$$template
if (os::is_MP()) {
$$emit$$"lock addl [rsp + #0], 0\t! membar_volatile"
@@ -8287,7 +8276,7 @@
rFlagsReg cr)
%{
match(Set cr (StorePConditional heap_top_ptr (Binary oldval newval)));
-
+
format %{ "cmpxchgq $heap_top_ptr, $newval\t# (ptr) "
"If rax == $heap_top_ptr then store $newval into $heap_top_ptr" %}
opcode(0x0F, 0xB1);
@@ -9850,9 +9839,9 @@
// Xor Register with Immediate -1
instruct xorI_rReg_im1(rRegI dst, immI_M1 imm) %{
- match(Set dst (XorI dst imm));
-
- format %{ "not $dst" %}
+ match(Set dst (XorI dst imm));
+
+ format %{ "not $dst" %}
ins_encode %{
__ notl($dst$$Register);
%}
@@ -10093,9 +10082,9 @@
// Xor Register with Immediate -1
instruct xorL_rReg_im1(rRegL dst, immL_M1 imm) %{
- match(Set dst (XorL dst imm));
-
- format %{ "notq $dst" %}
+ match(Set dst (XorL dst imm));
+
+ format %{ "notq $dst" %}
ins_encode %{
__ notq($dst$$Register);
%}
@@ -12469,14 +12458,33 @@
// Safepoint Instructions
instruct safePoint_poll(rFlagsReg cr)
%{
+ predicate(!Assembler::is_polling_page_far());
match(SafePoint);
effect(KILL cr);
- format %{ "testl rax, [rip + #offset_to_poll_page]\t"
+ format %{ "testl rax, [rip + #offset_to_poll_page]\t"
"# Safepoint: poll for GC" %}
- size(6); // Opcode + ModRM + Disp32 == 6 bytes
ins_cost(125);
- ins_encode(enc_safepoint_poll);
+ ins_encode %{
+ AddressLiteral addr(os::get_polling_page(), relocInfo::poll_type);
+ __ testl(rax, addr);
+ %}
+ ins_pipe(ialu_reg_mem);
+%}
+
+instruct safePoint_poll_far(rFlagsReg cr, rRegP poll)
+%{
+ predicate(Assembler::is_polling_page_far());
+ match(SafePoint poll);
+ effect(KILL cr, USE poll);
+
+ format %{ "testl rax, [$poll]\t"
+ "# Safepoint: poll for GC" %}
+ ins_cost(125);
+ ins_encode %{
+ __ relocate(relocInfo::poll_type);
+ __ testl(rax, Address($poll$$Register, 0));
+ %}
ins_pipe(ialu_reg_mem);
%}
--- a/hotspot/src/share/tools/ProjectCreator/Util.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/tools/ProjectCreator/Util.java Wed Jul 05 17:39:50 2017 +0200
@@ -47,18 +47,6 @@
return sb.toString();
}
- static String join(String padder, String v[]) {
- StringBuffer sb = new StringBuffer();
-
- for (int i=0; i<v.length; i++) {
- sb.append(v[i]);
- if (i < (v.length - 1)) sb.append(padder);
- }
-
- return sb.toString();
- }
-
-
static String prefixed_join(String padder, Vector v, boolean quoted) {
StringBuffer sb = new StringBuffer();
--- a/hotspot/src/share/tools/ProjectCreator/WinGammaPlatform.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/tools/ProjectCreator/WinGammaPlatform.java Wed Jul 05 17:39:50 2017 +0200
@@ -587,7 +587,6 @@
Vector allConfigs = new Vector();
allConfigs.add(new C1DebugConfig());
-
allConfigs.add(new C1FastDebugConfig());
allConfigs.add(new C1ProductConfig());
@@ -655,6 +654,10 @@
boolean isHeader() {
return attr.shortName.endsWith(".h") || attr.shortName.endsWith(".hpp");
}
+
+ boolean isCpp() {
+ return attr.shortName.endsWith(".cpp");
+ }
}
@@ -708,7 +711,7 @@
PrintWriter printWriter;
public void writeProjectFile(String projectFileName, String projectName,
- Vector allConfigs) throws IOException {
+ Vector<BuildConfig> allConfigs) throws IOException {
throw new RuntimeException("use compiler version specific version");
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC10.java Wed Jul 05 17:39:50 2017 +0200
@@ -0,0 +1,545 @@
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.TreeSet;
+import java.util.UUID;
+import java.util.Vector;
+
+public class WinGammaPlatformVC10 extends WinGammaPlatformVC7 {
+
+ @Override
+ protected String getProjectExt() {
+ return ".vcxproj";
+ }
+
+ @Override
+ public void writeProjectFile(String projectFileName, String projectName,
+ Vector<BuildConfig> allConfigs) throws IOException {
+ System.out.println();
+ System.out.print(" Writing .vcxproj file: " + projectFileName);
+
+ String projDir = Util.normalize(new File(projectFileName).getParent());
+
+ printWriter = new PrintWriter(projectFileName, "UTF-8");
+ printWriter.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ startTag("Project",
+ "DefaultTargets", "Build",
+ "ToolsVersion", "4.0",
+ "xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
+ startTag("ItemGroup",
+ "Label", "ProjectConfigurations");
+ for (BuildConfig cfg : allConfigs) {
+ startTag("ProjectConfiguration",
+ "Include", cfg.get("Name"));
+ tagData("Configuration", cfg.get("Id"));
+ tagData("Platform", cfg.get("PlatformName"));
+ endTag("ProjectConfiguration");
+ }
+ endTag("ItemGroup");
+
+ startTag("PropertyGroup", "Label", "Globals");
+ tagData("ProjectGuid", "{8822CB5C-1C41-41C2-8493-9F6E1994338B}");
+ tag("SccProjectName");
+ tag("SccLocalPath");
+ endTag("PropertyGroup");
+
+ tag("Import", "Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props");
+
+ for (BuildConfig cfg : allConfigs) {
+ startTag(cfg, "PropertyGroup", "Label", "Configuration");
+ tagData("ConfigurationType", "DynamicLibrary");
+ tagData("UseOfMfc", "false");
+ endTag("PropertyGroup");
+ }
+
+ tag("Import", "Project", "$(VCTargetsPath)\\Microsoft.Cpp.props");
+ startTag("ImportGroup", "Label", "ExtensionSettings");
+ endTag("ImportGroup");
+ for (BuildConfig cfg : allConfigs) {
+ startTag(cfg, "ImportGroup", "Label", "PropertySheets");
+ tag("Import",
+ "Project", "$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props",
+ "Condition", "exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')",
+ "Label", "LocalAppDataPlatform");
+ endTag("ImportGroup");
+ }
+
+ tag("PropertyGroup", "Label", "UserMacros");
+
+ startTag("PropertyGroup");
+ tagData("_ProjectFileVersion", "10.0.30319.1");
+ for (BuildConfig cfg : allConfigs) {
+ tagData(cfg, "OutDir", cfg.get("OutputDir") + Util.sep);
+ tagData(cfg, "IntDir", cfg.get("OutputDir") + Util.sep);
+ tagData(cfg, "LinkIncremental", "false");
+ }
+ for (BuildConfig cfg : allConfigs) {
+ tagData(cfg, "CodeAnalysisRuleSet", "AllRules.ruleset");
+ tag(cfg, "CodeAnalysisRules");
+ tag(cfg, "CodeAnalysisRuleAssemblies");
+ }
+ endTag("PropertyGroup");
+
+ for (BuildConfig cfg : allConfigs) {
+ startTag(cfg, "ItemDefinitionGroup");
+ startTag("ClCompile");
+ tagV(cfg.getV("CompilerFlags"));
+ endTag("ClCompile");
+
+ startTag("Link");
+ tagV(cfg.getV("LinkerFlags"));
+ endTag("Link");
+
+ startTag("PostBuildEvent");
+ tagData("Message", BuildConfig.getFieldString(null, "PostbuildDescription"));
+ tagData("Command", cfg.expandFormat(BuildConfig.getFieldString(null, "PostbuildCommand").replace("\t", "\r\n")));
+ endTag("PostBuildEvent");
+
+ startTag("PreLinkEvent");
+ tagData("Message", BuildConfig.getFieldString(null, "PrelinkDescription"));
+ tagData("Command", cfg.expandFormat(BuildConfig.getFieldString(null, "PrelinkCommand").replace("\t", "\r\n")));
+ endTag("PreLinkEvent");
+
+ endTag("ItemDefinitionGroup");
+ }
+
+ writeFiles(allConfigs, projDir);
+
+ tag("Import", "Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets");
+ startTag("ImportGroup", "Label", "ExtensionTargets");
+ endTag("ImportGroup");
+
+ endTag("Project");
+ printWriter.close();
+ System.out.println(" Done.");
+
+ writeFilterFile(projectFileName, projectName, allConfigs, projDir);
+ writeUserFile(projectFileName, allConfigs);
+ }
+
+
+ private void writeUserFile(String projectFileName, Vector<BuildConfig> allConfigs) throws FileNotFoundException, UnsupportedEncodingException {
+ String userFileName = projectFileName + ".user";
+ if (new File(userFileName).exists()) {
+ return;
+ }
+ System.out.print(" Writing .vcxproj.user file: " + userFileName);
+ printWriter = new PrintWriter(userFileName, "UTF-8");
+
+ printWriter.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ startTag("Project",
+ "ToolsVersion", "4.0",
+ "xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
+
+ for (BuildConfig cfg : allConfigs) {
+ startTag(cfg, "PropertyGroup");
+ tagData("LocalDebuggerCommand", "$(TargetDir)/hotspot.exe");
+ endTag("PropertyGroup");
+ }
+
+ endTag("Project");
+ printWriter.close();
+ System.out.println(" Done.");
+ }
+
+ private void writeFilterFile(String projectFileName, String projectName,
+ Vector<BuildConfig> allConfigs, String base) throws FileNotFoundException, UnsupportedEncodingException {
+ String filterFileName = projectFileName + ".filters";
+ System.out.print(" Writing .vcxproj.filters file: " + filterFileName);
+ printWriter = new PrintWriter(filterFileName, "UTF-8");
+
+ printWriter.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ startTag("Project",
+ "ToolsVersion", "4.0",
+ "xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
+
+ Hashtable<String, FileAttribute> allFiles = computeAttributedFiles(allConfigs);
+ TreeSet<FileInfo> sortedFiles = sortFiles(allFiles);
+ Vector<NameFilter> filters = makeFilters(sortedFiles);
+
+ // first all filters
+ startTag("ItemGroup");
+ for (NameFilter filter : filters) {
+ doWriteFilter(filter, "");
+ }
+ startTag("Filter", "Include", "Resource Files");
+ UUID uuid = UUID.randomUUID();
+ tagData("UniqueIdentifier", "{" + uuid.toString() + "}");
+ tagData("Extensions", "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe");
+ endTag("Filter");
+ endTag("ItemGroup");
+
+ // then all cpp files
+ startTag("ItemGroup");
+ for (NameFilter filter : filters) {
+ doWriteFiles(sortedFiles, filter, "", "ClCompile", new Evaluator() {
+ public boolean pick(FileInfo fi) {
+ return fi.isCpp();
+ }
+ }, base);
+ }
+ endTag("ItemGroup");
+
+ // then all header files
+ startTag("ItemGroup");
+ for (NameFilter filter : filters) {
+ doWriteFiles(sortedFiles, filter, "", "ClInclude", new Evaluator() {
+ public boolean pick(FileInfo fi) {
+ return fi.isHeader();
+ }
+ }, base);
+ }
+ endTag("ItemGroup");
+
+ // then all other files
+ startTag("ItemGroup");
+ for (NameFilter filter : filters) {
+ doWriteFiles(sortedFiles, filter, "", "None", new Evaluator() {
+ public boolean pick(FileInfo fi) {
+ return true;
+ }
+ }, base);
+ }
+ endTag("ItemGroup");
+
+ endTag("Project");
+ printWriter.close();
+ System.out.println(" Done.");
+ }
+
+
+ private void doWriteFilter(NameFilter filter, String start) {
+ startTag("Filter", "Include", start + filter.fname);
+ UUID uuid = UUID.randomUUID();
+ tagData("UniqueIdentifier", "{" + uuid.toString() + "}");
+ endTag("Filter");
+ if (filter instanceof ContainerFilter) {
+ Iterator i = ((ContainerFilter)filter).babies();
+ while (i.hasNext()) {
+ doWriteFilter((NameFilter)i.next(), start + filter.fname + "\\");
+ }
+ }
+ }
+
+ interface Evaluator {
+ boolean pick(FileInfo fi);
+ }
+
+ private void doWriteFiles(TreeSet<FileInfo> allFiles, NameFilter filter, String start, String tool, Evaluator eval, String base) {
+ if (filter instanceof ContainerFilter) {
+ Iterator i = ((ContainerFilter)filter).babies();
+ while (i.hasNext()) {
+ doWriteFiles(allFiles, (NameFilter)i.next(), start + filter.fname + "\\", tool, eval, base);
+ }
+ }
+ else {
+ Iterator i = allFiles.iterator();
+ while (i.hasNext()) {
+ FileInfo fi = (FileInfo)i.next();
+
+ if (!filter.match(fi)) {
+ continue;
+ }
+ if (eval.pick(fi)) {
+ startTag(tool, "Include", rel(fi.full, base));
+ tagData("Filter", start + filter.fname);
+ endTag(tool);
+
+ // we not gonna look at this file anymore (sic!)
+ i.remove();
+ }
+ }
+ }
+ }
+
+
+ void writeFiles(Vector<BuildConfig> allConfigs, String projDir) {
+ Hashtable<String, FileAttribute> allFiles = computeAttributedFiles(allConfigs);
+ TreeSet<FileInfo> sortedFiles = sortFiles(allFiles);
+
+ // first cpp-files
+ startTag("ItemGroup");
+ for (FileInfo fi : sortedFiles) {
+ if (!fi.isCpp()) {
+ continue;
+ }
+ writeFile("ClCompile", allConfigs, fi, projDir);
+ }
+ endTag("ItemGroup");
+
+ // then header-files
+ startTag("ItemGroup");
+ for (FileInfo fi : sortedFiles) {
+ if (!fi.isHeader()) {
+ continue;
+ }
+ writeFile("ClInclude", allConfigs, fi, projDir);
+ }
+ endTag("ItemGroup");
+
+ // then others
+ startTag("ItemGroup");
+ for (FileInfo fi : sortedFiles) {
+ if (fi.isHeader() || fi.isCpp()) {
+ continue;
+ }
+ writeFile("None", allConfigs, fi, projDir);
+ }
+ endTag("ItemGroup");
+ }
+
+ /**
+ * Make "path" into a relative path using "base" as the base.
+ *
+ * path and base are assumed to be normalized with / as the file separator.
+ * returned path uses "\\" as file separator
+ */
+ private String rel(String path, String base)
+ {
+ if(!base.endsWith("/")) {
+ base += "/";
+ }
+ String[] pathTok = path.split("/");
+ String[] baseTok = base.split("/");
+ int pi = 0;
+ int bi = 0;
+ StringBuilder newPath = new StringBuilder();
+
+ // first step past all path components that are the same
+ while (pi < pathTok.length &&
+ bi < baseTok.length &&
+ pathTok[pi].equals(baseTok[bi])) {
+ pi++;
+ bi++;
+ }
+
+ // for each path component left in base, add "../"
+ while (bi < baseTok.length) {
+ bi++;
+ newPath.append("..\\");
+ }
+
+ // now add everything left in path
+ while (pi < pathTok.length) {
+ newPath.append(pathTok[pi]);
+ pi++;
+ if (pi != pathTok.length) {
+ newPath.append("\\");
+ }
+ }
+ return newPath.toString();
+ }
+
+ private void writeFile(String tool, Vector<BuildConfig> allConfigs, FileInfo fi, String base) {
+ if (fi.attr.configs == null && fi.attr.pchRoot == false && fi.attr.noPch == false) {
+ tag(tool, "Include", rel(fi.full, base));
+ }
+ else {
+ startTag(tool, "Include", rel(fi.full, base));
+ for (BuildConfig cfg : allConfigs) {
+ if (fi.attr.configs != null && !fi.attr.configs.contains(cfg.get("Name"))) {
+ tagData(cfg, "ExcludedFromBuild", "true");
+ }
+ if (fi.attr.pchRoot) {
+ tagData(cfg, "PrecompiledHeader", "Create");
+ }
+ if (fi.attr.noPch) {
+ startTag(cfg, "PrecompiledHeader");
+ endTag("PrecompiledHeader");
+ }
+ }
+ endTag(tool);
+ }
+ }
+
+ String buildCond(BuildConfig cfg) {
+ return "'$(Configuration)|$(Platform)'=='"+cfg.get("Name")+"'";
+ }
+
+
+ void tagV(Vector<String> v) {
+ Iterator<String> i = v.iterator();
+ while(i.hasNext()) {
+ String name = i.next();
+ String data = i.next();
+ tagData(name, data);
+ }
+ }
+
+ void tagData(BuildConfig cfg, String name, String data) {
+ tagData(name, data, "Condition", buildCond(cfg));
+ }
+
+ void tag(BuildConfig cfg, String name, String... attrs) {
+ String[] ss = new String[attrs.length + 2];
+ ss[0] = "Condition";
+ ss[1] = buildCond(cfg);
+ System.arraycopy(attrs, 0, ss, 2, attrs.length);
+
+ tag(name, ss);
+ }
+
+ void startTag(BuildConfig cfg, String name, String... attrs) {
+ String[] ss = new String[attrs.length + 2];
+ ss[0] = "Condition";
+ ss[1] = buildCond(cfg);
+ System.arraycopy(attrs, 0, ss, 2, attrs.length);
+
+ startTag(name, ss);
+ }
+}
+
+class CompilerInterfaceVC10 extends CompilerInterface {
+
+ @Override
+ Vector getBaseCompilerFlags(Vector defines, Vector includes, String outDir) {
+ Vector rv = new Vector();
+
+ addAttr(rv, "AdditionalIncludeDirectories", Util.join(";", includes));
+ addAttr(rv, "PreprocessorDefinitions",
+ Util.join(";", defines).replace("\\\"", "\""));
+ addAttr(rv, "PrecompiledHeaderFile", "precompiled.hpp");
+ addAttr(rv, "PrecompiledHeaderOutputFile", outDir+Util.sep+"vm.pch");
+ addAttr(rv, "AssemblerListingLocation", outDir);
+ addAttr(rv, "ObjectFileName", outDir+Util.sep);
+ addAttr(rv, "ProgramDataBaseFileName", outDir+Util.sep+"jvm.pdb");
+ // Set /nologo option
+ addAttr(rv, "SuppressStartupBanner", "true");
+ // Surpass the default /Tc or /Tp.
+ addAttr(rv, "CompileAs", "Default");
+ // Set /W3 option.
+ addAttr(rv, "WarningLevel", "Level3");
+ // Set /WX option,
+ addAttr(rv, "TreatWarningAsError", "true");
+ // Set /GS option
+ addAttr(rv, "BufferSecurityCheck", "false");
+ // Set /Zi option.
+ addAttr(rv, "DebugInformationFormat", "ProgramDatabase");
+ // Set /Yu option.
+ addAttr(rv, "PrecompiledHeader", "Use");
+ // Set /EHsc- option
+ addAttr(rv, "ExceptionHandling", "");
+
+ addAttr(rv, "MultiProcessorCompilation", "true");
+
+ return rv;
+ }
+
+ @Override
+ Vector getDebugCompilerFlags(String opt) {
+ Vector rv = new Vector();
+
+ // Set /On option
+ addAttr(rv, "Optimization", opt);
+ // Set /FR option.
+ addAttr(rv, "BrowseInformation", "true");
+ addAttr(rv, "BrowseInformationFile", "$(IntDir)");
+ // Set /MD option.
+ addAttr(rv, "RuntimeLibrary", "MultiThreadedDLL");
+ // Set /Oy- option
+ addAttr(rv, "OmitFramePointers", "false");
+
+ return rv;
+ }
+
+ @Override
+ Vector getProductCompilerFlags() {
+ Vector rv = new Vector();
+
+ // Set /O2 option.
+ addAttr(rv, "Optimization", "MaxSpeed");
+ // Set /Oy- option
+ addAttr(rv, "OmitFramePointers", "false");
+ // Set /Ob option. 1 is expandOnlyInline
+ addAttr(rv, "InlineFunctionExpansion", "OnlyExplicitInline");
+ // Set /GF option.
+ addAttr(rv, "StringPooling", "true");
+ // Set /MD option. 2 is rtMultiThreadedDLL
+ addAttr(rv, "RuntimeLibrary", "MultiThreadedDLL");
+ // Set /Gy option
+ addAttr(rv, "FunctionLevelLinking", "true");
+
+ return rv;
+ }
+
+ @Override
+ Vector getBaseLinkerFlags(String outDir, String outDll, String platformName) {
+ Vector rv = new Vector();
+
+ addAttr(rv, "AdditionalOptions",
+ "/export:JNI_GetDefaultJavaVMInitArgs " +
+ "/export:JNI_CreateJavaVM " +
+ "/export:JVM_FindClassFromBootLoader "+
+ "/export:JNI_GetCreatedJavaVMs "+
+ "/export:jio_snprintf /export:jio_printf "+
+ "/export:jio_fprintf /export:jio_vfprintf "+
+ "/export:jio_vsnprintf "+
+ "/export:JVM_GetVersionInfo "+
+ "/export:JVM_GetThreadStateNames "+
+ "/export:JVM_GetThreadStateValues "+
+ "/export:JVM_InitAgentProperties");
+ addAttr(rv, "AdditionalDependencies", "kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;Wsock32.lib;winmm.lib");
+ addAttr(rv, "OutputFile", outDll);
+ addAttr(rv, "SuppressStartupBanner", "true");
+ addAttr(rv, "ModuleDefinitionFile", outDir+Util.sep+"vm.def");
+ addAttr(rv, "ProgramDatabaseFile", outDir+Util.sep+"jvm.pdb");
+ addAttr(rv, "SubSystem", "Windows");
+ addAttr(rv, "BaseAddress", "0x8000000");
+ addAttr(rv, "ImportLibrary", outDir+Util.sep+"jvm.lib");
+
+ if(platformName.equals("Win32")) {
+ addAttr(rv, "TargetMachine", "MachineX86");
+ } else {
+ addAttr(rv, "TargetMachine", "MachineX64");
+ }
+
+ return rv;
+ }
+
+ @Override
+ Vector getDebugLinkerFlags() {
+ Vector rv = new Vector();
+
+ // /DEBUG option
+ addAttr(rv, "GenerateDebugInformation", "true");
+
+ return rv;
+ }
+
+ @Override
+ Vector getProductLinkerFlags() {
+ Vector rv = new Vector();
+
+ // Set /OPT:REF option.
+ addAttr(rv, "OptimizeReferences", "true");
+ // Set /OPT:ICF option.
+ addAttr(rv, "EnableCOMDATFolding", "true");
+
+ return rv;
+ }
+
+ @Override
+ void getAdditionalNonKernelLinkerFlags(Vector rv) {
+ extAttr(rv, "AdditionalOptions", " /export:AsyncGetCallTrace");
+ }
+
+ @Override
+ String getOptFlag() {
+ return "MaxSpeed";
+ }
+
+ @Override
+ String getNoOptFlag() {
+ return "Disabled";
+ }
+
+ @Override
+ String makeCfgName(String flavourBuild, String platform) {
+ return flavourBuild + "|" + platform;
+ }
+
+}
--- a/hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC7.java Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC7.java Wed Jul 05 17:39:50 2017 +0200
@@ -35,7 +35,7 @@
String projectVersion() {return "7.10";};
public void writeProjectFile(String projectFileName, String projectName,
- Vector allConfigs) throws IOException {
+ Vector<BuildConfig> allConfigs) throws IOException {
System.out.println();
System.out.println(" Writing .vcproj file: "+projectFileName);
// If we got this far without an error, we're safe to actually
@@ -54,11 +54,11 @@
"SccLocalPath", ""
}
);
- startTag("Platforms", null);
+ startTag("Platforms");
tag("Platform", new String[] {"Name", (String) BuildConfig.getField(null, "PlatformName")});
endTag("Platforms");
- startTag("Configurations", null);
+ startTag("Configurations");
for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
writeConfiguration((BuildConfig)i.next());
@@ -66,11 +66,11 @@
endTag("Configurations");
- tag("References", null);
+ tag("References");
writeFiles(allConfigs);
- tag("Globals", null);
+ tag("Globals");
endTag("VisualStudioProject");
printWriter.close();
@@ -190,28 +190,6 @@
}
}
- class TypeFilter extends NameFilter {
- String[] exts;
-
- TypeFilter(String fname, String[] exts) {
- this.fname = fname;
- this.exts = exts;
- }
-
- boolean match(FileInfo fi) {
- for (int i=0; i<exts.length; i++) {
- if (fi.full.endsWith(exts[i])) {
- return true;
- }
- }
- return false;
- }
-
- String filterString() {
- return Util.join(";", exts);
- }
- }
-
class TerminatorFilter extends NameFilter {
TerminatorFilter(String fname) {
this.fname = fname;
@@ -299,8 +277,8 @@
// - container filter just provides a container to group together real filters
// - real filter can select elements from the set according to some rule, put it into XML
// and remove from the list
- Vector makeFilters(TreeSet<FileInfo> files) {
- Vector rv = new Vector();
+ Vector<NameFilter> makeFilters(TreeSet<FileInfo> files) {
+ Vector<NameFilter> rv = new Vector<NameFilter>();
String sbase = Util.normalize(BuildConfig.getFieldString(null, "SourceBase")+"/src/");
String currentDir = "";
@@ -370,13 +348,12 @@
rv.add(new SpecificNameFilter("Precompiled Header", new String[] {"precompiled.hpp"}));
// this one is to catch files not caught by other filters
- //rv.add(new TypeFilter("Header Files", new String[] {"h", "hpp", "hxx", "hm", "inl", "fi", "fd"}));
rv.add(new TerminatorFilter("Source Files"));
return rv;
}
- void writeFiles(Vector allConfigs) {
+ void writeFiles(Vector<BuildConfig> allConfigs) {
Hashtable allFiles = computeAttributedFiles(allConfigs);
@@ -387,7 +364,7 @@
TreeSet sortedFiles = sortFiles(allFiles);
- startTag("Files", null);
+ startTag("Files");
for (Iterator i = makeFilters(sortedFiles).iterator(); i.hasNext(); ) {
doWriteFiles(sortedFiles, allConfigNames, (NameFilter)i.next());
@@ -556,34 +533,39 @@
int indent;
private void startTagPrim(String name,
+ String[] attrs,
+ boolean close) {
+ startTagPrim(name, attrs, close, true);
+ }
+
+ private void startTagPrim(String name,
String[] attrs,
- boolean close) {
+ boolean close,
+ boolean newline) {
doIndent();
printWriter.print("<"+name);
indent++;
- if (attrs != null) {
- printWriter.println();
+ if (attrs != null && attrs.length > 0) {
for (int i=0; i<attrs.length; i+=2) {
- doIndent();
printWriter.print(" " + attrs[i]+"=\""+attrs[i+1]+"\"");
if (i < attrs.length - 2) {
- printWriter.println();
}
}
}
if (close) {
indent--;
- //doIndent();
- printWriter.println("/>");
+ printWriter.print(" />");
} else {
- //doIndent();
- printWriter.println(">");
+ printWriter.print(">");
+ }
+ if(newline) {
+ printWriter.println();
}
}
- void startTag(String name, String[] attrs) {
+ void startTag(String name, String... attrs) {
startTagPrim(name, attrs, false);
}
@@ -601,11 +583,25 @@
printWriter.println("</"+name+">");
}
- void tag(String name, String[] attrs) {
+ void tag(String name, String... attrs) {
startTagPrim(name, attrs, true);
}
- void tagV(String name, Vector attrs) {
+ void tagData(String name, String data) {
+ doIndent();
+ printWriter.print("<"+name+">");
+ printWriter.print(data);
+ printWriter.println("</"+name+">");
+ }
+
+ void tagData(String name, String data, String... attrs) {
+ startTagPrim(name, attrs, false, false);
+ printWriter.print(data);
+ printWriter.println("</"+name+">");
+ indent--;
+ }
+
+ void tagV(String name, Vector attrs) {
String s[] = new String [attrs.size()];
for (int i=0; i<attrs.size(); i++) {
s[i] = (String)attrs.elementAt(i);
@@ -616,7 +612,7 @@
void doIndent() {
for (int i=0; i<indent; i++) {
- printWriter.print(" ");
+ printWriter.print(" ");
}
}
--- a/hotspot/src/share/vm/adlc/main.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/adlc/main.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -240,6 +240,11 @@
AD.addInclude(AD._CPP_file, "nativeInst_sparc.hpp");
AD.addInclude(AD._CPP_file, "vmreg_sparc.inline.hpp");
#endif
+#ifdef TARGET_ARCH_arm
+ AD.addInclude(AD._CPP_file, "assembler_arm.inline.hpp");
+ AD.addInclude(AD._CPP_file, "nativeInst_arm.hpp");
+ AD.addInclude(AD._CPP_file, "vmreg_arm.inline.hpp");
+#endif
AD.addInclude(AD._HPP_file, "memory/allocation.hpp");
AD.addInclude(AD._HPP_file, "opto/machnode.hpp");
AD.addInclude(AD._HPP_file, "opto/node.hpp");
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -30,6 +30,7 @@
#include "c1/c1_InstructionPrinter.hpp"
#include "ci/ciField.hpp"
#include "ci/ciKlass.hpp"
+#include "compiler/compileBroker.hpp"
#include "interpreter/bytecode.hpp"
#include "runtime/sharedRuntime.hpp"
#include "utilities/bitMap.inline.hpp"
@@ -3775,24 +3776,7 @@
#ifndef PRODUCT
void GraphBuilder::print_inline_result(ciMethod* callee, bool res) {
- const char sync_char = callee->is_synchronized() ? 's' : ' ';
- const char exception_char = callee->has_exception_handlers() ? '!' : ' ';
- const char monitors_char = callee->has_monitor_bytecodes() ? 'm' : ' ';
- tty->print(" %c%c%c ", sync_char, exception_char, monitors_char);
- for (int i = 0; i < scope()->level(); i++) tty->print(" ");
- if (res) {
- tty->print(" ");
- } else {
- tty->print("- ");
- }
- tty->print("@ %d ", bci());
- callee->print_short_name();
- tty->print(" (%d bytes)", callee->code_size());
- if (_inline_bailout_msg) {
- tty->print(" %s", _inline_bailout_msg);
- }
- tty->cr();
-
+ CompileTask::print_inlining(callee, scope()->level(), bci(), _inline_bailout_msg);
if (res && CIPrintMethodCodes) {
callee->print_codes();
}
--- a/hotspot/src/share/vm/ci/ciTypeFlow.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/ci/ciTypeFlow.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1871,7 +1871,8 @@
// ------------------------------------------------------------------
// ciTypeFlow::Block::print_on
void ciTypeFlow::Block::print_on(outputStream* st) const {
- if ((Verbose || WizardMode)) {
+ if ((Verbose || WizardMode) && (limit() >= 0)) {
+ // Don't print 'dummy' blocks (i.e. blocks with limit() '-1')
outer()->method()->print_codes_on(start(), limit(), st);
}
st->print_cr(" ==================================================== ");
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -152,7 +152,7 @@
"Class file version does not support constant tag %u in class file %s",
tag, CHECK);
}
- if (!EnableMethodHandles) {
+ if (!EnableInvokeDynamic) {
classfile_parse_error(
"This JVM does not support constant tag %u in class file %s",
tag, CHECK);
@@ -260,7 +260,7 @@
verify_legal_utf8((unsigned char*)utf8_buffer, utf8_length, CHECK);
}
- if (AnonymousClasses && has_cp_patch_at(index)) {
+ if (EnableInvokeDynamic && has_cp_patch_at(index)) {
Handle patch = clear_cp_patch_at(index);
guarantee_property(java_lang_String::is_instance(patch()),
"Illegal utf8 patch at %d in class file %s",
@@ -443,7 +443,7 @@
int ref_index = cp->method_handle_index_at(index);
check_property(
valid_cp_range(ref_index, length) &&
- EnableMethodHandles,
+ EnableInvokeDynamic,
"Invalid constant pool index %u in class file %s",
ref_index, CHECK_(nullHandle));
constantTag tag = cp->tag_at(ref_index);
@@ -487,7 +487,7 @@
check_property(
valid_cp_range(ref_index, length) &&
cp->tag_at(ref_index).is_utf8() &&
- EnableMethodHandles,
+ EnableInvokeDynamic,
"Invalid constant pool index %u in class file %s",
ref_index, CHECK_(nullHandle));
}
@@ -522,7 +522,7 @@
if (_cp_patches != NULL) {
// need to treat this_class specially...
- assert(AnonymousClasses, "");
+ assert(EnableInvokeDynamic, "");
int this_class_index;
{
cfs->guarantee_more(8, CHECK_(nullHandle)); // flags, this_class, super_class, infs_len
@@ -677,7 +677,7 @@
void ClassFileParser::patch_constant_pool(constantPoolHandle cp, int index, Handle patch, TRAPS) {
- assert(AnonymousClasses, "");
+ assert(EnableInvokeDynamic, "");
BasicType patch_type = T_VOID;
switch (cp->tag_at(index).value()) {
@@ -2103,7 +2103,7 @@
_has_vanilla_constructor = true;
}
- if (EnableMethodHandles && (m->is_method_handle_invoke() ||
+ if (EnableInvokeDynamic && (m->is_method_handle_invoke() ||
m->is_method_handle_adapter())) {
THROW_MSG_(vmSymbols::java_lang_VirtualMachineError(),
"Method handle invokers must be defined internally to the VM", nullHandle);
@@ -2771,7 +2771,7 @@
// This is not particularly nice, but since there is no way to express
// a native wordSize field in Java, we must do it at this level.
- if (!EnableMethodHandles) return;
+ if (!EnableInvokeDynamic) return;
int word_sig_index = 0;
const int cp_size = cp->length();
@@ -3191,15 +3191,15 @@
next_nonstatic_field_offset = first_nonstatic_field_offset;
// adjust the vmentry field declaration in java.lang.invoke.MethodHandle
- if (EnableMethodHandles && class_name == vmSymbols::java_lang_invoke_MethodHandle() && class_loader.is_null()) {
+ if (EnableInvokeDynamic && class_name == vmSymbols::java_lang_invoke_MethodHandle() && class_loader.is_null()) {
java_lang_invoke_MethodHandle_fix_pre(cp, fields, &fac, CHECK_(nullHandle));
}
if (AllowTransitionalJSR292 &&
- EnableMethodHandles && class_name == vmSymbols::java_dyn_MethodHandle() && class_loader.is_null()) {
+ EnableInvokeDynamic && class_name == vmSymbols::java_dyn_MethodHandle() && class_loader.is_null()) {
java_lang_invoke_MethodHandle_fix_pre(cp, fields, &fac, CHECK_(nullHandle));
}
if (AllowTransitionalJSR292 &&
- EnableMethodHandles && class_name == vmSymbols::sun_dyn_MethodHandleImpl() && class_loader.is_null()) {
+ EnableInvokeDynamic && class_name == vmSymbols::sun_dyn_MethodHandleImpl() && class_loader.is_null()) {
// allow vmentry field in MethodHandleImpl also
java_lang_invoke_MethodHandle_fix_pre(cp, fields, &fac, CHECK_(nullHandle));
}
--- a/hotspot/src/share/vm/classfile/classFileParser.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/classfile/classFileParser.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -231,11 +231,11 @@
char* skip_over_field_signature(char* signature, bool void_ok, unsigned int length, TRAPS);
bool is_anonymous() {
- assert(AnonymousClasses || _host_klass.is_null(), "");
+ assert(EnableInvokeDynamic || _host_klass.is_null(), "");
return _host_klass.not_null();
}
bool has_cp_patch_at(int index) {
- assert(AnonymousClasses, "");
+ assert(EnableInvokeDynamic, "");
assert(index >= 0, "oob");
return (_cp_patches != NULL
&& index < _cp_patches->length()
@@ -258,7 +258,7 @@
// constant pool construction, but in later versions they can.
// %%% Let's phase out the old is_klass_reference.
bool is_klass_reference(constantPoolHandle cp, int index) {
- return ((LinkWellKnownClasses || AnonymousClasses)
+ return ((LinkWellKnownClasses || EnableInvokeDynamic)
? cp->tag_at(index).is_klass_or_reference()
: cp->tag_at(index).is_klass_reference());
}
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -301,6 +301,15 @@
return result;
}
+unsigned int java_lang_String::hash_string(oop java_string) {
+ typeArrayOop value = java_lang_String::value(java_string);
+ int offset = java_lang_String::offset(java_string);
+ int length = java_lang_String::length(java_string);
+
+ if (length == 0) return 0;
+ return hash_string(value->char_at_addr(offset), length);
+}
+
Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) {
oop obj = java_string();
typeArrayOop value = java_lang_String::value(obj);
@@ -2322,7 +2331,7 @@
void java_lang_invoke_MethodHandle::compute_offsets() {
klassOop k = SystemDictionary::MethodHandle_klass();
- if (k != NULL && EnableMethodHandles) {
+ if (k != NULL && EnableInvokeDynamic) {
bool allow_super = false;
if (AllowTransitionalJSR292) allow_super = true; // temporary, to access java.dyn.MethodHandleImpl
compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature(), allow_super);
@@ -2337,7 +2346,7 @@
void java_lang_invoke_MemberName::compute_offsets() {
klassOop k = SystemDictionary::MemberName_klass();
- if (k != NULL && EnableMethodHandles) {
+ if (k != NULL && EnableInvokeDynamic) {
compute_offset(_clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature());
compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::object_signature());
@@ -2349,14 +2358,14 @@
void java_lang_invoke_DirectMethodHandle::compute_offsets() {
klassOop k = SystemDictionary::DirectMethodHandle_klass();
- if (k != NULL && EnableMethodHandles) {
+ if (k != NULL && EnableInvokeDynamic) {
compute_offset(_vmindex_offset, k, vmSymbols::vmindex_name(), vmSymbols::int_signature(), true);
}
}
void java_lang_invoke_BoundMethodHandle::compute_offsets() {
klassOop k = SystemDictionary::BoundMethodHandle_klass();
- if (k != NULL && EnableMethodHandles) {
+ if (k != NULL && EnableInvokeDynamic) {
compute_offset(_vmargslot_offset, k, vmSymbols::vmargslot_name(), vmSymbols::int_signature(), true);
compute_offset(_argument_offset, k, vmSymbols::argument_name(), vmSymbols::object_signature(), true);
}
@@ -2364,7 +2373,7 @@
void java_lang_invoke_AdapterMethodHandle::compute_offsets() {
klassOop k = SystemDictionary::AdapterMethodHandle_klass();
- if (k != NULL && EnableMethodHandles) {
+ if (k != NULL && EnableInvokeDynamic) {
compute_offset(_conversion_offset, k, vmSymbols::conversion_name(), vmSymbols::int_signature(), true);
}
}
@@ -2982,7 +2991,7 @@
java_lang_Class::compute_offsets();
java_lang_Thread::compute_offsets();
java_lang_ThreadGroup::compute_offsets();
- if (EnableMethodHandles) {
+ if (EnableInvokeDynamic) {
java_lang_invoke_MethodHandle::compute_offsets();
java_lang_invoke_MemberName::compute_offsets();
java_lang_invoke_DirectMethodHandle::compute_offsets();
@@ -2990,8 +2999,6 @@
java_lang_invoke_AdapterMethodHandle::compute_offsets();
java_lang_invoke_MethodType::compute_offsets();
java_lang_invoke_MethodTypeForm::compute_offsets();
- }
- if (EnableInvokeDynamic) {
java_lang_invoke_CallSite::compute_offsets();
}
java_security_AccessControlContext::compute_offsets();
--- a/hotspot/src/share/vm/classfile/javaClasses.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -109,6 +109,30 @@
static char* as_platform_dependent_str(Handle java_string, TRAPS);
static jchar* as_unicode_string(oop java_string, int& length);
+ // Compute the hash value for a java.lang.String object which would
+ // contain the characters passed in. This hash value is used for at
+ // least two purposes.
+ //
+ // (a) As the hash value used by the StringTable for bucket selection
+ // and comparison (stored in the HashtableEntry structures). This
+ // is used in the String.intern() method.
+ //
+ // (b) As the hash value used by the String object itself, in
+ // String.hashCode(). This value is normally calculate in Java code
+ // in the String.hashCode method(), but is precomputed for String
+ // objects in the shared archive file.
+ //
+ // For this reason, THIS ALGORITHM MUST MATCH String.hashCode().
+ static unsigned int hash_string(jchar* s, int len) {
+ unsigned int h = 0;
+ while (len-- > 0) {
+ h = 31*h + (unsigned int) *s;
+ s++;
+ }
+ return h;
+ }
+ static unsigned int hash_string(oop java_string);
+
static bool equals(oop java_string, jchar* chars, int len);
// Conversion between '.' and '/' formats
--- a/hotspot/src/share/vm/classfile/symbolTable.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/classfile/symbolTable.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, 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
@@ -480,33 +480,6 @@
// --------------------------------------------------------------------------
-
-
-// Compute the hash value for a java.lang.String object which would
-// contain the characters passed in. This hash value is used for at
-// least two purposes.
-//
-// (a) As the hash value used by the StringTable for bucket selection
-// and comparison (stored in the HashtableEntry structures). This
-// is used in the String.intern() method.
-//
-// (b) As the hash value used by the String object itself, in
-// String.hashCode(). This value is normally calculate in Java code
-// in the String.hashCode method(), but is precomputed for String
-// objects in the shared archive file.
-//
-// For this reason, THIS ALGORITHM MUST MATCH String.hashCode().
-
-int StringTable::hash_string(jchar* s, int len) {
- unsigned h = 0;
- while (len-- > 0) {
- h = 31*h + (unsigned) *s;
- s++;
- }
- return h;
-}
-
-
StringTable* StringTable::_the_table = NULL;
oop StringTable::lookup(int index, jchar* name,
@@ -561,7 +534,7 @@
ResourceMark rm;
int length;
jchar* chars = symbol->as_unicode(length);
- unsigned int hashValue = hash_string(chars, length);
+ unsigned int hashValue = java_lang_String::hash_string(chars, length);
int index = the_table()->hash_to_index(hashValue);
return the_table()->lookup(index, chars, length, hashValue);
}
@@ -569,7 +542,7 @@
oop StringTable::intern(Handle string_or_null, jchar* name,
int len, TRAPS) {
- unsigned int hashValue = hash_string(name, len);
+ unsigned int hashValue = java_lang_String::hash_string(name, len);
int index = the_table()->hash_to_index(hashValue);
oop string = the_table()->lookup(index, name, len, hashValue);
@@ -663,10 +636,7 @@
oop s = p->literal();
guarantee(s != NULL, "interned string is NULL");
guarantee(s->is_perm() || !JavaObjectsInPerm, "interned string not in permspace");
-
- int length;
- jchar* chars = java_lang_String::as_unicode_string(s, length);
- unsigned int h = hash_string(chars, length);
+ unsigned int h = java_lang_String::hash_string(s);
guarantee(p->hash() == h, "broken hash in string table entry");
guarantee(the_table()->hash_to_index(h) == i,
"wrong index in string table");
--- a/hotspot/src/share/vm/classfile/symbolTable.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/classfile/symbolTable.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, 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
@@ -242,8 +242,6 @@
_the_table = new StringTable(t, number_of_entries);
}
- static int hash_string(jchar* s, int len);
-
// GC support
// Delete pointers to otherwise-unreachable objects.
static void unlink(BoolObjectClosure* cl);
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1017,7 +1017,7 @@
}
if (host_klass.not_null() && k.not_null()) {
- assert(AnonymousClasses, "");
+ assert(EnableInvokeDynamic, "");
// If it's anonymous, initialize it now, since nobody else will.
k->set_host_klass(host_klass());
@@ -1940,7 +1940,7 @@
}
Symbol* backup_symbol = NULL; // symbol to try if the current symbol fails
if (init_opt == SystemDictionary::Pre_JSR292) {
- if (!EnableMethodHandles) try_load = false; // do not bother to load such classes
+ if (!EnableInvokeDynamic) try_load = false; // do not bother to load such classes
if (AllowTransitionalJSR292) {
backup_symbol = find_backup_class_name(symbol);
if (try_load && PreferTransitionalJSR292) {
@@ -2038,25 +2038,15 @@
instanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL);
instanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM);
- WKID meth_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass);
- WKID meth_group_end = WK_KLASS_ENUM_NAME(WrongMethodTypeException_klass);
- initialize_wk_klasses_until(meth_group_start, scan, CHECK);
- if (EnableMethodHandles) {
- initialize_wk_klasses_through(meth_group_end, scan, CHECK);
- }
- if (_well_known_klasses[meth_group_start] == NULL) {
- // Skip the rest of the method handle classes, if MethodHandle is not loaded.
- scan = WKID(meth_group_end+1);
- }
- WKID indy_group_start = WK_KLASS_ENUM_NAME(Linkage_klass);
- WKID indy_group_end = WK_KLASS_ENUM_NAME(CallSite_klass);
- initialize_wk_klasses_until(indy_group_start, scan, CHECK);
+ // JSR 292 classes
+ WKID jsr292_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass);
+ WKID jsr292_group_end = WK_KLASS_ENUM_NAME(CallSite_klass);
+ initialize_wk_klasses_until(jsr292_group_start, scan, CHECK);
if (EnableInvokeDynamic) {
- initialize_wk_klasses_through(indy_group_end, scan, CHECK);
- }
- if (_well_known_klasses[indy_group_start] == NULL) {
- // Skip the rest of the dynamic typing classes, if Linkage is not loaded.
- scan = WKID(indy_group_end+1);
+ initialize_wk_klasses_through(jsr292_group_end, scan, CHECK);
+ } else {
+ // Skip the JSR 292 classes, if not enabled.
+ scan = WKID(jsr292_group_end + 1);
}
initialize_wk_klasses_until(WKID_LIMIT, scan, CHECK);
@@ -2407,7 +2397,7 @@
Symbol* signature,
KlassHandle accessing_klass,
TRAPS) {
- if (!EnableMethodHandles) return NULL;
+ if (!EnableInvokeDynamic) return NULL;
vmSymbols::SID name_id = vmSymbols::find_sid(name);
assert(name_id != vmSymbols::NO_SID, "must be a known name");
unsigned int hash = invoke_method_table()->compute_hash(signature, name_id);
--- a/hotspot/src/share/vm/classfile/systemDictionary.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/classfile/systemDictionary.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -207,7 +207,7 @@
enum InitOption {
Pre, // preloaded; error if not present
- Pre_JSR292, // preloaded if EnableMethodHandles
+ Pre_JSR292, // preloaded if EnableInvokeDynamic
// Order is significant. Options before this point require resolve_or_fail.
// Options after this point will use resolve_or_null instead.
--- a/hotspot/src/share/vm/code/nmethod.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/code/nmethod.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -28,6 +28,7 @@
#include "code/nmethod.hpp"
#include "code/scopeDesc.hpp"
#include "compiler/abstractCompiler.hpp"
+#include "compiler/compileBroker.hpp"
#include "compiler/compileLog.hpp"
#include "compiler/compilerOracle.hpp"
#include "compiler/disassembler.hpp"
@@ -469,6 +470,7 @@
nmethod* nmethod::new_native_nmethod(methodHandle method,
+ int compile_id,
CodeBuffer *code_buffer,
int vep_offset,
int frame_complete,
@@ -485,7 +487,7 @@
offsets.set_value(CodeOffsets::Verified_Entry, vep_offset);
offsets.set_value(CodeOffsets::Frame_Complete, frame_complete);
nm = new (native_nmethod_size)
- nmethod(method(), native_nmethod_size, &offsets,
+ nmethod(method(), native_nmethod_size, compile_id, &offsets,
code_buffer, frame_size,
basic_lock_owner_sp_offset, basic_lock_sp_offset,
oop_maps);
@@ -610,6 +612,7 @@
nmethod::nmethod(
methodOop method,
int nmethod_size,
+ int compile_id,
CodeOffsets* offsets,
CodeBuffer* code_buffer,
int frame_size,
@@ -644,7 +647,7 @@
_handler_table_offset = _dependencies_offset;
_nul_chk_table_offset = _handler_table_offset;
_nmethod_end_offset = _nul_chk_table_offset;
- _compile_id = 0; // default
+ _compile_id = compile_id;
_comp_level = CompLevel_none;
_entry_point = code_begin() + offsets->value(CodeOffsets::Entry);
_verified_entry_point = code_begin() + offsets->value(CodeOffsets::Verified_Entry);
@@ -930,72 +933,11 @@
#undef LOG_OFFSET
-void nmethod::print_compilation(outputStream *st, const char *method_name, const char *title,
- methodOop method, bool is_blocking, int compile_id, int bci, int comp_level) {
- bool is_synchronized = false, has_xhandler = false, is_native = false;
- int code_size = -1;
- if (method != NULL) {
- is_synchronized = method->is_synchronized();
- has_xhandler = method->has_exception_handler();
- is_native = method->is_native();
- code_size = method->code_size();
- }
- // print compilation number
- st->print("%7d %3d", (int)tty->time_stamp().milliseconds(), compile_id);
-
- // print method attributes
- const bool is_osr = bci != InvocationEntryBci;
- const char blocking_char = is_blocking ? 'b' : ' ';
- const char compile_type = is_osr ? '%' : ' ';
- const char sync_char = is_synchronized ? 's' : ' ';
- const char exception_char = has_xhandler ? '!' : ' ';
- const char native_char = is_native ? 'n' : ' ';
- st->print("%c%c%c%c%c ", compile_type, sync_char, exception_char, blocking_char, native_char);
- if (TieredCompilation) {
- st->print("%d ", comp_level);
- }
-
- // print optional title
- bool do_nl = false;
- if (title != NULL) {
- int tlen = (int) strlen(title);
- bool do_nl = false;
- if (tlen > 0 && title[tlen-1] == '\n') { tlen--; do_nl = true; }
- st->print("%.*s", tlen, title);
- } else {
- do_nl = true;
- }
-
- // print method name string if given
- if (method_name != NULL) {
- st->print(method_name);
- } else {
- // otherwise as the method to print itself
- if (method != NULL && !Universe::heap()->is_gc_active()) {
- method->print_short_name(st);
- } else {
- st->print("(method)");
- }
- }
-
- if (method != NULL) {
- // print osr_bci if any
- if (is_osr) st->print(" @ %d", bci);
- // print method size
- st->print(" (%d bytes)", code_size);
- }
- if (do_nl) st->cr();
-}
-
// Print out more verbose output usually for a newly created nmethod.
-void nmethod::print_on(outputStream* st, const char* title) const {
+void nmethod::print_on(outputStream* st, const char* msg) const {
if (st != NULL) {
ttyLocker ttyl;
- print_compilation(st, /*method_name*/NULL, title,
- method(), /*is_blocking*/false,
- compile_id(),
- is_osr_method() ? osr_entry_bci() : InvocationEntryBci,
- comp_level());
+ CompileTask::print_compilation(st, this, msg);
if (WizardMode) st->print(" (" INTPTR_FORMAT ")", this);
}
}
@@ -1309,8 +1251,7 @@
}
}
if (PrintCompilation && _state != unloaded) {
- print_on(tty, _state == zombie ? "made zombie " : "made not entrant ");
- tty->cr();
+ print_on(tty, _state == zombie ? "made zombie" : "made not entrant");
}
}
@@ -1816,7 +1757,7 @@
break;
}
// Mark was clear when we first saw this guy.
- NOT_PRODUCT(if (TraceScavenge) print_on(tty, "oops_do, mark\n"));
+ NOT_PRODUCT(if (TraceScavenge) print_on(tty, "oops_do, mark"));
return false;
}
}
@@ -1841,7 +1782,7 @@
nmethod* next = cur->_oops_do_mark_link;
cur->_oops_do_mark_link = NULL;
cur->fix_oop_relocations();
- NOT_PRODUCT(if (TraceScavenge) cur->print_on(tty, "oops_do, unmark\n"));
+ NOT_PRODUCT(if (TraceScavenge) cur->print_on(tty, "oops_do, unmark"));
cur = next;
}
void* required = _oops_do_mark_nmethods;
@@ -2396,7 +2337,7 @@
ResourceMark rm;
ttyLocker ttyl; // keep the following output all in one block
- tty->print("Compiled ");
+ tty->print("Compiled method ");
if (is_compiled_by_c1()) {
tty->print("(c1) ");
@@ -2408,8 +2349,8 @@
tty->print("(nm) ");
}
- print_on(tty, "nmethod");
- tty->cr();
+ print_on(tty, NULL);
+
if (WizardMode) {
tty->print("((nmethod*) "INTPTR_FORMAT ") ", this);
tty->print(" for method " INTPTR_FORMAT , (address)method());
@@ -2796,7 +2737,8 @@
#ifndef PRODUCT
void nmethod::print_value_on(outputStream* st) const {
- print_on(st, "nmethod");
+ st->print("nmethod");
+ print_on(st, NULL);
}
void nmethod::print_calls(outputStream* st) {
--- a/hotspot/src/share/vm/code/nmethod.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/code/nmethod.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -229,6 +229,7 @@
// For native wrappers
nmethod(methodOop method,
int nmethod_size,
+ int compile_id,
CodeOffsets* offsets,
CodeBuffer *code_buffer,
int frame_size,
@@ -299,6 +300,7 @@
int comp_level);
static nmethod* new_native_nmethod(methodHandle method,
+ int compile_id,
CodeBuffer *code_buffer,
int vep_offset,
int frame_complete,
@@ -500,8 +502,8 @@
address continuation_for_implicit_exception(address pc);
// On-stack replacement support
- int osr_entry_bci() const { assert(_entry_bci != InvocationEntryBci, "wrong kind of nmethod"); return _entry_bci; }
- address osr_entry() const { assert(_entry_bci != InvocationEntryBci, "wrong kind of nmethod"); return _osr_entry_point; }
+ int osr_entry_bci() const { assert(is_osr_method(), "wrong kind of nmethod"); return _entry_bci; }
+ address osr_entry() const { assert(is_osr_method(), "wrong kind of nmethod"); return _osr_entry_point; }
void invalidate_osr_method();
nmethod* osr_link() const { return _osr_link; }
void set_osr_link(nmethod *n) { _osr_link = n; }
@@ -608,10 +610,6 @@
void verify_scopes();
void verify_interrupt_point(address interrupt_point);
- // print compilation helper
- static void print_compilation(outputStream *st, const char *method_name, const char *title,
- methodOop method, bool is_blocking, int compile_id, int bci, int comp_level);
-
// printing support
void print() const;
void print_code();
@@ -627,7 +625,7 @@
// need to re-define this from CodeBlob else the overload hides it
virtual void print_on(outputStream* st) const { CodeBlob::print_on(st); }
- void print_on(outputStream* st, const char* title) const;
+ void print_on(outputStream* st, const char* msg) const;
// Logging
void log_identity(xmlStream* log) const;
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -268,11 +268,6 @@
}
-void CompileTask::print_compilation(outputStream *st, methodOop method, char* method_name) {
- nmethod::print_compilation(st, method_name,/*title*/ NULL, method,
- is_blocking(), compile_id(), osr_bci(), comp_level());
-}
-
// ------------------------------------------------------------------
// CompileTask::print_line_on_error
//
@@ -284,31 +279,115 @@
// Otherwise it's the same as CompileTask::print_line()
//
void CompileTask::print_line_on_error(outputStream* st, char* buf, int buflen) {
- methodOop method = (methodOop)JNIHandles::resolve(_method);
// print compiler name
st->print("%s:", CompileBroker::compiler(comp_level())->name());
- char* method_name = NULL;
- if (method != NULL) {
- method_name = method->name_and_sig_as_C_string(buf, buflen);
- }
- print_compilation(st, method, method_name);
+ print_compilation(st);
}
// ------------------------------------------------------------------
// CompileTask::print_line
void CompileTask::print_line() {
- Thread *thread = Thread::current();
- methodHandle method(thread,
- (methodOop)JNIHandles::resolve(method_handle()));
- ResourceMark rm(thread);
-
ttyLocker ttyl; // keep the following output all in one block
-
// print compiler name if requested
if (CIPrintCompilerName) tty->print("%s:", CompileBroker::compiler(comp_level())->name());
- print_compilation(tty, method(), NULL);
+ print_compilation();
+}
+
+
+// ------------------------------------------------------------------
+// CompileTask::print_compilation_impl
+void CompileTask::print_compilation_impl(outputStream* st, methodOop method, int compile_id, int comp_level, bool is_osr_method, int osr_bci, bool is_blocking, const char* msg) {
+ st->print("%7d ", (int) st->time_stamp().milliseconds()); // print timestamp
+ st->print("%4d ", compile_id); // print compilation number
+
+ // method attributes
+ const char compile_type = is_osr_method ? '%' : ' ';
+ const char sync_char = method->is_synchronized() ? 's' : ' ';
+ const char exception_char = method->has_exception_handler() ? '!' : ' ';
+ const char blocking_char = is_blocking ? 'b' : ' ';
+ const char native_char = method->is_native() ? 'n' : ' ';
+
+ // print method attributes
+ st->print("%c%c%c%c%c ", compile_type, sync_char, exception_char, blocking_char, native_char);
+
+ if (TieredCompilation) {
+ if (comp_level != -1) st->print("%d ", comp_level);
+ else st->print("- ");
+ }
+ st->print(" "); // more indent
+
+ method->print_short_name(st);
+ if (is_osr_method) {
+ st->print(" @ %d", osr_bci);
+ }
+ st->print(" (%d bytes)", method->code_size());
+
+ if (msg != NULL) {
+ st->print(" %s", msg);
+ }
+ st->cr();
}
+// ------------------------------------------------------------------
+// CompileTask::print_inlining
+void CompileTask::print_inlining(outputStream* st, ciMethod* method, int inline_level, int bci, const char* msg) {
+ // 1234567
+ st->print(" "); // print timestamp
+ // 1234
+ st->print(" "); // print compilation number
+
+ // method attributes
+ const char sync_char = method->is_synchronized() ? 's' : ' ';
+ const char exception_char = method->has_exception_handlers() ? '!' : ' ';
+ const char monitors_char = method->has_monitor_bytecodes() ? 'm' : ' ';
+
+ // print method attributes
+ st->print(" %c%c%c ", sync_char, exception_char, monitors_char);
+
+ if (TieredCompilation) {
+ st->print(" ");
+ }
+ st->print(" "); // more indent
+ st->print(" "); // initial inlining indent
+
+ for (int i = 0; i < inline_level; i++) st->print(" ");
+
+ st->print("@ %d ", bci); // print bci
+ method->print_short_name(st);
+ st->print(" (%d bytes)", method->code_size());
+
+ if (msg != NULL) {
+ st->print(" %s", msg);
+ }
+ st->cr();
+}
+
+// ------------------------------------------------------------------
+// CompileTask::print_inline_indent
+void CompileTask::print_inline_indent(int inline_level, outputStream* st) {
+ // 1234567
+ st->print(" "); // print timestamp
+ // 1234
+ st->print(" "); // print compilation number
+ // %s!bn
+ st->print(" "); // print method attributes
+ if (TieredCompilation) {
+ st->print(" ");
+ }
+ st->print(" "); // more indent
+ st->print(" "); // initial inlining indent
+ for (int i = 0; i < inline_level; i++) st->print(" ");
+}
+
+// ------------------------------------------------------------------
+// CompileTask::print_compilation
+void CompileTask::print_compilation(outputStream* st) {
+ oop rem = JNIHandles::resolve(method_handle());
+ assert(rem != NULL && rem->is_method(), "must be");
+ methodOop method = (methodOop) rem;
+ bool is_osr_method = osr_bci() != InvocationEntryBci;
+ print_compilation_impl(st, method, compile_id(), comp_level(), is_osr_method, osr_bci(), is_blocking());
+}
// ------------------------------------------------------------------
// CompileTask::log_task
@@ -874,6 +953,14 @@
return;
}
+#ifndef PRODUCT
+ if (osr_bci != -1 && !FLAG_IS_DEFAULT(OSROnlyBCI)) {
+ if ((OSROnlyBCI > 0) ? (OSROnlyBCI != osr_bci) : (-OSROnlyBCI == osr_bci)) {
+ // Positive OSROnlyBCI means only compile that bci. Negative means don't compile that BCI.
+ return;
+ }
+ }
+#endif
// If this method is already in the compile queue, then
// we do not block the current thread.
@@ -1078,7 +1165,13 @@
// do the compilation
if (method->is_native()) {
if (!PreferInterpreterNativeStubs) {
- (void) AdapterHandlerLibrary::create_native_wrapper(method);
+ // Acquire our lock.
+ int compile_id;
+ {
+ MutexLocker locker(MethodCompileQueue_lock, THREAD);
+ compile_id = assign_compile_id(method, standard_entry_bci);
+ }
+ (void) AdapterHandlerLibrary::create_native_wrapper(method, compile_id);
} else {
return NULL;
}
@@ -1186,7 +1279,6 @@
assert(MethodCompileQueue_lock->owner() == Thread::current(),
"must hold the compilation queue lock");
bool is_osr = (osr_bci != standard_entry_bci);
- assert(!method->is_native(), "no longer compile natives");
uint id;
if (CICountOSR && is_osr) {
id = ++_osr_compilation_id;
--- a/hotspot/src/share/vm/compiler/compileBroker.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/compiler/compileBroker.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, 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
@@ -56,7 +56,6 @@
int _hot_count; // information about its invocation counter
const char* _comment; // more info about the task
- void print_compilation(outputStream *st, methodOop method, char* method_name);
public:
CompileTask() {
_lock = new Monitor(Mutex::nonleaf+2, "CompileTaskLock");
@@ -96,10 +95,26 @@
CompileTask* prev() const { return _prev; }
void set_prev(CompileTask* prev) { _prev = prev; }
+private:
+ static void print_compilation_impl(outputStream* st, methodOop method, int compile_id, int comp_level, bool is_osr_method = false, int osr_bci = -1, bool is_blocking = false, const char* msg = NULL);
+
+public:
+ void print_compilation(outputStream* st = tty);
+ static void print_compilation(outputStream* st, const nmethod* nm, const char* msg = NULL) {
+ print_compilation_impl(st, nm->method(), nm->compile_id(), nm->comp_level(), nm->is_osr_method(), nm->is_osr_method() ? nm->osr_entry_bci() : -1, /*is_blocking*/ false, msg);
+ }
+
+ static void print_inlining(outputStream* st, ciMethod* method, int inline_level, int bci, const char* msg = NULL);
+ static void print_inlining(ciMethod* method, int inline_level, int bci, const char* msg = NULL) {
+ print_inlining(tty, method, inline_level, bci, msg);
+ }
+
+ static void print_inline_indent(int inline_level, outputStream* st = tty);
+
void print();
void print_line();
+ void print_line_on_error(outputStream* st, char* buf, int buflen);
- void print_line_on_error(outputStream* st, char* buf, int buflen);
void log_task(xmlStream* log);
void log_task_queued();
void log_task_start(CompileLog* log);
--- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -2383,17 +2383,6 @@
}
DEFAULT:
-#ifdef ZERO
- // Some zero configurations use the C++ interpreter as a
- // fallback interpreter and have support for platform
- // specific fast bytecodes which aren't supported here, so
- // redispatch to the equivalent non-fast bytecode when they
- // are encountered.
- if (Bytecodes::is_defined((Bytecodes::Code)opcode)) {
- opcode = (jubyte)Bytecodes::java_code((Bytecodes::Code)opcode);
- goto opcode_switch;
- }
-#endif
fatal(err_msg("Unimplemented opcode %d = %s", opcode,
Bytecodes::name((Bytecodes::Code)opcode)));
goto finish;
--- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -176,7 +176,7 @@
void LinkResolver::lookup_method_in_klasses(methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) {
methodOop result_oop = klass->uncached_lookup_method(name, signature);
- if (EnableMethodHandles && result_oop != NULL) {
+ if (EnableInvokeDynamic && result_oop != NULL) {
switch (result_oop->intrinsic_id()) {
case vmIntrinsics::_invokeExact:
case vmIntrinsics::_invokeGeneric:
@@ -214,7 +214,7 @@
KlassHandle klass, Symbol* name, Symbol* signature,
KlassHandle current_klass,
TRAPS) {
- if (EnableMethodHandles &&
+ if (EnableInvokeDynamic &&
klass() == SystemDictionary::MethodHandle_klass() &&
methodOopDesc::is_method_handle_invoke_name(name)) {
if (!THREAD->is_Compiler_thread() && !MethodHandles::enabled()) {
--- a/hotspot/src/share/vm/memory/dump.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/memory/dump.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, 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
@@ -80,16 +80,7 @@
oop obj = *p;
if (obj->klass() == SystemDictionary::String_klass()) {
- int hash;
- typeArrayOop value = java_lang_String::value(obj);
- int length = java_lang_String::length(obj);
- if (length == 0) {
- hash = 0;
- } else {
- int offset = java_lang_String::offset(obj);
- jchar* s = value->char_at_addr(offset);
- hash = StringTable::hash_string(s, length);
- }
+ int hash = java_lang_String::hash_string(obj);
obj->int_field_put(hash_offset, hash);
}
}
--- a/hotspot/src/share/vm/oops/constantPoolKlass.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/oops/constantPoolKlass.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -286,7 +286,7 @@
assert(obj->is_constantPool(), "should be constant pool");
constantPoolOop cp = (constantPoolOop) obj;
if (cp->tags() != NULL &&
- (!JavaObjectsInPerm || (AnonymousClasses && cp->has_pseudo_string()))) {
+ (!JavaObjectsInPerm || (EnableInvokeDynamic && cp->has_pseudo_string()))) {
for (int i = 1; i < cp->length(); ++i) {
if (cp->tag_at(i).is_string()) {
oop* base = cp->obj_at_addr_raw(i);
--- a/hotspot/src/share/vm/oops/constantPoolOop.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/oops/constantPoolOop.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, 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
@@ -429,7 +429,7 @@
// A "pseudo-string" is an non-string oop that has found is way into
// a String entry.
- // Under AnonymousClasses this can happen if the user patches a live
+ // Under EnableInvokeDynamic this can happen if the user patches a live
// object into a CONSTANT_String entry of an anonymous class.
// Method oops internally created for method handles may also
// use pseudo-strings to link themselves to related metaobjects.
@@ -442,7 +442,7 @@
}
void pseudo_string_at_put(int which, oop x) {
- assert(AnonymousClasses, "");
+ assert(EnableInvokeDynamic, "");
set_pseudo_string(); // mark header
assert(tag_at(which).is_string() || tag_at(which).is_unresolved_string(), "Corrupted constant pool");
string_at_put(which, x); // this works just fine
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -2337,7 +2337,7 @@
st->print_cr(BULLET"fake entry for oop_size: %d", java_lang_Class::oop_size(obj));
st->print_cr(BULLET"fake entry for static_oop_field_count: %d", java_lang_Class::static_oop_field_count(obj));
klassOop real_klass = java_lang_Class::as_klassOop(obj);
- if (real_klass && real_klass->klass_part()->oop_is_instance()) {
+ if (real_klass != NULL && real_klass->klass_part()->oop_is_instance()) {
instanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
}
} else if (as_klassOop() == SystemDictionary::MethodType_klass()) {
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -182,7 +182,7 @@
// Protection domain.
oop _protection_domain;
// Host class, which grants its access privileges to this class also.
- // This is only non-null for an anonymous class (AnonymousClasses enabled).
+ // This is only non-null for an anonymous class (JSR 292 enabled).
// The host class is either named, or a previously loaded anonymous class.
klassOop _host_klass;
// Class signers.
--- a/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -36,6 +36,8 @@
class instanceMirrorKlass: public instanceKlass {
+ friend class VMStructs;
+
private:
static int _offset_of_static_fields;
--- a/hotspot/src/share/vm/oops/klass.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/oops/klass.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -500,7 +500,7 @@
if (oop_is_instance()) {
instanceKlass* ik = (instanceKlass*) this;
if (ik->is_anonymous()) {
- assert(AnonymousClasses, "");
+ assert(EnableInvokeDynamic, "");
intptr_t hash = ik->java_mirror()->identity_hash();
char hash_buf[40];
sprintf(hash_buf, "/" UINTX_FORMAT, (uintx)hash);
--- a/hotspot/src/share/vm/oops/methodOop.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/oops/methodOop.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -607,7 +607,7 @@
// method handles want to be able to push a few extra values (e.g., a bound receiver), and
// invokedynamic sometimes needs to push a bootstrap method, call site, and arglist,
// all without checking for a stack overflow
- static int extra_stack_entries() { return (EnableMethodHandles ? (int)MethodHandlePushLimit : 0) + (EnableInvokeDynamic ? 3 : 0); }
+ static int extra_stack_entries() { return EnableInvokeDynamic ? (int) MethodHandlePushLimit + 3 : 0; }
static int extra_stack_words(); // = extra_stack_entries() * Interpreter::stackElementSize()
// RedefineClasses() support:
--- a/hotspot/src/share/vm/opto/bytecodeInfo.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/bytecodeInfo.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -25,6 +25,7 @@
#include "precompiled.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/vmSymbols.hpp"
+#include "compiler/compileBroker.hpp"
#include "compiler/compileLog.hpp"
#include "interpreter/linkResolver.hpp"
#include "oops/objArrayKlass.hpp"
@@ -75,13 +76,6 @@
assert(!UseOldInlining, "do not use for old stuff");
}
-
-
-static void print_indent(int depth) {
- tty->print(" ");
- for (int i = depth; i != 0; --i) tty->print(" ");
-}
-
static bool is_init_with_ea(ciMethod* callee_method,
ciMethod* caller_method, Compile* C) {
// True when EA is ON and a java constructor is called or
@@ -100,7 +94,7 @@
if(callee_method->should_inline()) {
*wci_result = *(WarmCallInfo::always_hot());
if (PrintInlining && Verbose) {
- print_indent(inline_depth());
+ CompileTask::print_inline_indent(inline_depth());
tty->print_cr("Inlined method is hot: ");
}
return NULL;
@@ -116,7 +110,7 @@
size < InlineThrowMaxSize ) {
wci_result->set_profit(wci_result->profit() * 100);
if (PrintInlining && Verbose) {
- print_indent(inline_depth());
+ CompileTask::print_inline_indent(inline_depth());
tty->print_cr("Inlined method with many throws (throws=%d):", callee_method->interpreter_throwout_count());
}
return NULL;
@@ -138,9 +132,9 @@
max_size = C->freq_inline_size();
if (size <= max_size && TraceFrequencyInlining) {
- print_indent(inline_depth());
+ CompileTask::print_inline_indent(inline_depth());
tty->print_cr("Inlined frequent method (freq=%d count=%d):", freq, call_site_count);
- print_indent(inline_depth());
+ CompileTask::print_inline_indent(inline_depth());
callee_method->print();
tty->cr();
}
@@ -315,8 +309,25 @@
if( inline_depth() > MaxInlineLevel ) {
return "inlining too deep";
}
- if( method() == callee_method &&
- inline_depth() > MaxRecursiveInlineLevel ) {
+
+ // We need to detect recursive inlining of method handle targets: if
+ // the current method is a method handle adapter and one of the
+ // callers is the same method as the callee, we bail out if
+ // MaxRecursiveInlineLevel is hit.
+ if (method()->is_method_handle_adapter()) {
+ JVMState* jvms = caller_jvms();
+ int inline_level = 0;
+ while (jvms != NULL && jvms->has_method()) {
+ if (jvms->method() == callee_method) {
+ inline_level++;
+ if (inline_level > MaxRecursiveInlineLevel)
+ return "recursively inlining too deep";
+ }
+ jvms = jvms->caller();
+ }
+ }
+
+ if (method() == callee_method && inline_depth() > MaxRecursiveInlineLevel) {
return "recursively inlining too deep";
}
@@ -368,18 +379,14 @@
#ifndef PRODUCT
//------------------------------print_inlining---------------------------------
// Really, the failure_msg can be a success message also.
-void InlineTree::print_inlining(ciMethod *callee_method, int caller_bci, const char *failure_msg) const {
- print_indent(inline_depth());
- tty->print("@ %d ", caller_bci);
- if( callee_method ) callee_method->print_short_name();
- else tty->print(" callee not monotonic or profiled");
- tty->print(" %s", (failure_msg ? failure_msg : "inline"));
- if( Verbose && callee_method ) {
+void InlineTree::print_inlining(ciMethod* callee_method, int caller_bci, const char* failure_msg) const {
+ CompileTask::print_inlining(callee_method, inline_depth(), caller_bci, failure_msg ? failure_msg : "inline");
+ if (callee_method == NULL) tty->print(" callee not monotonic or profiled");
+ if (Verbose && callee_method) {
const InlineTree *top = this;
while( top->caller_tree() != NULL ) { top = top->caller_tree(); }
tty->print(" bcs: %d+%d invoked: %d", top->count_inline_bcs(), callee_method->code_size(), callee_method->interpreter_invocation_count());
}
- tty->cr();
}
#endif
--- a/hotspot/src/share/vm/opto/chaitin.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/chaitin.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -673,7 +673,7 @@
case Op_RegD:
lrg.set_num_regs(2);
// Define platform specific register pressure
-#ifdef SPARC
+#if defined(SPARC) || defined(ARM)
lrg.set_reg_pressure(2);
#elif defined(IA32)
if( ireg == Op_RegL ) {
--- a/hotspot/src/share/vm/opto/compile.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/compile.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -2544,6 +2544,36 @@
frc.inc_inner_loop_count();
}
break;
+ case Op_LShiftI:
+ case Op_RShiftI:
+ case Op_URShiftI:
+ case Op_LShiftL:
+ case Op_RShiftL:
+ case Op_URShiftL:
+ if (Matcher::need_masked_shift_count) {
+ // The cpu's shift instructions don't restrict the count to the
+ // lower 5/6 bits. We need to do the masking ourselves.
+ Node* in2 = n->in(2);
+ juint mask = (n->bottom_type() == TypeInt::INT) ? (BitsPerInt - 1) : (BitsPerLong - 1);
+ const TypeInt* t = in2->find_int_type();
+ if (t != NULL && t->is_con()) {
+ juint shift = t->get_con();
+ if (shift > mask) { // Unsigned cmp
+ Compile* C = Compile::current();
+ n->set_req(2, ConNode::make(C, TypeInt::make(shift & mask)));
+ }
+ } else {
+ if (t == NULL || t->_lo < 0 || t->_hi > (int)mask) {
+ Compile* C = Compile::current();
+ Node* shift = new (C, 3) AndINode(in2, ConNode::make(C, TypeInt::make(mask)));
+ n->set_req(2, shift);
+ }
+ }
+ if (in2->outcnt() == 0) { // Remove dead node
+ in2->disconnect_inputs(NULL);
+ }
+ }
+ break;
default:
assert( !n->is_Call(), "" );
assert( !n->is_Mem(), "" );
--- a/hotspot/src/share/vm/opto/doCall.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/doCall.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, 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 @@
#include "ci/ciCallSite.hpp"
#include "ci/ciMethodHandle.hpp"
#include "classfile/vmSymbols.hpp"
+#include "compiler/compileBroker.hpp"
#include "compiler/compileLog.hpp"
#include "interpreter/linkResolver.hpp"
#include "opto/addnode.hpp"
@@ -43,17 +44,17 @@
#ifndef PRODUCT
void trace_type_profile(ciMethod *method, int depth, int bci, ciMethod *prof_method, ciKlass *prof_klass, int site_count, int receiver_count) {
if (TraceTypeProfile || PrintInlining || PrintOptoInlining) {
- tty->print(" ");
- for( int i = 0; i < depth; i++ ) tty->print(" ");
- if (!PrintOpto) {
- method->print_short_name();
- tty->print(" ->");
+ if (!PrintInlining) {
+ if (!PrintOpto && !PrintCompilation) {
+ method->print_short_name();
+ tty->cr();
+ }
+ CompileTask::print_inlining(prof_method, depth, bci);
}
- tty->print(" @ %d ", bci);
- prof_method->print_short_name();
- tty->print(" >>TypeProfile (%d/%d counts) = ", receiver_count, site_count);
+ CompileTask::print_inline_indent(depth);
+ tty->print(" \\-> TypeProfile (%d/%d counts) = ", receiver_count, site_count);
prof_klass->name()->print_symbol();
- tty->print_cr(" (%d bytes)", prof_method->code_size());
+ tty->cr();
}
}
#endif
@@ -269,13 +270,13 @@
}
if (miss_cg != NULL) {
if (next_hit_cg != NULL) {
- NOT_PRODUCT(trace_type_profile(jvms->method(), jvms->depth(), jvms->bci(), next_receiver_method, profile.receiver(1), site_count, profile.receiver_count(1)));
+ NOT_PRODUCT(trace_type_profile(jvms->method(), jvms->depth() - 1, jvms->bci(), next_receiver_method, profile.receiver(1), site_count, profile.receiver_count(1)));
// We don't need to record dependency on a receiver here and below.
// Whenever we inline, the dependency is added by Parse::Parse().
miss_cg = CallGenerator::for_predicted_call(profile.receiver(1), miss_cg, next_hit_cg, PROB_MAX);
}
if (miss_cg != NULL) {
- NOT_PRODUCT(trace_type_profile(jvms->method(), jvms->depth(), jvms->bci(), receiver_method, profile.receiver(0), site_count, receiver_count));
+ NOT_PRODUCT(trace_type_profile(jvms->method(), jvms->depth() - 1, jvms->bci(), receiver_method, profile.receiver(0), site_count, receiver_count));
cg = CallGenerator::for_predicted_call(profile.receiver(0), miss_cg, hit_cg, profile.receiver_prob(0));
if (cg != NULL) return cg;
}
--- a/hotspot/src/share/vm/opto/idealGraphPrinter.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/idealGraphPrinter.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2011, 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
@@ -599,11 +599,35 @@
if (caller != NULL) {
stringStream bciStream;
+ ciMethod* last = NULL;
+ int last_bci;
while(caller) {
+ if (caller->has_method()) {
+ last = caller->method();
+ last_bci = caller->bci();
+ }
bciStream.print("%d ", caller->bci());
caller = caller->caller();
}
print_prop("bci", bciStream.as_string());
+ if (last != NULL && last->has_linenumber_table() && last_bci >= 0) {
+ print_prop("line", last->line_number_from_bci(last_bci));
+ }
+ }
+
+ if (node->debug_orig() != NULL) {
+ stringStream dorigStream;
+ Node* dorig = node->debug_orig();
+ if (dorig) {
+ dorigStream.print("%d ", dorig->_idx);
+ Node* first = dorig;
+ dorig = first->debug_orig();
+ while (dorig && dorig != first) {
+ dorigStream.print("%d ", dorig->_idx);
+ dorig = dorig->debug_orig();
+ }
+ }
+ print_prop("debug_orig", dorigStream.as_string());
}
if (_chaitin && _chaitin != (PhaseChaitin *)0xdeadbeef) {
@@ -628,6 +652,17 @@
GrowableArray<Node *> nodeStack(Thread::current()->resource_area(), 0, 0, NULL);
nodeStack.push(start);
visited.test_set(start->_idx);
+ if (C->cfg() != NULL) {
+ // once we have a CFG there are some nodes that aren't really
+ // reachable but are in the CFG so add them here.
+ for (uint i = 0; i < C->cfg()->_blocks.size(); i++) {
+ Block *b = C->cfg()->_blocks[i];
+ for (uint s = 0; s < b->_nodes.size(); s++) {
+ nodeStack.push(b->_nodes[s]);
+ }
+ }
+ }
+
while(nodeStack.length() > 0) {
Node *n = nodeStack.pop();
@@ -686,16 +721,23 @@
end_head();
head(SUCCESSORS_ELEMENT);
- for (uint s = 0; s < C->cfg()->_blocks[i]->_num_succs; s++) {
+ for (uint s = 0; s < b->_num_succs; s++) {
begin_elem(SUCCESSOR_ELEMENT);
print_attr(BLOCK_NAME_PROPERTY, b->_succs[s]->_pre_order);
end_elem();
}
tail(SUCCESSORS_ELEMENT);
+ head(NODES_ELEMENT);
+ for (uint s = 0; s < b->_nodes.size(); s++) {
+ begin_elem(NODE_ELEMENT);
+ print_attr(NODE_ID_PROPERTY, get_node_id(b->_nodes[s]));
+ end_elem();
+ }
+ tail(NODES_ELEMENT);
+
tail(BLOCK_ELEMENT);
}
-
tail(CONTROL_FLOW_ELEMENT);
}
tail(GRAPH_ELEMENT);
--- a/hotspot/src/share/vm/opto/idealGraphPrinter.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/idealGraphPrinter.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2011, 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,15 +45,6 @@
{
private:
- enum State
- {
- Invalid,
- Valid,
- New
- };
-
-private:
-
static const char *INDENT;
static const char *TOP_ELEMENT;
static const char *GROUP_ELEMENT;
--- a/hotspot/src/share/vm/opto/lcm.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/lcm.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -42,6 +42,9 @@
#ifdef TARGET_ARCH_MODEL_zero
# include "adfiles/ad_zero.hpp"
#endif
+#ifdef TARGET_ARCH_MODEL_arm
+# include "adfiles/ad_arm.hpp"
+#endif
// Optimization - Graph Style
--- a/hotspot/src/share/vm/opto/library_call.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/library_call.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -25,6 +25,7 @@
#include "precompiled.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/vmSymbols.hpp"
+#include "compiler/compileBroker.hpp"
#include "compiler/compileLog.hpp"
#include "oops/objArrayKlass.hpp"
#include "opto/addnode.hpp"
@@ -388,11 +389,7 @@
#endif
if (kit.try_to_inline()) {
if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
- tty->print("Inlining intrinsic %s%s at bci:%d in",
- vmIntrinsics::name_at(intrinsic_id()),
- (is_virtual() ? " (virtual)" : ""), kit.bci());
- kit.caller()->print_short_name(tty);
- tty->print_cr(" (%d bytes)", kit.caller()->code_size());
+ CompileTask::print_inlining(kit.callee(), jvms->depth() - 1, kit.bci(), is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)");
}
C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked);
if (C->log()) {
--- a/hotspot/src/share/vm/opto/loopTransform.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/loopTransform.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -396,16 +396,16 @@
// Return exact loop trip count, or 0 if not maximally unrolling
bool IdealLoopTree::policy_maximally_unroll( PhaseIdealLoop *phase ) const {
CountedLoopNode *cl = _head->as_CountedLoop();
- assert( cl->is_normal_loop(), "" );
+ assert(cl->is_normal_loop(), "");
Node *init_n = cl->init_trip();
Node *limit_n = cl->limit();
// Non-constant bounds
- if( init_n == NULL || !init_n->is_Con() ||
+ if (init_n == NULL || !init_n->is_Con() ||
limit_n == NULL || !limit_n->is_Con() ||
// protect against stride not being a constant
- !cl->stride_is_con() ) {
+ !cl->stride_is_con()) {
return false;
}
int init = init_n->get_int();
@@ -428,7 +428,31 @@
uint unroll_limit = (uint)LoopUnrollLimit * 4;
assert( (intx)unroll_limit == LoopUnrollLimit * 4, "LoopUnrollLimit must fit in 32bits");
cl->set_trip_count(trip_count);
- if( trip_count <= unroll_limit && body_size <= unroll_limit ) {
+ if (trip_count > unroll_limit || body_size > unroll_limit) {
+ return false;
+ }
+
+ // Currently we don't have policy to optimize one iteration loops.
+ // Maximally unrolling transformation is used for that:
+ // it is peeled and the original loop become non reachable (dead).
+ if (trip_count == 1)
+ return true;
+
+ // Do not unroll a loop with String intrinsics code.
+ // String intrinsics are large and have loops.
+ for (uint k = 0; k < _body.size(); k++) {
+ Node* n = _body.at(k);
+ switch (n->Opcode()) {
+ case Op_StrComp:
+ case Op_StrEquals:
+ case Op_StrIndexOf:
+ case Op_AryEq: {
+ return false;
+ }
+ } // switch
+ }
+
+ if (body_size <= unroll_limit) {
uint new_body_size = body_size * trip_count;
if (new_body_size <= unroll_limit &&
body_size == new_body_size / trip_count &&
@@ -448,13 +472,13 @@
bool IdealLoopTree::policy_unroll( PhaseIdealLoop *phase ) const {
CountedLoopNode *cl = _head->as_CountedLoop();
- assert( cl->is_normal_loop() || cl->is_main_loop(), "" );
+ assert(cl->is_normal_loop() || cl->is_main_loop(), "");
// protect against stride not being a constant
- if( !cl->stride_is_con() ) return false;
+ if (!cl->stride_is_con()) return false;
// protect against over-unrolling
- if( cl->trip_count() <= 1 ) return false;
+ if (cl->trip_count() <= 1) return false;
int future_unroll_ct = cl->unrolled_count() * 2;
@@ -485,21 +509,21 @@
// Non-constant bounds.
// Protect against over-unrolling when init or/and limit are not constant
// (so that trip_count's init value is maxint) but iv range is known.
- if( init_n == NULL || !init_n->is_Con() ||
- limit_n == NULL || !limit_n->is_Con() ) {
+ if (init_n == NULL || !init_n->is_Con() ||
+ limit_n == NULL || !limit_n->is_Con()) {
Node* phi = cl->phi();
- if( phi != NULL ) {
+ if (phi != NULL) {
assert(phi->is_Phi() && phi->in(0) == _head, "Counted loop should have iv phi.");
const TypeInt* iv_type = phase->_igvn.type(phi)->is_int();
int next_stride = cl->stride_con() * 2; // stride after this unroll
- if( next_stride > 0 ) {
- if( iv_type->_lo + next_stride <= iv_type->_lo || // overflow
- iv_type->_lo + next_stride > iv_type->_hi ) {
+ if (next_stride > 0) {
+ if (iv_type->_lo + next_stride <= iv_type->_lo || // overflow
+ iv_type->_lo + next_stride > iv_type->_hi) {
return false; // over-unrolling
}
- } else if( next_stride < 0 ) {
- if( iv_type->_hi + next_stride >= iv_type->_hi || // overflow
- iv_type->_hi + next_stride < iv_type->_lo ) {
+ } else if (next_stride < 0) {
+ if (iv_type->_hi + next_stride >= iv_type->_hi || // overflow
+ iv_type->_hi + next_stride < iv_type->_lo) {
return false; // over-unrolling
}
}
@@ -511,24 +535,33 @@
// Key test to unroll CaffeineMark's Logic test
int xors_in_loop = 0;
// Also count ModL, DivL and MulL which expand mightly
- for( uint k = 0; k < _body.size(); k++ ) {
- switch( _body.at(k)->Opcode() ) {
- case Op_XorI: xors_in_loop++; break; // CaffeineMark's Logic test
- case Op_ModL: body_size += 30; break;
- case Op_DivL: body_size += 30; break;
- case Op_MulL: body_size += 10; break;
- }
+ for (uint k = 0; k < _body.size(); k++) {
+ Node* n = _body.at(k);
+ switch (n->Opcode()) {
+ case Op_XorI: xors_in_loop++; break; // CaffeineMark's Logic test
+ case Op_ModL: body_size += 30; break;
+ case Op_DivL: body_size += 30; break;
+ case Op_MulL: body_size += 10; break;
+ case Op_StrComp:
+ case Op_StrEquals:
+ case Op_StrIndexOf:
+ case Op_AryEq: {
+ // Do not unroll a loop with String intrinsics code.
+ // String intrinsics are large and have loops.
+ return false;
+ }
+ } // switch
}
// Check for being too big
- if( body_size > (uint)LoopUnrollLimit ) {
- if( xors_in_loop >= 4 && body_size < (uint)LoopUnrollLimit*4) return true;
+ if (body_size > (uint)LoopUnrollLimit) {
+ if (xors_in_loop >= 4 && body_size < (uint)LoopUnrollLimit*4) return true;
// Normal case: loop too big
return false;
}
// Check for stride being a small enough constant
- if( abs(cl->stride_con()) > (1<<3) ) return false;
+ if (abs(cl->stride_con()) > (1<<3)) return false;
// Unroll once! (Each trip will soon do double iterations)
return true;
@@ -1608,15 +1641,7 @@
return false; // Malformed loop
if (!phase->is_member(this, phase->get_ctrl(cl->loopexit()->in(CountedLoopEndNode::TestValue))))
return false; // Infinite loop
-#ifndef PRODUCT
- if (PrintOpto) {
- tty->print("Removing empty loop");
- this->dump_head();
- } else if (TraceLoopOpts) {
- tty->print("Empty ");
- this->dump_head();
- }
-#endif
+
#ifdef ASSERT
// Ensure only one phi which is the iv.
Node* iv = NULL;
@@ -1629,6 +1654,43 @@
}
assert(iv == cl->phi(), "Wrong phi" );
#endif
+
+ // main and post loops have explicitly created zero trip guard
+ bool needs_guard = !cl->is_main_loop() && !cl->is_post_loop();
+ if (needs_guard) {
+ // Check for an obvious zero trip guard.
+ Node* inctrl = cl->in(LoopNode::EntryControl);
+ if (inctrl->Opcode() == Op_IfTrue) {
+ // The test should look like just the backedge of a CountedLoop
+ Node* iff = inctrl->in(0);
+ if (iff->is_If()) {
+ Node* bol = iff->in(1);
+ if (bol->is_Bool() && bol->as_Bool()->_test._test == cl->loopexit()->test_trip()) {
+ Node* cmp = bol->in(1);
+ if (cmp->is_Cmp() && cmp->in(1) == cl->init_trip() && cmp->in(2) == cl->limit()) {
+ needs_guard = false;
+ }
+ }
+ }
+ }
+ }
+
+#ifndef PRODUCT
+ if (PrintOpto) {
+ tty->print("Removing empty loop with%s zero trip guard", needs_guard ? "out" : "");
+ this->dump_head();
+ } else if (TraceLoopOpts) {
+ tty->print("Empty with%s zero trip guard ", needs_guard ? "out" : "");
+ this->dump_head();
+ }
+#endif
+
+ if (needs_guard) {
+ // Peel the loop to ensure there's a zero trip guard
+ Node_List old_new;
+ phase->do_peeling(this, old_new);
+ }
+
// Replace the phi at loop head with the final value of the last
// iteration. Then the CountedLoopEnd will collapse (backedge never
// taken) and all loop-invariant uses of the exit values will be correct.
--- a/hotspot/src/share/vm/opto/loopnode.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/loopnode.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1064,8 +1064,6 @@
// Cache parts in locals for easy
PhaseIterGVN &igvn = phase->_igvn;
- phase->C->print_method("Before beautify loops", 3);
-
igvn.hash_delete(_head); // Yank from hash before hacking edges
// Check for multiple fall-in paths. Peel off a landing pad if need be.
@@ -1547,6 +1545,7 @@
ResourceMark rm;
int old_progress = C->major_progress();
+ uint orig_worklist_size = _igvn._worklist.size();
// Reset major-progress flag for the driver's heuristics
C->clear_major_progress();
@@ -1610,6 +1609,7 @@
// Split shared headers and insert loop landing pads.
// Do not bother doing this on the Root loop of course.
if( !_verify_me && !_verify_only && _ltree_root->_child ) {
+ C->print_method("Before beautify loops", 3);
if( _ltree_root->_child->beautify_loops( this ) ) {
// Re-build loop tree!
_ltree_root->_child = NULL;
@@ -1694,7 +1694,7 @@
for (int i = 0; i < old_progress; i++)
C->set_major_progress();
assert(C->unique() == unique, "verification mode made Nodes? ? ?");
- assert(_igvn._worklist.size() == 0, "shouldn't push anything");
+ assert(_igvn._worklist.size() == orig_worklist_size, "shouldn't push anything");
return;
}
--- a/hotspot/src/share/vm/opto/matcher.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/matcher.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -49,6 +49,9 @@
#ifdef TARGET_ARCH_MODEL_zero
# include "adfiles/ad_zero.hpp"
#endif
+#ifdef TARGET_ARCH_MODEL_arm
+# include "adfiles/ad_arm.hpp"
+#endif
OptoReg::Name OptoReg::c_frame_pointer;
--- a/hotspot/src/share/vm/opto/matcher.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/matcher.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -427,6 +427,11 @@
// Do ints take an entire long register or just half?
static const bool int_in_long;
+ // Do the processor's shift instructions only use the low 5/6 bits
+ // of the count for 32/64 bit ints? If not we need to do the masking
+ // ourselves.
+ static const bool need_masked_shift_count;
+
// This routine is run whenever a graph fails to match.
// If it returns, the compiler should bailout to interpreter without error.
// In non-product mode, SoftMatchFailure is false to detect non-canonical
--- a/hotspot/src/share/vm/opto/memnode.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/memnode.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -2617,54 +2617,28 @@
}
//=============================================================================
-// Do we match on this edge? No memory edges
-uint StrCompNode::match_edge(uint idx) const {
- return idx == 2 || idx == 3; // StrComp (Binary str1 cnt1) (Binary str2 cnt2)
-}
-
-//------------------------------Ideal------------------------------------------
-// Return a node which is more "ideal" than the current node. Strip out
-// control copies
-Node *StrCompNode::Ideal(PhaseGVN *phase, bool can_reshape){
- return remove_dead_region(phase, can_reshape) ? this : NULL;
-}
-
-//=============================================================================
-// Do we match on this edge? No memory edges
-uint StrEqualsNode::match_edge(uint idx) const {
- return idx == 2 || idx == 3; // StrEquals (Binary str1 str2) cnt
+// Do not match memory edge.
+uint StrIntrinsicNode::match_edge(uint idx) const {
+ return idx == 2 || idx == 3;
}
//------------------------------Ideal------------------------------------------
// Return a node which is more "ideal" than the current node. Strip out
// control copies
-Node *StrEqualsNode::Ideal(PhaseGVN *phase, bool can_reshape){
- return remove_dead_region(phase, can_reshape) ? this : NULL;
-}
-
-//=============================================================================
-// Do we match on this edge? No memory edges
-uint StrIndexOfNode::match_edge(uint idx) const {
- return idx == 2 || idx == 3; // StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)
-}
-
-//------------------------------Ideal------------------------------------------
-// Return a node which is more "ideal" than the current node. Strip out
-// control copies
-Node *StrIndexOfNode::Ideal(PhaseGVN *phase, bool can_reshape){
- return remove_dead_region(phase, can_reshape) ? this : NULL;
-}
-
-//=============================================================================
-// Do we match on this edge? No memory edges
-uint AryEqNode::match_edge(uint idx) const {
- return idx == 2 || idx == 3; // StrEquals ary1 ary2
-}
-//------------------------------Ideal------------------------------------------
-// Return a node which is more "ideal" than the current node. Strip out
-// control copies
-Node *AryEqNode::Ideal(PhaseGVN *phase, bool can_reshape){
- return remove_dead_region(phase, can_reshape) ? this : NULL;
+Node *StrIntrinsicNode::Ideal(PhaseGVN *phase, bool can_reshape) {
+ if (remove_dead_region(phase, can_reshape)) return this;
+
+ if (can_reshape) {
+ Node* mem = phase->transform(in(MemNode::Memory));
+ // If transformed to a MergeMem, get the desired slice
+ uint alias_idx = phase->C->get_alias_index(adr_type());
+ mem = mem->is_MergeMem() ? mem->as_MergeMem()->memory_at(alias_idx) : mem;
+ if (mem != in(MemNode::Memory)) {
+ set_req(MemNode::Memory, mem);
+ return this;
+ }
+ }
+ return NULL;
}
//=============================================================================
--- a/hotspot/src/share/vm/opto/memnode.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/memnode.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -776,67 +776,69 @@
static bool step_through(Node** np, uint instance_id, PhaseTransform* phase);
};
-//------------------------------StrComp-------------------------------------
-class StrCompNode: public Node {
+//------------------------------StrIntrinsic-------------------------------
+// Base class for Ideal nodes used in String instrinsic code.
+class StrIntrinsicNode: public Node {
public:
- StrCompNode(Node* control, Node* char_array_mem,
- Node* s1, Node* c1,
- Node* s2, Node* c2): Node(control, char_array_mem,
- s1, c1,
- s2, c2) {};
- virtual int Opcode() const;
+ StrIntrinsicNode(Node* control, Node* char_array_mem,
+ Node* s1, Node* c1, Node* s2, Node* c2):
+ Node(control, char_array_mem, s1, c1, s2, c2) {
+ }
+
+ StrIntrinsicNode(Node* control, Node* char_array_mem,
+ Node* s1, Node* s2, Node* c):
+ Node(control, char_array_mem, s1, s2, c) {
+ }
+
+ StrIntrinsicNode(Node* control, Node* char_array_mem,
+ Node* s1, Node* s2):
+ Node(control, char_array_mem, s1, s2) {
+ }
+
virtual bool depends_only_on_test() const { return false; }
- virtual const Type* bottom_type() const { return TypeInt::INT; }
virtual const TypePtr* adr_type() const { return TypeAryPtr::CHARS; }
virtual uint match_edge(uint idx) const;
virtual uint ideal_reg() const { return Op_RegI; }
virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
};
+//------------------------------StrComp-------------------------------------
+class StrCompNode: public StrIntrinsicNode {
+public:
+ StrCompNode(Node* control, Node* char_array_mem,
+ Node* s1, Node* c1, Node* s2, Node* c2):
+ StrIntrinsicNode(control, char_array_mem, s1, c1, s2, c2) {};
+ virtual int Opcode() const;
+ virtual const Type* bottom_type() const { return TypeInt::INT; }
+};
+
//------------------------------StrEquals-------------------------------------
-class StrEqualsNode: public Node {
+class StrEqualsNode: public StrIntrinsicNode {
public:
StrEqualsNode(Node* control, Node* char_array_mem,
- Node* s1, Node* s2, Node* c): Node(control, char_array_mem,
- s1, s2, c) {};
+ Node* s1, Node* s2, Node* c):
+ StrIntrinsicNode(control, char_array_mem, s1, s2, c) {};
virtual int Opcode() const;
- virtual bool depends_only_on_test() const { return false; }
virtual const Type* bottom_type() const { return TypeInt::BOOL; }
- virtual const TypePtr* adr_type() const { return TypeAryPtr::CHARS; }
- virtual uint match_edge(uint idx) const;
- virtual uint ideal_reg() const { return Op_RegI; }
- virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
};
//------------------------------StrIndexOf-------------------------------------
-class StrIndexOfNode: public Node {
+class StrIndexOfNode: public StrIntrinsicNode {
public:
StrIndexOfNode(Node* control, Node* char_array_mem,
- Node* s1, Node* c1,
- Node* s2, Node* c2): Node(control, char_array_mem,
- s1, c1,
- s2, c2) {};
+ Node* s1, Node* c1, Node* s2, Node* c2):
+ StrIntrinsicNode(control, char_array_mem, s1, c1, s2, c2) {};
virtual int Opcode() const;
- virtual bool depends_only_on_test() const { return false; }
virtual const Type* bottom_type() const { return TypeInt::INT; }
- virtual const TypePtr* adr_type() const { return TypeAryPtr::CHARS; }
- virtual uint match_edge(uint idx) const;
- virtual uint ideal_reg() const { return Op_RegI; }
- virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
};
//------------------------------AryEq---------------------------------------
-class AryEqNode: public Node {
+class AryEqNode: public StrIntrinsicNode {
public:
- AryEqNode(Node* control, Node* char_array_mem,
- Node* s1, Node* s2): Node(control, char_array_mem, s1, s2) {};
+ AryEqNode(Node* control, Node* char_array_mem, Node* s1, Node* s2):
+ StrIntrinsicNode(control, char_array_mem, s1, s2) {};
virtual int Opcode() const;
- virtual bool depends_only_on_test() const { return false; }
virtual const Type* bottom_type() const { return TypeInt::BOOL; }
- virtual const TypePtr* adr_type() const { return TypeAryPtr::CHARS; }
- virtual uint match_edge(uint idx) const;
- virtual uint ideal_reg() const { return Op_RegI; }
- virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
};
//------------------------------MemBar-----------------------------------------
--- a/hotspot/src/share/vm/opto/node.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/opto/node.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1373,12 +1373,12 @@
//------------------------------find------------------------------------------
// Find a neighbor of this Node with the given _idx
// If idx is negative, find its absolute value, following both _in and _out.
-static void find_recur( Node* &result, Node *n, int idx, bool only_ctrl,
- VectorSet &old_space, VectorSet &new_space ) {
+static void find_recur(Compile* C, Node* &result, Node *n, int idx, bool only_ctrl,
+ VectorSet* old_space, VectorSet* new_space ) {
int node_idx = (idx >= 0) ? idx : -idx;
if (NotANode(n)) return; // Gracefully handle NULL, -1, 0xabababab, etc.
- // Contained in new_space or old_space?
- VectorSet *v = Compile::current()->node_arena()->contains(n) ? &new_space : &old_space;
+ // Contained in new_space or old_space? Check old_arena first since it's mostly empty.
+ VectorSet *v = C->old_arena()->contains(n) ? old_space : new_space;
if( v->test(n->_idx) ) return;
if( (int)n->_idx == node_idx
debug_only(|| n->debug_idx() == node_idx) ) {
@@ -1390,19 +1390,23 @@
v->set(n->_idx);
for( uint i=0; i<n->len(); i++ ) {
if( only_ctrl && !(n->is_Region()) && (n->Opcode() != Op_Root) && (i != TypeFunc::Control) ) continue;
- find_recur( result, n->in(i), idx, only_ctrl, old_space, new_space );
+ find_recur(C, result, n->in(i), idx, only_ctrl, old_space, new_space );
}
// Search along forward edges also:
if (idx < 0 && !only_ctrl) {
for( uint j=0; j<n->outcnt(); j++ ) {
- find_recur( result, n->raw_out(j), idx, only_ctrl, old_space, new_space );
+ find_recur(C, result, n->raw_out(j), idx, only_ctrl, old_space, new_space );
}
}
#ifdef ASSERT
- // Search along debug_orig edges last:
- for (Node* orig = n->debug_orig(); orig != NULL && n != orig; orig = orig->debug_orig()) {
- if (NotANode(orig)) break;
- find_recur( result, orig, idx, only_ctrl, old_space, new_space );
+ // Search along debug_orig edges last, checking for cycles
+ Node* orig = n->debug_orig();
+ if (orig != NULL) {
+ do {
+ if (NotANode(orig)) break;
+ find_recur(C, result, orig, idx, only_ctrl, old_space, new_space );
+ orig = orig->debug_orig();
+ } while (orig != NULL && orig != n->debug_orig());
}
#endif //ASSERT
}
@@ -1417,7 +1421,7 @@
ResourceArea *area = Thread::current()->resource_area();
VectorSet old_space(area), new_space(area);
Node* result = NULL;
- find_recur( result, (Node*) this, idx, false, old_space, new_space );
+ find_recur(Compile::current(), result, (Node*) this, idx, false, &old_space, &new_space );
return result;
}
@@ -1427,7 +1431,7 @@
ResourceArea *area = Thread::current()->resource_area();
VectorSet old_space(area), new_space(area);
Node* result = NULL;
- find_recur( result, (Node*) this, idx, true, old_space, new_space );
+ find_recur(Compile::current(), result, (Node*) this, idx, true, &old_space, &new_space );
return result;
}
#endif
--- a/hotspot/src/share/vm/prims/methodHandles.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/prims/methodHandles.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -112,7 +112,7 @@
// MethodHandles::generate_adapters
//
void MethodHandles::generate_adapters() {
- if (!EnableMethodHandles || SystemDictionary::MethodHandle_klass() == NULL) return;
+ if (!EnableInvokeDynamic || SystemDictionary::MethodHandle_klass() == NULL) return;
assert(_adapter_code == NULL, "generate only once");
@@ -143,7 +143,7 @@
void MethodHandles::set_enabled(bool z) {
if (_enabled != z) {
- guarantee(z && EnableMethodHandles, "can only enable once, and only if -XX:+EnableMethodHandles");
+ guarantee(z && EnableInvokeDynamic, "can only enable once, and only if -XX:+EnableInvokeDynamic");
_enabled = z;
}
}
@@ -2579,7 +2579,6 @@
{CC"getMembers", CC"("CLS""STRG""STRG"I"CLS"I["MEM")I", FN_PTR(MHN_getMembers)}
};
-// More entry points specifically for EnableInvokeDynamic.
// FIXME: Remove methods2 after AllowTransitionalJSR292 is removed.
static JNINativeMethod methods2[] = {
{CC"registerBootstrap", CC"("CLS MH")V", FN_PTR(MHN_registerBootstrap)},
@@ -2618,10 +2617,8 @@
JVM_ENTRY(void, JVM_RegisterMethodHandleMethods(JNIEnv *env, jclass MHN_class)) {
assert(MethodHandles::spot_check_entry_names(), "entry enum is OK");
- // note: this explicit warning-producing stuff will be replaced by auto-detection of the JSR 292 classes
-
- if (!EnableMethodHandles) {
- warning("JSR 292 method handles are disabled in this JVM. Use -XX:+UnlockExperimentalVMOptions -XX:+EnableMethodHandles to enable.");
+ if (!EnableInvokeDynamic) {
+ warning("JSR 292 is disabled in this JVM. Use -XX:+UnlockDiagnosticVMOptions -XX:+EnableInvokeDynamic to enable.");
return; // bind nothing
}
@@ -2702,11 +2699,6 @@
MethodHandles::set_enabled(true);
}
- if (!EnableInvokeDynamic) {
- warning("JSR 292 invokedynamic is disabled in this JVM. Use -XX:+UnlockExperimentalVMOptions -XX:+EnableInvokeDynamic to enable.");
- return; // bind nothing
- }
-
if (AllowTransitionalJSR292) {
ThreadToNativeFromVM ttnfv(thread);
--- a/hotspot/src/share/vm/prims/unsafe.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/prims/unsafe.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1560,7 +1560,7 @@
}
}
}
- if (AnonymousClasses) {
+ if (EnableInvokeDynamic) {
env->RegisterNatives(unsafecls, anonk_methods, sizeof(anonk_methods)/sizeof(JNINativeMethod));
if (env->ExceptionOccurred()) {
if (PrintMiscellaneous && (Verbose || WizardMode)) {
--- a/hotspot/src/share/vm/runtime/arguments.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -2974,21 +2974,28 @@
}
#endif // PRODUCT
- if (EnableInvokeDynamic && !EnableMethodHandles) {
- if (!FLAG_IS_DEFAULT(EnableMethodHandles)) {
- warning("forcing EnableMethodHandles true because EnableInvokeDynamic is true");
+ // Transitional
+ if (EnableMethodHandles || AnonymousClasses) {
+ if (!EnableInvokeDynamic && !FLAG_IS_DEFAULT(EnableInvokeDynamic)) {
+ warning("EnableMethodHandles and AnonymousClasses are obsolete. Keeping EnableInvokeDynamic disabled.");
+ } else {
+ EnableInvokeDynamic = true;
}
- EnableMethodHandles = true;
}
- if (EnableMethodHandles && !AnonymousClasses) {
- if (!FLAG_IS_DEFAULT(AnonymousClasses)) {
- warning("forcing AnonymousClasses true because EnableMethodHandles is true");
+
+ // JSR 292 is not supported before 1.7
+ if (!JDK_Version::is_gte_jdk17x_version()) {
+ if (EnableInvokeDynamic) {
+ if (!FLAG_IS_DEFAULT(EnableInvokeDynamic)) {
+ warning("JSR 292 is not supported before 1.7. Disabling support.");
+ }
+ EnableInvokeDynamic = false;
}
- AnonymousClasses = true;
}
- if ((EnableMethodHandles || AnonymousClasses) && ScavengeRootsInCode == 0) {
+
+ if (EnableInvokeDynamic && ScavengeRootsInCode == 0) {
if (!FLAG_IS_DEFAULT(ScavengeRootsInCode)) {
- warning("forcing ScavengeRootsInCode non-zero because EnableMethodHandles or AnonymousClasses is true");
+ warning("forcing ScavengeRootsInCode non-zero because EnableInvokeDynamic is true");
}
ScavengeRootsInCode = 1;
}
--- a/hotspot/src/share/vm/runtime/compilationPolicy.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/runtime/compilationPolicy.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -396,8 +396,6 @@
// SimpleCompPolicy - compile current method
void SimpleCompPolicy::method_invocation_event( methodHandle m, TRAPS) {
- assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
-
int hot_count = m->invocation_count();
reset_counter_for_invocation_event(m);
const char* comment = "count";
@@ -413,8 +411,6 @@
}
void SimpleCompPolicy::method_back_branch_event(methodHandle m, int bci, TRAPS) {
- assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
-
int hot_count = m->backedge_count();
const char* comment = "backedge_count";
@@ -432,8 +428,6 @@
// Consider m for compilation
void StackWalkCompPolicy::method_invocation_event(methodHandle m, TRAPS) {
- assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
-
int hot_count = m->invocation_count();
reset_counter_for_invocation_event(m);
const char* comment = "count";
@@ -473,8 +467,6 @@
}
void StackWalkCompPolicy::method_back_branch_event(methodHandle m, int bci, TRAPS) {
- assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
-
int hot_count = m->backedge_count();
const char* comment = "backedge_count";
--- a/hotspot/src/share/vm/runtime/globals.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/runtime/globals.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -2377,6 +2377,9 @@
develop(intx, CICloneLoopTestLimit, 100, \
"size limit for blocks heuristically cloned in ciTypeFlow") \
\
+ develop(intx, OSROnlyBCI, -1, \
+ "OSR only at this bci. Negative values mean exclude that bci") \
+ \
/* temp diagnostics */ \
\
diagnostic(bool, TraceRedundantCompiles, false, \
@@ -3690,11 +3693,15 @@
"Skip assert() and verify() which page-in unwanted shared " \
"objects. ") \
\
+ diagnostic(bool, EnableInvokeDynamic, true, \
+ "support JSR 292 (method handles, invokedynamic, " \
+ "anonymous classes") \
+ \
product(bool, AnonymousClasses, false, \
- "support sun.misc.Unsafe.defineAnonymousClass") \
+ "support sun.misc.Unsafe.defineAnonymousClass (deprecated)") \
\
experimental(bool, EnableMethodHandles, false, \
- "support method handles (true by default under JSR 292)") \
+ "support method handles (deprecated)") \
\
diagnostic(intx, MethodHandlePushLimit, 3, \
"number of additional stack slots a method handle may push") \
@@ -3711,9 +3718,6 @@
experimental(bool, TrustFinalNonStaticFields, false, \
"trust final non-static declarations for constant folding") \
\
- experimental(bool, EnableInvokeDynamic, false, \
- "recognize the invokedynamic instruction") \
- \
experimental(bool, AllowTransitionalJSR292, true, \
"recognize pre-PFD formats of invokedynamic") \
\
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1682,7 +1682,7 @@
tty->print_cr("WrongMethodType thread="PTR_FORMAT" req="PTR_FORMAT" act="PTR_FORMAT"",
thread, required, actual);
}
- assert(EnableMethodHandles, "");
+ assert(EnableInvokeDynamic, "");
oop singleKlass = wrong_method_type_is_for_single_argument(thread, required);
char* message = NULL;
if (singleKlass != NULL) {
@@ -2479,20 +2479,10 @@
// java compiled calling convention to the native convention, handlizes
// arguments, and transitions to native. On return from the native we transition
// back to java blocking if a safepoint is in progress.
-nmethod *AdapterHandlerLibrary::create_native_wrapper(methodHandle method) {
+nmethod *AdapterHandlerLibrary::create_native_wrapper(methodHandle method, int compile_id) {
ResourceMark rm;
nmethod* nm = NULL;
- if (PrintCompilation) {
- ttyLocker ttyl;
- tty->print("--- n%s ", (method->is_synchronized() ? "s" : " "));
- method->print_short_name(tty);
- if (method->is_static()) {
- tty->print(" (static)");
- }
- tty->cr();
- }
-
assert(method->has_native_function(), "must have something valid to call!");
{
@@ -2537,6 +2527,7 @@
// Generate the compiled-to-native wrapper code
nm = SharedRuntime::generate_native_wrapper(&_masm,
method,
+ compile_id,
total_args_passed,
comp_args_on_stack,
sig_bt,regs,
@@ -2548,6 +2539,10 @@
// Install the generated code.
if (nm != NULL) {
+ if (PrintCompilation) {
+ ttyLocker ttyl;
+ CompileTask::print_compilation(tty, nm, method->is_static() ? "(static)" : "");
+ }
method->set_code(method, nm);
nm->post_compiled_method_load_event();
} else {
--- a/hotspot/src/share/vm/runtime/sharedRuntime.hpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.hpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, 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
@@ -438,6 +438,7 @@
// returns.
static nmethod *generate_native_wrapper(MacroAssembler* masm,
methodHandle method,
+ int compile_id,
int total_args_passed,
int max_arg,
BasicType *sig_bt,
@@ -659,7 +660,7 @@
static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint,
address i2c_entry, address c2i_entry, address c2i_unverified_entry);
- static nmethod* create_native_wrapper(methodHandle method);
+ static nmethod* create_native_wrapper(methodHandle method, int compile_id);
static AdapterHandlerEntry* get_adapter(methodHandle method);
#ifdef HAVE_DTRACE_H
--- a/hotspot/src/share/vm/runtime/thread.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/runtime/thread.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -3229,7 +3229,7 @@
warning("java.lang.ArithmeticException has not been initialized");
warning("java.lang.StackOverflowError has not been initialized");
}
- }
+ }
// See : bugid 4211085.
// Background : the static initializer of java.lang.Compiler tries to read
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -70,6 +70,7 @@
#include "oops/cpCacheKlass.hpp"
#include "oops/cpCacheOop.hpp"
#include "oops/instanceKlass.hpp"
+#include "oops/instanceMirrorKlass.hpp"
#include "oops/instanceKlassKlass.hpp"
#include "oops/instanceOop.hpp"
#include "oops/klass.hpp"
@@ -1101,6 +1102,7 @@
declare_type(instanceKlass, Klass) \
declare_type(instanceKlassKlass, klassKlass) \
declare_type(instanceOopDesc, oopDesc) \
+ declare_type(instanceMirrorKlass, instanceKlass) \
declare_type(instanceRefKlass, instanceKlass) \
declare_type(klassKlass, Klass) \
declare_type(klassOopDesc, oopDesc) \
--- a/hotspot/src/share/vm/utilities/ostream.cpp Thu Mar 31 18:14:29 2011 -0700
+++ b/hotspot/src/share/vm/utilities/ostream.cpp Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, 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
@@ -424,6 +424,15 @@
const char* star = strchr(basename, '*');
int star_pos = (star == NULL) ? -1 : (star - nametail);
+ int skip = 1;
+ if (star == NULL) {
+ // Try %p
+ star = strstr(basename, "%p");
+ if (star != NULL) {
+ skip = 2;
+ }
+ }
+ star_pos = (star == NULL) ? -1 : (star - nametail);
char pid[32];
if (star_pos >= 0) {
@@ -442,11 +451,11 @@
}
if (star_pos >= 0) {
- // convert foo*bar.log to foo123bar.log
+ // convert foo*bar.log or foo%pbar.log to foo123bar.log
int buf_pos = (int) strlen(buf);
strncpy(&buf[buf_pos], nametail, star_pos);
strcpy(&buf[buf_pos + star_pos], pid);
- nametail += star_pos + 1; // skip prefix and star
+ nametail += star_pos + skip; // skip prefix and pid format
}
strcat(buf, nametail); // append rest of name, or all of name
@@ -466,7 +475,7 @@
// Note: This feature is for maintainer use only. No need for L10N.
jio_print(warnbuf);
FREE_C_HEAP_ARRAY(char, try_name);
- try_name = make_log_name("hs_pid*.log", os::get_temp_directory());
+ try_name = make_log_name("hs_pid%p.log", os::get_temp_directory());
jio_snprintf(warnbuf, sizeof(warnbuf),
"Warning: Forcing option -XX:LogFile=%s\n", try_name);
jio_print(warnbuf);
@@ -801,6 +810,8 @@
_buffer = buffer;
_buflen = buflen;
_outer_stream = outer_stream;
+ // compile task prints time stamp relative to VM start
+ _stamp.update_to(1);
}
void staticBufferStream::write(const char* c, size_t len) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/7024475/Test7024475.java Wed Jul 05 17:39:50 2017 +0200
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2011, 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 7024475
+ * @summary loop doesn't terminate when compiled
+ *
+ * @run main Test7024475
+ */
+
+public class Test7024475 {
+
+ static int i;
+ static int x1;
+ static int[] bucket_B;
+
+ static void test(Test7024475 test, int i, int c0, int j, int c1) {
+ for (;;) {
+ if (c1 > c0) {
+ if (c0 > 253) {
+ throw new InternalError("c0 = " + c0);
+ }
+ int index = c0 * 256 + c1;
+ if (index == -1) return;
+ i = bucket_B[index];
+ if (1 < j - i && test != null)
+ x1 = 0;
+ j = i;
+ c1--;
+ } else {
+ c0--;
+ if (j <= 0)
+ break;
+ c1 = 255;
+ }
+ }
+ }
+
+ public static void main(String args[]) {
+ Test7024475 t = new Test7024475();
+ bucket_B = new int[256*256];
+ for (int i = 1; i < 256*256; i++) {
+ bucket_B[i] = 1;
+ }
+ for (int n = 0; n < 100000; n++) {
+ test(t, 2, 85, 1, 134);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/7029152/Test.java Wed Jul 05 17:39:50 2017 +0200
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2011, 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 7029152
+ * @summary Ideal nodes for String intrinsics miss memory edge optimization
+ *
+ * @run main/othervm -Xbatch Test
+ */
+
+public class Test {
+
+ static final String str = "11111xx11111xx1x";
+ static int idx = 0;
+
+ static int IndexOfTest(String str) {
+ return str.indexOf("11111xx1x");
+ }
+
+ public static void main(String args[]) {
+ final int ITERS=2000000;
+
+ for (int i=0; i<ITERS; i++) {
+ idx = IndexOfTest(str);
+ }
+ System.out.println("IndexOf = " + idx);
+ }
+}
--- a/jaxp/.hgtags Thu Mar 31 18:14:29 2011 -0700
+++ b/jaxp/.hgtags Wed Jul 05 17:39:50 2017 +0200
@@ -110,3 +110,4 @@
8e1148c7911b02e00a727461525f239da025cab7 jdk7-b133
d56b326ae0544fc16c3e0d0285876f3c82054db2 jdk7-b134
4aa9916693dc1078580c1865e6f2584046851e5a jdk7-b135
+1759daa85d33800bd578853f9531f9de73f70fc7 jdk7-b136
--- a/jaxws/.hgtags Thu Mar 31 18:14:29 2011 -0700
+++ b/jaxws/.hgtags Wed Jul 05 17:39:50 2017 +0200
@@ -110,3 +110,4 @@
359d0c8c00a02d3a094c19f8a485b2217c99a4e0 jdk7-b133
545de8303fec939db3892f7c324dd7df197e8f09 jdk7-b134
d5fc61f18043765705ef22b57a68c924ab2f1a5b jdk7-b135
+c81d289c9a532d6e94af3c09d856a2a20529040f jdk7-b136
--- a/jdk/.hgtags Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/.hgtags Wed Jul 05 17:39:50 2017 +0200
@@ -110,3 +110,4 @@
5e5f68a01d12a4432172f384d5201f3a05254493 jdk7-b133
554adcfb615e63e62af530b1c10fcf7813a75b26 jdk7-b134
d8ced728159fbb2caa8b6adb477fd8efdbbdf179 jdk7-b135
+aa13e7702cd9d8aca9aa38f1227f966990866944 jdk7-b136
--- a/jdk/make/common/shared/Defs-linux.gmk Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/make/common/shared/Defs-linux.gmk Wed Jul 05 17:39:50 2017 +0200
@@ -187,6 +187,12 @@
# Special define for checking the binaries
+# Debug builds should downgrade warnings to just info
+MAPFILE_WARNING-DBG=INFO
+MAPFILE_WARNING-OPT=WARNING
+MAPFILE_WARNING-=WARNING
+MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT))
+
# Macro to check it's input file for banned dependencies and verify the
# binary built properly. Relies on process exit code.
ifndef CROSS_COMPILE_ARCH
@@ -194,7 +200,7 @@
( \
$(ECHO) "Checking for mapfile use in: $1" && \
if [ "`$(NM) -D -g --defined-only $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \
- $(ECHO) "WARNING: File was not built with a mapfile: $1"; \
+ $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \
fi && \
$(ECHO) "Library loads for: $1" && \
$(LDD) $1 && \
@@ -208,4 +214,5 @@
$(ECHO) "Skipping binary file verification for cross-compile build" \
)
endef
-endif
\ No newline at end of file
+endif
+
--- a/jdk/make/common/shared/Defs-solaris.gmk Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/make/common/shared/Defs-solaris.gmk Wed Jul 05 17:39:50 2017 +0200
@@ -188,6 +188,12 @@
# Special define for checking the binaries
+# Debug builds should downgrade warnings to just info
+MAPFILE_WARNING-DBG=INFO
+MAPFILE_WARNING-OPT=WARNING
+MAPFILE_WARNING-=WARNING
+MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT))
+
# Macro to check it's input file for banned dependencies and verify the
# binary built properly. Relies on process exit code.
ifndef CROSS_COMPILE_ARCH
@@ -195,7 +201,7 @@
( \
$(ECHO) "Checking for mapfile use in: $1" && \
if [ "`$(NM) -g -D $1 | $(EGREP) -v 'UNDEF' | $(EGREP) 'SUNWprivate'`" = "" ] ; then \
- $(ECHO) "WARNING: File was not built with a mapfile: $1"; \
+ $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \
fi && \
$(ECHO) "Library loads for: $1" && \
$(LDD) $1 && \
@@ -209,4 +215,5 @@
$(ECHO) "Skipping binary file verification for cross-compile build" \
)
endef
-endif
\ No newline at end of file
+endif
+
--- a/jdk/make/mkdemo/jfc/Font2DTest/Makefile Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/make/mkdemo/jfc/Font2DTest/Makefile Wed Jul 05 17:39:50 2017 +0200
@@ -33,7 +33,7 @@
include $(BUILDDIR)/common/Defs.gmk
DEMO_ROOT = $(SHARE_SRC)/demo/jfc/$(DEMONAME)
-DEMO_TOPFILES = ./README.txt
+DEMO_TOPFILES = ./README.txt ./$(DEMONAME).html
DEMO_MAINCLASS = $(DEMONAME)
DEMO_DESTDIR = $(DEMODIR)/jfc/$(DEMONAME)
--- a/jdk/make/mkdemo/jfc/Java2D/Makefile Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/make/mkdemo/jfc/Java2D/Makefile Wed Jul 05 17:39:50 2017 +0200
@@ -33,7 +33,7 @@
include $(BUILDDIR)/common/Defs.gmk
DEMO_ROOT = $(CLOSED_SRC)/share/demo/jfc/Java2D
-DEMO_TOPFILES = ./Java2Demo.html ./README.txt
+DEMO_TOPFILES = ./README.txt ./$(DEMONAME).html
DEMO_MAINCLASS = java2d.Java2Demo
DEMO_DESTDIR = $(DEMODIR)/jfc/Java2D
--- a/jdk/make/mkdemo/jfc/SwingApplet/Makefile Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/make/mkdemo/jfc/SwingApplet/Makefile Wed Jul 05 17:39:50 2017 +0200
@@ -33,7 +33,7 @@
include $(BUILDDIR)/common/Defs.gmk
DEMO_ROOT = $(SHARE_SRC)/demo/jfc/$(DEMONAME)
-DEMO_TOPFILES = ./README.txt
+DEMO_TOPFILES = ./README.txt ./$(DEMONAME).html
DEMO_MAINCLASS = $(DEMONAME)
DEMO_DESTDIR = $(DEMODIR)/jfc/$(DEMONAME)
--- a/jdk/make/mkdemo/jfc/SwingSet2/Makefile Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/make/mkdemo/jfc/SwingSet2/Makefile Wed Jul 05 17:39:50 2017 +0200
@@ -33,7 +33,7 @@
include $(BUILDDIR)/common/Defs.gmk
DEMO_ROOT = $(CLOSED_SRC)/share/demo/jfc/$(DEMONAME)
-DEMO_TOPFILES = ./README.txt
+DEMO_TOPFILES = ./README.txt ./$(DEMONAME).html
DEMO_MAINCLASS = $(DEMONAME)
DEMO_MANIFEST_ATTR = SplashScreen-Image: resources/images/splash.png
DEMO_DESTDIR = $(DEMODIR)/jfc/$(DEMONAME)
--- a/jdk/make/tools/sharing/classlist.linux Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/make/tools/sharing/classlist.linux Wed Jul 05 17:39:50 2017 +0200
@@ -104,9 +104,7 @@
java/lang/ref/Reference$Lock
java/lang/ref/Reference$ReferenceHandler
java/lang/ref/Finalizer$FinalizerThread
-java/util/Hashtable$EmptyEnumerator
java/util/Enumeration
-java/util/Hashtable$EmptyIterator
java/util/Iterator
java/util/Hashtable$Entry
java/nio/charset/Charset
@@ -192,8 +190,6 @@
java/util/LinkedHashMap
java/util/LinkedHashMap$Entry
java/lang/StringBuilder
-java/io/File$1
-sun/misc/JavaIODeleteOnExitAccess
sun/misc/SharedSecrets
java/lang/ClassLoader$3
java/lang/StringCoding$StringEncoder
@@ -207,7 +203,6 @@
java/io/Console
java/io/Console$1
sun/misc/JavaIOAccess
-java/io/Console$1$1
java/lang/Shutdown
java/util/ArrayList
java/lang/Shutdown$Lock
@@ -330,7 +325,6 @@
java/beans/PropertyChangeEvent
java/util/EventObject
java/awt/Component$AWTTreeLock
-sun/awt/DebugHelper
sun/awt/NativeLibLoader
sun/security/action/LoadLibraryAction
java/awt/GraphicsEnvironment
@@ -341,7 +335,6 @@
java/lang/ProcessEnvironment$Value
java/lang/ProcessEnvironment$StringEnvironment
java/util/Collections$UnmodifiableMap
-sun/awt/DebugHelperStub
java/awt/Toolkit
java/awt/Toolkit$3
sun/util/CoreResourceBundleControl
@@ -391,9 +384,7 @@
sun/java2d/SunGraphicsEnvironment
sun/java2d/FontSupport
sun/awt/DisplayChangedListener
-sun/java2d/SunGraphicsEnvironment$TTFilter
java/io/FilenameFilter
-sun/java2d/SunGraphicsEnvironment$T1Filter
sun/awt/X11GraphicsEnvironment$1
sun/awt/SunToolkit
sun/awt/WindowClosingSupport
@@ -403,7 +394,6 @@
java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
java/util/concurrent/locks/Condition
sun/awt/AWTAutoShutdown
-sun/awt/AWTAutoShutdown$PeerMap
sun/awt/SunToolkit$6
java/awt/Dialog$ModalExclusionType
java/lang/Enum
@@ -425,7 +415,6 @@
java/util/HashMap$Values
java/util/HashMap$ValueIterator
java/util/HashMap$HashIterator
-sun/font/FontManager$1
java/awt/Font
java/awt/geom/AffineTransform
sun/font/AttributeValues
@@ -463,13 +452,11 @@
sun/java2d/Disposer
sun/java2d/Disposer$1
sun/font/StrikeCache$1
-sun/font/FontManager$FontRegistrationInfo
sun/awt/motif/MFontConfiguration
sun/awt/FontConfiguration
sun/awt/FontDescriptor
java/util/Scanner
java/util/regex/Pattern
-java/util/regex/Pattern$8
java/util/regex/Pattern$Node
java/util/regex/Pattern$LastNode
java/util/regex/Pattern$GroupHead
@@ -509,7 +496,6 @@
java/util/regex/Pattern$BmpCharProperty
java/util/regex/Pattern$6
java/util/regex/Pattern$CharProperty$1
-java/util/regex/Pattern$10
sun/nio/ch/FileChannelImpl
java/nio/channels/FileChannel
java/nio/channels/ByteChannel
@@ -565,7 +551,6 @@
java/text/spi/DecimalFormatSymbolsProvider
java/util/Currency
java/util/Currency$1
-java/util/CurrencyData
java/util/spi/CurrencyNameProvider
sun/util/resources/CurrencyNames
sun/util/resources/LocaleNamesBundle
@@ -582,7 +567,6 @@
java/util/regex/Pattern$5
java/util/regex/Pattern$Loop
java/util/regex/Pattern$Prolog
-java/util/regex/Pattern$9
java/util/regex/Pattern$BranchConn
java/util/regex/Pattern$Branch
java/nio/channels/spi/AbstractInterruptibleChannel$1
@@ -635,11 +619,8 @@
java/awt/image/PackedColorModel
java/awt/color/ColorSpace
java/awt/color/ICC_Profile
-sun/awt/color/ProfileDeferralInfo
-sun/awt/color/ProfileDeferralMgr
java/awt/color/ICC_ProfileRGB
java/awt/color/ICC_Profile$1
-sun/awt/color/ProfileActivator
java/awt/color/ICC_ColorSpace
sun/java2d/pipe/NullPipe
sun/java2d/pipe/PixelDrawPipe
@@ -662,8 +643,6 @@
sun/java2d/pipe/SpanClipRenderer
sun/java2d/pipe/Region
sun/java2d/pipe/RegionIterator
-sun/java2d/pipe/DuctusShapeRenderer
-sun/java2d/pipe/DuctusRenderer
sun/java2d/pipe/AlphaPaintPipe
sun/java2d/pipe/SpanShapeRenderer$Composite
sun/java2d/pipe/SpanShapeRenderer
@@ -737,7 +716,6 @@
sun/awt/X11/Native
sun/awt/X11/Native$1
java/awt/EventQueue
-sun/awt/X11/XToolkit$7
java/util/EmptyStackException
java/lang/reflect/InvocationTargetException
java/awt/EventDispatchThread
@@ -746,10 +724,7 @@
sun/awt/PeerEvent
java/awt/event/InvocationEvent
java/awt/ActiveEvent
-java/awt/EventQueueItem
sun/awt/X11/XToolkit$1
-sun/awt/X11/XToolkit$XErrorHandler
-sun/awt/X11/XToolkit$5
sun/awt/X11/XEventDispatcher
sun/awt/SunToolkit$ModalityListenerList
sun/awt/ModalityListener
@@ -761,21 +736,18 @@
java/util/Deque
java/util/Queue
java/util/AbstractSequentialList
-java/util/LinkedList$Entry
sun/awt/X11/AwtScreenData
sun/awt/X11/XWM
sun/awt/X11/MWMConstants
sun/awt/X11/XAtom
java/awt/Insets
sun/awt/X11/XWM$1
-sun/awt/X11/XWM$2
sun/awt/X11/XSetWindowAttributes
sun/awt/X11/XErrorEvent
sun/awt/X11/XNETProtocol
sun/awt/X11/XStateProtocol
sun/awt/X11/XLayerProtocol
sun/awt/X11/XProtocol
-sun/awt/X11/XProtocol$1
sun/awt/X11/WindowPropertyGetter
sun/awt/X11/UnsafeXDisposerRecord
sun/awt/X11/XPropertyCache
@@ -783,7 +755,6 @@
sun/awt/X11/XAtomList
sun/awt/X11/XToolkit$3
sun/awt/X11/XAnyEvent
-sun/awt/X11/IXAnyEvent
java/awt/Window$WindowDisposerRecord
java/awt/KeyboardFocusManager
java/awt/KeyEventDispatcher
@@ -794,7 +765,6 @@
java/awt/DefaultFocusTraversalPolicy
java/awt/ContainerOrderFocusTraversalPolicy
java/awt/FocusTraversalPolicy
-java/awt/MutableBoolean
java/util/Collections$UnmodifiableSet
sun/awt/HeadlessToolkit
sun/awt/X11/XKeyboardFocusManagerPeer
@@ -856,7 +826,6 @@
sun/java2d/x11/X11Renderer
sun/awt/X11/XGlobalCursorManager
sun/awt/GlobalCursorManager
-sun/awt/X11/XToolkit$6
java/awt/Cursor$CursorDisposer
java/awt/AWTException
java/awt/HeadlessException
@@ -888,7 +857,6 @@
java/awt/event/MouseMotionListener
java/awt/event/MouseWheelListener
java/awt/event/InputMethodListener
-java/awt/Component$NativeInLightFixer
java/awt/event/ContainerListener
javax/accessibility/AccessibleContext
sun/reflect/UnsafeObjectFieldAccessorImpl
@@ -969,7 +937,6 @@
javax/swing/SwingPaintEventDispatcher
sun/awt/PaintEventDispatcher
javax/swing/UIManager$2
-javax/swing/UIManager$3
java/awt/PopupMenu
java/awt/Menu
java/awt/MenuItem
@@ -1062,8 +1029,6 @@
javax/swing/plaf/LabelUI
javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1
javax/swing/plaf/basic/BasicHTML
-javax/swing/SystemEventQueueUtilities
-javax/swing/SystemEventQueueUtilities$SystemEventQueue
sun/awt/NullComponentPeer
java/awt/event/WindowEvent
java/awt/EventQueue$1
@@ -1084,11 +1049,9 @@
sun/misc/ExtensionDependency
java/lang/Package
sun/security/util/ManifestEntryVerifier
-sun/security/provider/Sun
java/security/Provider
java/security/Provider$ServiceKey
java/security/Provider$EngineDescription
-sun/security/provider/Sun$1
java/security/Security
java/security/Security$1
sun/misc/FloatingDecimal
@@ -1133,7 +1096,6 @@
javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
javax/swing/text/StyleContext$NamedStyle
javax/swing/text/Style
-javax/swing/text/SimpleAttributeSet$1
javax/swing/text/StyleContext$SmallAttributeSet
javax/swing/text/AbstractDocument$BidiRootElement
javax/swing/text/AbstractDocument$BranchElement
@@ -1267,7 +1229,6 @@
sun/nio/cs/UTF_16$Decoder
sun/nio/cs/UnicodeDecoder
sun/font/FileFontStrike
-sun/font/FileFont$FileFontDisposer
sun/font/TrueTypeGlyphMapper
sun/font/CMap
sun/font/CMap$NullCMapClass
@@ -1281,20 +1242,12 @@
sun/awt/EventQueueItem
sun/awt/SunToolkit$3
sun/awt/X11/XExposeEvent
-sun/awt/X11/ComponentAccessor
-sun/awt/X11/ComponentAccessor$1
sun/reflect/UnsafeBooleanFieldAccessorImpl
sun/awt/event/IgnorePaintEvent
java/awt/image/DataBufferInt
java/awt/image/SinglePixelPackedSampleModel
sun/awt/image/IntegerInterleavedRaster
-sun/java2d/x11/X11RemoteOffScreenImage
-sun/awt/image/RemoteOffScreenImage
sun/awt/image/OffScreenImage
-sun/java2d/x11/X11RemoteOffScreenImage$X11RemoteSurfaceManager
-sun/awt/image/OffScreenSurfaceManager
-sun/awt/image/CachingSurfaceManager
-sun/awt/image/RasterListener
sun/awt/image/BufImgSurfaceData
sun/java2d/opengl/GLXGraphicsConfig
sun/java2d/opengl/OGLGraphicsConfig
@@ -1302,7 +1255,6 @@
sun/awt/image/WritableRasterNative
sun/awt/image/DataBufferNative
sun/java2d/SurfaceManagerFactory
-sun/java2d/x11/X11CachingSurfaceManager
sun/java2d/opengl/GLXSurfaceData
sun/java2d/opengl/OGLSurfaceData
sun/font/CompositeGlyphMapper
@@ -1332,10 +1284,7 @@
java/lang/ProcessImpl
java/lang/UNIXProcess
java/lang/Process
-java/lang/UNIXProcess$Gate
java/lang/UNIXProcess$1
-java/lang/UNIXProcess$1$1
-java/lang/UNIXProcess$1$1$1
java/net/ServerSocket
java/util/Random
java/util/concurrent/atomic/AtomicLong
@@ -1422,7 +1371,6 @@
javax/swing/ToolTipManager$insideTimerAction
javax/swing/ToolTipManager$outsideTimerAction
javax/swing/ToolTipManager$stillInsideTimerAction
-javax/swing/ToolTipManager$Actions
sun/swing/UIAction
javax/swing/Action
javax/swing/ToolTipManager$MoveBeforeEnterListener
@@ -1715,7 +1663,6 @@
javax/swing/border/EtchedBorder
javax/swing/JToolBar$Separator
javax/swing/plaf/basic/BasicToolBarSeparatorUI
-sun/awt/color/CMM
java/applet/Applet
java/awt/Panel
com/sun/awt/AWTUtilities
@@ -1752,7 +1699,6 @@
java/awt/LightweightDispatcher$2
sun/awt/X11/XReparentEvent
sun/awt/X11/XWindowAttributes
-javax/swing/SystemEventQueueUtilities$ComponentWorkRequest
sun/awt/X11/XFocusChangeEvent
sun/awt/X11/XComponentPeer$1
sun/awt/X11/XUnmapEvent
@@ -1771,7 +1717,6 @@
sun/net/www/MimeTable
java/net/FileNameMap
sun/net/www/MimeTable$1
-sun/net/www/MimeTable$2
sun/net/www/MimeEntry
java/net/URLConnection$1
java/text/SimpleDateFormat
@@ -1957,7 +1902,6 @@
javax/swing/tree/VariableHeightLayoutCache$TreeStateNode
javax/swing/tree/DefaultMutableTreeNode
javax/swing/tree/MutableTreeNode
-javax/swing/tree/DefaultMutableTreeNode$1
javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration
javax/swing/event/TableColumnModelEvent
java/text/ParseException
@@ -2014,21 +1958,13 @@
sun/java2d/HeadlessGraphicsEnvironment
java/util/Hashtable$KeySet
java/awt/FontFormatException
-sun/java2d/SunGraphicsEnvironment$2
sun/font/Type1Font$1
java/nio/channels/FileChannel$MapMode
sun/nio/ch/FileChannelImpl$Unmapper
sun/nio/ch/Util$3
java/nio/DirectByteBufferR
java/nio/charset/Charset$3
-sun/nio/cs/ext/ExtendedCharsets
sun/nio/cs/AbstractCharsetProvider
-sun/nio/cs/ext/SJIS
-sun/nio/cs/ext/SJIS$Decoder
-sun/nio/cs/ext/DelegatableDecoder
-sun/nio/cs/ext/JIS_X_0208_Decoder
-sun/nio/cs/ext/DoubleByteDecoder
-sun/nio/cs/ext/JIS_X_0201$Decoder
sun/nio/cs/SingleByteDecoder
java/lang/CharacterData00
javax/swing/DefaultListModel
@@ -2145,7 +2081,6 @@
java/security/MessageDigest$Delegate
sun/security/provider/ByteArrayAccess
java/io/ObjectStreamClass$ClassDataSlot
-java/io/ObjectInputStream$CallbackContext
sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl
java/security/SignatureException
java/security/InvalidKeyException
@@ -2194,8 +2129,6 @@
java/math/MutableBigInteger
java/math/SignedMutableBigInteger
java/awt/EventQueue$1AWTInvocationLock
-javax/swing/SystemEventQueueUtilities$RunnableCanvas
-javax/swing/SystemEventQueueUtilities$RunnableCanvasGraphics
java/awt/Component$FlipBufferStrategy
java/awt/SentEvent
sun/awt/X11/XDestroyWindowEvent
@@ -2231,18 +2164,13 @@
javax/swing/plaf/synth/SynthLookAndFeel$Handler
javax/swing/plaf/synth/SynthDefaultLookup
com/sun/java/swing/plaf/gtk/GTKEngine
-com/sun/java/swing/plaf/gtk/GTKDefaultEngine
com/sun/java/swing/plaf/gtk/GTKEngine$Settings
com/sun/java/swing/plaf/gtk/GTKStyleFactory
com/sun/java/swing/plaf/gtk/PangoFonts
-sun/font/FontManager$FontConfigInfo
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$WeakPCL
javax/swing/plaf/synth/Region
javax/swing/plaf/synth/SynthLookAndFeel$AATextListener
-com/sun/java/swing/plaf/gtk/GTKNativeEngine
-com/sun/java/swing/plaf/gtk/GTKNativeEngine$WidgetType
com/sun/java/swing/plaf/gtk/GTKRegion
-com/sun/java/swing/plaf/gtk/GTKDefaultStyle
com/sun/java/swing/plaf/gtk/GTKStyle
com/sun/java/swing/plaf/gtk/GTKConstants
javax/swing/plaf/synth/SynthStyle
@@ -2268,7 +2196,6 @@
javax/swing/plaf/synth/SynthToggleButtonUI
javax/swing/plaf/basic/BasicBorders$FieldBorder
javax/swing/plaf/synth/SynthMenuBarUI
-javax/swing/plaf/synth/DefaultMenuLayout
javax/swing/plaf/synth/SynthMenuUI
javax/swing/plaf/synth/SynthUI
com/sun/java/swing/plaf/gtk/GTKIconFactory
@@ -2332,7 +2259,6 @@
javax/security/auth/AuthPermission
java/lang/Thread$1
java/util/logging/LogManager$5
-java/util/logging/LogManager$6
sun/applet/StdAppletViewerFactory
sun/applet/AppletViewerFactory
sun/applet/AppletViewer$UserActionListener
@@ -2343,7 +2269,6 @@
sun/applet/AppletPanel$10
java/security/Policy$1
sun/security/provider/PolicyFile$1
-sun/security/provider/PolicyInfo
sun/security/provider/PolicyFile$3
sun/security/util/PropertyExpander
sun/security/provider/PolicyParser
@@ -2353,12 +2278,10 @@
sun/security/provider/PolicyFile$PolicyEntry
sun/security/provider/PolicyFile$6
sun/security/provider/PolicyFile$7
-sun/security/provider/SelfPermission
java/net/SocketPermissionCollection
java/util/PropertyPermissionCollection
sun/applet/AppletPanel$9
sun/applet/AppletClassLoader
-sun/applet/AppletClassLoader$4
sun/applet/AppletThreadGroup
sun/applet/AppContextCreator
sun/applet/AppletPanel$1
@@ -2372,10 +2295,8 @@
sun/awt/X11/XMenuItemPeer
java/awt/MenuShortcut
sun/awt/X11/XMenuWindow
-sun/awt/X11/XMenuBarPeer$1
sun/awt/X11/XMenuItemPeer$TextMetrics
sun/awt/AppContext$3
-sun/awt/MostRecentThreadAppContext
sun/awt/X11/XMenuBarPeer$MappingData
sun/awt/X11/XBaseMenuWindow$MappingData
sun/applet/AppletViewer$1
--- a/jdk/make/tools/sharing/classlist.solaris Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/make/tools/sharing/classlist.solaris Wed Jul 05 17:39:50 2017 +0200
@@ -104,9 +104,7 @@
java/lang/ref/Reference$Lock
java/lang/ref/Reference$ReferenceHandler
java/lang/ref/Finalizer$FinalizerThread
-java/util/Hashtable$EmptyEnumerator
java/util/Enumeration
-java/util/Hashtable$EmptyIterator
java/util/Iterator
java/util/Hashtable$Entry
java/nio/charset/Charset
@@ -198,8 +196,6 @@
java/io/ExpiringCache$1
java/util/LinkedHashMap
java/util/LinkedHashMap$Entry
-java/io/File$1
-sun/misc/JavaIODeleteOnExitAccess
sun/misc/SharedSecrets
java/lang/ClassLoader$3
java/lang/StringCoding$StringEncoder
@@ -213,7 +209,6 @@
java/io/Console
java/io/Console$1
sun/misc/JavaIOAccess
-java/io/Console$1$1
java/lang/Shutdown
java/util/ArrayList
java/lang/Shutdown$Lock
@@ -332,7 +327,6 @@
java/beans/PropertyChangeEvent
java/util/EventObject
java/awt/Component$AWTTreeLock
-sun/awt/DebugHelper
sun/awt/NativeLibLoader
sun/security/action/LoadLibraryAction
java/awt/GraphicsEnvironment
@@ -343,7 +337,6 @@
java/lang/ProcessEnvironment$Value
java/lang/ProcessEnvironment$StringEnvironment
java/util/Collections$UnmodifiableMap
-sun/awt/DebugHelperStub
java/awt/Toolkit
java/awt/Toolkit$3
sun/util/CoreResourceBundleControl
@@ -393,9 +386,7 @@
sun/java2d/SunGraphicsEnvironment
sun/java2d/FontSupport
sun/awt/DisplayChangedListener
-sun/java2d/SunGraphicsEnvironment$TTFilter
java/io/FilenameFilter
-sun/java2d/SunGraphicsEnvironment$T1Filter
sun/awt/X11GraphicsEnvironment$1
sun/awt/SunToolkit
sun/awt/WindowClosingSupport
@@ -405,7 +396,6 @@
java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
java/util/concurrent/locks/Condition
sun/awt/AWTAutoShutdown
-sun/awt/AWTAutoShutdown$PeerMap
sun/awt/SunToolkit$6
java/awt/Dialog$ModalExclusionType
java/lang/Enum
@@ -426,7 +416,6 @@
java/util/HashMap$Values
java/util/HashMap$ValueIterator
java/util/HashMap$HashIterator
-sun/font/FontManager$1
java/awt/Font
java/awt/geom/AffineTransform
sun/font/AttributeValues
@@ -464,7 +453,6 @@
sun/java2d/Disposer
sun/java2d/Disposer$1
sun/font/StrikeCache$1
-sun/font/FontManager$FontRegistrationInfo
sun/awt/motif/MFontConfiguration
sun/awt/FontConfiguration
sun/awt/FontDescriptor
@@ -509,11 +497,8 @@
java/awt/image/PackedColorModel
java/awt/color/ColorSpace
java/awt/color/ICC_Profile
-sun/awt/color/ProfileDeferralInfo
-sun/awt/color/ProfileDeferralMgr
java/awt/color/ICC_ProfileRGB
java/awt/color/ICC_Profile$1
-sun/awt/color/ProfileActivator
java/awt/color/ICC_ColorSpace
sun/java2d/pipe/NullPipe
sun/java2d/pipe/PixelDrawPipe
@@ -536,8 +521,6 @@
sun/java2d/pipe/SpanClipRenderer
sun/java2d/pipe/Region
sun/java2d/pipe/RegionIterator
-sun/java2d/pipe/DuctusShapeRenderer
-sun/java2d/pipe/DuctusRenderer
sun/java2d/pipe/AlphaPaintPipe
sun/java2d/pipe/SpanShapeRenderer$Composite
sun/java2d/pipe/SpanShapeRenderer
@@ -611,7 +594,6 @@
sun/awt/X11/Native
sun/awt/X11/Native$1
java/awt/EventQueue
-sun/awt/X11/XToolkit$7
java/util/EmptyStackException
java/lang/reflect/InvocationTargetException
java/awt/EventDispatchThread
@@ -620,10 +602,7 @@
sun/awt/PeerEvent
java/awt/event/InvocationEvent
java/awt/ActiveEvent
-java/awt/EventQueueItem
sun/awt/X11/XToolkit$1
-sun/awt/X11/XToolkit$XErrorHandler
-sun/awt/X11/XToolkit$5
sun/awt/X11/XEventDispatcher
sun/awt/SunToolkit$ModalityListenerList
sun/awt/ModalityListener
@@ -635,21 +614,18 @@
java/util/Deque
java/util/Queue
java/util/AbstractSequentialList
-java/util/LinkedList$Entry
sun/awt/X11/AwtScreenData
sun/awt/X11/XWM
sun/awt/X11/MWMConstants
sun/awt/X11/XAtom
java/awt/Insets
sun/awt/X11/XWM$1
-sun/awt/X11/XWM$2
sun/awt/X11/XSetWindowAttributes
sun/awt/X11/XErrorEvent
sun/awt/X11/XNETProtocol
sun/awt/X11/XStateProtocol
sun/awt/X11/XLayerProtocol
sun/awt/X11/XProtocol
-sun/awt/X11/XProtocol$1
java/lang/Long$LongCache
sun/awt/X11/WindowPropertyGetter
sun/awt/X11/UnsafeXDisposerRecord
@@ -659,7 +635,6 @@
sun/awt/X11/XToolkit$3
java/awt/Window$WindowDisposerRecord
sun/awt/X11/XAnyEvent
-sun/awt/X11/IXAnyEvent
java/awt/KeyboardFocusManager
java/awt/KeyEventDispatcher
java/awt/KeyEventPostProcessor
@@ -669,7 +644,6 @@
java/awt/DefaultFocusTraversalPolicy
java/awt/ContainerOrderFocusTraversalPolicy
java/awt/FocusTraversalPolicy
-java/awt/MutableBoolean
java/util/Collections$UnmodifiableSet
sun/awt/HeadlessToolkit
sun/awt/X11/XKeyboardFocusManagerPeer
@@ -728,7 +702,6 @@
sun/java2d/x11/X11Renderer
sun/awt/X11/XGlobalCursorManager
sun/awt/GlobalCursorManager
-sun/awt/X11/XToolkit$6
java/awt/Cursor$CursorDisposer
java/awt/AWTException
java/awt/HeadlessException
@@ -760,7 +733,6 @@
java/awt/event/MouseMotionListener
java/awt/event/MouseWheelListener
java/awt/event/InputMethodListener
-java/awt/Component$NativeInLightFixer
java/awt/event/ContainerListener
javax/accessibility/AccessibleContext
sun/reflect/UnsafeObjectFieldAccessorImpl
@@ -845,7 +817,6 @@
javax/swing/SwingPaintEventDispatcher
sun/awt/PaintEventDispatcher
javax/swing/UIManager$2
-javax/swing/UIManager$3
java/awt/PopupMenu
java/awt/Menu
java/awt/MenuItem
@@ -941,8 +912,6 @@
javax/swing/plaf/LabelUI
javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1
javax/swing/plaf/basic/BasicHTML
-javax/swing/SystemEventQueueUtilities
-javax/swing/SystemEventQueueUtilities$SystemEventQueue
sun/awt/NullComponentPeer
java/awt/event/WindowEvent
java/awt/EventQueue$1
@@ -954,11 +923,8 @@
java/awt/event/ActionEvent
sun/awt/X11/XReparentEvent
sun/awt/X11/XWindowAttributes
-sun/awt/X11/ComponentAccessor
-sun/awt/X11/ComponentAccessor$1
sun/awt/EventQueueItem
sun/awt/SunToolkit$3
-javax/swing/SystemEventQueueUtilities$ComponentWorkRequest
java/applet/Applet
java/awt/Panel
com/sun/awt/AWTUtilities
@@ -974,17 +940,14 @@
sun/misc/ExtensionDependency
java/lang/Package
sun/security/util/ManifestEntryVerifier
-sun/security/provider/Sun
java/security/Provider
java/security/Provider$ServiceKey
java/security/Provider$EngineDescription
-sun/security/provider/Sun$1
java/security/Security
java/security/Security$1
sun/misc/FloatingDecimal
sun/misc/FloatingDecimal$1
java/util/regex/Pattern
-java/util/regex/Pattern$8
java/util/regex/Pattern$Node
java/util/regex/Pattern$LastNode
java/util/regex/Pattern$GroupHead
@@ -1068,7 +1031,6 @@
javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
javax/swing/text/StyleContext$NamedStyle
javax/swing/text/Style
-javax/swing/text/SimpleAttributeSet$1
javax/swing/text/StyleContext$SmallAttributeSet
javax/swing/text/AbstractDocument$BidiRootElement
javax/swing/text/AbstractDocument$BranchElement
@@ -1232,7 +1194,6 @@
sun/nio/cs/UTF_16$Decoder
sun/nio/cs/UnicodeDecoder
sun/font/FileFontStrike
-sun/font/FileFont$FileFontDisposer
sun/font/TrueTypeGlyphMapper
sun/font/CMap
sun/font/CMap$NullCMapClass
@@ -1242,17 +1203,9 @@
java/awt/FontFormatException
sun/java2d/HeadlessGraphicsEnvironment
java/nio/charset/Charset$3
-sun/nio/cs/ext/ExtendedCharsets
sun/nio/cs/AbstractCharsetProvider
-sun/nio/cs/ext/EUC_KR
-sun/nio/cs/ext/EUC_KR$Decoder
-sun/nio/cs/ext/DoubleByteDecoder
sun/font/NativeFont
-sun/nio/cs/ext/MS950
-sun/nio/cs/ext/MS950$Decoder
java/lang/CharacterData00
-sun/nio/cs/ext/GBK
-sun/nio/cs/ext/GBK$Decoder
sun/font/CMap$CMapFormat2
sun/font/FontDesignMetrics$KeyReference
sun/awt/image/PNGImageDecoder
@@ -1264,13 +1217,7 @@
java/awt/image/DataBufferInt
java/awt/image/SinglePixelPackedSampleModel
sun/awt/image/IntegerInterleavedRaster
-sun/java2d/x11/X11RemoteOffScreenImage
-sun/awt/image/RemoteOffScreenImage
sun/awt/image/OffScreenImage
-sun/java2d/x11/X11RemoteOffScreenImage$X11RemoteSurfaceManager
-sun/awt/image/OffScreenSurfaceManager
-sun/awt/image/CachingSurfaceManager
-sun/awt/image/RasterListener
sun/awt/image/BufImgSurfaceData
sun/java2d/opengl/GLXGraphicsConfig
sun/java2d/opengl/OGLGraphicsConfig
@@ -1278,7 +1225,6 @@
sun/awt/image/WritableRasterNative
sun/awt/image/DataBufferNative
sun/java2d/SurfaceManagerFactory
-sun/java2d/x11/X11CachingSurfaceManager
sun/java2d/opengl/GLXSurfaceData
sun/java2d/opengl/OGLSurfaceData
sun/font/CompositeGlyphMapper
@@ -1419,7 +1365,6 @@
javax/swing/ToolTipManager$insideTimerAction
javax/swing/ToolTipManager$outsideTimerAction
javax/swing/ToolTipManager$stillInsideTimerAction
-javax/swing/ToolTipManager$Actions
sun/swing/UIAction
javax/swing/Action
javax/swing/ToolTipManager$MoveBeforeEnterListener
@@ -1712,7 +1657,6 @@
javax/swing/JToolBar$Separator
javax/swing/plaf/basic/BasicToolBarSeparatorUI
sun/font/FontDesignMetrics$MetricsKey
-sun/awt/color/CMM
javax/swing/KeyboardManager$ComponentKeyStrokePair
sun/awt/EmbeddedFrame
sun/awt/im/InputMethodContext
@@ -1763,7 +1707,6 @@
sun/net/www/MimeTable
java/net/FileNameMap
sun/net/www/MimeTable$1
-sun/net/www/MimeTable$2
sun/net/www/MimeEntry
java/net/URLConnection$1
java/text/SimpleDateFormat
@@ -1785,7 +1728,6 @@
java/text/spi/DecimalFormatSymbolsProvider
java/util/Currency
java/util/Currency$1
-java/util/CurrencyData
java/util/spi/CurrencyNameProvider
sun/util/resources/CurrencyNames
sun/util/resources/CurrencyNames_en_US
@@ -1964,7 +1906,6 @@
javax/swing/tree/VariableHeightLayoutCache$TreeStateNode
javax/swing/tree/DefaultMutableTreeNode
javax/swing/tree/MutableTreeNode
-javax/swing/tree/DefaultMutableTreeNode$1
javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration
javax/swing/event/TableColumnModelEvent
java/text/ParseException
@@ -2019,7 +1960,6 @@
javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener
javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler
java/util/Hashtable$KeySet
-sun/java2d/SunGraphicsEnvironment$5
sun/font/Type1Font$1
java/nio/channels/FileChannel$MapMode
sun/nio/ch/FileChannelImpl$Unmapper
@@ -2134,7 +2074,6 @@
sun/security/jca/ProviderList$1
sun/security/jca/ProviderList$2
sun/security/jca/ProviderConfig$2
-sun/security/jca/ProviderConfig$4
sun/security/util/PropertyExpander
sun/security/jca/ProviderConfig$1
sun/security/jca/ProviderConfig$3
@@ -2192,7 +2131,6 @@
java/security/KeyFactory
sun/security/jca/ProviderList$ServiceList
sun/security/jca/ProviderList$ServiceList$1
-sun/security/rsa/SunRsaSign
sun/security/rsa/RSAKeyFactory
java/security/KeyFactorySpi
java/security/spec/RSAPublicKeySpec
@@ -2276,9 +2214,7 @@
java/io/NotSerializableException
java/io/ObjectStreamException
java/security/InvalidParameterException
-java/util/Collections$EmptySet$1
java/io/ObjectStreamClass$ClassDataSlot
-java/io/ObjectInputStream$CallbackContext
sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl
java/io/ObjectOutputStream$BlockDataOutputStream
java/io/ObjectOutputStream$HandleTable
@@ -2294,11 +2230,8 @@
java/security/spec/InvalidKeySpecException
java/security/spec/DSAParameterSpec
java/security/spec/AlgorithmParameterSpec
-javax/crypto/SecretKey
sun/security/util/MemoryCache$HardCacheEntry
java/awt/EventQueue$1AWTInvocationLock
-javax/swing/SystemEventQueueUtilities$RunnableCanvas
-javax/swing/SystemEventQueueUtilities$RunnableCanvasGraphics
java/awt/Component$FlipBufferStrategy
java/awt/SentEvent
sun/awt/X11/XDestroyWindowEvent
@@ -2331,18 +2264,14 @@
javax/swing/plaf/synth/SynthLookAndFeel$Handler
javax/swing/plaf/synth/SynthDefaultLookup
com/sun/java/swing/plaf/gtk/GTKEngine
-com/sun/java/swing/plaf/gtk/GTKNativeEngine
javax/swing/plaf/synth/Region
-com/sun/java/swing/plaf/gtk/GTKNativeEngine$WidgetType
com/sun/java/swing/plaf/gtk/GTKRegion
sun/swing/ImageCache
com/sun/java/swing/plaf/gtk/GTKEngine$Settings
com/sun/java/swing/plaf/gtk/GTKStyleFactory
com/sun/java/swing/plaf/gtk/PangoFonts
-sun/font/FontManager$FontConfigInfo
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$WeakPCL
javax/swing/plaf/synth/SynthLookAndFeel$AATextListener
-com/sun/java/swing/plaf/gtk/GTKNativeStyle
com/sun/java/swing/plaf/gtk/GTKStyle
com/sun/java/swing/plaf/gtk/GTKConstants
javax/swing/plaf/synth/SynthStyle
@@ -2370,7 +2299,6 @@
javax/swing/plaf/synth/SynthToggleButtonUI
javax/swing/plaf/basic/BasicBorders$FieldBorder
javax/swing/plaf/synth/SynthMenuBarUI
-javax/swing/plaf/synth/DefaultMenuLayout
javax/swing/plaf/synth/SynthMenuUI
javax/swing/plaf/synth/SynthUI
com/sun/java/swing/plaf/gtk/GTKIconFactory
@@ -2424,7 +2352,6 @@
javax/security/auth/AuthPermission
java/lang/Thread$1
java/util/logging/LogManager$5
-java/util/logging/LogManager$6
sun/applet/StdAppletViewerFactory
sun/applet/AppletViewerFactory
sun/applet/AppletViewer$UserActionListener
@@ -2435,7 +2362,6 @@
sun/applet/AppletPanel$10
java/security/Policy$1
sun/security/provider/PolicyFile$1
-sun/security/provider/PolicyInfo
sun/security/provider/PolicyFile$3
sun/security/provider/PolicyParser
sun/security/util/PolicyUtil
@@ -2444,12 +2370,10 @@
sun/security/provider/PolicyFile$PolicyEntry
sun/security/provider/PolicyFile$6
sun/security/provider/PolicyFile$7
-sun/security/provider/SelfPermission
java/net/SocketPermissionCollection
java/util/PropertyPermissionCollection
sun/applet/AppletPanel$9
sun/applet/AppletClassLoader
-sun/applet/AppletClassLoader$4
sun/applet/AppletThreadGroup
sun/applet/AppContextCreator
sun/applet/AppletPanel$1
@@ -2463,9 +2387,7 @@
sun/awt/X11/XMenuItemPeer
java/awt/MenuShortcut
sun/awt/X11/XMenuWindow
-sun/awt/X11/XMenuBarPeer$1
sun/awt/AppContext$3
-sun/awt/MostRecentThreadAppContext
sun/awt/X11/XMenuItemPeer$TextMetrics
sun/awt/X11/XMenuBarPeer$MappingData
sun/awt/X11/XBaseMenuWindow$MappingData
--- a/jdk/make/tools/sharing/classlist.windows Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/make/tools/sharing/classlist.windows Wed Jul 05 17:39:50 2017 +0200
@@ -104,9 +104,7 @@
java/lang/ref/Reference$Lock
java/lang/ref/Reference$ReferenceHandler
java/lang/ref/Finalizer$FinalizerThread
-java/util/Hashtable$EmptyEnumerator
java/util/Enumeration
-java/util/Hashtable$EmptyIterator
java/util/Iterator
java/util/Hashtable$Entry
sun/misc/Version
@@ -165,11 +163,9 @@
sun/reflect/NativeConstructorAccessorImpl
sun/reflect/DelegatingConstructorAccessorImpl
sun/misc/VM
-sun/nio/cs/MS1252$Encoder
sun/nio/cs/SingleByteEncoder
java/nio/charset/CharsetEncoder
java/nio/charset/CodingErrorAction
-sun/nio/cs/MS1252$Decoder
sun/nio/cs/SingleByteDecoder
java/nio/charset/CharsetDecoder
java/nio/ByteBuffer
@@ -195,8 +191,6 @@
java/io/ExpiringCache$1
java/util/LinkedHashMap
java/util/LinkedHashMap$Entry
-java/io/File$1
-sun/misc/JavaIODeleteOnExitAccess
sun/misc/SharedSecrets
java/lang/ClassLoader$3
java/io/ExpiringCache$Entry
@@ -209,7 +203,6 @@
java/io/Console
java/io/Console$1
sun/misc/JavaIOAccess
-java/io/Console$1$1
java/lang/Shutdown
java/util/ArrayList
java/lang/Shutdown$Lock
@@ -333,10 +326,8 @@
java/beans/PropertyChangeEvent
java/util/EventObject
java/awt/Component$AWTTreeLock
-sun/awt/DebugHelper
sun/awt/NativeLibLoader
sun/security/action/LoadLibraryAction
-sun/awt/DebugHelperStub
java/awt/Toolkit
java/awt/Toolkit$3
sun/util/CoreResourceBundleControl
@@ -402,9 +393,7 @@
sun/awt/Win32GraphicsEnvironment
sun/java2d/SunGraphicsEnvironment
sun/java2d/FontSupport
-sun/java2d/SunGraphicsEnvironment$TTFilter
java/io/FilenameFilter
-sun/java2d/SunGraphicsEnvironment$T1Filter
sun/awt/windows/WToolkit
sun/awt/SunToolkit
sun/awt/WindowClosingSupport
@@ -414,7 +403,6 @@
java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
java/util/concurrent/locks/Condition
sun/awt/AWTAutoShutdown
-sun/awt/AWTAutoShutdown$PeerMap
sun/awt/SunToolkit$6
java/awt/Dialog$ModalExclusionType
java/awt/Dialog
@@ -429,7 +417,6 @@
java/awt/peer/PanelPeer
sun/awt/windows/WCanvasPeer
java/awt/peer/CanvasPeer
-sun/awt/windows/WToolkit$5
java/awt/Color
java/awt/Paint
java/awt/Transparency
@@ -446,11 +433,8 @@
java/awt/event/MouseMotionListener
java/awt/event/MouseWheelListener
java/awt/event/InputMethodListener
-java/awt/EventQueueItem
-java/awt/Component$NativeInLightFixer
java/awt/event/ContainerListener
javax/accessibility/AccessibleContext
-sun/awt/windows/WToolkit$6
java/io/ObjectOutputStream
java/io/ObjectOutput
java/io/DataOutput
@@ -509,11 +493,8 @@
java/awt/image/PackedColorModel
java/awt/color/ColorSpace
java/awt/color/ICC_Profile
-sun/awt/color/ProfileDeferralInfo
-sun/awt/color/ProfileDeferralMgr
java/awt/color/ICC_ProfileRGB
java/awt/color/ICC_Profile$1
-sun/awt/color/ProfileActivator
java/awt/color/ICC_ColorSpace
sun/java2d/pipe/NullPipe
sun/java2d/pipe/PixelDrawPipe
@@ -536,8 +517,6 @@
sun/java2d/pipe/SpanClipRenderer
sun/java2d/pipe/Region
sun/java2d/pipe/RegionIterator
-sun/java2d/pipe/DuctusShapeRenderer
-sun/java2d/pipe/DuctusRenderer
sun/java2d/pipe/AlphaPaintPipe
sun/java2d/pipe/SpanShapeRenderer$Composite
sun/java2d/pipe/SpanShapeRenderer
@@ -552,10 +531,8 @@
sun/awt/image/SurfaceManager$ImageAccessor
sun/awt/image/SurfaceManager
sun/awt/image/VolatileSurfaceManager
-sun/java2d/windows/Win32OffScreenSurfaceData
sun/java2d/windows/WindowsFlags
sun/java2d/windows/WindowsFlags$1
-sun/java2d/windows/DDBlitLoops
sun/java2d/loops/Blit
sun/java2d/loops/GraphicsPrimitive
sun/java2d/loops/GraphicsPrimitiveMgr
@@ -599,11 +576,8 @@
sun/java2d/loops/GeneralRenderer
sun/java2d/loops/GraphicsPrimitiveMgr$1
sun/java2d/loops/GraphicsPrimitiveMgr$2
-sun/java2d/windows/Win32SurfaceData
sun/java2d/windows/GDIBlitLoops
sun/java2d/windows/GDIRenderer
-sun/java2d/windows/DDBlitLoops$DelegateBlitBgLoop
-sun/java2d/windows/DDRenderer
sun/awt/windows/WToolkit$1
sun/awt/SunDisplayChanger
sun/java2d/SunGraphicsEnvironment$1
@@ -615,7 +589,6 @@
java/util/HashMap$Values
java/util/HashMap$ValueIterator
java/util/HashMap$HashIterator
-sun/font/FontManager$1
sun/font/TrueTypeFont
java/awt/font/FontRenderContext
java/awt/RenderingHints
@@ -632,7 +605,6 @@
sun/java2d/Disposer
sun/java2d/Disposer$1
sun/font/StrikeCache$1
-sun/font/FontManager$FontRegistrationInfo
sun/awt/windows/WFontConfiguration
sun/awt/FontConfiguration
sun/awt/FontDescriptor
@@ -670,12 +642,10 @@
java/util/Deque
java/util/Queue
java/util/AbstractSequentialList
-java/util/LinkedList$Entry
java/awt/DefaultKeyboardFocusManager
java/awt/DefaultFocusTraversalPolicy
java/awt/ContainerOrderFocusTraversalPolicy
java/awt/FocusTraversalPolicy
-java/awt/MutableBoolean
java/util/Collections$UnmodifiableSet
sun/awt/HeadlessToolkit
sun/awt/KeyboardFocusManagerPeerImpl
@@ -690,7 +660,6 @@
java/awt/event/InvocationEvent
java/awt/ActiveEvent
java/awt/MenuComponent
-sun/awt/EventQueueItem
sun/awt/SunToolkit$3
java/util/EmptyStackException
java/lang/reflect/InvocationTargetException
@@ -857,7 +826,6 @@
javax/swing/RepaintManager$DisplayChangedHandler
javax/swing/SwingPaintEventDispatcher
javax/swing/UIManager$2
-javax/swing/UIManager$3
com/sun/swing/internal/plaf/metal/resources/metal
sun/util/ResourceBundleEnumeration
com/sun/swing/internal/plaf/basic/resources/basic
@@ -921,9 +889,6 @@
javax/swing/plaf/basic/BasicHTML
sun/awt/AppContext$PostShutdownEventRunnable
sun/awt/AWTAutoShutdown$1
-javax/swing/SystemEventQueueUtilities
-javax/swing/SystemEventQueueUtilities$ComponentWorkRequest
-javax/swing/SystemEventQueueUtilities$SystemEventQueue
sun/awt/NullComponentPeer
java/awt/GraphicsCallback$PaintCallback
java/awt/GraphicsCallback
@@ -942,17 +907,14 @@
sun/misc/ExtensionDependency
java/lang/Package
sun/security/util/ManifestEntryVerifier
-sun/security/provider/Sun
java/security/Provider
java/security/Provider$ServiceKey
java/security/Provider$EngineDescription
-sun/security/provider/Sun$1
java/security/Security
java/security/Security$1
sun/misc/FloatingDecimal
sun/misc/FloatingDecimal$1
java/util/regex/Pattern
-java/util/regex/Pattern$8
java/util/regex/Pattern$Node
java/util/regex/Pattern$LastNode
java/util/regex/Pattern$GroupHead
@@ -1034,7 +996,6 @@
javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
javax/swing/text/StyleContext$NamedStyle
javax/swing/text/Style
-javax/swing/text/SimpleAttributeSet$1
javax/swing/text/StyleContext$SmallAttributeSet
javax/swing/text/AbstractDocument$BidiRootElement
javax/swing/text/AbstractDocument$BranchElement
@@ -1153,7 +1114,6 @@
sun/nio/cs/UTF_16
sun/nio/cs/UTF_16$Decoder
sun/font/FileFontStrike
-sun/font/FileFont$FileFontDisposer
sun/font/TrueTypeGlyphMapper
sun/font/CMap
sun/font/CMap$NullCMapClass
@@ -1178,9 +1138,6 @@
sun/util/calendar/CalendarSystem
sun/awt/image/OffScreenImage
sun/java2d/SurfaceManagerFactory
-sun/java2d/windows/WinCachingSurfaceManager
-sun/awt/image/CachingSurfaceManager
-sun/awt/image/RasterListener
sun/util/calendar/Gregorian
sun/util/calendar/BaseCalendar
sun/util/calendar/AbstractCalendar
@@ -1297,7 +1254,6 @@
javax/swing/ToolTipManager$insideTimerAction
javax/swing/ToolTipManager$outsideTimerAction
javax/swing/ToolTipManager$stillInsideTimerAction
-javax/swing/ToolTipManager$Actions
sun/swing/UIAction
javax/swing/Action
javax/swing/ToolTipManager$MoveBeforeEnterListener
@@ -1665,7 +1621,6 @@
sun/net/www/MimeTable
java/net/FileNameMap
sun/net/www/MimeTable$1
-sun/net/www/MimeTable$2
sun/net/www/MimeEntry
java/net/URLConnection$1
java/text/SimpleDateFormat
@@ -1687,7 +1642,6 @@
java/text/spi/DecimalFormatSymbolsProvider
java/util/Currency
java/util/Currency$1
-java/util/CurrencyData
java/util/spi/CurrencyNameProvider
sun/util/resources/CurrencyNames
sun/util/resources/CurrencyNames_en_US
@@ -1707,7 +1661,6 @@
java/util/zip/CRC32
java/util/zip/Checksum
java/awt/TrayIcon
-java/awt/EventDispatchThread$StopDispatchEvent
java/lang/Thread$State
javax/swing/SwingUtilities$SharedOwnerFrame
javax/swing/JTable
@@ -1722,7 +1675,6 @@
javax/swing/JRadioButton
java/lang/ClassFormatError
sun/java2d/opengl/OGLGraphicsConfig
-sun/java2d/windows/WinVolatileSurfaceManager
java/awt/print/PrinterGraphics
java/awt/PrintGraphics
javax/swing/JTabbedPane
@@ -1863,7 +1815,6 @@
javax/swing/tree/VariableHeightLayoutCache$TreeStateNode
javax/swing/tree/DefaultMutableTreeNode
javax/swing/tree/MutableTreeNode
-javax/swing/tree/DefaultMutableTreeNode$1
javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration
javax/swing/event/TableColumnModelEvent
java/text/ParseException
@@ -1918,9 +1869,6 @@
javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler
sun/java2d/HeadlessGraphicsEnvironment
java/util/Hashtable$KeySet
-sun/font/FontManager$2
-sun/java2d/SunGraphicsEnvironment$2
-sun/java2d/SunGraphicsEnvironment$3
javax/swing/DefaultListModel
javax/swing/event/ListDataEvent
javax/sound/sampled/DataLine
@@ -1959,7 +1907,6 @@
sun/security/action/GetIntegerAction
sun/net/InetAddressCachePolicy$2
java/net/InetAddress$CacheEntry
-java/net/PlainDatagramSocketImpl
java/net/DatagramSocketImpl
java/text/Collator
java/text/spi/CollatorProvider
@@ -2030,7 +1977,6 @@
java/math/BigInteger
java/security/interfaces/DSAParams
java/io/ObjectStreamClass$ClassDataSlot
-java/io/ObjectInputStream$CallbackContext
java/io/ObjectStreamClass$4
java/io/ObjectStreamClass$5
java/security/MessageDigest
@@ -2076,8 +2022,6 @@
java/math/MutableBigInteger
java/math/SignedMutableBigInteger
java/awt/EventQueue$1AWTInvocationLock
-javax/swing/SystemEventQueueUtilities$RunnableCanvas
-javax/swing/SystemEventQueueUtilities$RunnableCanvasGraphics
java/awt/LightweightDispatcher$2
java/awt/Component$FlipBufferStrategy
javax/swing/JTable$2
@@ -2191,7 +2135,6 @@
javax/security/auth/AuthPermission
java/lang/Thread$1
java/util/logging/LogManager$5
-java/util/logging/LogManager$6
sun/applet/StdAppletViewerFactory
sun/applet/AppletViewerFactory
sun/applet/AppletViewer$UserActionListener
@@ -2202,7 +2145,6 @@
sun/applet/AppletPanel$10
java/security/Policy$1
sun/security/provider/PolicyFile$1
-sun/security/provider/PolicyInfo
sun/security/provider/PolicyFile$3
sun/security/util/PropertyExpander
sun/security/provider/PolicyParser
@@ -2214,17 +2156,14 @@
sun/security/provider/PolicyParser$ParsingException
sun/security/provider/PolicyFile$6
sun/security/provider/PolicyFile$7
-sun/security/provider/SelfPermission
java/net/SocketPermissionCollection
java/util/PropertyPermissionCollection
sun/applet/AppletPanel$9
sun/applet/AppletClassLoader
-sun/applet/AppletClassLoader$4
sun/applet/AppletThreadGroup
sun/applet/AppContextCreator
sun/applet/AppletPanel$1
sun/awt/AppContext$3
-sun/awt/MostRecentThreadAppContext
sun/awt/windows/WMenuBarPeer
java/awt/peer/MenuBarPeer
java/awt/peer/MenuComponentPeer
--- a/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties Wed Jul 05 17:39:50 2017 +0200
@@ -1,45 +1,68 @@
#
-# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2011, 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.
#
#
# COPYRIGHT AND PERMISSION NOTICE
#
-# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved.
+# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved.
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of the Unicode data files and any associated documentation (the "Data
-# Files") or Unicode software and any associated documentation (the
-# "Software") to deal in the Data Files or Software without restriction,
-# including without limitation the rights to use, copy, modify, merge,
-# publish, distribute, and/or sell copies of the Data Files or Software, and
-# to permit persons to whom the Data Files or Software are furnished to do
-# so, provided that (a) the above copyright notice(s) and this permission
-# notice appear with all copies of the Data Files or Software, (b) both the
-# above copyright notice(s) and this permission notice appear in associated
-# documentation, and (c) there is clear notice in each modified Data File or
-# in the Software as well as in the documentation associated with the Data
-# File(s) or Software that the data or software has been modified.
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of the Unicode data files and any associated documentation (the
+# "Data Files") or Unicode software and any associated documentation
+# (the "Software") to deal in the Data Files or Software without
+# restriction, including without limitation the rights to use, copy,
+# modify, merge, publish, distribute, and/or sell copies of the Data
+# Files or Software, and to permit persons to whom the Data Files or
+# Software are furnished to do so, provided that (a) the above copyright
+# notice(s) and this permission notice appear with all copies of the
+# Data Files or Software, (b) both the above copyright notice(s) and
+# this permission notice appear in associated documentation, and (c)
+# there is clear notice in each modified Data File or in the Software as
+# well as in the documentation associated with the Data File(s) or
+# Software that the data or software has been modified.
#
-# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
-# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
-# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR
+# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
+# SOFTWARE.
#
-# Except as contained in this notice, the name of a copyright holder shall not
-# be used in advertising or otherwise to promote the sale, use or other
-# dealings in these Data Files or Software without prior written
-# authorization of the copyright holder.
+# Except as contained in this notice, the name of a copyright holder
+# shall not be used in advertising or otherwise to promote the sale, use
+# or other dealings in these Data Files or Software without prior
+# written authorization of the copyright holder.
+
#
-
# Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
+#
ADP=ADP
AED=AED
AFA=AFA
@@ -254,52 +277,52 @@
ZWN=ZWN
adp=Andorran Peseta
aed=United Arab Emirates Dirham
-afa=Afghani (1927-2002)
-afn=Afghani
+afa=Afghan Afghani (1927-2002)
+afn=Afghan Afghani
all=Albanian Lek
amd=Armenian Dram
-ang=Netherlands Antillan Guilder
+ang=Netherlands Antillean Guilder
aoa=Angolan Kwanza
ars=Argentine Peso
ats=Austrian Schilling
aud=Australian Dollar
-awg=Aruban Guilder
-azm=Azerbaijanian Manat (1993-2006)
-azn=Azerbaijanian Manat
+awg=Aruban Florin
+azm=Azerbaijani Manat (1993-2006)
+azn=Azerbaijani Manat
bam=Bosnia-Herzegovina Convertible Mark
-bbd=Barbados Dollar
-bdt=Bangladesh Taka
+bbd=Barbadian Dollar
+bdt=Bangladeshi Taka
bef=Belgian Franc
bgl=Bulgarian Hard Lev
-bgn=Bulgarian New Lev
+bgn=Bulgarian Lev
bhd=Bahraini Dinar
-bif=Burundi Franc
+bif=Burundian Franc
bmd=Bermudan Dollar
bnd=Brunei Dollar
-bob=Boliviano
+bob=Bolivian Boliviano
bov=Bolivian Mvdol
brl=Brazilian Real
bsd=Bahamian Dollar
-btn=Bhutan Ngultrum
+btn=Bhutanese Ngultrum
bwp=Botswanan Pula
-byb=Belarussian New Ruble (1994-1999)
-byr=Belarussian Ruble
+byb=Belarusian New Ruble (1994-1999)
+byr=Belarusian Ruble
bzd=Belize Dollar
cad=Canadian Dollar
-cdf=Congolese Franc Congolais
+cdf=Congolese Franc
chf=Swiss Franc
-clf=Chilean Unidades de Fomento
+clf=Chilean Unit of Account (UF)
clp=Chilean Peso
-cny=Chinese Yuan Renminbi
+cny=Chinese Yuan
cop=Colombian Peso
-crc=Costa Rican Colon
-csd=Serbian Dinar
+crc=Costa Rican Col\u00f3n
+csd=Serbian Dinar (2002-2006)
cup=Cuban Peso
-cve=Cape Verde Escudo
-cyp=Cyprus Pound
+cve=Cape Verdean Escudo
+cyp=Cypriot Pound
czk=Czech Republic Koruna
-dem=Deutsche Mark
-djf=Djibouti Franc
+dem=German Mark
+djf=Djiboutian Franc
dkk=Danish Krone
dop=Dominican Peso
dzd=Algerian Dinar
@@ -310,22 +333,22 @@
etb=Ethiopian Birr
eur=Euro
fim=Finnish Markka
-fjd=Fiji Dollar
+fjd=Fijian Dollar
fkp=Falkland Islands Pound
frf=French Franc
gbp=British Pound Sterling
gel=Georgian Lari
-ghc=Ghana Cedi
-ghs=Ghana Cedi
+ghc=Ghanaian Cedi (1979-2007)
+ghs=Ghanaian Cedi
gip=Gibraltar Pound
-gmd=Gambia Dalasi
-gnf=Guinea Franc
+gmd=Gambian Dalasi
+gnf=Guinean Franc
grd=Greek Drachma
-gtq=Guatemala Quetzal
+gtq=Guatemalan Quetzal
gwp=Guinea-Bissau Peso
-gyd=Guyana Dollar
+gyd=Guyanaese Dollar
hkd=Hong Kong Dollar
-hnl=Hoduras Lempira
+hnl=Honduran Lempira
hrk=Croatian Kuna
htg=Haitian Gourde
huf=Hungarian Forint
@@ -335,110 +358,111 @@
inr=Indian Rupee
iqd=Iraqi Dinar
irr=Iranian Rial
-isk=Icelandic Krona
+isk=Icelandic Kr\u00f3na
itl=Italian Lira
jmd=Jamaican Dollar
jod=Jordanian Dinar
jpy=Japanese Yen
kes=Kenyan Shilling
-kgs=Kyrgystan Som
+kgs=Kyrgystani Som
khr=Cambodian Riel
-kmf=Comoro Franc
+kmf=Comorian Franc
kpw=North Korean Won
krw=South Korean Won
kwd=Kuwaiti Dinar
kyd=Cayman Islands Dollar
-kzt=Kazakhstan Tenge
+kzt=Kazakhstani Tenge
lak=Laotian Kip
lbp=Lebanese Pound
-lkr=Sri Lanka Rupee
+lkr=Sri Lankan Rupee
lrd=Liberian Dollar
lsl=Lesotho Loti
-ltl=Lithuanian Lita
-luf=Luxembourg Franc
+ltl=Lithuanian Litas
+luf=Luxembourgian Franc
lvl=Latvian Lats
lyd=Libyan Dinar
mad=Moroccan Dirham
mdl=Moldovan Leu
-mga=Madagascar Ariary
-mgf=Madagascar Franc
+mga=Malagasy Ariary
+mgf=Malagasy Franc
mkd=Macedonian Denar
-mmk=Myanmar Kyat
+mmk=Myanma Kyat
mnt=Mongolian Tugrik
-mop=Macao Pataca
-mro=Mauritania Ouguiya
+mop=Macanese Pataca
+mro=Mauritanian Ouguiya
mtl=Maltese Lira
-mur=Mauritius Rupee
-mvr=Maldive Islands Rufiyaa
-mwk=Malawi Kwacha
+mur=Mauritian Rupee
+mvr=Maldivian Rufiyaa
+mwk=Malawian Kwacha
mxn=Mexican Peso
-mxv=Mexican Unidad de Inversion (UDI)
+mxv=Mexican Investment Unit
myr=Malaysian Ringgit
-mzm=Old Mozambique Metical
-mzn=Mozambique Metical
-nad=Namibia Dollar
+mzm=Mozambican Metical (1980-2006)
+mzn=Mozambican Metical
+nad=Namibian Dollar
ngn=Nigerian Naira
-nio=Nicaraguan Cordoba Oro
-nlg=Netherlands Guilder
+nio=Nicaraguan C\u00f3rdoba
+nlg=Dutch Guilder
nok=Norwegian Krone
npr=Nepalese Rupee
nzd=New Zealand Dollar
-omr=Oman Rial
+omr=Omani Rial
pab=Panamanian Balboa
-pen=Peruvian Sol Nuevo
-pgk=Papua New Guinea Kina
+pen=Peruvian Nuevo Sol
+pgk=Papua New Guinean Kina
php=Philippine Peso
-pkr=Pakistan Rupee
+pkr=Pakistani Rupee
pln=Polish Zloty
pte=Portuguese Escudo
-pyg=Paraguay Guarani
+pyg=Paraguayan Guarani
qar=Qatari Rial
-rol=Old Romanian Leu
+rol=Romanian Leu (1952-2006)
ron=Romanian Leu
+rsd=Serbian Dinar
rub=Russian Ruble
rur=Russian Ruble (1991-1998)
rwf=Rwandan Franc
sar=Saudi Riyal
sbd=Solomon Islands Dollar
-scr=Seychelles Rupee
-sdd=Sudanese Dinar
+scr=Seychellois Rupee
+sdd=Sudanese Dinar (1992-2007)
sdg=Sudanese Pound
sek=Swedish Krona
sgd=Singapore Dollar
shp=Saint Helena Pound
-sit=Slovenia Tolar
+sit=Slovenian Tolar
skk=Slovak Koruna
-sll=Sierra Leone Leone
+sll=Sierra Leonean Leone
sos=Somali Shilling
-srd=Surinam Dollar
-srg=Suriname Guilder
-std=Sao Tome and Principe Dobra
-svc=El Salvador Colon
+srd=Surinamese Dollar
+srg=Surinamese Guilder
+std=S\u00e3o Tom\u00e9 and Pr\u00edncipe Dobra
+svc=Salvadoran Col\u00f3n
syp=Syrian Pound
-szl=Swaziland Lilangeni
+szl=Swazi Lilangeni
thb=Thai Baht
-tjs=Tajikistan Somoni
-tmm=Turkmenistan Manat
+tjs=Tajikistani Somoni
+tmm=Turkmenistani Manat (1993-2009)
tnd=Tunisian Dinar
-top=Tonga Pa\u02bbanga
-tpe=Timor Escudo
-trl=Turkish Lira
-try=New Turkish Lira
+top=Tongan Pa\u02bbanga
+tpe=Timorese Escudo
+trl=Turkish Lira (1922-2005)
+try=Turkish Lira
ttd=Trinidad and Tobago Dollar
-twd=Taiwan New Dollar
+twd=New Taiwan Dollar
tzs=Tanzanian Shilling
uah=Ukrainian Hryvnia
ugx=Ugandan Shilling
usd=US Dollar
usn=US Dollar (Next day)
uss=US Dollar (Same day)
-uyu=Uruguay Peso Uruguayo
-uzs=Uzbekistan Sum
-veb=Venezuelan Bolivar
-vef=Venezuelan Bolivar Fuerte
+uyu=Uruguayan Peso
+uzs=Uzbekistan Som
+veb=Venezuelan Bol\u00edvar (1871-2008)
+vef=Venezuelan Bol\u00edvar
vnd=Vietnamese Dong
vuv=Vanuatu Vatu
-wst=Western Samoa Tala
+wst=Samoan Tala
xaf=CFA Franc BEAC
xag=Silver
xau=Gold
@@ -455,9 +479,9 @@
xpf=CFP Franc
xpt=Platinum
xts=Testing Currency Code
-xxx=No Currency
+xxx=Unknown Currency
yer=Yemeni Rial
-yum=Yugoslavian Noviy Dinar
+yum=Yugoslavian New Dinar (1994-2002)
zar=South African Rand
zmk=Zambian Kwacha
-zwd=Zimbabwe Dollar
+zwd=Zimbabwean Dollar (1980-2008)
--- a/jdk/src/share/classes/sun/util/resources/CurrencyNames_pt.properties Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/src/share/classes/sun/util/resources/CurrencyNames_pt.properties Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,26 @@
#
# Copyright (c) 2005, 2011, 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.
#
#
@@ -8,38 +29,40 @@
# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved.
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of the Unicode data files and any associated documentation (the "Data
-# Files") or Unicode software and any associated documentation (the
-# "Software") to deal in the Data Files or Software without restriction,
-# including without limitation the rights to use, copy, modify, merge,
-# publish, distribute, and/or sell copies of the Data Files or Software, and
-# to permit persons to whom the Data Files or Software are furnished to do
-# so, provided that (a) the above copyright notice(s) and this permission
-# notice appear with all copies of the Data Files or Software, (b) both the
-# above copyright notice(s) and this permission notice appear in associated
-# documentation, and (c) there is clear notice in each modified Data File or
-# in the Software as well as in the documentation associated with the Data
-# File(s) or Software that the data or software has been modified.
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of the Unicode data files and any associated documentation (the
+# "Data Files") or Unicode software and any associated documentation
+# (the "Software") to deal in the Data Files or Software without
+# restriction, including without limitation the rights to use, copy,
+# modify, merge, publish, distribute, and/or sell copies of the Data
+# Files or Software, and to permit persons to whom the Data Files or
+# Software are furnished to do so, provided that (a) the above copyright
+# notice(s) and this permission notice appear with all copies of the
+# Data Files or Software, (b) both the above copyright notice(s) and
+# this permission notice appear in associated documentation, and (c)
+# there is clear notice in each modified Data File or in the Software as
+# well as in the documentation associated with the Data File(s) or
+# Software that the data or software has been modified.
#
-# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
-# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
-# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR
+# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
+# SOFTWARE.
#
-# Except as contained in this notice, the name of a copyright holder shall not
-# be used in advertising or otherwise to promote the sale, use or other
-# dealings in these Data Files or Software without prior written
-# authorization of the copyright holder.
+# Except as contained in this notice, the name of a copyright holder
+# shall not be used in advertising or otherwise to promote the sale, use
+# or other dealings in these Data Files or Software without prior
+# written authorization of the copyright holder.
+
#
-
# Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
+#
adp=Peseta de Andorra
aed=Dir\u00e9m dos Emirados \u00c1rabes Unidos
afa=Afegane (1927-2002)
--- a/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_Latn_BA.properties Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_Latn_BA.properties Wed Jul 05 17:39:50 2017 +0200
@@ -64,6 +64,6 @@
# Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
#
BAM=KM
-bam=bosansko-hercegova\u010dkih konvertibilnih maraka
+bam=Bosansko-Hercegova\u010dka konvertibilna marka
EUR=\u20ac
-eur=evra
+eur=Evro
--- a/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_Latn_ME.properties Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_Latn_ME.properties Wed Jul 05 17:39:50 2017 +0200
@@ -64,4 +64,4 @@
# Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
#
EUR=\u20ac
-eur=evra
+eur=Evro
--- a/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_Latn_RS.properties Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_Latn_RS.properties Wed Jul 05 17:39:50 2017 +0200
@@ -64,4 +64,4 @@
# Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
#
RSD=din.
-rsd=srpski dinari
+rsd=Srpski dinar
--- a/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_RS.properties Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_RS.properties Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,26 @@
#
# Copyright (c) 2005, 2011, 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.
#
#
@@ -8,36 +29,38 @@
# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved.
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of the Unicode data files and any associated documentation (the "Data
-# Files") or Unicode software and any associated documentation (the
-# "Software") to deal in the Data Files or Software without restriction,
-# including without limitation the rights to use, copy, modify, merge,
-# publish, distribute, and/or sell copies of the Data Files or Software, and
-# to permit persons to whom the Data Files or Software are furnished to do
-# so, provided that (a) the above copyright notice(s) and this permission
-# notice appear with all copies of the Data Files or Software, (b) both the
-# above copyright notice(s) and this permission notice appear in associated
-# documentation, and (c) there is clear notice in each modified Data File or
-# in the Software as well as in the documentation associated with the Data
-# File(s) or Software that the data or software has been modified.
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of the Unicode data files and any associated documentation (the
+# "Data Files") or Unicode software and any associated documentation
+# (the "Software") to deal in the Data Files or Software without
+# restriction, including without limitation the rights to use, copy,
+# modify, merge, publish, distribute, and/or sell copies of the Data
+# Files or Software, and to permit persons to whom the Data Files or
+# Software are furnished to do so, provided that (a) the above copyright
+# notice(s) and this permission notice appear with all copies of the
+# Data Files or Software, (b) both the above copyright notice(s) and
+# this permission notice appear in associated documentation, and (c)
+# there is clear notice in each modified Data File or in the Software as
+# well as in the documentation associated with the Data File(s) or
+# Software that the data or software has been modified.
#
-# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
-# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
-# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR
+# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
+# SOFTWARE.
#
-# Except as contained in this notice, the name of a copyright holder shall not
-# be used in advertising or otherwise to promote the sale, use or other
-# dealings in these Data Files or Software without prior written
-# authorization of the copyright holder.
+# Except as contained in this notice, the name of a copyright holder
+# shall not be used in advertising or otherwise to promote the sale, use
+# or other dealings in these Data Files or Software without prior
+# written authorization of the copyright holder.
+
#
-
# Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
+#
RSD=\u0434\u0438\u043d.
--- a/jdk/src/share/demo/jfc/Font2DTest/README.txt Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/src/share/demo/jfc/Font2DTest/README.txt Wed Jul 05 17:39:50 2017 +0200
@@ -7,7 +7,7 @@
or
% appletviewer Font2DTest.html
-These instructions assume that the 1.5 versions of the java
+These instructions assume that the 1.7 versions of the java
and appletviewer commands are in your path. If they aren't,
then you should either specify the complete path to the commands
or update your PATH environment variable as described in the
--- a/jdk/src/share/demo/jfc/Font2DTest/RangeMenu.java Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/src/share/demo/jfc/Font2DTest/RangeMenu.java Wed Jul 05 17:39:50 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -41,6 +41,9 @@
import javax.swing.*;
+import java.util.*;
+import java.util.regex.*;
+
/**
* RangeMenu.java
*
@@ -52,358 +55,8 @@
public final class RangeMenu extends JComboBox implements ActionListener {
- /// Painfully extracted from java.lang.Character.UnicodeBlock. Arrrgh!
- /// Unicode 5.1.0 data.
-
- private final int[][] UNICODE_RANGES = {
- { 0x000000, 0x00007f }, /// BASIC_LATIN
- { 0x000080, 0x0000ff }, /// LATIN_1_SUPPLEMENT
- { 0x000100, 0x00017f }, /// LATIN_EXTENDED_A
- { 0x000180, 0x00024f }, /// LATIN_EXTENDED_B
- { 0x000250, 0x0002af }, /// IPA_EXTENSIONS
- { 0x0002b0, 0x0002ff }, /// SPACING_MODIFIER_LETTERS
- { 0x000300, 0x00036f }, /// COMBINING_DIACRITICAL_MARKS
- { 0x000370, 0x0003ff }, /// GREEK_AND_COPTIC
- { 0x000400, 0x0004ff }, /// CYRILLIC
- { 0x000500, 0x00052f }, /// CYRILLIC_SUPPLEMENTARY
- { 0x000530, 0x00058f }, /// ARMENIAN
- { 0x000590, 0x0005ff }, /// HEBREW
- { 0x000600, 0x0006ff }, /// ARABIC
- { 0x000700, 0x00074f }, /// SYRIAC
- { 0x000750, 0x00077f }, /// ARABIC_SUPPLEMENT
- { 0x000780, 0x0007bf }, /// THAANA
- { 0x0007c0, 0x0007ff }, /// NKO
- { 0x000900, 0x00097f }, /// DEVANAGARI
- { 0x000980, 0x0009ff }, /// BENGALI
- { 0x000a00, 0x000a7f }, /// GURMUKHI
- { 0x000a80, 0x000aff }, /// GUJARATI
- { 0x000b00, 0x000b7f }, /// ORIYA
- { 0x000b80, 0x000bff }, /// TAMIL
- { 0x000c00, 0x000c7f }, /// TELUGU
- { 0x000c80, 0x000cff }, /// KANNADA
- { 0x000d00, 0x000d7f }, /// MALAYALAM
- { 0x000d80, 0x000dff }, /// SINHALA
- { 0x000e00, 0x000e7f }, /// THAI
- { 0x000e80, 0x000eff }, /// LAO
- { 0x000f00, 0x000fff }, /// TIBETAN
- { 0x001000, 0x00109f }, /// MYANMAR
- { 0x0010a0, 0x0010ff }, /// GEORGIAN
- { 0x001100, 0x0011ff }, /// HANGUL_JAMO
- { 0x001200, 0x00137f }, /// ETHIOPIC
- { 0x001380, 0x00139f }, /// ETHIOPIC_SUPPLEMENT
- { 0x0013a0, 0x0013ff }, /// CHEROKEE
- { 0x001400, 0x00167f }, /// UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS
- { 0x001680, 0x00169f }, /// OGHAM
- { 0x0016a0, 0x0016ff }, /// RUNIC
- { 0x001700, 0x00171f }, /// TAGALOG
- { 0x001720, 0x00173f }, /// HANUNOO
- { 0x001740, 0x00175f }, /// BUHID
- { 0x001760, 0x00177f }, /// TAGBANWA
- { 0x001780, 0x0017ff }, /// KHMER
- { 0x001800, 0x0018af }, /// MONGOLIAN
- { 0x001900, 0x00194f }, /// LIMBU
- { 0x001950, 0x00197f }, /// TAI_LE
- { 0x001980, 0x0019df }, /// NEW_TAI_LE
- { 0x0019e0, 0x0019ff }, /// KHMER_SYMBOLS
- { 0x001a00, 0x001a1f }, /// BUGINESE
- { 0x001b00, 0x001b7f }, /// BALINESE
- { 0x001b80, 0x001bbf }, /// SUNDANESE
- { 0x001c00, 0x001c4f }, /// LEPCHA
- { 0x001c50, 0x001c7f }, /// OL_CHIKI
- { 0x001d00, 0x001d7f }, /// PHONETIC_EXTENSIONS
- { 0x001d80, 0x001dbf }, /// PHONEITC EXTENSIONS SUPPLEMENT
- { 0x001dc0, 0x001dff }, /// COMBINING_DIACRITICAL_MAKRS_SUPPLEMENT
- { 0x001e00, 0x001eff }, /// LATIN_EXTENDED_ADDITIONAL
- { 0x001f00, 0x001fff }, /// GREEK_EXTENDED
- { 0x002000, 0x00206f }, /// GENERAL_PUNCTUATION
- { 0x002070, 0x00209f }, /// SUPERSCRIPTS_AND_SUBSCRIPTS
- { 0x0020a0, 0x0020cf }, /// CURRENCY_SYMBOLS
- { 0x0020d0, 0x0020ff }, /// COMBINING_MARKS_FOR_SYMBOLS
- { 0x002100, 0x00214f }, /// LETTERLIKE_SYMBOLS
- { 0x002150, 0x00218f }, /// NUMBER_FORMS
- { 0x002190, 0x0021ff }, /// ARROWS
- { 0x002200, 0x0022ff }, /// MATHEMATICAL_OPERATORS
- { 0x002300, 0x0023ff }, /// MISCELLANEOUS_TECHNICAL
- { 0x002400, 0x00243f }, /// CONTROL_PICTURES
- { 0x002440, 0x00245f }, /// OPTICAL_CHARACTER_RECOGNITION
- { 0x002460, 0x0024ff }, /// ENCLOSED_ALPHANUMERICS
- { 0x002500, 0x00257f }, /// BOX_DRAWING
- { 0x002580, 0x00259f }, /// BLOCK_ELEMENTS
- { 0x0025a0, 0x0025ff }, /// GEOMETRIC_SHAPES
- { 0x002600, 0x0026ff }, /// MISCELLANEOUS_SYMBOLS
- { 0x002700, 0x0027bf }, /// DINGBATS
- { 0x0027c0, 0x0027ef }, /// MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A
- { 0x0027f0, 0x0027ff }, /// SUPPLEMENTAL_ARROWS_A
- { 0x002800, 0x0028ff }, /// BRAILLE_PATTERNS
- { 0x002900, 0x00297f }, /// SUPPLEMENTAL_ARROWS_B
- { 0x002980, 0x0029ff }, /// MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B
- { 0x002a00, 0x002aff }, /// SUPPLEMENTAL_MATHEMATICAL_OPERATORS
- { 0x002b00, 0x002bff }, /// MISCELLANEOUS_SYMBOLS_AND_ARROWS
- { 0x002c00, 0x002c5f }, /// GLAGOLITIC
- { 0x002c60, 0x002c7f }, /// LATIN_EXTENDED-C
- { 0x002c80, 0x002cff }, /// COPTIC
- { 0x002d00, 0x002d2f }, /// GEORGIAN_SUPPLEMENT
- { 0x002d30, 0x002d7f }, /// TIFINAGH
- { 0x002d80, 0x002ddf }, /// ETHIOPIC_EXTENDED
- { 0x002de0, 0x002dff }, /// CYRILLIC_EXTENDED-A
- { 0x002e00, 0x002e7f }, /// SUPPLEMENTAL_PUNCTUATION
- { 0x002e80, 0x002eff }, /// CJK_RADICALS_SUPPLEMENT
- { 0x002f00, 0x002fdf }, /// KANGXI_RADICALS
- { 0x002ff0, 0x002fff }, /// IDEOGRAPHIC_DESCRIPTION_CHARACTERS
- { 0x003000, 0x00303f }, /// CJK_SYMBOLS_AND_PUNCTUATION
- { 0x003040, 0x00309f }, /// HIRAGANA
- { 0x0030a0, 0x0030ff }, /// KATAKANA
- { 0x003100, 0x00312f }, /// BOPOMOFO
- { 0x003130, 0x00318f }, /// HANGUL_COMPATIBILITY_JAMO
- { 0x003190, 0x00319f }, /// KANBUN
- { 0x0031a0, 0x0031bf }, /// BOPOMOFO_EXTENDED
- { 0x0031c0, 0x0031ef }, /// CJK_STROKES
- { 0x0031f0, 0x0031ff }, /// KATAKANA_PHONETIC_EXTENSIONS
- { 0x003200, 0x0032ff }, /// ENCLOSED_CJK_LETTERS_AND_MONTHS
- { 0x003300, 0x0033ff }, /// CJK_COMPATIBILITY
- { 0x003400, 0x004dbf }, /// CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
- { 0x004dc0, 0x004dff }, /// YIJING_HEXAGRAM_SYMBOLS
- { 0x004e00, 0x009fff }, /// CJK_UNIFIED_IDEOGRAPHS
- { 0x00a000, 0x00a48f }, /// YI_SYLLABLES
- { 0x00a490, 0x00a4cf }, /// YI_RADICALS
- { 0x00a500, 0x00a63f }, /// YAI
- { 0x00a640, 0x00a69f }, /// CYRILLIC_EXTENDED-B
- { 0x00a700, 0x00a71f }, /// MODIFIER_TONE_LETTERS
- { 0x00a720, 0x00a7ff }, /// LATIN_EXTENDED-D
- { 0x00a800, 0x00a82f }, /// SYLOTI_NAGRI
- { 0x00a840, 0x00a87f }, /// PHAGS-PA
- { 0x00a880, 0x00a8df }, /// SAURASHTRA
- { 0x00a900, 0x00a92f }, /// KAYAH_LI
- { 0x00a930, 0x00a95f }, /// REJANG
- { 0x00aa00, 0x00aa5f }, /// CHAM
- { 0x00ac00, 0x00d7af }, /// HANGUL_SYLLABLES
- { 0x00d800, 0x00db7f }, /// HIGH_SURROGATES_AREA
- { 0x00db80, 0x00dbff }, /// HIGH_PRIVATE_USE_SURROGATES_AREA
- { 0x00dc00, 0x00dfff }, /// LOW_SURROGATES_AREA
- { 0x00e000, 0x00f8ff }, /// PRIVATE_USE_AREA
- { 0x00f900, 0x00faff }, /// CJK_COMPATIBILITY_IDEOGRAPHS
- { 0x00fb00, 0x00fb4f }, /// ALPHABETIC_PRESENTATION_FORMS
- { 0x00fb50, 0x00fdff }, /// ARABIC_PRESENTATION_FORMS_A
- { 0x00fe00, 0x00fe0f }, /// VARIATION_SELECTORS
- { 0x00fe10, 0x00fe1f }, /// VERTICAL_FORMS
- { 0x00fe20, 0x00fe2f }, /// COMBINING_HALF_MARKS
- { 0x00fe30, 0x00fe4f }, /// CJK_COMPATIBILITY_FORMS
- { 0x00fe50, 0x00fe6f }, /// SMALL_FORM_VARIANTS
- { 0x00fe70, 0x00feff }, /// ARABIC_PRESENTATION_FORMS_B
- { 0x00ff00, 0x00ffef }, /// HALFWIDTH_AND_FULLWIDTH_FORMS
- { 0x00fff0, 0x00ffff }, /// SPECIALS
- { 0x010000, 0x01007f }, /// LINEAR_B_SYLLABARY
- { 0x010080, 0x0100ff }, /// LINEAR_B_IDEOGRAMS
- { 0x010100, 0x01013f }, /// AEGEAN_NUMBERS
- { 0x010140, 0x01018f }, /// ANCIENT_GREEK_NUMBERS
- { 0x010190, 0x0101cf }, /// ANCIENT_SYMBOLS
- { 0x0101d0, 0x0101ff }, /// PHAISTOS_DISC
- { 0x010280, 0x01029f }, /// LYCIAN
- { 0x0102a0, 0x0102df }, /// CARIAN
- { 0x010300, 0x01032f }, /// OLD_ITALIC
- { 0x010330, 0x01034f }, /// GOTHIC
- { 0x010380, 0x01039f }, /// UGARITIC
- { 0x0103a0, 0x0103df }, /// OLD_PERSIAN
- { 0x010400, 0x01044f }, /// DESERET
- { 0x010450, 0x01047f }, /// SHAVIAN
- { 0x010480, 0x0104af }, /// OSMANYA
- { 0x010800, 0x01083f }, /// CYPRIOT_SYLLABARY
- { 0x010900, 0x01091f }, /// PHOENICIAN
- { 0x010920, 0x01093f }, /// LYDIAN
- { 0x010a00, 0x010a5f }, /// KHAROSHTHI
- { 0x012000, 0x0123ff }, /// CUNEIFORM
- { 0x012400, 0x01247f }, /// CUNEIFORM_NUMBERS_AND_PUNCTUATION
- { 0x01d000, 0x01d0ff }, /// BYZANTINE_MUSICAL_SYMBOLS
- { 0x01d100, 0x01d1ff }, /// MUSICAL_SYMBOLS
- { 0x01d200, 0x01d24f }, /// ANCIENT_GREEK_MUSICAL_NOTATION
- { 0x01d300, 0x01d35f }, /// TAI_XUAN_JING_SYMBOLS
- { 0x01d360, 0x01d37f }, /// COUNTING_ROD_NUMERALS
- { 0x01d400, 0x01d7ff }, /// MATHEMATICAL_ALPHANUMERIC_SYMBOLS
- { 0x01f000, 0x01f02f }, /// MAHJONG_TILES
- { 0x01f030, 0x01f09f }, /// DOMINO_TILES
- { 0x020000, 0x02a6df }, /// CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
- { 0x02f800, 0x02fa1f }, /// CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT
- { 0x0e0000, 0x0e007f }, /// TAGS
- { 0x0e0100, 0x0e01ef }, /// VARIATION_SELECTORS_SUPPLEMENT
- { 0x0f0000, 0x0fffff }, /// SUPPLEMENTARY_PRIVATE_USE_AREA_A
- { 0x100000, 0x10ffff }, /// SUPPLEMENTARY_PRIVATE_USE_AREA_B
- { 0x000000, 0x00007f }, /// OTHER [USER DEFINED RANGE]
- };
-
- private final String[] UNICODE_RANGE_NAMES = {
- "Basic Latin",
- "Latin-1 Supplement",
- "Latin Extended-A",
- "Latin Extended-B",
- "IPA Extensions",
- "Spacing Modifier Letters",
- "Combining Diacritical Marks",
- "Greek and Coptic",
- "Cyrillic",
- "Cyrillic Supplement",
- "Armenian",
- "Hebrew",
- "Arabic",
- "Syriac",
- "Arabic Supplement",
- "Thaana",
- "NKo",
- "Devanagari",
- "Bengali",
- "Gurmukhi",
- "Gujarati",
- "Oriya",
- "Tamil",
- "Telugu",
- "Kannada",
- "Malayalam",
- "Sinhala",
- "Thai",
- "Lao",
- "Tibetan",
- "Myanmar",
- "Georgian",
- "Hangul Jamo",
- "Ethiopic",
- "Ethiopic Supplement",
- "Cherokee",
- "Unified Canadian Aboriginal Syllabics",
- "Ogham",
- "Runic",
- "Tagalog",
- "Hanunoo",
- "Buhid",
- "Tagbanwa",
- "Khmer",
- "Mongolian",
- "Limbu",
- "Tai Le",
- "New Tai Lue",
- "Khmer Symbols",
- "Buginese",
- "Balinese",
- "Sundanese",
- "Lepcha",
- "Ol Chiki",
- "Phonetic Extensions",
- "Phonetic Extensions Supplement",
- "Combining Diacritical Marks Supplement",
- "Latin Extended Additional",
- "Greek Extended",
- "General Punctuation",
- "Superscripts and Subscripts",
- "Currency Symbols",
- "Combining Diacritical Marks for Symbols",
- "Letterlike Symbols",
- "Number Forms",
- "Arrows",
- "Mathematical Operators",
- "Miscellaneous Technical",
- "Control Pictures",
- "Optical Character Recognition",
- "Enclosed Alphanumerics",
- "Box Drawing",
- "Block Elements",
- "Geometric Shapes",
- "Miscellaneous Symbols",
- "Dingbats",
- "Miscellaneous Mathematical Symbols-A",
- "Supplemental Arrows-A",
- "Braille Patterns",
- "Supplemental Arrows-B",
- "Miscellaneous Mathematical Symbols-B",
- "Supplemental Mathematical Operators",
- "Miscellaneous Symbols and Arrows",
- "Glagolitic",
- "Latin Extended-C",
- "Coptic",
- "Georgian Supplement",
- "Tifinagh",
- "Ethiopic Extended",
- "Cyrillic Extended-A",
- "Supplemental Punctuation",
- "CJK Radicals Supplement",
- "Kangxi Radicals",
- "Ideographic Description Characters",
- "CJK Symbols and Punctuation",
- "Hiragana",
- "Katakana",
- "Bopomofo",
- "Hangul Compatibility Jamo",
- "Kanbun",
- "Bopomofo Extended",
- "CJK Strokes",
- "Katakana Phonetic Extensions",
- "Enclosed CJK Letters and Months",
- "CJK Compatibility",
- "CJK Unified Ideographs Extension A",
- "Yijing Hexagram Symbols",
- "CJK Unified Ideographs",
- "Yi Syllables",
- "Yi Radicals",
- "Vai",
- "Cyrillic Extended-B",
- "Modifier Tone Letters",
- "Latin Extended-D",
- "Syloti Nagri",
- "Phags-pa",
- "Saurashtra",
- "Kayah Li",
- "Rejang",
- "Cham",
- "Hangul Syllables",
- "High Surrogates",
- "High Private Use Surrogates",
- "Low Surrogates",
- "Private Use Area",
- "CJK Compatibility Ideographs",
- "Alphabetic Presentation Forms",
- "Arabic Presentation Forms-A",
- "Variation Selectors",
- "Vertical Forms",
- "Combining Half Marks",
- "CJK Compatibility Forms",
- "Small Form Variants",
- "Arabic Presentation Forms-B",
- "Halfwidth and Fullwidth Forms",
- "Specials",
- "Linear B Syllabary",
- "Linear B Ideograms",
- "Aegean Numbers",
- "Ancient Greek Numbers",
- "Ancient Symbols",
- "Phaistos Disc",
- "Lycian",
- "Carian",
- "Old Italic",
- "Gothic",
- "Ugaritic",
- "Old Persian",
- "Deseret",
- "Shavian",
- "Osmanya",
- "Cypriot Syllabary",
- "Phoenician",
- "Lydian",
- "Kharoshthi",
- "Cuneiform",
- "Cuneiform Numbers and Punctuation",
- "Byzantine Musical Symbols",
- "Musical Symbols",
- "Ancient Greek Musical Notation",
- "Tai Xuan Jing Symbols",
- "Counting Rod Numerals",
- "Mathematical Alphanumeric Symbols",
- "Mahjong Tiles",
- "Domino Tiles",
- "CJK Unified Ideographs Extension B",
- "CJK Compatibility Ideographs Supplement",
- "Tags",
- "Variation Selectors Supplement",
- "Supplementary Private Use Area-A",
- "Supplementary Private Use Area-B",
- "Custom...",
- };
+ private static final int[][] UNICODE_RANGES = getUnicodeRanges();
+ private static final String[] UNICODE_RANGE_NAMES = getUnicodeRangeNames();
private boolean useCustomRange = false;
private int[] customRange = { 0x0000, 0x007f };
@@ -536,4 +189,61 @@
customRangeDialog.hide();
}
}
+
+ private static int[][] getUnicodeRanges() {
+ List<Integer> ranges = new ArrayList<>();
+ ranges.add(0);
+ Character.UnicodeBlock currentBlock = Character.UnicodeBlock.of(0);
+ for (int cp = 0x000001; cp < 0x110000; cp++ ) {
+ Character.UnicodeBlock ub = Character.UnicodeBlock.of(cp);
+ if (currentBlock == null) {
+ if (ub != null) {
+ ranges.add(cp);
+ currentBlock = ub;
+ }
+ } else { // being in some unicode range
+ if (ub == null) {
+ ranges.add(cp - 1);
+ currentBlock = null;
+ } else if (cp == 0x10ffff) { // end of last block
+ ranges.add(cp);
+ } else if (! ub.equals(currentBlock)) {
+ ranges.add(cp - 1);
+ ranges.add(cp);
+ currentBlock = ub;
+ }
+ }
+ }
+ ranges.add(0x00); // for user defined range.
+ ranges.add(0x7f); // for user defined range.
+
+ int[][] returnval = new int[ranges.size() / 2][2];
+ for (int i = 0 ; i < ranges.size() / 2 ; i++ ) {
+ returnval[i][0] = ranges.get(2*i);
+ returnval[i][1] = ranges.get(2*i + 1);
+ }
+ return returnval;
+ }
+
+ private static String[] getUnicodeRangeNames() {
+ String[] names = new String[UNICODE_RANGES.length];
+ for (int i = 0 ; i < names.length ; i++ ) {
+ names[i] = titleCase(
+ Character.UnicodeBlock.of(UNICODE_RANGES[i][0]).toString());
+ }
+ names[names.length - 1] = "Custom...";
+ return names;
+ }
+
+ private static String titleCase(String str) {
+ str = str.replaceAll("_", " ");
+ Pattern p = Pattern.compile("(^|\\W)([a-z])");
+ Matcher m = p.matcher(str.toLowerCase(Locale.ROOT));
+ StringBuffer sb = new StringBuffer();
+ while (m.find()) {
+ m.appendReplacement(sb, m.group(1) + m.group(2).toUpperCase(Locale.ROOT));
+ }
+ m.appendTail(sb);
+ return sb.toString().replace("Cjk", "CJK").replace("Nko", "NKo");
+ }
}
--- a/jdk/test/sun/text/resources/LocaleData Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/test/sun/text/resources/LocaleData Wed Jul 05 17:39:50 2017 +0200
@@ -6356,3 +6356,93 @@
# bug 7020960
CurrencyNames/sr_RS/RSD=\u0434\u0438\u043d.
+
+# bug 7025837
+CurrencyNames/sr-Latn-BA/bam=Bosansko-Hercegova\u010dka konvertibilna marka
+CurrencyNames/sr-Latn-BA/eur=Evro
+CurrencyNames/sr-Latn-ME/eur=Evro
+CurrencyNames/sr-Latn-RS/rsd=Srpski dinar
+
+CurrencyNames//afa=Afghan Afghani (1927-2002)
+CurrencyNames//afn=Afghan Afghani
+CurrencyNames//ang=Netherlands Antillean Guilder
+CurrencyNames//awg=Aruban Florin
+CurrencyNames//azm=Azerbaijani Manat (1993-2006)
+CurrencyNames//azn=Azerbaijani Manat
+CurrencyNames//bbd=Barbadian Dollar
+CurrencyNames//bdt=Bangladeshi Taka
+CurrencyNames//bgn=Bulgarian Lev
+CurrencyNames//bif=Burundian Franc
+CurrencyNames//bob=Bolivian Boliviano
+CurrencyNames//btn=Bhutanese Ngultrum
+CurrencyNames//byb=Belarusian New Ruble (1994-1999)
+CurrencyNames//byr=Belarusian Ruble
+CurrencyNames//cdf=Congolese Franc
+CurrencyNames//clf=Chilean Unit of Account (UF)
+CurrencyNames//cny=Chinese Yuan
+CurrencyNames//crc=Costa Rican Col\u00f3n
+CurrencyNames//csd=Serbian Dinar (2002-2006)
+CurrencyNames//cve=Cape Verdean Escudo
+CurrencyNames//cyp=Cypriot Pound
+CurrencyNames//dem=German Mark
+CurrencyNames//djf=Djiboutian Franc
+CurrencyNames//fjd=Fijian Dollar
+CurrencyNames//ghc=Ghanaian Cedi (1979-2007)
+CurrencyNames//ghs=Ghanaian Cedi
+CurrencyNames//gmd=Gambian Dalasi
+CurrencyNames//gnf=Guinean Franc
+CurrencyNames//gtq=Guatemalan Quetzal
+CurrencyNames//gyd=Guyanaese Dollar
+CurrencyNames//hnl=Honduran Lempira
+CurrencyNames//isk=Icelandic Kr\u00f3na
+CurrencyNames//kgs=Kyrgystani Som
+CurrencyNames//kmf=Comorian Franc
+CurrencyNames//kzt=Kazakhstani Tenge
+CurrencyNames//lkr=Sri Lankan Rupee
+CurrencyNames//ltl=Lithuanian Litas
+CurrencyNames//luf=Luxembourgian Franc
+CurrencyNames//mga=Malagasy Ariary
+CurrencyNames//mgf=Malagasy Franc
+CurrencyNames//mmk=Myanma Kyat
+CurrencyNames//mop=Macanese Pataca
+CurrencyNames//mro=Mauritanian Ouguiya
+CurrencyNames//mur=Mauritian Rupee
+CurrencyNames//mvr=Maldivian Rufiyaa
+CurrencyNames//mwk=Malawian Kwacha
+CurrencyNames//mxv=Mexican Investment Unit
+CurrencyNames//mzm=Mozambican Metical (1980-2006)
+CurrencyNames//mzn=Mozambican Metical
+CurrencyNames//nad=Namibian Dollar
+CurrencyNames//nio=Nicaraguan C\u00f3rdoba
+CurrencyNames//nlg=Dutch Guilder
+CurrencyNames//omr=Omani Rial
+CurrencyNames//pen=Peruvian Nuevo Sol
+CurrencyNames//pgk=Papua New Guinean Kina
+CurrencyNames//pkr=Pakistani Rupee
+CurrencyNames//pyg=Paraguayan Guarani
+CurrencyNames//rol=Romanian Leu (1952-2006)
+CurrencyNames//rsd=Serbian Dinar
+CurrencyNames//scr=Seychellois Rupee
+CurrencyNames//sdd=Sudanese Dinar (1992-2007)
+CurrencyNames//sit=Slovenian Tolar
+CurrencyNames//sll=Sierra Leonean Leone
+CurrencyNames//srd=Surinamese Dollar
+CurrencyNames//srg=Surinamese Guilder
+CurrencyNames//std=S\u00e3o Tom\u00e9 and Pr\u00edncipe Dobra
+CurrencyNames//svc=Salvadoran Col\u00f3n
+CurrencyNames//szl=Swazi Lilangeni
+CurrencyNames//tjs=Tajikistani Somoni
+CurrencyNames//tmm=Turkmenistani Manat (1993-2009)
+CurrencyNames//top=Tongan Pa\u02bbanga
+CurrencyNames//tpe=Timorese Escudo
+CurrencyNames//trl=Turkish Lira (1922-2005)
+CurrencyNames//try=Turkish Lira
+CurrencyNames//twd=New Taiwan Dollar
+CurrencyNames//uyu=Uruguayan Peso
+CurrencyNames//uzs=Uzbekistan Som
+CurrencyNames//veb=Venezuelan Bol\u00edvar (1871-2008)
+CurrencyNames//vef=Venezuelan Bol\u00edvar
+CurrencyNames//wst=Samoan Tala
+CurrencyNames//xxx=Unknown Currency
+CurrencyNames//yum=Yugoslavian New Dinar (1994-2002)
+CurrencyNames//zwd=Zimbabwean Dollar (1980-2008)
--- a/jdk/test/sun/text/resources/LocaleDataTest.java Thu Mar 31 18:14:29 2011 -0700
+++ b/jdk/test/sun/text/resources/LocaleDataTest.java Wed Jul 05 17:39:50 2017 +0200
@@ -33,7 +33,7 @@
* 6379214 6485516 6486607 4225362 4494727 6533691 6531591 6531593 6570259
* 6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611
* 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787
- * 6919624 6998391 7019267 7020960
+ * 6919624 6998391 7019267 7020960 7025837
* @summary Verify locale data
*
*/