changeset 40100:a9b665f0879f

8158050: Remove SA-JDI Summary: Remove SA-JDI Reviewed-by: alanb, dsamersoff Contributed-by: sharath.ballal@oracle.com
author dsamersoff
date Mon, 01 Aug 2016 10:51:22 +0300
parents 24807846ffe1
children 3b8101f0fd65
files hotspot/src/jdk.hotspot.agent/doc/ReadMe-JavaScript.text hotspot/src/jdk.hotspot.agent/share/classes/module-info.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ArrayReferenceImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ArrayTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/BaseLineInfo.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/BooleanTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/BooleanValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ByteTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ByteValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/CharTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/CharValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ClassLoaderReferenceImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ClassObjectReferenceImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ClassTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ConcreteMethodImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ConnectorImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/DoubleTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/DoubleValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/FieldImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/FloatTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/FloatValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/IntegerTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/IntegerValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/InterfaceTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/JNITypeParser.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/JVMTIThreadState.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LineInfo.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LocalVariableImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LocationImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LongTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LongValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/MethodImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/MirrorImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/MonitorInfoImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/NonConcreteMethodImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ObjectReferenceImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/PrimitiveTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/PrimitiveValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SACoreAttachingConnector.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SADebugServer.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SADebugServerAttachingConnector.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SAJDIClassLoader.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SAPIDAttachingConnector.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SDE.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ShortTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ShortValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/StackFrameImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/StratumLineInfo.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/StringReferenceImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ThreadGroupReferenceImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ThreadReferenceImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/TypeComponentImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/TypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/VMModifiers.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ValueContainer.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/VoidTypeImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/VoidValueImpl.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/OopUtilities.java hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/java_lang_Class.java hotspot/src/jdk.hotspot.agent/test/jdi/README.jjh hotspot/src/jdk.hotspot.agent/test/jdi/SASanityChecker.java hotspot/src/jdk.hotspot.agent/test/jdi/TEST.ROOT hotspot/src/jdk.hotspot.agent/test/jdi/TargetAdapter.java hotspot/src/jdk.hotspot.agent/test/jdi/TargetListener.java hotspot/src/jdk.hotspot.agent/test/jdi/TestScaffold.java hotspot/src/jdk.hotspot.agent/test/jdi/VMConnection.java hotspot/src/jdk.hotspot.agent/test/jdi/jstack.sh hotspot/src/jdk.hotspot.agent/test/jdi/jstack64.sh hotspot/src/jdk.hotspot.agent/test/jdi/multivm.java hotspot/src/jdk.hotspot.agent/test/jdi/multivm.sh hotspot/src/jdk.hotspot.agent/test/jdi/runjdb.sh hotspot/src/jdk.hotspot.agent/test/jdi/runjpda.sh hotspot/src/jdk.hotspot.agent/test/jdi/runsa.sh hotspot/src/jdk.hotspot.agent/test/jdi/sagclient.java hotspot/src/jdk.hotspot.agent/test/jdi/sagdoit.java hotspot/src/jdk.hotspot.agent/test/jdi/sagtarg.java hotspot/src/jdk.hotspot.agent/test/jdi/sagtest.java hotspot/src/jdk.hotspot.agent/test/jdi/sasanity.sh hotspot/src/jdk.hotspot.agent/test/jdi/serialvm.java hotspot/src/jdk.hotspot.agent/test/jdi/serialvm.sh hotspot/test/serviceability/sa/TestClassLoaderStats.java hotspot/test/serviceability/sa/TestStackTrace.java
diffstat 85 files changed, 6 insertions(+), 13580 deletions(-) [+]
line wrap: on
line diff
--- a/hotspot/src/jdk.hotspot.agent/doc/ReadMe-JavaScript.text	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-The HotSpot Serviceability Agent (SA) is a debugger for hotspot core
-dumps and hung processes. There is a read-only JDI (Java Debugger
-Interface) implementation on top of SA. This is part of JDK product and
-the classes are in $JDK/tools/sa-jdi.jar.
-
-In addition, there are few serviceability tools in $JDK/bin, namely,
-jstack (java stack trace tool), jmap (heap tool), jinfo (Java config
-tool) and jsadebugd. The classes for these are also in sa-jdi.jar
-file. sa-jdi.jar file is built along with hotspot (libjvm.so) on Solaris
-and Linux platforms. On Windows platform, SA-JDI is not included and
-serviceability tools do not use SA.
-
-Apart from these, HotSpot SA consists of a number of tools that are
-*not* included in JDK product bits.
-
-The sources and makefile for all-of-SA (including non-productized stuff)
-are under $HOTSPOT_WS/agent directory. The makefile $HOTSPOT/agent/make
-directory and shell scripts (and batch files) are used to build and run
-SA non-product tools. There is also documentation of SA under
-$HOTSPOT/agent/doc directory.
-
-To build complete SA, you need to have Rhino Mozilla jar (js.jar)
-version 1.5R5 under $HOTSPOT/agent/src/share/lib directory. Rhino is
-JavaScript interpreter written in Java. Rhino is used to implement SA
-features such as
-
-* SA command line debugger's JavaScript interface
- - refer to $HOTSPOT/agent/doc/clhsdb.html
- - refer to $HOTSPOT/agent/doc/jsdb.html
-* SA simple object query language (SOQL) 
- - language to query Java heap. 
-
-Rhino's "js.jar" is not included in hotspot source bundles. You need to
-download it from http://www.mozilla.org/rhino/download.html.
- 
-Without js.jar, $HOTSPOT/agent/make/Makefile will fail to build. But,
-note that sa-jdi.jar containing the productized portions of SA will
-still be built when you build hotspot JVM. 
--- a/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java	Fri Jul 29 16:50:45 2016 -0700
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java	Mon Aug 01 10:51:22 2016 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,12 +28,8 @@
     requires java.desktop;
     requires java.rmi;
     requires java.scripting;
-    requires jdk.jdi;
 
     // RMI needs to serialize types in this package
     exports sun.jvm.hotspot.debugger.remote to java.rmi;
-    provides com.sun.jdi.connect.Connector with sun.jvm.hotspot.jdi.SACoreAttachingConnector;
-    provides com.sun.jdi.connect.Connector with sun.jvm.hotspot.jdi.SADebugServerAttachingConnector;
-    provides com.sun.jdi.connect.Connector with sun.jvm.hotspot.jdi.SAPIDAttachingConnector;
 
 }
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ArrayReferenceImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, 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.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.Array;
-import sun.jvm.hotspot.runtime.BasicType;
-import sun.jvm.hotspot.utilities.Assert;
-
-public class ArrayReferenceImpl extends ObjectReferenceImpl
-    implements ArrayReference
-{
-    private int length;
-    ArrayReferenceImpl(VirtualMachine aVm, sun.jvm.hotspot.oops.Array aRef) {
-        super(aVm, aRef);
-        length = (int) aRef.getLength();
-    }
-
-    ArrayTypeImpl arrayType() {
-        return (ArrayTypeImpl)type();
-    }
-
-    /**
-     * Return array length.
-     */
-    public int length() {
-        return length;
-    }
-
-    public Value getValue(int index) {
-        List list = getValues(index, 1);
-        return (Value)list.get(0);
-    }
-
-    public List getValues() {
-        return getValues(0, -1);
-    }
-
-    /**
-     * Validate that the range to set/get is valid.
-     * length of -1 (meaning rest of array) has been converted
-     * before entry.
-     */
-    private void validateArrayAccess(int index, int len) {
-        // because length can be computed from index,
-        // index must be tested first for correct error message
-        if ((index < 0) || (index > length())) {
-            throw new IndexOutOfBoundsException(
-                        "Invalid array index: " + index);
-        }
-        if (len < 0) {
-            throw new IndexOutOfBoundsException(
-                        "Invalid array range length: " + len);
-        }
-        if (index + len > length()) {
-            throw new IndexOutOfBoundsException(
-                        "Invalid array range: " +
-                        index + " to " + (index + len - 1));
-        }
-    }
-
-    public List getValues(int index, int len) {
-        if (len == -1) { // -1 means the rest of the array
-           len = length() - index;
-        }
-        validateArrayAccess(index, len);
-        List vals = new ArrayList();
-        if (len == 0) {
-            return vals;
-        }
-
-        sun.jvm.hotspot.oops.TypeArray typeArray = null;
-        sun.jvm.hotspot.oops.ObjArray objArray = null;
-        if (ref() instanceof sun.jvm.hotspot.oops.TypeArray) {
-            typeArray = (sun.jvm.hotspot.oops.TypeArray)ref();
-        } else if (ref() instanceof sun.jvm.hotspot.oops.ObjArray) {
-            objArray = (sun.jvm.hotspot.oops.ObjArray)ref();
-        } else {
-            throw new RuntimeException("should not reach here");
-        }
-
-        char c = arrayType().componentSignature().charAt(0);
-        BasicType variableType = BasicType.charToBasicType(c);
-
-        final int limit = index + len;
-        for (int ii = index; ii < limit; ii++) {
-            ValueImpl valueImpl;
-            if (variableType == BasicType.T_BOOLEAN) {
-                valueImpl = (BooleanValueImpl) vm.mirrorOf(typeArray.getBooleanAt(ii));
-            } else if (variableType == BasicType.T_CHAR) {
-                valueImpl = (CharValueImpl) vm.mirrorOf(typeArray.getCharAt(ii));
-            } else if (variableType == BasicType.T_FLOAT) {
-                valueImpl = (FloatValueImpl) vm.mirrorOf(typeArray.getFloatAt(ii));
-            } else if (variableType == BasicType.T_DOUBLE) {
-                valueImpl =  (DoubleValueImpl) vm.mirrorOf(typeArray.getDoubleAt(ii));
-            } else if (variableType == BasicType.T_BYTE) {
-                valueImpl =  (ByteValueImpl) vm.mirrorOf(typeArray.getByteAt(ii));
-            } else if (variableType == BasicType.T_SHORT) {
-                valueImpl =  (ShortValueImpl) vm.mirrorOf(typeArray.getShortAt(ii));
-            } else if (variableType == BasicType.T_INT) {
-                valueImpl =  (IntegerValueImpl) vm.mirrorOf(typeArray.getIntAt(ii));
-            } else if (variableType == BasicType.T_LONG) {
-                valueImpl =  (LongValueImpl) vm.mirrorOf(typeArray.getLongAt(ii));
-            } else if (variableType == BasicType.T_OBJECT) {
-                // we may have an [Ljava/lang/Object; - i.e., Object[] with the
-                // elements themselves may be arrays because every array is an Object.
-                valueImpl = (ObjectReferenceImpl) vm.objectMirror(objArray.getObjAt(ii));
-            } else if (variableType == BasicType.T_ARRAY) {
-                valueImpl = (ArrayReferenceImpl) vm.arrayMirror((Array) objArray.getObjAt(ii));
-            } else {
-                throw new RuntimeException("should not reach here");
-            }
-            vals.add (valueImpl);
-        }
-        return vals;
-    }
-
-    public void setValue(int index, Value value)
-            throws InvalidTypeException,
-                   ClassNotLoadedException {
-        vm.throwNotReadOnlyException("ArrayReference.setValue(...)");
-    }
-
-    public void setValues(List values)
-            throws InvalidTypeException,
-                   ClassNotLoadedException {
-        setValues(0, values, 0, -1);
-    }
-
-    public void setValues(int index, List values,
-                          int srcIndex, int length)
-            throws InvalidTypeException,
-                   ClassNotLoadedException {
-
-        vm.throwNotReadOnlyException("ArrayReference.setValue(...)");
-
-    }
-
-    public String toString() {
-        return "instance of " + arrayType().componentTypeName() +
-               "[" + length() + "] (id=" + uniqueID() + ")";
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ArrayTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, 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.jdi;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import sun.jvm.hotspot.oops.ArrayKlass;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.InstanceKlass;
-import sun.jvm.hotspot.oops.Klass;
-import sun.jvm.hotspot.oops.ObjArrayKlass;
-import sun.jvm.hotspot.oops.Symbol;
-import sun.jvm.hotspot.oops.TypeArrayKlass;
-
-import com.sun.jdi.ArrayReference;
-import com.sun.jdi.ArrayType;
-import com.sun.jdi.ClassLoaderReference;
-import com.sun.jdi.ClassNotLoadedException;
-import com.sun.jdi.InterfaceType;
-import com.sun.jdi.Method;
-import com.sun.jdi.PrimitiveType;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.Type;
-import com.sun.jdi.VirtualMachine;
-
-public class ArrayTypeImpl extends ReferenceTypeImpl implements ArrayType {
-  protected ArrayTypeImpl(VirtualMachine aVm, ArrayKlass aRef) {
-        super(aVm, aRef);
-    }
-
-    public ArrayReference newInstance(int length) {
-        vm.throwNotReadOnlyException("ArrayType.newInstance(int)");
-        return null;
-    }
-
-    public String componentSignature() {
-        return signature().substring(1); // Just skip the leading '['
-    }
-
-    public String componentTypeName() {
-        JNITypeParser parser = new JNITypeParser(componentSignature());
-        return parser.typeName();
-    }
-
-    public ClassLoaderReference classLoader() {
-        if (ref() instanceof TypeArrayKlass) {
-            // primitive array klasses are loaded by bootstrap loader
-            return null;
-        } else {
-            Klass bottomKlass = ((ObjArrayKlass)ref()).getBottomKlass();
-            if (bottomKlass instanceof TypeArrayKlass) {
-                // multidimensional primitive array klasses are loaded by bootstrap loader
-                return null;
-            } else {
-                // class loader of any other obj array klass is same as the loader
-                // that loaded the bottom InstanceKlass
-                Instance xx = (Instance)(((InstanceKlass) bottomKlass).getClassLoader());
-                return vm.classLoaderMirror(xx);
-            }
-        }
-    }
-
-    @Override
-    void addVisibleMethods(Map<String, Method> methodMap, Set<InterfaceType> handledInterfaces) {
-        // arrays don't have methods
-    }
-
-    List getAllMethods() {
-        // arrays don't have methods
-        // JLS says arrays have methods of java.lang.Object. But
-        // JVMDI-JDI returns zero size list. We do the same here
-        // for consistency.
-        return new ArrayList(0);
-    }
-
-    /*
-     * Find the type object, if any, of a component type of this array.
-     * The component type does not have to be immediate; e.g. this method
-     * can be used to find the component Foo of Foo[][].
-     */
-    public Type componentType() throws ClassNotLoadedException {
-        ArrayKlass k = (ArrayKlass) ref();
-        if (k instanceof ObjArrayKlass) {
-            Klass elementKlass = ((ObjArrayKlass)k).getElementKlass();
-            if (elementKlass == null) {
-                throw new ClassNotLoadedException(componentSignature());
-            } else {
-                return vm.referenceType(elementKlass);
-            }
-        } else {
-            // It's a primitive type
-            return vm.primitiveTypeMirror(signature().charAt(1));
-        }
-    }
-
-    static boolean isComponentAssignable(Type destination, Type source) {
-        if (source instanceof PrimitiveType) {
-            // Assignment of primitive arrays requires identical
-            // component types.
-            return source.equals(destination);
-        } else {
-           if (destination instanceof PrimitiveType) {
-                return false;
-            }
-
-            ReferenceTypeImpl refSource = (ReferenceTypeImpl)source;
-            ReferenceTypeImpl refDestination = (ReferenceTypeImpl)destination;
-            // Assignment of object arrays requires availability
-            // of widening conversion of component types
-            return refSource.isAssignableTo(refDestination);
-        }
-    }
-
-
-    /*
-    * Return true if an instance of the  given reference type
-    * can be assigned to a variable of this type
-    */
-    boolean isAssignableTo(ReferenceType destType) {
-        if (destType instanceof ArrayType) {
-            try {
-                Type destComponentType = ((ArrayType)destType).componentType();
-                return isComponentAssignable(destComponentType, componentType());
-            } catch (ClassNotLoadedException e) {
-                // One or both component types has not yet been
-                // loaded => can't assign
-                return false;
-            }
-        } else {
-            Symbol typeName = ((ReferenceTypeImpl)destType).typeNameAsSymbol();
-            if (destType instanceof InterfaceType) {
-                // Every array type implements java.io.Serializable and
-                // java.lang.Cloneable. fixme in JVMDI-JDI, includes only
-                // Cloneable but not Serializable.
-                return typeName.equals(vm.javaLangCloneable()) ||
-                       typeName.equals(vm.javaIoSerializable());
-            } else {
-                // Only valid ClassType assignee is Object
-                return typeName.equals(vm.javaLangObject());
-            }
-        }
-    }
-
-    List inheritedTypes() {
-        // arrays are derived from java.lang.Object and
-        // B[] is derived from A[] if B is derived from A.
-        // But JVMDI-JDI returns zero sized list and we do the
-        // same for consistency.
-        return new ArrayList(0);
-    }
-
-    int getModifiers() {
-        /*
-         * For object arrays, the return values for Interface
-         * Accessible.isPrivate(), Accessible.isProtected(),
-         * etc... are the same as would be returned for the
-         * component type.  Fetch the modifier bits from the
-         * component type and use those.
-         *
-         * For primitive arrays, the modifiers are always
-         *   VMModifiers.FINAL | VMModifiers.PUBLIC
-         *
-         * Reference com.sun.jdi.Accessible.java.
-         */
-        try {
-            Type t = componentType();
-            if (t instanceof PrimitiveType) {
-                return VMModifiers.FINAL | VMModifiers.PUBLIC;
-            } else {
-                ReferenceType rt = (ReferenceType)t;
-                return rt.modifiers();
-            }
-        } catch (ClassNotLoadedException cnle) {
-            cnle.printStackTrace();
-        }
-        return -1;
-    }
-
-    public String toString() {
-       return "array class " + name() + " (" + loaderString() + ")";
-    }
-
-    /*
-     * Save a pointless trip over the wire for these methods
-     * which have undefined results for arrays.
-     */
-    public boolean isPrepared() { return true; }
-    public boolean isVerified() { return true; }
-    public boolean isInitialized() { return true; }
-    public boolean failedToInitialize() { return false; }
-    public boolean isAbstract() { return false; }
-
-    /*
-     * Defined always to be true for arrays
-     */
-    public boolean isFinal() { return true; }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/BaseLineInfo.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-class BaseLineInfo implements LineInfo {
-    private final int lineNumber;
-    private final ReferenceTypeImpl declaringType;
-
-    BaseLineInfo(int lineNumber,
-                 ReferenceTypeImpl declaringType) {
-        this.lineNumber = lineNumber;
-        this.declaringType = declaringType;
-    }
-
-    public String liStratum() {
-        return SDE.BASE_STRATUM_NAME;
-    }
-
-    public int liLineNumber() {
-        return lineNumber;
-    }
-
-    public String liSourceName()
-                            throws AbsentInformationException {
-        return declaringType.baseSourceName();
-    }
-
-    public String liSourcePath()
-                            throws AbsentInformationException {
-        return declaringType.baseSourcePath();
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/BooleanTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public class BooleanTypeImpl extends PrimitiveTypeImpl implements BooleanType {
-    BooleanTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-    public String signature() {
-        return "Z";
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedBooleanValue());
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/BooleanValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public class BooleanValueImpl extends PrimitiveValueImpl
-                              implements BooleanValue {
-    private boolean value;
-
-    BooleanValueImpl(VirtualMachine aVm,boolean aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof BooleanValue)) {
-            return (value == ((BooleanValue)obj).value())
-                   && super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public Type type() {
-        return vm.theBooleanType();
-    }
-
-    public boolean value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return value;
-    }
-
-    public byte byteValue() {
-        return(byte)((value)?1:0);
-    }
-
-    public char charValue() {
-        return(char)((value)?1:0);
-    }
-
-    public short shortValue() {
-        return(short)((value)?1:0);
-    }
-
-    public int intValue() {
-        return(int)((value)?1:0);
-    }
-
-    public long longValue() {
-        return(long)((value)?1:0);
-    }
-
-    public float floatValue() {
-        return(float)((value)?1.0:0.0);
-    }
-
-    public double doubleValue() {
-        return(double)((value)?1.0:0.0);
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ByteTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public class ByteTypeImpl extends PrimitiveTypeImpl implements ByteType {
-    ByteTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return "B";
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedByteValue());
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ByteValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-
-public class ByteValueImpl extends PrimitiveValueImpl
-                           implements ByteValue {
-    private byte value;
-
-    ByteValueImpl(VirtualMachine aVm,byte aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof ByteValue)) {
-            return (value == ((ByteValue)obj).value())
-                   && super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(ByteValue byteVal) {
-        return value() - byteVal.value();
-    }
-
-    public Type type() {
-        return vm.theByteType();
-    }
-
-    public byte value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/CharTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public class CharTypeImpl extends PrimitiveTypeImpl implements CharType {
-    CharTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return "C";
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedCharValue());
-    }
-
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/CharValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-
-public class CharValueImpl extends PrimitiveValueImpl
-                           implements CharValue {
-    private char value;
-
-    CharValueImpl(VirtualMachine aVm,char aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof CharValue)) {
-            return (value == ((CharValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(CharValue charVal) {
-        return value() - charVal.value();
-    }
-
-    public Type type() {
-        return vm.theCharType();
-    }
-
-    public char value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        // Note: since char is unsigned, don't check against MIN_VALUE
-        if (value > Byte.MAX_VALUE) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        // Note: since char is unsigned, don't check against MIN_VALUE
-        if (value > Short.MAX_VALUE) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ClassLoaderReferenceImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import sun.jvm.hotspot.oops.Oop;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.Klass;
-import sun.jvm.hotspot.memory.SystemDictionary;
-import sun.jvm.hotspot.memory.Universe;
-import sun.jvm.hotspot.runtime.VM;
-
-import com.sun.jdi.*;
-import java.util.*;
-
-public class ClassLoaderReferenceImpl
-    extends ObjectReferenceImpl
-    implements ClassLoaderReference
-{
-     // because we work on process snapshot or core we can
-     // cache visibleClasses & definedClasses always (i.e., no suspension)
-     private List visibleClassesCache;
-     private List definedClassesCache;
-
-     ClassLoaderReferenceImpl(VirtualMachine aVm, Instance oRef) {
-         super(aVm, oRef);
-     }
-
-     protected String description() {
-         return "ClassLoaderReference " + uniqueID();
-     }
-
-     public List definedClasses() {
-         if (definedClassesCache == null) {
-             definedClassesCache = new ArrayList();
-             Iterator iter = vm.allClasses().iterator();
-             while (iter.hasNext()) {
-                 ReferenceType type = (ReferenceType)iter.next();
-                 if (equals(type.classLoader())) {  /* thanks OTI */
-                     definedClassesCache.add(type);
-                 }
-             }
-         }
-         return definedClassesCache;
-     }
-
-     private SystemDictionary getSystemDictionary() {
-         return vm.saSystemDictionary();
-     }
-
-     private Universe getUniverse() {
-         return vm.saUniverse();
-     }
-
-     public List visibleClasses() {
-         if (visibleClassesCache != null)
-            return visibleClassesCache;
-
-         visibleClassesCache = new ArrayList();
-
-         // refer to getClassLoaderClasses in jvmtiGetLoadedClasses.cpp
-         //  a. SystemDictionary::classes_do doesn't include arrays of primitive types (any dimensions)
-         SystemDictionary sysDict = getSystemDictionary();
-         sysDict.classesDo(
-                           new SystemDictionary.ClassAndLoaderVisitor() {
-                                public void visit(Klass k, Oop loader) {
-                                    if (ref().equals(loader)) {
-                                        for (Klass l = k; l != null; l = l.arrayKlassOrNull()) {
-                                            visibleClassesCache.add(vm.referenceType(l));
-                                        }
-                                    }
-                                }
-                           }
-                           );
-
-         // b. multi dimensional arrays of primitive types
-         sysDict.primArrayClassesDo(
-                                    new SystemDictionary.ClassAndLoaderVisitor() {
-                                         public void visit(Klass k, Oop loader) {
-                                             if (ref().equals(loader)) {
-                                                 visibleClassesCache.add(vm.referenceType(k));
-                                             }
-                                         }
-                                     }
-                                     );
-
-         // c. single dimensional primitive array klasses from Universe
-         // these are not added to SystemDictionary
-         getUniverse().basicTypeClassesDo(
-                            new SystemDictionary.ClassVisitor() {
-                                public void visit(Klass k) {
-                                    visibleClassesCache.add(vm.referenceType(k));
-                                }
-                            }
-                            );
-
-         return visibleClassesCache;
-     }
-
-     Type findType(String signature) throws ClassNotLoadedException {
-         List types = visibleClasses();
-         Iterator iter = types.iterator();
-         while (iter.hasNext()) {
-             ReferenceType type = (ReferenceType)iter.next();
-             if (type.signature().equals(signature)) {
-                 return type;
-             }
-         }
-         JNITypeParser parser = new JNITypeParser(signature);
-         throw new ClassNotLoadedException(parser.typeName(),
-                                          "Class " + parser.typeName() + " not loaded");
-     }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ClassObjectReferenceImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.Klass;
-import sun.jvm.hotspot.oops.java_lang_Class;
-
-public class ClassObjectReferenceImpl extends ObjectReferenceImpl
-                                      implements ClassObjectReference {
-    private ReferenceType reflectedType;
-
-    ClassObjectReferenceImpl(VirtualMachine vm, Instance oRef) {
-        super(vm, oRef);
-    }
-
-    public ReferenceType reflectedType() {
-        if (reflectedType == null) {
-            Klass k = java_lang_Class.asKlass(ref());
-            reflectedType = vm.referenceType(k);
-        }
-        return reflectedType;
-    }
-
-    public String toString() {
-        return "instance of " + referenceType().name() +
-               "(reflected class=" + reflectedType().name() + ", " + "id=" +
-               uniqueID() + ")";
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ClassTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,263 +0,0 @@
-/*
- * Copyright (c) 2002, 2007, 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.jdi;
-
-import java.lang.ref.SoftReference;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import sun.jvm.hotspot.oops.InstanceKlass;
-
-import com.sun.jdi.ClassNotLoadedException;
-import com.sun.jdi.ClassType;
-import com.sun.jdi.Field;
-import com.sun.jdi.IncompatibleThreadStateException;
-import com.sun.jdi.InterfaceType;
-import com.sun.jdi.InvalidTypeException;
-import com.sun.jdi.InvocationException;
-import com.sun.jdi.Method;
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-import com.sun.jdi.Value;
-import com.sun.jdi.VirtualMachine;
-
-public class ClassTypeImpl extends ReferenceTypeImpl
-    implements ClassType
-{
-    private SoftReference interfacesCache    = null;
-    private SoftReference allInterfacesCache = null;
-    private SoftReference subclassesCache    = null;
-
-    protected ClassTypeImpl(VirtualMachine aVm, InstanceKlass aRef) {
-        super(aVm, aRef);
-    }
-
-    public ClassType superclass() {
-        InstanceKlass kk = (InstanceKlass)ref().getSuper();
-        if (kk == null) {
-            return null;
-        }
-        return (ClassType) vm.referenceType(kk);
-    }
-
-    public List interfaces()  {
-        List interfaces = (interfacesCache != null)? (List) interfacesCache.get() : null;
-        if (interfaces == null) {
-            checkPrepared();
-            interfaces = Collections.unmodifiableList(getInterfaces());
-            interfacesCache = new SoftReference(interfaces);
-        }
-        return interfaces;
-    }
-
-    void addInterfaces(List list) {
-        List immediate = interfaces();
-
-        HashSet hashList = new HashSet(list);
-        hashList.addAll(immediate);
-        list.clear();
-        list.addAll(hashList);
-
-        Iterator iter = immediate.iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            interfaze.addSuperinterfaces(list);
-        }
-
-        ClassTypeImpl superclass = (ClassTypeImpl)superclass();
-        if (superclass != null) {
-            superclass.addInterfaces(list);
-        }
-    }
-
-    public List allInterfaces()  {
-        List allinterfaces = (allInterfacesCache != null)? (List) allInterfacesCache.get() : null;
-        if (allinterfaces == null) {
-            checkPrepared();
-            allinterfaces = new ArrayList();
-            addInterfaces(allinterfaces);
-            allinterfaces = Collections.unmodifiableList(allinterfaces);
-            allInterfacesCache = new SoftReference(allinterfaces);
-        }
-        return allinterfaces;
-    }
-
-    public List subclasses() {
-        List subclasses = (subclassesCache != null)? (List) subclassesCache.get() : null;
-        if (subclasses == null) {
-            List all = vm.allClasses();
-            subclasses = new ArrayList(0);
-            Iterator iter = all.iterator();
-            while (iter.hasNext()) {
-                ReferenceType refType = (ReferenceType)iter.next();
-                if (refType instanceof ClassType) {
-                    ClassType clazz = (ClassType)refType;
-                    ClassType superclass = clazz.superclass();
-                    if ((superclass != null) && superclass.equals(this)) {
-                        subclasses.add(refType);
-                    }
-                }
-            }
-            subclasses = Collections.unmodifiableList(subclasses);
-            subclassesCache = new SoftReference(subclasses);
-        }
-        return subclasses;
-    }
-
-    public Method concreteMethodByName(String name, String signature)  {
-       checkPrepared();
-       List methods = visibleMethods();
-       Method method = null;
-       Iterator iter = methods.iterator();
-       while (iter.hasNext()) {
-           Method candidate = (Method)iter.next();
-           if (candidate.name().equals(name) &&
-               candidate.signature().equals(signature) &&
-               !candidate.isAbstract()) {
-
-               method = candidate;
-               break;
-           }
-       }
-       return method;
-   }
-
-   List getAllMethods() {
-        ArrayList list = new ArrayList(methods());
-        ClassType clazz = superclass();
-        while (clazz != null) {
-            list.addAll(clazz.methods());
-            clazz = clazz.superclass();
-        }
-        /*
-         * Avoid duplicate checking on each method by iterating through
-         * duplicate-free allInterfaces() rather than recursing
-         */
-        Iterator iter = allInterfaces().iterator();
-        while (iter.hasNext()) {
-            InterfaceType interfaze = (InterfaceType)iter.next();
-            list.addAll(interfaze.methods());
-        }
-        return list;
-    }
-
-    List inheritedTypes() {
-        List inherited = new ArrayList(interfaces());
-        if (superclass() != null) {
-            inherited.add(0, superclass()); /* insert at front */
-        }
-        return inherited;
-    }
-
-    public boolean isEnum() {
-        ClassTypeImpl superclass = (ClassTypeImpl) superclass();
-        if (superclass != null) {
-            return superclass.typeNameAsSymbol().equals(vm.javaLangEnum());
-        } else {
-            return false;
-        }
-    }
-
-    public void setValue(Field field, Value value)
-        throws InvalidTypeException, ClassNotLoadedException {
-        vm.throwNotReadOnlyException("ClassType.setValue(...)");
-    }
-
-
-    public Value invokeMethod(ThreadReference threadIntf, Method methodIntf,
-                              List arguments, int options)
-                                   throws InvalidTypeException,
-                                          ClassNotLoadedException,
-                                          IncompatibleThreadStateException,
-                                          InvocationException {
-        vm.throwNotReadOnlyException("ClassType.invokeMethod(...)");
-        return null;
-    }
-
-    public ObjectReference newInstance(ThreadReference threadIntf,
-                                       Method methodIntf,
-                                       List arguments, int options)
-                                   throws InvalidTypeException,
-                                          ClassNotLoadedException,
-                                          IncompatibleThreadStateException,
-                                          InvocationException {
-        vm.throwNotReadOnlyException("ClassType.newInstance(...)");
-        return null;
-    }
-
-    @Override
-    void addVisibleMethods(Map<String, Method> methodMap, Set<InterfaceType> seenInterfaces) {
-        /*
-         * Add methods from
-         * parent types first, so that the methods in this class will
-         * overwrite them in the hash table
-         */
-
-        Iterator<InterfaceType> iter = interfaces().iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            if (!seenInterfaces.contains(interfaze)) {
-                interfaze.addVisibleMethods(methodMap, seenInterfaces);
-                seenInterfaces.add(interfaze);
-            }
-        }
-
-        ClassTypeImpl clazz = (ClassTypeImpl)superclass();
-        if (clazz != null) {
-            clazz.addVisibleMethods(methodMap, seenInterfaces);
-        }
-
-        addToMethodMap(methodMap, methods());
-    }
-
-    boolean isAssignableTo(ReferenceType type) {
-        ClassTypeImpl superclazz = (ClassTypeImpl)superclass();
-        if (this.equals(type)) {
-            return true;
-        } else if ((superclazz != null) && superclazz.isAssignableTo(type)) {
-            return true;
-        } else {
-            List interfaces = interfaces();
-            Iterator iter = interfaces.iterator();
-            while (iter.hasNext()) {
-                InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-                if (interfaze.isAssignableTo(type)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
-    public String toString() {
-       return "class " + name() + "(" + loaderString() + ")";
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ConcreteMethodImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,467 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.jdi;
-
-import com.sun.jdi.*;
-import sun.jvm.hotspot.oops.Symbol;
-import sun.jvm.hotspot.oops.LocalVariableTableElement;
-import sun.jvm.hotspot.oops.LineNumberTableElement;
-import java.util.List;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.lang.ref.SoftReference;
-import java.util.Collections;
-
-public class ConcreteMethodImpl extends MethodImpl {
-
-    /*
-     * A subset of the line number info that is softly cached
-     */
-    static private class SoftLocationXRefs {
-        final String stratumID;   // The stratum of this information
-        final Map lineMapper;     // Maps line number to location(s)
-        final List lineLocations; // List of locations ordered by code index
-
-        /*
-         * Note: these do not necessarily correspond to
-         * the line numbers of the first and last elements
-         * in the lineLocations list. Use these only for bounds
-         * checking and with lineMapper.
-         */
-        final int lowestLine;
-        final int highestLine;
-
-        SoftLocationXRefs(String stratumID, Map lineMapper, List lineLocations,
-                     int lowestLine, int highestLine) {
-            this.stratumID = stratumID;
-            this.lineMapper = Collections.unmodifiableMap(lineMapper);
-            this.lineLocations =
-                Collections.unmodifiableList(lineLocations);
-            this.lowestLine = lowestLine;
-            this.highestLine = highestLine;
-        }
-    }
-
-    private SoftReference softBaseLocationXRefsRef;
-    private SoftReference softOtherLocationXRefsRef;
-    private SoftReference variablesRef = null;
-    private int firstIndex = -1;
-    private int lastIndex = -1;
-    private Location location;
-    private SoftReference bytecodesRef = null;
-
-    ConcreteMethodImpl(VirtualMachine vm, ReferenceTypeImpl declaringType,
-               sun.jvm.hotspot.oops.Method saMethod ) {
-        super(vm, declaringType, saMethod);
-    }
-
-    int argSlotCount() throws AbsentInformationException {
-        return (int) saMethod.getSizeOfParameters();
-    }
-
-    private SoftLocationXRefs getLocations(SDE.Stratum stratum) {
-        if (stratum.isJava()) {
-            return getBaseLocations();
-        }
-        String stratumID = stratum.id();
-        SoftLocationXRefs info =
-            (softOtherLocationXRefsRef == null) ? null :
-               (SoftLocationXRefs)softOtherLocationXRefsRef.get();
-        if (info != null && info.stratumID.equals(stratumID)) {
-            return info;
-        }
-
-        List lineLocations = new ArrayList();
-        Map lineMapper = new HashMap();
-        int lowestLine = -1;
-        int highestLine = -1;
-        SDE.LineStratum lastLineStratum = null;
-        SDE.Stratum baseStratum =
-            declaringType.stratum(SDE.BASE_STRATUM_NAME);
-        Iterator it = getBaseLocations().lineLocations.iterator();
-        while(it.hasNext()) {
-            LocationImpl loc = (LocationImpl)it.next();
-            int baseLineNumber = loc.lineNumber(baseStratum);
-            SDE.LineStratum lineStratum =
-                  stratum.lineStratum(declaringType,
-                                      baseLineNumber);
-
-            if (lineStratum == null) {
-                // location not mapped in this stratum
-                continue;
-            }
-
-            int lineNumber = lineStratum.lineNumber();
-
-            // remove unmapped and dup lines
-            if ((lineNumber != -1) &&
-                          (!lineStratum.equals(lastLineStratum))) {
-                lastLineStratum = lineStratum;
-                // Remember the largest/smallest line number
-                if (lineNumber > highestLine) {
-                    highestLine = lineNumber;
-                }
-                if ((lineNumber < lowestLine) || (lowestLine == -1)) {
-                    lowestLine = lineNumber;
-                }
-
-                loc.addStratumLineInfo(
-                new StratumLineInfo(stratumID,
-                                      lineNumber,
-                                      lineStratum.sourceName(),
-                                      lineStratum.sourcePath()));
-
-                // Add to the location list
-                lineLocations.add(loc);
-
-                // Add to the line -> locations map
-                Integer key = new Integer(lineNumber);
-                List mappedLocs = (List)lineMapper.get(key);
-                if (mappedLocs == null) {
-                    mappedLocs = new ArrayList(1);
-                    lineMapper.put(key, mappedLocs);
-                }
-                mappedLocs.add(loc);
-            }
-        }
-
-        info = new SoftLocationXRefs(stratumID,
-                                lineMapper, lineLocations,
-                                lowestLine, highestLine);
-        softOtherLocationXRefsRef = new SoftReference(info);
-        return info;
-    }
-
-    private SoftLocationXRefs getBaseLocations() {
-        SoftLocationXRefs info = (softBaseLocationXRefsRef == null) ? null :
-                                     (SoftLocationXRefs)softBaseLocationXRefsRef.get();
-        if (info != null) {
-            return info;
-        }
-
-        byte[] codeBuf = bytecodes();
-        firstIndex = 0;
-        lastIndex = codeBuf.length - 1;
-        // This is odd; what is the Location of a Method?
-        // A StackFrame can have a location, but a Method?
-        // I guess it must be the Location for bci 0.
-        location = new LocationImpl(virtualMachine(), this, 0);
-
-        boolean hasLineInfo = saMethod.hasLineNumberTable();
-        LineNumberTableElement[] lntab = null;
-        int count;
-
-        if (hasLineInfo) {
-            lntab = saMethod.getLineNumberTable();
-            count = lntab.length;
-        } else {
-            count = 0;
-        }
-
-        List lineLocations = new ArrayList(count);
-        Map lineMapper = new HashMap();
-        int lowestLine = -1;
-        int highestLine = -1;
-        for (int i = 0; i < count; i++) {
-            long bci = lntab[i].getStartBCI();
-            int lineNumber = lntab[i].getLineNumber();
-
-            /*
-             * Some compilers will point multiple consecutive
-             * lines at the same location. We need to choose
-             * one of them so that we can consistently map back
-             * and forth between line and location. So we choose
-             * to record only the last line entry at a particular
-             * location.
-             */
-            if ((i + 1 == count) || (bci != lntab[i+1].getStartBCI())) {
-                // Remember the largest/smallest line number
-                if (lineNumber > highestLine) {
-                    highestLine = lineNumber;
-                }
-                if ((lineNumber < lowestLine) || (lowestLine == -1)) {
-                    lowestLine = lineNumber;
-                }
-                LocationImpl loc =
-                    new LocationImpl(virtualMachine(), this, bci);
-                loc.addBaseLineInfo(
-                    new BaseLineInfo(lineNumber, declaringType));
-
-                // Add to the location list
-                lineLocations.add(loc);
-
-                // Add to the line -> locations map
-                Integer key = new Integer(lineNumber);
-                List mappedLocs = (List)lineMapper.get(key);
-                if (mappedLocs == null) {
-                    mappedLocs = new ArrayList(1);
-                    lineMapper.put(key, mappedLocs);
-                }
-                mappedLocs.add(loc);
-            }
-        }
-
-        info = new SoftLocationXRefs(SDE.BASE_STRATUM_NAME,
-                                lineMapper, lineLocations,
-                                lowestLine, highestLine);
-        softBaseLocationXRefsRef = new SoftReference(info);
-        return info;
-    }
-
-    List sourceNameFilter(List list,
-                          SDE.Stratum stratum,
-                          String sourceName)
-                            throws AbsentInformationException {
-        if (sourceName == null) {
-            return list;
-        } else {
-            /* needs sourceName filteration */
-            List locs = new ArrayList();
-            Iterator it = list.iterator();
-            while (it.hasNext()) {
-                LocationImpl loc = (LocationImpl)it.next();
-                if (loc.sourceName(stratum).equals(sourceName)) {
-                    locs.add(loc);
-                }
-            }
-            return locs;
-        }
-    }
-
-    public List allLineLocations(SDE.Stratum stratum, String sourceName)
-        throws AbsentInformationException {
-        List lineLocations = getLocations(stratum).lineLocations;
-
-        if (lineLocations.size() == 0) {
-            throw new AbsentInformationException();
-        }
-
-        return Collections.unmodifiableList(
-          sourceNameFilter(lineLocations, stratum, sourceName));
-    }
-
-    public List locationsOfLine(SDE.Stratum stratum, String sourceName,
-                         int lineNumber) throws AbsentInformationException {
-        SoftLocationXRefs info = getLocations(stratum);
-
-        if (info.lineLocations.size() == 0) {
-            throw new AbsentInformationException();
-        }
-
-        /*
-         * Find the locations which match the line number
-         * passed in.
-         */
-        List list = (List)info.lineMapper.get(
-                                  new Integer(lineNumber));
-
-        if (list == null) {
-            list = new ArrayList(0);
-        }
-        return Collections.unmodifiableList(
-          sourceNameFilter(list, stratum, sourceName));
-    }
-
-    LineInfo codeIndexToLineInfo(SDE.Stratum stratum,
-                                 long codeIndex) {
-        if (firstIndex == -1) {
-            getBaseLocations();
-        }
-
-        /*
-         * Check for invalid code index.
-         */
-        if (codeIndex < firstIndex || codeIndex > lastIndex) {
-            throw new InternalError(
-                    "Location with invalid code index");
-        }
-
-        List lineLocations = getLocations(stratum).lineLocations;
-
-        /*
-         * Check for absent line numbers.
-         */
-        if (lineLocations.size() == 0) {
-            return super.codeIndexToLineInfo(stratum, codeIndex);
-        }
-
-        Iterator iter = lineLocations.iterator();
-        /*
-         * Treat code before the beginning of the first line table
-         * entry as part of the first line.  javac will generate
-         * code like this for some local classes. This "prolog"
-         * code contains assignments from locals in the enclosing
-         * scope to synthetic fields in the local class.  Same for
-         * other language prolog code.
-         */
-        LocationImpl bestMatch = (LocationImpl)iter.next();
-        while (iter.hasNext()) {
-            LocationImpl current = (LocationImpl)iter.next();
-            if (current.codeIndex() > codeIndex) {
-                break;
-            }
-            bestMatch = current;
-        }
-        return bestMatch.getLineInfo(stratum);
-    }
-
-    public Location locationOfCodeIndex(long codeIndex) {
-        if (firstIndex == -1) {
-            getBaseLocations();
-        }
-
-        /*
-         * Check for invalid code index.
-         */
-        if (codeIndex < firstIndex || codeIndex > lastIndex) {
-            return null;
-        }
-
-        return new LocationImpl(virtualMachine(), this, codeIndex);
-    }
-
-    public List variables() throws AbsentInformationException {
-        return getVariables();
-    }
-
-    public List variablesByName(String name) throws AbsentInformationException {
-        List variables = getVariables();
-
-        List retList = new ArrayList(2);
-        Iterator iter = variables.iterator();
-        while(iter.hasNext()) {
-            LocalVariable variable = (LocalVariable)iter.next();
-            if (variable.name().equals(name)) {
-                retList.add(variable);
-            }
-        }
-        return retList;
-    }
-
-    public List arguments() throws AbsentInformationException {
-        if (argumentTypeNames().size() == 0) {
-            return new ArrayList(0);
-        }
-        List variables = getVariables();
-        List retList = new ArrayList(variables.size());
-        Iterator iter = variables.iterator();
-        while(iter.hasNext()) {
-            LocalVariable variable = (LocalVariable)iter.next();
-            if (variable.isArgument()) {
-                retList.add(variable);
-            }
-        }
-        return retList;
-    }
-
-    public byte[] bytecodes() {
-        byte[] bytecodes = (bytecodesRef == null) ? null :
-                                     (byte[])bytecodesRef.get();
-        if (bytecodes == null) {
-            bytecodes = saMethod.getByteCode();
-            bytecodesRef = new SoftReference(bytecodes);
-        }
-        /*
-         * Arrays are always modifiable, so it is a little unsafe
-         * to return the cached bytecodes directly; instead, we
-         * make a clone at the cost of using more memory.
-         */
-        return (byte[])bytecodes.clone();
-    }
-
-    public Location location() {
-        if (location == null) {
-            getBaseLocations();
-        }
-        return location;
-    }
-
-    private List getVariables() throws AbsentInformationException {
-        List variables = (variablesRef == null) ? null :
-                                     (List)variablesRef.get();
-        if (variables != null) {
-            return variables;
-        }
-
-        // if there are no locals, there won't be a LVT
-        if (saMethod.getMaxLocals() == 0) {
-           variables = Collections.unmodifiableList(new ArrayList(0));
-           variablesRef = new SoftReference(variables);
-           return variables;
-        }
-
-        if (! saMethod.hasLocalVariableTable()) {
-            throw new AbsentInformationException();
-        }
-        //Build up the JDI view of local variable table.
-        LocalVariableTableElement[] locals = saMethod.getLocalVariableTable();
-        int localCount = locals.length;
-        variables = new ArrayList(localCount);
-        for (int ii = 0; ii < localCount; ii++) {
-            String name =
-                saMethod.getConstants().getSymbolAt(locals[ii].getNameCPIndex()).asString();
-            /*
-             * Skip "this$*", "this+*", "this" entries because they are never real
-             * variables from the JLS perspective. "this+*" is new with 1.5.
-             * Instead of using '+', we check for java letter or digit to avoid
-             * depending on javac's current choice of '+'.
-             */
-            boolean isInternalName = name.startsWith("this") &&
-                  (name.length() == 4 || name.charAt(4)=='$' || !Character.isJavaIdentifierPart(name.charAt(4)));
-            if (! isInternalName) {
-                int slot = locals[ii].getSlot();
-                long codeIndex = locals[ii].getStartBCI();
-                int length = locals[ii].getLength();
-                Location scopeStart = new LocationImpl(virtualMachine(),
-                                                       this, codeIndex);
-                Location scopeEnd =
-                    new LocationImpl(virtualMachine(), this,
-                                     codeIndex + length - 1);
-                String signature =
-                    saMethod.getConstants().getSymbolAt(locals[ii].getDescriptorCPIndex()).asString();
-
-                int genericSigIndex = locals[ii].getSignatureCPIndex();
-                String genericSignature = null;
-                if (genericSigIndex != 0) {
-                    genericSignature = saMethod.getConstants().getSymbolAt(genericSigIndex).asString();
-                }
-
-                LocalVariable variable =
-                    new LocalVariableImpl(virtualMachine(), this,
-                                          slot, scopeStart, scopeEnd,
-                                          name, signature, genericSignature);
-                // Add to the variable list
-                variables.add(variable);
-            }
-        }
-
-        variables = Collections.unmodifiableList(variables);
-        variablesRef = new SoftReference(variables);
-        return variables;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ConnectorImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,631 +0,0 @@
-/*
- * Copyright (c) 2002, 2012, 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.jdi;
-
-import com.sun.jdi.connect.*;
-import com.sun.jdi.InternalException;
-
-import java.io.*;
-import java.lang.ref.*;
-import java.lang.reflect.*;
-import java.util.*;
-
-abstract class ConnectorImpl implements Connector {
-    Map defaultArguments = new LinkedHashMap();
-
-    // Used by BooleanArgument
-    static String trueString = null;
-    static String falseString;
-
-
-    /**  This is not public in VirtualMachineManagerImpl
-    ThreadGroup mainGroupForJDI() {
-        return ((VirtualMachineManagerImpl)manager).mainGroupForJDI();
-    }
-    ***/
-
-    // multiple debuggee support for SA/JDI
-    private static List freeVMClasses; // List<SoftReference<Class>>
-    private static ClassLoader myLoader;
-    // debug mode for SA/JDI connectors
-    static final protected boolean DEBUG;
-    static {
-        myLoader = ConnectorImpl.class.getClassLoader();
-        freeVMClasses = new ArrayList(0);
-        DEBUG = System.getProperty("sun.jvm.hotspot.jdi.ConnectorImpl.DEBUG") != null;
-    }
-
-    // add a new free VirtualMachineImpl class
-    private static synchronized void addFreeVMImplClass(Class clazz) {
-        if (DEBUG) {
-            System.out.println("adding free VirtualMachineImpl class");
-        }
-        freeVMClasses.add(new SoftReference(clazz));
-    }
-
-    // returns null if we don't have anything free
-    private static synchronized Class getFreeVMImplClass() {
-        while (!freeVMClasses.isEmpty()) {
-              SoftReference ref = (SoftReference) freeVMClasses.remove(0);
-              Object o = ref.get();
-              if (o != null) {
-                  if (DEBUG) {
-                      System.out.println("re-using loaded VirtualMachineImpl");
-                  }
-                  return (Class) o;
-              }
-        }
-        return null;
-    }
-
-    private static Class getVMImplClassFrom(ClassLoader cl)
-                               throws ClassNotFoundException {
-        return Class.forName("sun.jvm.hotspot.jdi.VirtualMachineImpl", true, cl);
-    }
-
-    /* SA has not been designed to support multiple debuggee VMs
-     * at-a-time.  But, JDI supports multiple debuggee VMs.  We
-     * support multiple debuggee VMs in SA/JDI, by creating a new
-     * class loader instance (refer to comment in SAJDIClassLoader
-     * for details). But, to avoid excessive class loading (and
-     * thereby resulting in larger footprint), we re-use 'dispose'd
-     * VirtualMachineImpl classes.
-     */
-    protected static Class loadVirtualMachineImplClass()
-                               throws ClassNotFoundException {
-        Class vmImplClass = getFreeVMImplClass();
-        if (vmImplClass == null) {
-            ClassLoader cl = new SAJDIClassLoader(myLoader);
-            vmImplClass = getVMImplClassFrom(cl);
-        }
-        return vmImplClass;
-    }
-
-    /* We look for System property sun.jvm.hotspot.jdi.<vm version>.
-     * This property should have the value of JDK HOME directory for
-     * the given <vm version>.
-     */
-    private static String getSAClassPathForVM(String vmVersion) {
-        final String prefix = "sun.jvm.hotspot.jdi.";
-        // look for exact match of VM version
-        String jvmHome = System.getProperty(prefix + vmVersion);
-        if (DEBUG) {
-            System.out.println("looking for System property " + prefix + vmVersion);
-        }
-
-        if (jvmHome == null) {
-            // omit chars after first '-' in VM version and try
-            // for example, in '1.5.0-b55' we take '1.5.0'
-            int index = vmVersion.indexOf('-');
-            if (index != -1) {
-                vmVersion = vmVersion.substring(0, index);
-                if (DEBUG) {
-                    System.out.println("looking for System property " + prefix + vmVersion);
-                }
-                jvmHome = System.getProperty(prefix + vmVersion);
-            }
-
-            if (jvmHome == null) {
-                // System property is not set
-                if (DEBUG) {
-                    System.out.println("can't locate JDK home for " + vmVersion);
-                }
-                return null;
-            }
-        }
-
-        if (DEBUG) {
-            System.out.println("JDK home for " + vmVersion + " is " + jvmHome);
-        }
-
-        // sa-jdi is in $JDK_HOME/lib directory
-        StringBuffer buf = new StringBuffer();
-        buf.append(jvmHome);
-        buf.append(File.separatorChar);
-        buf.append("lib");
-        buf.append(File.separatorChar);
-        buf.append("sa-jdi.jar");
-        return buf.toString();
-    }
-
-    /* This method loads VirtualMachineImpl class by a ClassLoader
-     * configured with sa-jdi.jar path of given 'vmVersion'. This is
-     * used for cross VM version debugging. Refer to comments in
-     * SAJDIClassLoader as well.
-     */
-    protected static Class loadVirtualMachineImplClass(String vmVersion)
-            throws ClassNotFoundException {
-        if (DEBUG) {
-            System.out.println("attemping to load sa-jdi.jar for version " + vmVersion);
-        }
-        String classPath = getSAClassPathForVM(vmVersion);
-        if (classPath != null) {
-            ClassLoader cl = new SAJDIClassLoader(myLoader, classPath);
-            return getVMImplClassFrom(cl);
-        } else {
-            return null;
-        }
-    }
-
-    /* Is the given throwable an instanceof VMVersionMismatchException?
-     * Note that we can't do instanceof check because the exception
-     * class might have been loaded by a different class loader.
-     */
-    private static boolean isVMVersionMismatch(Throwable throwable) {
-        String className = throwable.getClass().getName();
-        return className.equals("sun.jvm.hotspot.runtime.VMVersionMismatchException");
-    }
-
-    /* gets target VM version from the given VMVersionMismatchException.
-     * Note that we need to reflectively call the method because of we may
-     * have got this from different classloader's namespace */
-    private static String getVMVersion(Throwable throwable)
-        throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
-        // assert isVMVersionMismatch(throwable), "not a VMVersionMismatch"
-        Class expClass = throwable.getClass();
-        Method targetVersionMethod = expClass.getMethod("getTargetVersion", new Class[0]);
-        return (String) targetVersionMethod.invoke(throwable);
-    }
-
-    /** If the causal chain has a sun.jvm.hotspot.runtime.VMVersionMismatchException,
-        attempt to load VirtualMachineImpl class for target VM version. */
-    protected static Class handleVMVersionMismatch(InvocationTargetException ite) {
-        Throwable cause = ite.getCause();
-        if (DEBUG) {
-            System.out.println("checking for version mismatch...");
-        }
-        while (cause != null) {
-            try {
-                if (isVMVersionMismatch(cause)) {
-                    if (DEBUG) {
-                        System.out.println("Triggering cross VM version support...");
-                    }
-                    return loadVirtualMachineImplClass(getVMVersion(cause));
-                }
-            } catch (Exception exp) {
-                if (DEBUG) {
-                    System.out.println("failed to load VirtualMachineImpl class");
-                    exp.printStackTrace();
-                }
-                return null;
-            }
-            cause = cause.getCause();
-        }
-        return null;
-    }
-
-    protected void checkNativeLink(SecurityManager sm, String os) {
-        if (os.equals("SunOS") || os.equals("Linux") || os.contains("OS X")) {
-            // link "saproc" - SA native library on SunOS, Linux, and Mac OS X
-            sm.checkLink("saproc");
-        } else if (os.startsWith("Windows")) {
-            // link "sawindbg" - SA native library on Windows.
-            sm.checkLink("sawindbg");
-        } else {
-           throw new RuntimeException(os + " is not yet supported");
-        }
-    }
-
-    // we set an observer to detect VirtualMachineImpl.dispose call
-    // and on dispose we add corresponding VirtualMachineImpl.class to
-    // free VirtualMachimeImpl Class list.
-    protected static void setVMDisposeObserver(final Object vm) {
-        try {
-            Method setDisposeObserverMethod = vm.getClass().getDeclaredMethod("setDisposeObserver",
-                                                         new Class[] { java.util.Observer.class });
-            setDisposeObserverMethod.setAccessible(true);
-            setDisposeObserverMethod.invoke(vm,
-                                         new Object[] {
-                                             new Observer() {
-                                                 public void update(Observable o, Object data) {
-                                                     if (DEBUG) {
-                                                         System.out.println("got VM.dispose notification");
-                                                     }
-                                                     addFreeVMImplClass(vm.getClass());
-                                                 }
-                                             }
-                                         });
-        } catch (Exception exp) {
-            if (DEBUG) {
-               System.out.println("setVMDisposeObserver() got an exception:");
-               exp.printStackTrace();
-            }
-        }
-    }
-
-    public Map defaultArguments() {
-        Map defaults = new LinkedHashMap();
-        Collection values = defaultArguments.values();
-
-        Iterator iter = values.iterator();
-        while (iter.hasNext()) {
-            ArgumentImpl argument = (ArgumentImpl)iter.next();
-            defaults.put(argument.name(), argument.clone());
-        }
-        return defaults;
-    }
-
-    void addStringArgument(String name, String label, String description,
-                           String defaultValue, boolean mustSpecify) {
-        defaultArguments.put(name,
-                             new StringArgumentImpl(name, label,
-                                                    description,
-                                                    defaultValue,
-                                                    mustSpecify));
-    }
-
-    void addBooleanArgument(String name, String label, String description,
-                            boolean defaultValue, boolean mustSpecify) {
-        defaultArguments.put(name,
-                             new BooleanArgumentImpl(name, label,
-                                                     description,
-                                                     defaultValue,
-                                                     mustSpecify));
-    }
-
-    void addIntegerArgument(String name, String label, String description,
-                            String defaultValue, boolean mustSpecify,
-                            int min, int max) {
-        defaultArguments.put(name,
-                             new IntegerArgumentImpl(name, label,
-                                                     description,
-                                                     defaultValue,
-                                                     mustSpecify,
-                                                     min, max));
-    }
-
-    void addSelectedArgument(String name, String label, String description,
-                             String defaultValue, boolean mustSpecify,
-                             List list) {
-        defaultArguments.put(name,
-                             new SelectedArgumentImpl(name, label,
-                                                      description,
-                                                      defaultValue,
-                                                      mustSpecify, list));
-    }
-
-    ArgumentImpl argument(String name, Map arguments)
-                throws IllegalConnectorArgumentsException {
-
-        ArgumentImpl argument = (ArgumentImpl)arguments.get(name);
-        if (argument == null) {
-            throw new IllegalConnectorArgumentsException(
-                         "Argument missing", name);
-        }
-        String value = argument.value();
-        if (value == null || value.length() == 0) {
-            if (argument.mustSpecify()) {
-            throw new IllegalConnectorArgumentsException(
-                         "Argument unspecified", name);
-            }
-        } else if(!argument.isValid(value)) {
-            throw new IllegalConnectorArgumentsException(
-                         "Argument invalid", name);
-        }
-
-        return argument;
-    }
-
-    String getString(String key) {
-        //fixme jjh; needs i18n
-        // this is not public return ((VirtualMachineManagerImpl)manager).getString(key);
-        return key;
-    }
-
-    public String toString() {
-        String string = name() + " (defaults: ";
-        Iterator iter = defaultArguments().values().iterator();
-        boolean first = true;
-        while (iter.hasNext()) {
-            ArgumentImpl argument = (ArgumentImpl)iter.next();
-            if (!first) {
-                string += ", ";
-            }
-            string += argument.toString();
-            first = false;
-        }
-        return string  + ")";
-    }
-
-    abstract class ArgumentImpl implements Connector.Argument, Cloneable, Serializable {
-        private String name;
-        private String label;
-        private String description;
-        private String value;
-        private boolean mustSpecify;
-
-        ArgumentImpl(String name, String label, String description,
-                     String value,
-                     boolean mustSpecify) {
-            this.name = name;
-            this.label = label;
-            this.description = description;
-            this.value = value;
-            this.mustSpecify = mustSpecify;
-        }
-
-        public abstract boolean isValid(String value);
-
-        public String name() {
-            return name;
-        }
-
-        public String label() {
-            return label;
-        }
-
-        public String description() {
-            return description;
-        }
-
-        public String value() {
-            return value;
-        }
-
-        public void setValue(String value) {
-            if (value == null) {
-                throw new NullPointerException("Can't set null value");
-            }
-            this.value = value;
-        }
-
-        public boolean mustSpecify() {
-            return mustSpecify;
-        }
-
-        public boolean equals(Object obj) {
-            if ((obj != null) && (obj instanceof Connector.Argument)) {
-                Connector.Argument other = (Connector.Argument)obj;
-                return (name().equals(other.name())) &&
-                       (description().equals(other.description())) &&
-                       (mustSpecify() == other.mustSpecify()) &&
-                       (value().equals(other.value()));
-            } else {
-                return false;
-            }
-        }
-
-        public int hashCode() {
-            return description().hashCode();
-        }
-
-        public Object clone() {
-            try {
-                return super.clone();
-            } catch (CloneNotSupportedException e) {
-                // Object should always support clone
-                throw (InternalException) new InternalException().initCause(e);
-            }
-        }
-
-        public String toString() {
-            return name() + "=" + value();
-        }
-    }
-
-    class BooleanArgumentImpl extends ConnectorImpl.ArgumentImpl
-                              implements Connector.BooleanArgument {
-
-        BooleanArgumentImpl(String name, String label, String description,
-                            boolean value,
-                            boolean mustSpecify) {
-            super(name, label, description, null, mustSpecify);
-            if(trueString == null) {
-                trueString = getString("true");
-                falseString = getString("false");
-            }
-            setValue(value);
-        }
-
-        /**
-         * Sets the value of the argument.
-         */
-        public void setValue(boolean value) {
-            setValue(stringValueOf(value));
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if value is a string
-         * representation of a boolean value.
-         * @see #stringValueOf(boolean)
-         */
-        public boolean isValid(String value) {
-            return value.equals(trueString) || value.equals(falseString);
-        }
-
-        /**
-         * Return the string representation of the <code>value</code>
-         * parameter.
-         * Does not set or examine the value or the argument.
-         * @return the localized String representation of the
-         * boolean value.
-         */
-        public String stringValueOf(boolean value) {
-            return value? trueString : falseString;
-        }
-
-        /**
-         * Return the value of the argument as a boolean.  Since
-         * the argument may not have been set or may have an invalid
-         * value {@link #isValid(String)} should be called on
-         * {@link #value()} to check its validity.  If it is invalid
-         * the boolean returned by this method is undefined.
-         * @return the value of the argument as a boolean.
-         */
-        public boolean booleanValue() {
-            return value().equals(trueString);
-        }
-    }
-
-    class IntegerArgumentImpl extends ConnectorImpl.ArgumentImpl
-                              implements Connector.IntegerArgument {
-
-        private final int min;
-        private final int max;
-
-        IntegerArgumentImpl(String name, String label, String description,
-                            String value,
-                            boolean mustSpecify, int min, int max) {
-            super(name, label, description, value, mustSpecify);
-            this.min = min;
-            this.max = max;
-        }
-
-        /**
-         * Sets the value of the argument.
-         * The value should be checked with {@link #isValid(int)}
-         * before setting it; invalid values will throw an exception
-         * when the connection is established - for example,
-         * on {@link LaunchingConnector#launch}
-         */
-        public void setValue(int value) {
-            setValue(stringValueOf(value));
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if value represents an int that is
-         * <code>{@link #min()} &lt;= value &lt;= {@link #max()}</code>
-         */
-        public boolean isValid(String value) {
-            if (value == null) {
-                return false;
-            }
-            try {
-                return isValid(Integer.decode(value).intValue());
-            } catch(NumberFormatException exc) {
-                return false;
-            }
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if
-         * <code>{@link #min()} &lt;= value  &lt;= {@link #max()}</code>
-         */
-        public boolean isValid(int value) {
-            return min <= value && value <= max;
-        }
-
-        /**
-         * Return the string representation of the <code>value</code>
-         * parameter.
-         * Does not set or examine the value or the argument.
-         * @return the String representation of the
-         * int value.
-         */
-        public String stringValueOf(int value) {
-            // *** Should this be internationalized????
-            // *** Even Brian Beck was unsure if an Arabic programmer
-            // *** would expect port numbers in Arabic numerals,
-            // *** so punt for now.
-            return ""+value;
-        }
-
-        /**
-         * Return the value of the argument as a int.  Since
-         * the argument may not have been set or may have an invalid
-         * value {@link #isValid(String)} should be called on
-         * {@link #value()} to check its validity.  If it is invalid
-         * the int returned by this method is undefined.
-         * @return the value of the argument as a int.
-         */
-        public int intValue() {
-            if (value() == null) {
-                return 0;
-            }
-            try {
-                return Integer.decode(value()).intValue();
-            } catch(NumberFormatException exc) {
-                return 0;
-            }
-        }
-
-        /**
-         * The upper bound for the value.
-         * @return the maximum allowed value for this argument.
-         */
-        public int max() {
-            return max;
-        }
-
-        /**
-         * The lower bound for the value.
-         * @return the minimum allowed value for this argument.
-         */
-        public int min() {
-            return min;
-        }
-    }
-
-    class StringArgumentImpl extends ConnectorImpl.ArgumentImpl
-                              implements Connector.StringArgument {
-
-        StringArgumentImpl(String name, String label, String description,
-                           String value,
-                           boolean mustSpecify) {
-            super(name, label, description, value, mustSpecify);
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> always
-         */
-        public boolean isValid(String value) {
-            return true;
-        }
-    }
-
-    class SelectedArgumentImpl extends ConnectorImpl.ArgumentImpl
-                              implements Connector.SelectedArgument {
-
-        private final List choices;
-
-        SelectedArgumentImpl(String name, String label, String description,
-                             String value,
-                             boolean mustSpecify, List choices) {
-            super(name, label, description, value, mustSpecify);
-            this.choices = Collections.unmodifiableList(
-                                           new ArrayList(choices));
-        }
-
-        /**
-         * Return the possible values for the argument
-         * @return {@link List} of {@link String}
-         */
-        public List choices() {
-            return choices;
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if value is one of {@link #choices()}.
-         */
-        public boolean isValid(String value) {
-            return choices.contains(value);
-        }
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/DoubleTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public class DoubleTypeImpl extends PrimitiveTypeImpl implements DoubleType {
-    DoubleTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return "D";
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedDoubleValue());
-    }
-
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/DoubleValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-
-public class DoubleValueImpl extends PrimitiveValueImpl
-                             implements DoubleValue {
-    private double value;
-
-    DoubleValueImpl(VirtualMachine aVm,double aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof DoubleValue)) {
-            return (value == ((DoubleValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int compareTo(DoubleValue doubleVal) {
-        double other = doubleVal.value();
-        if (value() < other) {
-            return -1;
-        } else if (value() == other) {
-            return 0;
-        } else {
-            return 1;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public Type type() {
-        return vm.theDoubleType();
-    }
-
-    public double value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0.0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        if ((value > Short.MAX_VALUE) || (value < Short.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-
-    int checkedIntValue() throws InvalidTypeException {
-        if ((value > Integer.MAX_VALUE) || (value < Integer.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to int");
-        } else {
-            return super.checkedIntValue();
-        }
-    }
-
-    long checkedLongValue() throws InvalidTypeException {
-        long longValue = (long)value;
-        if (longValue != value) {
-            throw new InvalidTypeException("Can't convert " + value + " to long");
-        } else {
-            return super.checkedLongValue();
-        }
-    }
-
-    float checkedFloatValue() throws InvalidTypeException {
-        float floatValue = (float)value;
-        if (floatValue != value) {
-            throw new InvalidTypeException("Can't convert " + value + " to float");
-        } else {
-            return super.checkedFloatValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/FieldImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,216 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-import sun.jvm.hotspot.oops.Oop;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.Array;
-import sun.jvm.hotspot.oops.InstanceKlass;
-import sun.jvm.hotspot.oops.Symbol;
-import sun.jvm.hotspot.oops.FieldIdentifier;
-
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.Comparator;
-
-public class FieldImpl extends TypeComponentImpl implements Field {
-    private JNITypeParser signatureParser;
-    private sun.jvm.hotspot.oops.Field saField;
-
-    FieldImpl( VirtualMachine vm, ReferenceTypeImpl declaringType,
-               sun.jvm.hotspot.oops.Field saField) {
-        super(vm, declaringType);
-        this.saField = saField;
-        getParser();
-    }
-
-    private void getParser() {
-        if (signatureParser == null) {
-            Symbol sig1 = saField.getSignature();
-            signature = sig1.asString();
-            signatureParser = new JNITypeParser(signature);
-        }
-    }
-
-    sun.jvm.hotspot.oops.Field ref() {
-        return saField;
-    }
-
-    // get the value of static field
-    ValueImpl getValue() {
-        return getValue(saField.getFieldHolder().getJavaMirror());
-    }
-
-    // get the value of this Field from a specific Oop
-    ValueImpl getValue(Oop target) {
-        ValueImpl valueImpl;
-        sun.jvm.hotspot.oops.Field saField = (sun.jvm.hotspot.oops.Field) ref();
-        sun.jvm.hotspot.oops.FieldType ft = saField.getFieldType();
-        if (ft.isArray()) {
-            sun.jvm.hotspot.oops.OopField of = (sun.jvm.hotspot.oops.OopField)saField;
-            valueImpl = (ArrayReferenceImpl) vm.arrayMirror((Array)of.getValue(target));
-        } else if (ft.isObject()) {
-            sun.jvm.hotspot.oops.OopField of = (sun.jvm.hotspot.oops.OopField)saField;
-            valueImpl = (ObjectReferenceImpl) vm.objectMirror(of.getValue(target));
-        } else if (ft.isByte()) {
-            sun.jvm.hotspot.oops.ByteField bf = (sun.jvm.hotspot.oops.ByteField)saField;
-            valueImpl = (ByteValueImpl) vm.mirrorOf(bf.getValue(target));
-        } else if (ft.isChar()) {
-            sun.jvm.hotspot.oops.CharField cf = (sun.jvm.hotspot.oops.CharField)saField;
-            valueImpl = (CharValueImpl) vm.mirrorOf(cf.getValue(target));
-        } else if (ft.isDouble()) {
-            sun.jvm.hotspot.oops.DoubleField df = (sun.jvm.hotspot.oops.DoubleField)saField;
-            valueImpl = (DoubleValueImpl) vm.mirrorOf(df.getValue(target));
-        } else if (ft.isFloat()) {
-            sun.jvm.hotspot.oops.FloatField ff = (sun.jvm.hotspot.oops.FloatField)saField;
-            valueImpl = (FloatValueImpl) vm.mirrorOf(ff.getValue(target));
-        } else if (ft.isInt()) {
-            sun.jvm.hotspot.oops.IntField iif = (sun.jvm.hotspot.oops.IntField)saField;
-            valueImpl = (IntegerValueImpl) vm.mirrorOf(iif.getValue(target));
-        } else if (ft.isLong()) {
-            sun.jvm.hotspot.oops.LongField lf = (sun.jvm.hotspot.oops.LongField)saField;
-            valueImpl = (LongValueImpl) vm.mirrorOf(lf.getValue(target));
-        } else if (ft.isShort()) {
-            sun.jvm.hotspot.oops.ShortField sf = (sun.jvm.hotspot.oops.ShortField)saField;
-            valueImpl = (ShortValueImpl) vm.mirrorOf(sf.getValue(target));
-        } else if (ft.isBoolean()) {
-            sun.jvm.hotspot.oops.BooleanField bf = (sun.jvm.hotspot.oops.BooleanField)saField;
-            valueImpl = (BooleanValueImpl) vm.mirrorOf(bf.getValue(target));
-        } else {
-            throw new RuntimeException("Should not reach here");
-        }
-        return valueImpl;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof FieldImpl)) {
-            FieldImpl other = (FieldImpl)obj;
-            return (declaringType().equals(other.declaringType())) &&
-                (ref().equals(other.ref())) &&
-                super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public boolean isTransient() {
-        return saField.isTransient();
-    }
-
-    public boolean isVolatile() {
-        return saField.isVolatile();
-    }
-
-    public boolean isEnumConstant() {
-        return saField.isEnumConstant();
-    }
-
-    public Type type() throws ClassNotLoadedException {
-        // So, we do it just like JDI does by searching the enclosing type.
-        return findType(signature());
-    }
-
-    public String typeName() { //fixme jjh: jpda version creates redundant JNITypeParsers
-        getParser();
-        return signatureParser.typeName();
-    }
-
-    public String genericSignature() {
-        Symbol genSig = saField.getGenericSignature();
-        return (genSig != null)? genSig.asString() : null;
-    }
-
-    // From interface Comparable
-    public int compareTo(Field field) {
-        ReferenceTypeImpl declaringType = (ReferenceTypeImpl)declaringType();
-        int rc = declaringType.compareTo(field.declaringType());
-        if (rc == 0) {
-            rc = declaringType.indexOf(this) -
-                declaringType.indexOf(field);
-        }
-        return rc;
-    }
-
-    // from interface Mirror
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-
-        buf.append(declaringType().name());
-        buf.append('.');
-        buf.append(name());
-        return buf.toString();
-    }
-
-    public String name() {
-        FieldIdentifier myName =  saField.getID();
-        return myName.getName();
-    }
-
-    // From interface Accessible
-    public int modifiers() {
-        return saField.getAccessFlagsObj().getStandardFlags();
-    }
-
-    public boolean isPackagePrivate() {
-        return saField.isPackagePrivate();
-    }
-
-    public boolean isPrivate() {
-        return saField.isPrivate();
-    }
-
-    public boolean isProtected() {
-        return saField.isProtected();
-    }
-
-    public boolean isPublic() {
-        return saField.isPublic();
-    }
-
-    public boolean isStatic() {
-        return saField.isStatic();
-    }
-
-    public boolean isFinal() {
-        return saField.isFinal();
-    }
-
-    public boolean isSynthetic() {
-        return saField.isSynthetic();
-    }
-
-    public int hashCode() {
-        return saField.hashCode();
-    }
-
-
-    private Type findType(String signature) throws ClassNotLoadedException {
-        ReferenceTypeImpl enclosing = (ReferenceTypeImpl)declaringType();
-        return enclosing.findType(signature);
-    }
-
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/FloatTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public class FloatTypeImpl extends PrimitiveTypeImpl implements FloatType {
-    FloatTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return "F";
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedFloatValue());
-    }
-
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/FloatValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-
-public class FloatValueImpl extends PrimitiveValueImpl
-                            implements FloatValue {
-    private float value;
-
-    FloatValueImpl(VirtualMachine aVm,float aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof FloatValue)) {
-            return (value == ((FloatValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(FloatValue floatVal) {
-        float other = floatVal.value();
-        if (value() < other) {
-            return -1;
-        } else if (value() == other) {
-            return 0;
-        } else {
-            return 1;
-        }
-    }
-
-    public Type type() {
-        return vm.theFloatType();
-    }
-
-    public float value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0.0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        if ((value > Short.MAX_VALUE) || (value < Short.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-
-    int checkedIntValue() throws InvalidTypeException {
-        int intValue = (int)value;
-        if (intValue != value) {
-            throw new InvalidTypeException("Can't convert " + value + " to int");
-        } else {
-            return super.checkedIntValue();
-        }
-    }
-
-    long checkedLongValue() throws InvalidTypeException {
-        long longValue = (long)value;
-        if (longValue != value) {
-            throw new InvalidTypeException("Can't convert " + value + " to long");
-        } else {
-            return super.checkedLongValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/IntegerTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public class IntegerTypeImpl extends PrimitiveTypeImpl implements IntegerType {
-    IntegerTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-    public String signature() {
-        return "I";
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedIntValue());
-    }
-
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/IntegerValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-
-public class IntegerValueImpl extends PrimitiveValueImpl
-                              implements IntegerValue {
-    private int value;
-
-    IntegerValueImpl(VirtualMachine aVm,int aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof IntegerValue)) {
-            return (value == ((IntegerValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(IntegerValue integerVal) {
-        return value() - integerVal.value();
-    }
-
-    public Type type() {
-        return vm.theIntegerType();
-    }
-
-    public int value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        if ((value > Short.MAX_VALUE) || (value < Short.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/InterfaceTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, 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.jdi;
-
-import java.lang.ref.SoftReference;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import sun.jvm.hotspot.oops.InstanceKlass;
-
-import com.sun.jdi.ClassNotPreparedException;
-import com.sun.jdi.ClassType;
-import com.sun.jdi.InterfaceType;
-import com.sun.jdi.Method;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.VirtualMachine;
-
-public class InterfaceTypeImpl extends ReferenceTypeImpl
-                               implements InterfaceType {
-    private SoftReference superInterfacesCache = null;
-    private SoftReference subInterfacesCache = null;
-    private SoftReference implementorsCache = null;
-
-    protected InterfaceTypeImpl(VirtualMachine aVm, InstanceKlass aRef) {
-        super(aVm, aRef);
-    }
-
-    public List superinterfaces() throws ClassNotPreparedException {
-        List superinterfaces = (superInterfacesCache != null)? (List) superInterfacesCache.get() : null;
-        if (superinterfaces == null) {
-            checkPrepared();
-            superinterfaces = Collections.unmodifiableList(getInterfaces());
-            superInterfacesCache = new SoftReference(superinterfaces);
-        }
-        return superinterfaces;
-    }
-
-    public List subinterfaces() {
-        List subinterfaces = (subInterfacesCache != null)? (List) subInterfacesCache.get() : null;
-        if (subinterfaces == null) {
-            List all = vm.allClasses();
-            subinterfaces = new ArrayList();
-            Iterator iter = all.iterator();
-            while (iter.hasNext()) {
-                ReferenceType refType = (ReferenceType)iter.next();
-                if (refType instanceof InterfaceType) {
-                    InterfaceType interfaze = (InterfaceType)refType;
-                    if (interfaze.isPrepared() && interfaze.superinterfaces().contains(this)) {
-                        subinterfaces.add(interfaze);
-                    }
-               }
-            }
-            subinterfaces = Collections.unmodifiableList(subinterfaces);
-            subInterfacesCache = new SoftReference(subinterfaces);
-        }
-        return subinterfaces;
-    }
-
-    public List implementors() {
-        List implementors = (implementorsCache != null)? (List) implementorsCache.get() : null;
-        if (implementors == null) {
-            List all = vm.allClasses();
-            implementors = new ArrayList();
-            Iterator iter = all.iterator();
-            while (iter.hasNext()) {
-                ReferenceType refType = (ReferenceType)iter.next();
-                if (refType instanceof ClassType) {
-                    ClassType clazz = (ClassType)refType;
-                    if (clazz.isPrepared() && clazz.interfaces().contains(this)) {
-                        implementors.add(clazz);
-                    }
-                }
-            }
-            implementors = Collections.unmodifiableList(implementors);
-            implementorsCache = new SoftReference(implementors);
-        }
-        return implementors;
-    }
-
-    @Override
-    void addVisibleMethods(Map<String, Method> methodMap, Set<InterfaceType> seenInterfaces) {
-        /*
-         * Add methods from
-         * parent types first, so that the methods in this class will
-         * overwrite them in the hash table
-         */
-        Iterator<InterfaceType> iter = superinterfaces().iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            if (!seenInterfaces.contains(interfaze)) {
-                interfaze.addVisibleMethods(methodMap, seenInterfaces);
-                seenInterfaces.add(interfaze);
-            }
-        }
-
-        addToMethodMap(methodMap, methods());
-    }
-
-    List getAllMethods() {
-        ArrayList list = new ArrayList(methods());
-        /*
-         * It's more efficient if don't do this
-         * recursively.
-         */
-        List interfaces = allSuperinterfaces();
-        Iterator iter = interfaces.iterator();
-        while (iter.hasNext()) {
-            InterfaceType interfaze = (InterfaceType)iter.next();
-            list.addAll(interfaze.methods());
-        }
-
-        return list;
-    }
-
-    List allSuperinterfaces() {
-        ArrayList list = new ArrayList();
-        addSuperinterfaces(list);
-        return list;
-    }
-
-    void addSuperinterfaces(List list) {
-        /*
-         * This code is a little strange because it
-         * builds the list with a more suitable order than the
-         * depth-first approach a normal recursive solution would
-         * take. Instead, all direct superinterfaces precede all
-         * indirect ones.
-         */
-
-        /*
-         * Get a list of direct superinterfaces that's not already in the
-         * list being built.
-         */
-        List immediate = new ArrayList(superinterfaces());
-        Iterator iter = immediate.iterator();
-        while (iter.hasNext()) {
-            InterfaceType interfaze = (InterfaceType)iter.next();
-            if (list.contains(interfaze)) {
-                iter.remove();
-            }
-        }
-
-        /*
-         * Add all new direct superinterfaces
-         */
-        list.addAll(immediate);
-
-        /*
-         * Recurse for all new direct superinterfaces.
-         */
-        iter = immediate.iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            interfaze.addSuperinterfaces(list);
-        }
-    }
-
-    boolean isAssignableTo(ReferenceType type) {
-
-        // Exact match?
-        if (this.equals(type)) {
-            return true;
-        } else {
-            // Try superinterfaces.
-            List supers = superinterfaces();
-            Iterator iter = supers.iterator();
-            while (iter.hasNext()) {
-                InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-                if (interfaze.isAssignableTo(type)) {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    }
-
-    List inheritedTypes() {
-        return superinterfaces();
-    }
-
-    public boolean isInitialized() {
-        return isPrepared();
-    }
-
-    public String toString() {
-       return "interface " + name() + " (" + loaderString() + ")";
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/JNITypeParser.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import java.util.List;
-import java.util.ArrayList;
-
-public class JNITypeParser {
-
-    static final char SIGNATURE_ENDCLASS = ';';
-    static final char SIGNATURE_FUNC = '(';
-    static final char SIGNATURE_ENDFUNC = ')';
-
-    private String signature;
-    private List typeNameList;
-    private List signatureList;
-    private int currentIndex;
-
-    JNITypeParser(String signature) {
-        this.signature = signature;
-    }
-
-    static String typeNameToSignature(String signature) {
-        StringBuffer buffer = new StringBuffer();
-        int firstIndex = signature.indexOf('[');
-        int index = firstIndex;
-        while (index != -1) {
-            buffer.append('[');
-            index = signature.indexOf('[', index + 1);
-        }
-
-        if (firstIndex != -1) {
-            signature = signature.substring(0, firstIndex);
-        }
-
-        if (signature.equals("boolean")) {
-            buffer.append('Z');
-        } else if (signature.equals("byte")) {
-            buffer.append('B');
-        } else if (signature.equals("char")) {
-            buffer.append('C');
-        } else if (signature.equals("short")) {
-            buffer.append('S');
-        } else if (signature.equals("int")) {
-            buffer.append('I');
-        } else if (signature.equals("long")) {
-            buffer.append('J');
-        } else if (signature.equals("float")) {
-            buffer.append('F');
-        } else if (signature.equals("double")) {
-            buffer.append('D');
-        } else {
-            buffer.append('L');
-            buffer.append(signature.replace('.', '/'));
-            buffer.append(';');
-        }
-
-        return buffer.toString();
-    }
-
-    String typeName() {
-        return (String)typeNameList().get(typeNameList().size()-1);
-    }
-
-    List argumentTypeNames() {
-        return typeNameList().subList(0, typeNameList().size() - 1);
-    }
-
-    String signature() {
-        return (String)signatureList().get(signatureList().size()-1);
-    }
-
-    List argumentSignatures() {
-        return signatureList().subList(0, signatureList().size() - 1);
-    }
-
-    int dimensionCount() {
-        int count = 0;
-        String signature = signature();
-        while (signature.charAt(count) == '[') {
-            count++;
-        }
-        return count;
-    }
-
-    String componentSignature(int level) {
-        return signature().substring(level);
-    }
-
-    private synchronized List signatureList() {
-        if (signatureList == null) {
-            signatureList = new ArrayList(10);
-            String elem;
-
-            currentIndex = 0;
-
-            while(currentIndex < signature.length()) {
-                elem = nextSignature();
-                signatureList.add(elem);
-            }
-            if (signatureList.size() == 0) {
-                throw new IllegalArgumentException("Invalid JNI signature '" +
-                                                   signature + "'");
-            }
-        }
-        return signatureList;
-    }
-
-    private synchronized List typeNameList() {
-        if (typeNameList == null) {
-            typeNameList = new ArrayList(10);
-            String elem;
-
-            currentIndex = 0;
-
-            while(currentIndex < signature.length()) {
-                elem = nextTypeName();
-                typeNameList.add(elem);
-            }
-            if (typeNameList.size() == 0) {
-                throw new IllegalArgumentException("Invalid JNI signature '" +
-                                                   signature + "'");
-            }
-        }
-        return typeNameList;
-    }
-
-    private String nextSignature() {
-        char key = signature.charAt(currentIndex++);
-
-        switch(key) {
-            case '[':
-                return  key + nextSignature();
-
-            case 'L':
-                int endClass = signature.indexOf(SIGNATURE_ENDCLASS,
-                                                 currentIndex);
-                String retVal = signature.substring(currentIndex - 1,
-                                                    endClass + 1);
-                currentIndex = endClass + 1;
-                return retVal;
-
-            case 'V':
-            case 'Z':
-            case 'B':
-            case 'C':
-            case 'S':
-            case 'I':
-            case 'J':
-            case 'F':
-            case 'D':
-                return String.valueOf(key);
-
-            case SIGNATURE_FUNC:
-            case SIGNATURE_ENDFUNC:
-                return nextSignature();
-
-            default:
-                throw new IllegalArgumentException(
-                    "Invalid JNI signature character '" + key + "'");
-
-        }
-    }
-
-    private String nextTypeName() {
-        char key = signature.charAt(currentIndex++);
-
-        switch(key) {
-            case '[':
-                return  nextTypeName() + "[]";
-
-            case 'B':
-                return "byte";
-
-            case 'C':
-                return "char";
-
-            case 'L':
-                int endClass = signature.indexOf(SIGNATURE_ENDCLASS,
-                                                 currentIndex);
-                String retVal = signature.substring(currentIndex,
-                                                    endClass);
-                retVal = retVal.replace('/','.');
-                currentIndex = endClass + 1;
-                return retVal;
-
-            case 'F':
-                return "float";
-
-            case 'D':
-                return "double";
-
-            case 'I':
-                return "int";
-
-            case 'J':
-                return "long";
-
-            case 'S':
-                return "short";
-
-            case 'V':
-                return "void";
-
-            case 'Z':
-                return "boolean";
-
-            case SIGNATURE_ENDFUNC:
-            case SIGNATURE_FUNC:
-                return nextTypeName();
-
-            default:
-                throw new IllegalArgumentException(
-                    "Invalid JNI signature character '" + key + "'");
-
-        }
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/JVMTIThreadState.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-package sun.jvm.hotspot.jdi;
-
-// from JVMTI specification - refer to jvmti.xml
-public interface JVMTIThreadState {
-    public static final int JVMTI_THREAD_STATE_ALIVE = 0x0001;
-    public static final int JVMTI_THREAD_STATE_TERMINATED = 0x0002;
-    public static final int JVMTI_THREAD_STATE_RUNNABLE = 0x0004;
-    public static final int JVMTI_THREAD_STATE_WAITING = 0x0080;
-    public static final int JVMTI_THREAD_STATE_WAITING_INDEFINITELY = 0x0010;
-    public static final int JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT = 0x0020;
-    public static final int JVMTI_THREAD_STATE_SLEEPING = 0x0040;
-    public static final int JVMTI_THREAD_STATE_IN_OBJECT_WAIT = 0x0100;
-    public static final int JVMTI_THREAD_STATE_PARKED = 0x0200;
-    public static final int JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER = 0x0400;
-    public static final int JVMTI_THREAD_STATE_SUSPENDED = 0x100000;
-    public static final int JVMTI_THREAD_STATE_INTERRUPTED = 0x200000;
-    public static final int JVMTI_THREAD_STATE_IN_NATIVE = 0x400000;
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LineInfo.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-interface LineInfo {
-
-    String liStratum();
-
-    int liLineNumber();
-
-    String liSourceName() throws AbsentInformationException;
-
-    String liSourcePath() throws AbsentInformationException;
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LocalVariableImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-/*
- * 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
- * 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.jdi;
-import com.sun.jdi.*;
-
-public class LocalVariableImpl extends MirrorImpl
-                               implements LocalVariable, ValueContainer
-{
-    private final Method method;
-    private final int slot;
-    private final Location scopeStart;
-    private final Location scopeEnd;
-    private final String name;
-    private final String signature;
-    private final String genericSignature;
-
-    LocalVariableImpl(VirtualMachine vm, Method method,
-                      int slot, Location scopeStart, Location scopeEnd,
-                      String name, String signature, String genericSignature) {
-        super(vm);
-        this.method = method;
-        this.slot = slot;
-        this.scopeStart = scopeStart;
-        this.scopeEnd = scopeEnd;
-        this.name = name;
-        this.signature = signature;
-        this.genericSignature = genericSignature;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof LocalVariableImpl)) {
-            LocalVariableImpl other = (LocalVariableImpl)obj;
-            return (method.equals(other.method) &&
-                    slot() == other.slot() &&
-                    super.equals(obj));
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return (int)method.hashCode() + slot();
-    }
-
-    public int compareTo(LocalVariable localVar) {
-        LocalVariableImpl other = (LocalVariableImpl) localVar;
-        int rc = method.compareTo(other.method);
-        if (rc == 0) {
-            rc = slot() - other.slot();
-        }
-        return rc;
-    }
-
-    public String name() {
-        return name;
-    }
-
-    /**
-     * @return a text representation of the declared type
-     * of this variable.
-     */
-    public String typeName() {
-        JNITypeParser parser = new JNITypeParser(signature);
-        return parser.typeName();
-    }
-
-    public Type type() throws ClassNotLoadedException {
-        return findType(signature());
-    }
-
-    public Type findType(String signature) throws ClassNotLoadedException {
-        ReferenceTypeImpl enclosing = (ReferenceTypeImpl)method.declaringType();
-        return enclosing.findType(signature);
-    }
-
-    public String signature() {
-        return signature;
-    }
-
-    public String genericSignature() {
-        return genericSignature;
-    }
-
-    public boolean isVisible(StackFrame frame) {
-        //validateMirror(frame);
-        Method frameMethod = frame.location().method();
-
-        if (!frameMethod.equals(method)) {
-            throw new IllegalArgumentException(
-                       "frame method different than variable's method");
-        }
-
-        // this is here to cover the possibility that we will
-        // allow LocalVariables for native methods.  If we do
-        // so we will have to re-examinine this.
-        if (frameMethod.isNative()) {
-            return false;
-        }
-
-        return ((scopeStart.compareTo(frame.location()) <= 0)
-             && (scopeEnd.compareTo(frame.location()) >= 0));
-    }
-
-    public boolean isArgument() {
-        try {
-            MethodImpl method = (MethodImpl)scopeStart.method();
-            return (slot < method.argSlotCount());
-        } catch (AbsentInformationException e) {
-            // If this variable object exists, there shouldn't be absent info
-            throw (InternalException) new InternalException().initCause(e);
-        }
-    }
-
-    int slot() {
-        return slot;
-    }
-
-    /*
-     * Compilers/VMs can have byte code ranges for variables of the
-     * same names that overlap. This is because the byte code ranges
-     * aren't necessarily scopes; they may have more to do with the
-     * lifetime of the variable's slot, depending on implementation.
-     *
-     * This method determines whether this variable hides an
-     * identically named variable; ie, their byte code ranges overlap
-     * this one starts after the given one. If it returns true this
-     * variable should be preferred when looking for a single variable
-     * with its name when both variables are visible.
-     */
-    boolean hides(LocalVariable other) {
-        LocalVariableImpl otherImpl = (LocalVariableImpl)other;
-        if (!method.equals(otherImpl.method) ||
-            !name.equals(otherImpl.name)) {
-            return false;
-        } else {
-            return (scopeStart.compareTo(otherImpl.scopeStart) > 0);
-        }
-    }
-
-    public String toString() {
-       return name() + " in " + method.toString() +
-              "@" + scopeStart.toString();
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LocationImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,224 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.*;
-
-public class LocationImpl extends MirrorImpl implements Location {
-    private final ReferenceTypeImpl declaringType;
-    private Method method;
-    private sun.jvm.hotspot.oops.Method methodRef;
-    private long codeIndex;
-    private LineInfo baseLineInfo = null;
-    private LineInfo otherLineInfo = null;
-
-    LocationImpl(VirtualMachine vm,
-                 Method method, long codeIndex) {
-        super(vm);
-
-        this.method = method;
-        this.codeIndex = method.isNative()? -1 : codeIndex;
-        this.declaringType = (ReferenceTypeImpl)method.declaringType();
-    }
-
-    /*
-     * This constructor allows lazy creation of the method mirror. This
-     * can be a performance savings if the method mirror does not yet
-     * exist.
-     */
-    LocationImpl(VirtualMachine vm, ReferenceType declaringType,
-                 sun.jvm.hotspot.oops.Method methodRef, long codeIndex) {
-        super(vm);
-
-        this.method = null;
-        this.codeIndex = codeIndex;
-        this.declaringType = (ReferenceTypeImpl)declaringType;
-        this.methodRef = methodRef;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof Location)) {
-            Location other = (Location)obj;
-            return (method().equals(other.method())) &&
-                   (codeIndex() == other.codeIndex()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: better hash code?
-         */
-        return method().hashCode() + (int)codeIndex();
-    }
-
-    public int compareTo(Location other) {
-        int rc = method().compareTo(other.method());
-        if (rc == 0) {
-            long diff = codeIndex() - other.codeIndex();
-            if (diff < 0)
-                return -1;
-            else if (diff > 0)
-                return 1;
-            else
-                return 0;
-        }
-        return rc;
-    }
-
-    public ReferenceType declaringType() {
-        return declaringType;
-    }
-
-    public Method method() {
-        if (method == null) {
-            method = declaringType.getMethodMirror(methodRef);
-            if (method.isNative()) {
-                codeIndex = -1;
-            }
-        }
-        return method;
-    }
-
-    public long codeIndex() {
-        method();  // be sure information is up-to-date
-        return codeIndex;
-    }
-
-    LineInfo getBaseLineInfo(SDE.Stratum stratum) {
-        LineInfo lineInfo;
-
-        /* check if there is cached info to use */
-        if (baseLineInfo != null) {
-            return baseLineInfo;
-        }
-
-        /* compute the line info */
-        MethodImpl methodImpl = (MethodImpl)method();
-         lineInfo = methodImpl.codeIndexToLineInfo(stratum,
-                                                   codeIndex());
-
-        /* cache it */
-        addBaseLineInfo(lineInfo);
-
-        return lineInfo;
-    }
-
-    LineInfo getLineInfo(SDE.Stratum stratum) {
-        LineInfo lineInfo;
-
-        /* base stratum is done slighly differently */
-        if (stratum.isJava()) {
-            return getBaseLineInfo(stratum);
-        }
-
-        /* check if there is cached info to use */
-        lineInfo = otherLineInfo; // copy because of concurrency
-        if (lineInfo != null &&
-                           stratum.id().equals(lineInfo.liStratum())) {
-            return lineInfo;
-        }
-        int baseLineNumber = lineNumber(SDE.BASE_STRATUM_NAME);
-        SDE.LineStratum lineStratum =
-                  stratum.lineStratum(declaringType, baseLineNumber);
-
-        if (lineStratum != null && lineStratum.lineNumber() != -1) {
-            lineInfo = new StratumLineInfo(stratum.id(),
-                                           lineStratum.lineNumber(),
-                                           lineStratum.sourceName(),
-                                           lineStratum.sourcePath());
-        } else {
-            /* find best match */
-            MethodImpl methodImpl = (MethodImpl)method();
-            lineInfo = methodImpl.codeIndexToLineInfo(stratum,
-                                                      codeIndex());
-        }
-
-        /* cache it */
-        addStratumLineInfo(lineInfo);
-
-        return lineInfo;
-    }
-
-    void addStratumLineInfo(LineInfo lineInfo) {
-        otherLineInfo = lineInfo;
-    }
-
-    void addBaseLineInfo(LineInfo lineInfo) {
-        baseLineInfo = lineInfo;
-    }
-
-    public String sourceName() throws AbsentInformationException {
-        return sourceName(vm.getDefaultStratum());
-    }
-
-    public String sourceName(String stratumID)
-                               throws AbsentInformationException {
-        return sourceName(declaringType.stratum(stratumID));
-    }
-
-    String sourceName(SDE.Stratum stratum)
-                               throws AbsentInformationException {
-        return getLineInfo(stratum).liSourceName();
-    }
-
-    public String sourcePath() throws AbsentInformationException {
-        return sourcePath(vm.getDefaultStratum());
-    }
-
-    public String sourcePath(String stratumID)
-                               throws AbsentInformationException {
-        return sourcePath(declaringType.stratum(stratumID));
-    }
-
-    String sourcePath(SDE.Stratum stratum)
-                               throws AbsentInformationException {
-        return getLineInfo(stratum).liSourcePath();
-    }
-
-    public int lineNumber() {
-        return lineNumber(vm.getDefaultStratum());
-    }
-
-    public int lineNumber(String stratumID) {
-        return lineNumber(declaringType.stratum(stratumID));
-    }
-
-    int lineNumber(SDE.Stratum stratum) {
-        return getLineInfo(stratum).liLineNumber();
-    }
-
-    public String toString() {
-        if (lineNumber() == -1) {
-            return method().toString() + "+" + codeIndex();
-        } else {
-            return declaringType().name() + ":" + lineNumber();
-        }
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LongTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public class LongTypeImpl extends PrimitiveTypeImpl implements LongType {
-    LongTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return "J";
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedLongValue());
-    }
-
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/LongValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-
-public class LongValueImpl extends PrimitiveValueImpl
-                           implements LongValue {
-    private long value;
-
-    LongValueImpl(VirtualMachine aVm,long aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof LongValue)) {
-            return (value == ((LongValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(LongValue longVal) {
-        long other = longVal.value();
-        if (value() < other) {
-            return -1;
-        } else if (value() == other) {
-            return 0;
-        } else {
-            return 1;
-        }
-    }
-
-    public Type type() {
-        return vm.theLongType();
-    }
-
-    public long value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        if ((value > Short.MAX_VALUE) || (value < Short.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-
-    int checkedIntValue() throws InvalidTypeException {
-        if ((value > Integer.MAX_VALUE) || (value < Integer.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to int");
-        } else {
-            return super.checkedIntValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/MethodImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,272 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-import sun.jvm.hotspot.oops.Symbol;
-import sun.jvm.hotspot.oops.LocalVariableTableElement;
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.lang.ref.SoftReference;
-import java.util.Collections;
-
-public abstract class MethodImpl extends TypeComponentImpl implements Method {
-    private JNITypeParser signatureParser;
-    protected sun.jvm.hotspot.oops.Method saMethod;
-
-    abstract int argSlotCount() throws AbsentInformationException;
-    abstract List allLineLocations(SDE.Stratum stratum,
-                                   String sourceName)
-                           throws AbsentInformationException;
-    abstract List locationsOfLine(SDE.Stratum stratum,
-                                  String sourceName,
-                                  int lineNumber)
-                           throws AbsentInformationException;
-
-    static MethodImpl createMethodImpl(VirtualMachine vm, ReferenceTypeImpl declaringType,
-                                       sun.jvm.hotspot.oops.Method saMethod) {
-        // Someday might have to add concrete and non-concrete subclasses.
-        if (saMethod.isNative() || saMethod.isAbstract()) {
-            return new NonConcreteMethodImpl(vm, declaringType, saMethod);
-        } else {
-            return new ConcreteMethodImpl(vm, declaringType, saMethod);
-        }
-    }
-
-    MethodImpl(VirtualMachine vm, ReferenceTypeImpl declaringType,
-               sun.jvm.hotspot.oops.Method saMethod ) {
-        super(vm, declaringType);
-        this.saMethod = saMethod;
-        getParser();
-    }
-
-    private JNITypeParser getParser() {
-        if (signatureParser == null) {
-            Symbol sig1 = saMethod.getSignature();
-            signature = sig1.asString();
-            signatureParser = new JNITypeParser(signature);
-        }
-        return signatureParser;
-    }
-
-    // Object ref() {
-    sun.jvm.hotspot.oops.Method ref() {
-        return saMethod;
-    }
-
-    public String genericSignature() {
-        Symbol genSig = saMethod.getGenericSignature();
-        return (genSig != null)? genSig.asString() : null;
-    }
-
-    public String returnTypeName() {
-        return getParser().typeName();
-    }
-
-    public Type returnType() throws ClassNotLoadedException {
-        return findType(getParser().signature());
-    }
-
-    private Type findType(String signature) throws ClassNotLoadedException {
-        ReferenceTypeImpl enclosing = (ReferenceTypeImpl)declaringType();
-        return enclosing.findType(signature);
-    }
-
-    public List argumentTypeNames() {
-        return getParser().argumentTypeNames();
-    }
-
-    List argumentSignatures() {
-        return getParser().argumentSignatures();
-    }
-
-    Type argumentType(int index) throws ClassNotLoadedException {
-        ReferenceTypeImpl enclosing = (ReferenceTypeImpl)declaringType();
-        String signature = (String)argumentSignatures().get(index);
-        return enclosing.findType(signature);
-    }
-
-    public List argumentTypes() throws ClassNotLoadedException {
-        int size = argumentSignatures().size();
-        ArrayList types = new ArrayList(size);
-        for (int i = 0; i < size; i++) {
-            Type type = argumentType(i);
-            types.add(type);
-        }
-        return types;
-    }
-
-    public boolean isAbstract() {
-        return saMethod.isAbstract();
-    }
-
-    public boolean isBridge() {
-        return saMethod.isBridge();
-    }
-
-    public boolean isSynchronized() {
-        return saMethod.isSynchronized();
-    }
-
-    public boolean isNative() {
-        return saMethod.isNative();
-    }
-
-    public boolean isVarArgs() {
-        return saMethod.isVarArgs();
-    }
-
-    public boolean isConstructor() {
-        return saMethod.isConstructor();
-    }
-
-    public boolean isStaticInitializer() {
-        return saMethod.isStaticInitializer();
-    }
-
-    public boolean isObsolete() {
-        return saMethod.isObsolete();
-    }
-
-    public final List allLineLocations()
-                           throws AbsentInformationException {
-        return allLineLocations(vm.getDefaultStratum(), null);
-    }
-
-    public List allLineLocations(String stratumID,
-                                 String sourceName)
-                           throws AbsentInformationException {
-        return allLineLocations(declaringType.stratum(stratumID),
-                                sourceName);
-    }
-
-    public final List locationsOfLine(int lineNumber)
-                           throws AbsentInformationException {
-        return locationsOfLine(vm.getDefaultStratum(),
-                               null, lineNumber);
-    }
-
-    public List locationsOfLine(String stratumID,
-                                String sourceName,
-                                int lineNumber)
-                           throws AbsentInformationException {
-        return locationsOfLine(declaringType.stratum(stratumID),
-                               sourceName, lineNumber);
-    }
-
-    LineInfo codeIndexToLineInfo(SDE.Stratum stratum,
-                                 long codeIndex) {
-        if (stratum.isJava()) {
-            return new BaseLineInfo(-1, declaringType);
-        } else {
-            return new StratumLineInfo(stratum.id(), -1,
-                                       null, null);
-        }
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof MethodImpl)) {
-            MethodImpl other = (MethodImpl)obj;
-            return (declaringType().equals(other.declaringType())) &&
-                (ref().equals(other.ref())) &&
-                super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    // From interface Comparable
-    public int compareTo(Method method) {
-        ReferenceTypeImpl declaringType = (ReferenceTypeImpl)declaringType();
-         int rc = declaringType.compareTo(method.declaringType());
-         if (rc == 0) {
-           rc = declaringType.indexOf(this) -
-               declaringType.indexOf(method);
-         }
-         return rc;
-    }
-
-    // from interface Mirror
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        sb.append(declaringType().name());
-        sb.append(".");
-        sb.append(name());
-        sb.append("(");
-        boolean first = true;
-        for (Iterator it = argumentTypeNames().iterator(); it.hasNext();) {
-            if (!first) {
-                sb.append(", ");
-            }
-            sb.append((String)it.next());
-            first = false;
-        }
-        sb.append(")");
-        return sb.toString();
-    }
-
-    public String name() {
-        Symbol myName = saMethod.getName();
-        return myName.asString();
-    }
-
-    public int modifiers() {
-        return saMethod.getAccessFlagsObj().getStandardFlags();
-    }
-
-    public boolean isPackagePrivate() {
-        return saMethod.isPackagePrivate();
-    }
-
-    public boolean isPrivate() {
-        return saMethod.isPrivate();
-    }
-
-    public boolean isProtected() {
-        return saMethod.isProtected();
-    }
-
-    public boolean isPublic() {
-        return saMethod.isPublic();
-    }
-
-    public boolean isStatic() {
-        return saMethod.isStatic();
-    }
-
-    public boolean isSynthetic() {
-        return saMethod.isSynthetic();
-    }
-
-    public boolean isFinal() {
-        return saMethod.isFinal();
-    }
-
-    public int hashCode() {
-        return saMethod.hashCode();
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/MirrorImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-abstract class MirrorImpl extends Object implements Mirror {
-    protected VirtualMachineImpl vm;
-
-    MirrorImpl(VirtualMachine aVm) {
-        super();
-
-        // Yes, its a bit of a hack. But by doing it this
-        // way, this is the only place we have to change
-        // typing to substitute a new impl.
-        vm = (VirtualMachineImpl)aVm;
-    }
-
-    public VirtualMachine virtualMachine() {
-        return vm;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof Mirror)) {
-            Mirror other = (Mirror)obj;
-            return vm.equals(other.virtualMachine());
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return vm.hashCode();
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/MonitorInfoImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2005, 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.jdi;
-
-import com.sun.jdi.*;
-
-// FIXME: This class should implement com.sun.jdi.MonitorInfo.
-//        So fix this when hotspot is started to build with
-//        jdk1.6.
-public class MonitorInfoImpl extends MirrorImpl {
-
-    /* Once false, monitorInfo should not be used.
-     * access synchronized on (vm.state())
-     */
-    private boolean isValid = true;
-
-    ObjectReference monitor;
-    ThreadReference thread;
-    int  stack_depth;
-
-    MonitorInfoImpl(VirtualMachine vm, ObjectReference mon,
-                    ThreadReference thread, int dpth) {
-        super(vm);
-        this.monitor = mon;
-        this.thread = thread;
-        this.stack_depth = dpth;
-    }
-
-    private void validateMonitorInfo() {
-        if (!isValid) {
-            throw new InvalidStackFrameException("Thread has been resumed");
-        }
-    }
-
-    public ObjectReference monitor() {
-        validateMonitorInfo();
-        return monitor;
-    }
-
-    public int stackDepth() {
-        validateMonitorInfo();
-        return stack_depth;
-    }
-
-    public ThreadReference thread() {
-        validateMonitorInfo();
-        return thread;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/NonConcreteMethodImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2002, 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.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.util.Collections;
-
-/**
- * Represents non-concrete (that is, native or abstract) methods.
- * Private to MethodImpl.
- */
-public class NonConcreteMethodImpl extends MethodImpl {
-
-    private Location location = null;
-
-    NonConcreteMethodImpl(VirtualMachine vm,
-                          ReferenceTypeImpl declaringType,
-                          sun.jvm.hotspot.oops.Method saMethod) {
-        super(vm, declaringType, saMethod);
-    }
-
-    public Location location() {
-        if (isAbstract()) {
-            return null;
-        }
-        if (location == null) {
-            location = new LocationImpl(vm, this, -1);
-        }
-        return location;
-    }
-
-    public List allLineLocations(String stratumID,
-                                 String sourceName) {
-        return new ArrayList(0);
-    }
-
-    public List allLineLocations(SDE.Stratum stratum,
-                                 String sourceName) {
-        return new ArrayList(0);
-    }
-
-    public List locationsOfLine(String stratumID,
-                                String sourceName,
-                                int lineNumber) {
-        return new ArrayList(0);
-    }
-
-    public List locationsOfLine(SDE.Stratum stratum,
-                                String sourceName,
-                                int lineNumber) {
-        return new ArrayList(0);
-    }
-
-    public Location locationOfCodeIndex(long codeIndex) {
-        return null;
-    }
-
-    LineInfo codeIndexToLineInfo(SDE.Stratum stratum,
-                                 long codeIndex) {
-
-        if (stratum.isJava()) {
-            return new BaseLineInfo(-1, declaringType);
-        } else {
-            return new StratumLineInfo(stratum.id(), -1,
-                                       null, null);
-        }
-    }
-
-    public List variables() throws AbsentInformationException {
-        throw new AbsentInformationException();
-    }
-
-    public List variablesByName(String name) throws AbsentInformationException {
-        throw new AbsentInformationException();
-    }
-
-    public List arguments() throws AbsentInformationException {
-        throw new AbsentInformationException();
-    }
-
-    public byte[] bytecodes() {
-        return new byte[0];
-    }
-
-    int argSlotCount() throws AbsentInformationException {
-        throw new InternalException("should not get here");
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ObjectReferenceImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,367 +0,0 @@
-/*
- * Copyright (c) 2002, 2009, 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.jdi;
-
-import java.io.*;
-import com.sun.jdi.*;
-
-import sun.jvm.hotspot.debugger.Address;
-import sun.jvm.hotspot.debugger.OopHandle;
-import sun.jvm.hotspot.oops.Oop;
-import sun.jvm.hotspot.oops.Mark;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.Array;
-import sun.jvm.hotspot.oops.OopUtilities;
-import sun.jvm.hotspot.oops.Klass;
-import sun.jvm.hotspot.oops.DefaultHeapVisitor;
-import sun.jvm.hotspot.runtime.JavaThread;
-import sun.jvm.hotspot.runtime.JavaVFrame;
-import sun.jvm.hotspot.runtime.MonitorInfo;
-import sun.jvm.hotspot.runtime.ObjectMonitor;
-import sun.jvm.hotspot.runtime.Threads;
-import sun.jvm.hotspot.utilities.Assert;
-
-import java.util.*;
-
-public class ObjectReferenceImpl extends ValueImpl implements ObjectReference {
-    private Oop  saObject;
-    private long myID;
-    private boolean monitorInfoCached = false;
-    private ThreadReferenceImpl owningThread = null;
-    private List waitingThreads = null; // List<ThreadReferenceImpl>
-    private int entryCount = 0;
-
-    private static long nextID = 0L;
-    private static synchronized long nextID() {
-        return nextID++;
-    }
-
-    ObjectReferenceImpl(VirtualMachine aVm, sun.jvm.hotspot.oops.Oop oRef) {
-        super(aVm);
-        saObject = oRef;
-        myID = nextID();
-    }
-
-    protected Oop ref() {
-        return saObject;
-    }
-
-    public Type type() {
-        return referenceType();
-    }
-
-    public ReferenceType referenceType() {
-        Klass myKlass = ref().getKlass();
-        return vm.referenceType(myKlass);
-    }
-
-    public Value getValue(Field sig) {
-        List list = new ArrayList(1);
-        list.add(sig);
-        Map map = getValues(list);
-        return(Value)map.get(sig);
-    }
-
-    public Map getValues(List theFields) {
-        //validateMirrors(theFields);
-
-        List staticFields = new ArrayList(0);
-        int size = theFields.size();
-        List instanceFields = new ArrayList(size);
-
-        for (int i=0; i<size; i++) {
-            sun.jvm.hotspot.jdi.FieldImpl field =
-                (sun.jvm.hotspot.jdi.FieldImpl)theFields.get(i);
-
-            // Make sure the field is valid
-            ((ReferenceTypeImpl)referenceType()).validateFieldAccess(field);
-
-            // FIX ME! We need to do some sanity checking
-            // here; make sure the field belongs to this
-            // object.
-            if (field.isStatic()) {
-                staticFields.add(field);
-            } else {
-                instanceFields.add(field);
-            }
-        }
-
-        // Look up static field(s) first to mimic the JDI implementation
-        Map map;
-        if (staticFields.size() > 0) {
-            map = referenceType().getValues(staticFields);
-        } else {
-            map = new HashMap(size);
-        }
-
-        // Then get instance field(s)
-        size = instanceFields.size();
-        for (int ii=0; ii<size; ii++){
-            FieldImpl fieldImpl = (FieldImpl)instanceFields.get(ii);
-            map.put(fieldImpl, fieldImpl.getValue(saObject));
-        }
-
-        return map;
-    }
-
-    public void setValue(Field field, Value value)
-                   throws InvalidTypeException, ClassNotLoadedException {
-        vm.throwNotReadOnlyException("ObjectReference.setValue(...)");
-    }
-
-    public Value invokeMethod(ThreadReference threadIntf, Method methodIntf,
-                              List arguments, int options)
-                              throws InvalidTypeException,
-                                     IncompatibleThreadStateException,
-                                     InvocationException,
-                                     ClassNotLoadedException {
-        vm.throwNotReadOnlyException("ObjectReference.invokeMethod(...)");
-        return null;
-    }
-
-    public void disableCollection() {
-        vm.throwNotReadOnlyException("ObjectReference.disableCollection()");
-    }
-
-    public void enableCollection() {
-        vm.throwNotReadOnlyException("ObjectReference.enableCollection()");
-    }
-
-    public boolean isCollected() {
-        vm.throwNotReadOnlyException("ObjectReference.isCollected()");
-        return false;
-    }
-
-    public long uniqueID() {
-        return myID;
-    }
-
-    public List waitingThreads() throws IncompatibleThreadStateException {
-        if (vm.canGetMonitorInfo() == false) {
-            throw new UnsupportedOperationException();
-        }
-
-        if (! monitorInfoCached) {
-            computeMonitorInfo();
-        }
-        return waitingThreads;
-    }
-
-
-    public ThreadReference owningThread() throws IncompatibleThreadStateException {
-        if (vm.canGetMonitorInfo() == false) {
-            throw new UnsupportedOperationException();
-        }
-
-        if (! monitorInfoCached) {
-            computeMonitorInfo();
-        }
-        return owningThread;
-    }
-
-
-    public int entryCount() throws IncompatibleThreadStateException {
-        if (vm.canGetMonitorInfo() == false) {
-            throw new UnsupportedOperationException();
-        }
-
-        if (! monitorInfoCached) {
-            computeMonitorInfo();
-        }
-        return entryCount;
-    }
-
-    // new method since 1.6.
-    // Real body will be supplied later.
-    public List referringObjects(long maxReferrers) {
-        if (!vm.canGetInstanceInfo()) {
-            throw new UnsupportedOperationException(
-                      "target does not support getting instances");
-        }
-        if (maxReferrers < 0) {
-            throw new IllegalArgumentException("maxReferrers is less than zero: "
-                                              + maxReferrers);
-        }
-        final ObjectReference obj = this;
-        final List objects = new ArrayList(0);
-        final long max = maxReferrers;
-                vm.saObjectHeap().iterate(new DefaultHeapVisitor() {
-                private long refCount = 0;
-                public boolean doObj(Oop oop) {
-                                        try {
-                                                ObjectReference objref = vm.objectMirror(oop);
-                                                List fields = objref.referenceType().allFields();
-                                                for (int i=0; i < fields.size(); i++) {
-                                                        Field fld = (Field)fields.get(i);
-                                                        if (objref.getValue(fld).equals(obj) && !objects.contains(objref)) {
-                                                                objects.add(objref);
-                                                                refCount++;
-                                                        }
-                                                }
-                                                if (max > 0 && refCount >= max) {
-                                                        return true;
-                                                }
-                                        } catch  (RuntimeException x) {
-                                          // Ignore RuntimeException thrown from vm.objectMirror(oop)
-                                          // for bad oop. It is possible to see some bad oop
-                                          // because heap might be iterating at no safepoint.
-                                        }
-                                        return false;
-
-                }
-            });
-        return objects;
-    }
-
-    // refer to JvmtiEnvBase::count_locked_objects.
-    // Count the number of objects for a lightweight monitor. The obj
-    // parameter is object that owns the monitor so this routine will
-    // count the number of times the same object was locked by frames
-    // in JavaThread. i.e., we count total number of times the same
-    // object is (lightweight) locked by given thread.
-    private int countLockedObjects(JavaThread jt, Oop obj) {
-        int res = 0;
-        JavaVFrame frame = jt.getLastJavaVFrameDbg();
-        while (frame != null) {
-            List monitors = frame.getMonitors();
-            OopHandle givenHandle = obj.getHandle();
-            for (Iterator itr = monitors.iterator(); itr.hasNext();) {
-                MonitorInfo mi = (MonitorInfo) itr.next();
-                if (mi.eliminated() && frame.isCompiledFrame()) continue; // skip eliminated monitor
-                if (givenHandle.equals(mi.owner())) {
-                    res++;
-                }
-            }
-            frame = (JavaVFrame) frame.javaSender();
-        }
-        return res;
-    }
-
-    // wrappers on same named method of Threads class
-    // returns List<JavaThread>
-    private List getPendingThreads(ObjectMonitor mon) {
-        return vm.saVM().getThreads().getPendingThreads(mon);
-    }
-
-    // returns List<JavaThread>
-    private List getWaitingThreads(ObjectMonitor mon) {
-        return vm.saVM().getThreads().getWaitingThreads(mon);
-    }
-
-    private JavaThread owningThreadFromMonitor(Address addr) {
-        return vm.saVM().getThreads().owningThreadFromMonitor(addr);
-    }
-
-    // refer to JvmtiEnv::GetObjectMonitorUsage
-    private void computeMonitorInfo() {
-        monitorInfoCached = true;
-        Mark mark = saObject.getMark();
-        ObjectMonitor mon = null;
-        Address owner = null;
-        // check for heavyweight monitor
-        if (! mark.hasMonitor()) {
-            // check for lightweight monitor
-            if (mark.hasLocker()) {
-                owner = mark.locker().getAddress(); // save the address of the Lock word
-            }
-            // implied else: no owner
-        } else {
-            // this object has a heavyweight monitor
-            mon = mark.monitor();
-
-            // The owner field of a heavyweight monitor may be NULL for no
-            // owner, a JavaThread * or it may still be the address of the
-            // Lock word in a JavaThread's stack. A monitor can be inflated
-            // by a non-owning JavaThread, but only the owning JavaThread
-            // can change the owner field from the Lock word to the
-            // JavaThread * and it may not have done that yet.
-            owner = mon.owner();
-        }
-
-        // find the owning thread
-        if (owner != null) {
-            owningThread = vm.threadMirror(owningThreadFromMonitor(owner));
-        }
-
-        // compute entryCount
-        if (owningThread != null) {
-            if (owningThread.getJavaThread().getAddress().equals(owner)) {
-                // the owner field is the JavaThread *
-                if (Assert.ASSERTS_ENABLED) {
-                    Assert.that(false, "must have heavyweight monitor with JavaThread * owner");
-                }
-                entryCount = (int) mark.monitor().recursions() + 1;
-            } else {
-                // The owner field is the Lock word on the JavaThread's stack
-                // so the recursions field is not valid. We have to count the
-                // number of recursive monitor entries the hard way.
-                entryCount = countLockedObjects(owningThread.getJavaThread(), saObject);
-            }
-        }
-
-        // find the contenders & waiters
-        waitingThreads = new ArrayList();
-        if (mon != null) {
-            // this object has a heavyweight monitor. threads could
-            // be contenders or waiters
-            // add all contenders
-            List pendingThreads = getPendingThreads(mon);
-            // convert the JavaThreads to ThreadReferenceImpls
-            for (Iterator itrPend = pendingThreads.iterator(); itrPend.hasNext();) {
-                waitingThreads.add(vm.threadMirror((JavaThread) itrPend.next()));
-            }
-
-            // add all waiters (threads in Object.wait())
-            // note that we don't do this JVMTI way. To do it JVMTI way,
-            // we would need to access ObjectWaiter list maintained in
-            // ObjectMonitor::_queue. But we don't have this struct exposed
-            // in vmStructs. We do waiters list in a way similar to getting
-            // pending threads list
-            List objWaitingThreads = getWaitingThreads(mon);
-            // convert the JavaThreads to ThreadReferenceImpls
-            for (Iterator itrWait = objWaitingThreads.iterator(); itrWait.hasNext();) {
-                waitingThreads.add(vm.threadMirror((JavaThread) itrWait.next()));
-            }
-        }
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof ObjectReferenceImpl)) {
-            ObjectReferenceImpl other = (ObjectReferenceImpl)obj;
-            return (ref().equals(other.ref())) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return saObject.hashCode();
-    }
-
-    public String toString() {
-        return  "instance of " + referenceType().name() + "(id=" + uniqueID() + ")";
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/PrimitiveTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-abstract class PrimitiveTypeImpl extends TypeImpl implements PrimitiveType {
-
-    PrimitiveTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-    /*
-     * Converts the given primitive value to a value of this type.
-     */
-    abstract PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException;
-
-    public String toString() {
-        return name();
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/PrimitiveValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public abstract class PrimitiveValueImpl extends ValueImpl
-                                         implements PrimitiveValue {
-
-    PrimitiveValueImpl(VirtualMachine aVm) {
-        super(aVm);
-    }
-
-    abstract public boolean booleanValue();
-    abstract public byte byteValue();
-    abstract public char charValue();
-    abstract public short shortValue();
-    abstract public int intValue();
-    abstract public long longValue();
-    abstract public float floatValue();
-    abstract public double doubleValue();
-
-    /*
-     * The checked versions of the value accessors throw
-     * InvalidTypeException if the required conversion is
-     * narrowing and would result in the loss of information
-     * (either magnitude or precision).
-     *
-     * Default implementations here do no checking; subclasses
-     * override as necessary to do the proper checking.
-     */
-    byte checkedByteValue() throws InvalidTypeException {
-        return byteValue();
-    }
-    char checkedCharValue() throws InvalidTypeException {
-        return charValue();
-    }
-    short checkedShortValue() throws InvalidTypeException {
-        return shortValue();
-    }
-    int checkedIntValue() throws InvalidTypeException {
-        return intValue();
-    }
-    long checkedLongValue() throws InvalidTypeException {
-        return longValue();
-    }
-    float checkedFloatValue() throws InvalidTypeException {
-        return floatValue();
-    }
-
-    final boolean checkedBooleanValue() throws InvalidTypeException {
-        /*
-         * Always disallow a conversion to boolean from any other
-         * primitive
-         */
-        if (this instanceof BooleanValue) {
-            return booleanValue();
-        } else {
-            throw new InvalidTypeException("Can't convert non-boolean value to boolean");
-        }
-    }
-
-    final double checkedDoubleValue() throws InvalidTypeException {
-        /*
-         * Can't overflow by converting to double, so this method
-         * is never overridden
-         */
-        return doubleValue();
-    }
-
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1008 +0,0 @@
-/*
- * Copyright (c) 2002, 2012, 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.jdi;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.lang.ref.SoftReference;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import sun.jvm.hotspot.memory.SystemDictionary;
-import sun.jvm.hotspot.oops.ArrayKlass;
-import sun.jvm.hotspot.oops.DefaultHeapVisitor;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.InstanceKlass;
-import sun.jvm.hotspot.oops.JVMDIClassStatus;
-import sun.jvm.hotspot.oops.Klass;
-import sun.jvm.hotspot.oops.Oop;
-import sun.jvm.hotspot.oops.Symbol;
-import sun.jvm.hotspot.utilities.Assert;
-
-import com.sun.jdi.AbsentInformationException;
-import com.sun.jdi.ArrayType;
-import com.sun.jdi.ClassLoaderReference;
-import com.sun.jdi.ClassNotLoadedException;
-import com.sun.jdi.ClassNotPreparedException;
-import com.sun.jdi.ClassObjectReference;
-import com.sun.jdi.Field;
-import com.sun.jdi.InterfaceType;
-import com.sun.jdi.Method;
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.PrimitiveType;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.Type;
-import com.sun.jdi.Value;
-import com.sun.jdi.VirtualMachine;
-
-public abstract class ReferenceTypeImpl extends TypeImpl
-implements ReferenceType {
-    protected Klass       saKlass;          // This can be an InstanceKlass or an ArrayKlass
-    protected Symbol      typeNameSymbol;   // This is used in vm.classesByName to speedup search
-    private int           modifiers = -1;
-    private String        signature = null;
-    private SoftReference sdeRef = null;
-    private SoftReference fieldsCache;
-    private SoftReference allFieldsCache;
-    private SoftReference methodsCache;
-    private SoftReference allMethodsCache;
-    private SoftReference nestedTypesCache;
-    private SoftReference methodInvokesCache;
-
-    /* to mark when no info available */
-    static final SDE NO_SDE_INFO_MARK = new SDE();
-
-    protected ReferenceTypeImpl(VirtualMachine aVm, sun.jvm.hotspot.oops.Klass klass) {
-        super(aVm);
-        saKlass = klass;
-        typeNameSymbol = saKlass.getName();
-        if (Assert.ASSERTS_ENABLED) {
-            Assert.that(typeNameSymbol != null, "null type name for a Klass");
-        }
-    }
-
-    Symbol typeNameAsSymbol() {
-        return typeNameSymbol;
-    }
-
-    Method getMethodMirror(sun.jvm.hotspot.oops.Method ref) {
-        // SA creates new Method objects when they are referenced which means
-        // that the incoming object might not be the same object as on our
-        // even though it is the same method. So do an address compare by
-        // calling equals rather than just reference compare.
-        Iterator it = methods().iterator();
-        while (it.hasNext()) {
-            MethodImpl method = (MethodImpl)it.next();
-            if (ref.equals(method.ref())) {
-                return method;
-            }
-        }
-        if (ref.getMethodHolder().equals(SystemDictionary.getMethodHandleKlass())) {
-          // invoke methods are generated as needed, so make mirrors as needed
-          List mis = null;
-          if (methodInvokesCache == null) {
-            mis = new ArrayList();
-            methodInvokesCache = new SoftReference(mis);
-          } else {
-            mis = (List)methodInvokesCache.get();
-          }
-          it = mis.iterator();
-          while (it.hasNext()) {
-            MethodImpl method = (MethodImpl)it.next();
-            if (ref.equals(method.ref())) {
-              return method;
-            }
-          }
-
-          MethodImpl method = MethodImpl.createMethodImpl(vm, this, ref);
-          mis.add(method);
-          return method;
-        }
-        throw new IllegalArgumentException("Invalid method id: " + ref);
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof ReferenceTypeImpl)) {
-            ReferenceTypeImpl other = (ReferenceTypeImpl)obj;
-            return (ref().equals(other.ref())) &&
-                (vm.equals(other.virtualMachine()));
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return saKlass.hashCode();
-    }
-
-    public int compareTo(ReferenceType refType) {
-        /*
-         * Note that it is critical that compareTo() == 0
-         * implies that equals() == true. Otherwise, TreeSet
-         * will collapse classes.
-         *
-         * (Classes of the same name loaded by different class loaders
-         * or in different VMs must not return 0).
-         */
-        ReferenceTypeImpl other = (ReferenceTypeImpl)refType;
-        int comp = name().compareTo(other.name());
-        if (comp == 0) {
-            Klass rf1 = ref();
-            Klass rf2 = other.ref();
-            // optimize for typical case: refs equal and VMs equal
-            if (rf1.equals(rf2)) {
-                // sequenceNumbers are always positive
-                comp = vm.sequenceNumber -
-                 ((VirtualMachineImpl)(other.virtualMachine())).sequenceNumber;
-            } else {
-                comp = rf1.getAddress().minus(rf2.getAddress()) < 0? -1 : 1;
-            }
-        }
-        return comp;
-    }
-
-    public String signature() {
-        if (signature == null) {
-            signature = saKlass.signature();
-        }
-        return signature;
-    }
-
-    // refer to JvmtiEnv::GetClassSignature.
-    // null is returned for array klasses.
-    public String genericSignature() {
-        if (saKlass instanceof ArrayKlass) {
-            return null;
-        } else {
-            Symbol genSig = ((InstanceKlass)saKlass).getGenericSignature();
-            return (genSig != null)? genSig.asString() : null;
-        }
-    }
-
-    public ClassLoaderReference classLoader() {
-      Instance xx = (Instance)(((InstanceKlass)saKlass).getClassLoader());
-      return (ClassLoaderReferenceImpl)vm.classLoaderMirror(xx);
-    }
-
-    public boolean isPublic() {
-        return((modifiers() & VMModifiers.PUBLIC) != 0);
-    }
-
-    public boolean isProtected() {
-        return((modifiers() & VMModifiers.PROTECTED) != 0);
-    }
-
-    public boolean isPrivate() {
-        return((modifiers() & VMModifiers.PRIVATE) != 0);
-    }
-
-    public boolean isPackagePrivate() {
-        return !isPublic() && !isPrivate() && !isProtected();
-    }
-
-    public boolean isAbstract() {
-        return((modifiers() & VMModifiers.ABSTRACT) != 0);
-    }
-
-    public boolean isFinal() {
-        return((modifiers() & VMModifiers.FINAL) != 0);
-    }
-
-    public boolean isStatic() {
-        return((modifiers() & VMModifiers.STATIC) != 0);
-    }
-
-    public boolean isPrepared() {
-        return (saKlass.getClassStatus() & JVMDIClassStatus.PREPARED) != 0;
-    }
-
-    final void checkPrepared() throws ClassNotPreparedException {
-        if (! isPrepared()) {
-            throw new ClassNotPreparedException();
-        }
-    }
-
-    public boolean isVerified() {
-        return (saKlass.getClassStatus() & JVMDIClassStatus.VERIFIED) != 0;
-    }
-
-    public boolean isInitialized() {
-        return (saKlass.getClassStatus() & JVMDIClassStatus.INITIALIZED) != 0;
-    }
-
-    public boolean failedToInitialize() {
-        return (saKlass.getClassStatus() & JVMDIClassStatus.ERROR) != 0;
-    }
-
-    private boolean isThrowableBacktraceField(sun.jvm.hotspot.oops.Field fld) {
-        // refer to JvmtiEnv::GetClassFields in jvmtiEnv.cpp.
-        // We want to filter out java.lang.Throwable.backtrace (see 4446677).
-        // It contains some Method*s that aren't quite real Objects.
-        if (fld.getFieldHolder().getName().equals(vm.javaLangThrowable()) &&
-            fld.getID().getName().equals("backtrace")) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public final List fields() throws ClassNotPreparedException {
-        List fields = (fieldsCache != null)? (List) fieldsCache.get() : null;
-        if (fields == null) {
-            checkPrepared();
-            if (saKlass instanceof ArrayKlass) {
-                fields = new ArrayList(0);
-            } else {
-                // Get a list of the sa Field types
-                List saFields = ((InstanceKlass)saKlass).getImmediateFields();
-
-                // Create a list of our Field types
-                int len = saFields.size();
-                fields = new ArrayList(len);
-                for (int ii = 0; ii < len; ii++) {
-                    sun.jvm.hotspot.oops.Field curField = (sun.jvm.hotspot.oops.Field)saFields.get(ii);
-                    if (! isThrowableBacktraceField(curField)) {
-                        fields.add(new FieldImpl(vm, this, curField));
-                    }
-                }
-            }
-            fields = Collections.unmodifiableList(fields);
-            fieldsCache = new SoftReference(fields);
-        }
-        return fields;
-    }
-
-    public final List allFields() throws ClassNotPreparedException {
-        List allFields = (allFieldsCache != null)? (List) allFieldsCache.get() : null;
-        if (allFields == null) {
-            checkPrepared();
-            if (saKlass instanceof ArrayKlass) {
-                // is 'length' a field of array klasses? To maintain
-                // consistency with JVMDI-JDI we return 0 size.
-                allFields = new ArrayList(0);
-            } else {
-                List saFields;
-
-                // Get a list of the sa Field types
-                saFields = ((InstanceKlass)saKlass).getAllFields();
-
-                // Create a list of our Field types
-                int len = saFields.size();
-                allFields = new ArrayList(len);
-                for (int ii = 0; ii < len; ii++) {
-                    sun.jvm.hotspot.oops.Field curField = (sun.jvm.hotspot.oops.Field)saFields.get(ii);
-                    if (! isThrowableBacktraceField(curField)) {
-                        allFields.add(new FieldImpl(vm, vm.referenceType(curField.getFieldHolder()), curField));
-                    }
-                }
-            }
-            allFields = Collections.unmodifiableList(allFields);
-            allFieldsCache = new SoftReference(allFields);
-        }
-        return allFields;
-    }
-
-    abstract List inheritedTypes();
-
-    void addVisibleFields(List visibleList, Map visibleTable, List ambiguousNames) {
-        List list = visibleFields();
-        Iterator iter = list.iterator();
-        while (iter.hasNext()) {
-            Field field = (Field)iter.next();
-            String name = field.name();
-            if (!ambiguousNames.contains(name)) {
-                Field duplicate = (Field)visibleTable.get(name);
-                if (duplicate == null) {
-                    visibleList.add(field);
-                    visibleTable.put(name, field);
-                } else if (!field.equals(duplicate)) {
-                    ambiguousNames.add(name);
-                    visibleTable.remove(name);
-                    visibleList.remove(duplicate);
-                } else {
-                    // identical field from two branches; do nothing
-                }
-            }
-        }
-    }
-
-    public final List visibleFields() throws ClassNotPreparedException {
-        checkPrepared();
-        /*
-         * Maintain two different collections of visible fields. The
-         * list maintains a reasonable order for return. The
-         * hash map provides an efficient way to lookup visible fields
-         * by name, important for finding hidden or ambiguous fields.
-         */
-        List visibleList = new ArrayList();
-        Map  visibleTable = new HashMap();
-
-        /* Track fields removed from above collection due to ambiguity */
-        List ambiguousNames = new ArrayList();
-
-        /* Add inherited, visible fields */
-        List types = inheritedTypes();
-        Iterator iter = types.iterator();
-        while (iter.hasNext()) {
-            /*
-             * TO DO: Be defensive and check for cyclic interface inheritance
-             */
-            ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
-            type.addVisibleFields(visibleList, visibleTable, ambiguousNames);
-        }
-
-        /*
-         * Insert fields from this type, removing any inherited fields they
-         * hide.
-         */
-        List retList = new ArrayList(fields());
-        iter = retList.iterator();
-        while (iter.hasNext()) {
-            Field field = (Field)iter.next();
-            Field hidden = (Field)visibleTable.get(field.name());
-            if (hidden != null) {
-                visibleList.remove(hidden);
-            }
-        }
-        retList.addAll(visibleList);
-        return retList;
-    }
-
-   public final Field fieldByName(String fieldName) throws ClassNotPreparedException {
-        java.util.List searchList;
-        Field f;
-
-        // visibleFields calls checkPrepared
-        searchList = visibleFields();
-
-        for (int i=0; i<searchList.size(); i++) {
-            f = (Field)searchList.get(i);
-
-            if (f.name().equals(fieldName)) {
-                return f;
-            }
-        }
-        //throw new NoSuchFieldException("Field '" + fieldName + "' not found in " + name());
-        return null;
-    }
-
-    public final List methods() throws ClassNotPreparedException {
-        List methods = (methodsCache != null)? (List) methodsCache.get() : null;
-        if (methods == null) {
-            checkPrepared();
-            if (saKlass instanceof ArrayKlass) {
-                methods = new ArrayList(0);
-            } else {
-                List saMethods;
-                // Get a list of the SA Method types
-                saMethods = ((InstanceKlass)saKlass).getImmediateMethods();
-
-                // Create a list of our MethodImpl types
-                int len = saMethods.size();
-                methods = new ArrayList(len);
-                for (int ii = 0; ii < len; ii++) {
-                    methods.add(MethodImpl.createMethodImpl(vm, this, (sun.jvm.hotspot.oops.Method)saMethods.get(ii)));
-                }
-            }
-            methods = Collections.unmodifiableList(methods);
-            methodsCache = new SoftReference(methods);
-        }
-        return methods;
-    }
-
-    abstract List getAllMethods();
-    public final List allMethods() throws ClassNotPreparedException {
-        List allMethods = (allMethodsCache != null)? (List) allMethodsCache.get() : null;
-        if (allMethods == null) {
-            checkPrepared();
-            allMethods = Collections.unmodifiableList(getAllMethods());
-            allMethodsCache = new SoftReference(allMethods);
-        }
-        return allMethods;
-    }
-
-    /*
-     * Utility method used by subclasses to build lists of visible
-     * methods.
-     */
-    void addToMethodMap(Map methodMap, List methodList) {
-        Iterator iter = methodList.iterator();
-        while (iter.hasNext()) {
-            Method method = (Method)iter.next();
-            methodMap.put(method.name().concat(method.signature()), method);
-        }
-    }
-
-    abstract void addVisibleMethods(Map<String, Method> methodMap, Set<InterfaceType> seenInterfaces);
-
-    public final List visibleMethods() throws ClassNotPreparedException {
-        checkPrepared();
-        /*
-         * Build a collection of all visible methods. The hash
-         * map allows us to do this efficiently by keying on the
-         * concatenation of name and signature.
-         */
-        //System.out.println("jj: RTI: Calling addVisibleMethods for:" + this);
-        Map<String, Method> map = new HashMap<String, Method>();
-        addVisibleMethods(map, new HashSet<InterfaceType>());
-
-        /*
-         * ... but the hash map destroys order. Methods should be
-         * returned in a sensible order, as they are in allMethods().
-         * So, start over with allMethods() and use the hash map
-         * to filter that ordered collection.
-         */
-        //System.out.println("jj: RTI: Calling allMethods for:" + this);
-
-        List<Method> list = new ArrayList<Method>(allMethods());
-        //System.out.println("jj: allMethods = " + jjstr(list));
-        //System.out.println("jj: map = " + map.toString());
-        //System.out.println("jj: map = " + jjstr(map.values()));
-        list.retainAll(map.values());
-        //System.out.println("jj: map = " + jjstr(list));
-        //System.exit(0);
-        return list;
-    }
-
-    static Object prev;
-
-    static public String jjstr(Collection cc) {
-        StringBuffer buf = new StringBuffer();
-        buf.append("[");
-        Iterator i = cc.iterator();
-        boolean hasNext = i.hasNext();
-        while (hasNext) {
-            Object o = i.next();
-            if (prev == null) {
-                prev = o;
-            } else {
-                System.out.println("prev == curr?" + prev.equals(o));
-                System.out.println("prev == curr?" + (prev == o));
-            }
-            buf.append( o + "@" + o.hashCode());
-            //buf.append( ((Object)o).toString());
-            hasNext = i.hasNext();
-            if (hasNext)
-                buf.append(", ");
-        }
-
-        buf.append("]");
-        return buf.toString();
-    }
-
-    public final List methodsByName(String name) throws ClassNotPreparedException {
-        // visibleMethods calls checkPrepared
-        List methods = visibleMethods();
-        ArrayList retList = new ArrayList(methods.size());
-        Iterator iter = methods.iterator();
-        while (iter.hasNext()) {
-            Method candidate = (Method)iter.next();
-            if (candidate.name().equals(name)) {
-                retList.add(candidate);
-            }
-        }
-        retList.trimToSize();
-        return retList;
-    }
-
-    public final List methodsByName(String name, String signature) throws ClassNotPreparedException {
-        // visibleMethods calls checkPrepared
-        List methods = visibleMethods();
-        ArrayList retList = new ArrayList(methods.size());
-        Iterator iter = methods.iterator();
-        while (iter.hasNext()) {
-            Method candidate = (Method)iter.next();
-            if (candidate.name().equals(name) &&
-                candidate.signature().equals(signature)) {
-                retList.add(candidate);
-            }
-        }
-        retList.trimToSize();
-        return retList;
-    }
-
-
-    List getInterfaces() {
-        List myInterfaces;
-        if (saKlass instanceof ArrayKlass) {
-            // Actually, JLS says arrays implement Cloneable and Serializable
-            // But, JVMDI-JDI just returns 0 interfaces for arrays. We follow
-            // the same for consistency.
-            myInterfaces = new ArrayList(0);
-        } else {
-            // Get a list of the sa InstanceKlass types
-            List saInterfaces = ((InstanceKlass)saKlass).getDirectImplementedInterfaces();
-
-            // Create a list of our InterfaceTypes
-            int len = saInterfaces.size();
-            myInterfaces = new ArrayList(len);
-            for (int ii = 0; ii < len; ii++) {
-                myInterfaces.add(new InterfaceTypeImpl(vm, (InstanceKlass)saInterfaces.get(ii)));
-            }
-        }
-        return myInterfaces;
-    }
-
-    public final List nestedTypes() {
-        List nestedTypes = (nestedTypesCache != null)? (List) nestedTypesCache.get() : null;
-        if (nestedTypes == null) {
-            if (saKlass instanceof ArrayKlass) {
-                nestedTypes = new ArrayList(0);
-            } else {
-                ClassLoaderReference cl = classLoader();
-                List classes = null;
-                if (cl != null) {
-                   classes = cl.visibleClasses();
-                } else {
-                   classes = vm.bootstrapClasses();
-                }
-                nestedTypes = new ArrayList();
-                Iterator iter = classes.iterator();
-                while (iter.hasNext()) {
-                    ReferenceTypeImpl refType = (ReferenceTypeImpl)iter.next();
-                    Symbol candidateName = refType.ref().getName();
-                    if (((InstanceKlass)saKlass).isInnerOrLocalClassName(candidateName)) {
-                        nestedTypes.add(refType);
-                    }
-                }
-            }
-            nestedTypes = Collections.unmodifiableList(nestedTypes);
-            nestedTypesCache = new SoftReference(nestedTypes);
-        }
-        return nestedTypes;
-    }
-
-    public Value getValue(Field sig) {
-        List list = new ArrayList(1);
-        list.add(sig);
-        Map map = getValues(list);
-        return(Value)map.get(sig);
-    }
-
-    /**
-     * Returns a map of field values
-     */
-    public Map getValues(List theFields) {
-        //validateMirrors();
-        int size = theFields.size();
-        Map map = new HashMap(size);
-        for (int ii=0; ii<size; ii++) {
-            FieldImpl fieldImpl = (FieldImpl)theFields.get(ii);
-
-            validateFieldAccess(fieldImpl);
-            // Do more validation specific to ReferenceType field getting
-            if (!fieldImpl.isStatic()) {
-                throw new IllegalArgumentException(
-                     "Attempt to use non-static field with ReferenceType: " +
-                     fieldImpl.name());
-            }
-            map.put(fieldImpl, fieldImpl.getValue());
-        }
-        return map;
-    }
-
-    void validateFieldAccess(Field field) {
-       /*
-        * Field must be in this object's class, a superclass, or
-        * implemented interface
-        */
-        ReferenceTypeImpl declType = (ReferenceTypeImpl)field.declaringType();
-        if (!declType.isAssignableFrom(this)) {
-            throw new IllegalArgumentException("Invalid field");
-        }
-    }
-
-    public ClassObjectReference classObject() {
-        return vm.classObjectMirror(ref().getJavaMirror());
-    }
-
-    SDE.Stratum stratum(String stratumID) {
-        SDE sde = sourceDebugExtensionInfo();
-        if (!sde.isValid()) {
-            sde = NO_SDE_INFO_MARK;
-        }
-        return sde.stratum(stratumID);
-    }
-
-    public String sourceName() throws AbsentInformationException {
-        return (String)(sourceNames(vm.getDefaultStratum()).get(0));
-    }
-
-    public List sourceNames(String stratumID)
-                                throws AbsentInformationException {
-        SDE.Stratum stratum = stratum(stratumID);
-        if (stratum.isJava()) {
-            List result = new ArrayList(1);
-            result.add(baseSourceName());
-            return result;
-        }
-        return stratum.sourceNames(this);
-    }
-
-    public List sourcePaths(String stratumID)
-                                throws AbsentInformationException {
-        SDE.Stratum stratum = stratum(stratumID);
-        if (stratum.isJava()) {
-            List result = new ArrayList(1);
-            result.add(baseSourceDir() + baseSourceName());
-            return result;
-        }
-        return stratum.sourcePaths(this);
-    }
-
-    String baseSourceName() throws AbsentInformationException {
-      if (saKlass instanceof ArrayKlass) {
-            throw new AbsentInformationException();
-      }
-      Symbol sym = ((InstanceKlass)saKlass).getSourceFileName();
-      if (sym != null) {
-          return sym.asString();
-      } else {
-          throw new AbsentInformationException();
-      }
-    }
-
-    String baseSourcePath() throws AbsentInformationException {
-        return baseSourceDir() + baseSourceName();
-    }
-
-    String baseSourceDir() {
-        String typeName = name();
-        StringBuffer sb = new StringBuffer(typeName.length() + 10);
-        int index = 0;
-        int nextIndex;
-
-        while ((nextIndex = typeName.indexOf('.', index)) > 0) {
-            sb.append(typeName.substring(index, nextIndex));
-            sb.append(java.io.File.separatorChar);
-            index = nextIndex + 1;
-        }
-        return sb.toString();
-    }
-
-    public String sourceDebugExtension()
-                           throws AbsentInformationException {
-        if (!vm.canGetSourceDebugExtension()) {
-            throw new UnsupportedOperationException();
-        }
-        SDE sde = sourceDebugExtensionInfo();
-        if (sde == NO_SDE_INFO_MARK) {
-            throw new AbsentInformationException();
-        }
-        return sde.sourceDebugExtension;
-    }
-
-    private SDE sourceDebugExtensionInfo() {
-        if (!vm.canGetSourceDebugExtension()) {
-            return NO_SDE_INFO_MARK;
-        }
-        SDE sde = null;
-        sde = (sdeRef == null) ?  null : (SDE)sdeRef.get();
-        if (sde == null) {
-           String extension = null;
-           if (saKlass instanceof InstanceKlass) {
-              extension = ((InstanceKlass)saKlass).getSourceDebugExtension();
-           }
-           if (extension == null) {
-              sde = NO_SDE_INFO_MARK;
-           } else {
-              sde = new SDE(extension);
-           }
-           sdeRef = new SoftReference(sde);
-        }
-        return sde;
-    }
-
-    public List availableStrata() {
-        SDE sde = sourceDebugExtensionInfo();
-        if (sde.isValid()) {
-            return sde.availableStrata();
-        } else {
-            List strata = new ArrayList();
-            strata.add(SDE.BASE_STRATUM_NAME);
-            return strata;
-        }
-    }
-
-    /**
-     * Always returns non-null stratumID
-     */
-    public String defaultStratum() {
-        SDE sdei = sourceDebugExtensionInfo();
-        if (sdei.isValid()) {
-            return sdei.defaultStratumId;
-        } else {
-            return SDE.BASE_STRATUM_NAME;
-        }
-    }
-
-    public final int modifiers() {
-        if (modifiers == -1) {
-            modifiers = getModifiers();
-        }
-        return modifiers;
-    }
-
-    // new method since 1.6.
-    // Real body will be supplied later.
-    public List instances(long maxInstances) {
-        if (!vm.canGetInstanceInfo()) {
-            throw new UnsupportedOperationException(
-                      "target does not support getting instances");
-        }
-
-        if (maxInstances < 0) {
-            throw new IllegalArgumentException("maxInstances is less than zero: "
-                                              + maxInstances);
-        }
-
-        final List objects = new ArrayList(0);
-        if (isAbstract() || (this instanceof InterfaceType)) {
-            return objects;
-        }
-
-        final Klass givenKls = this.ref();
-        final long max = maxInstances;
-        vm.saObjectHeap().iterate(new DefaultHeapVisitor() {
-                private long instCount=0;
-                public boolean doObj(Oop oop) {
-                    if (givenKls.equals(oop.getKlass())) {
-                        objects.add(vm.objectMirror(oop));
-                                                instCount++;
-                    }
-                    if (max > 0 && instCount >= max) {
-                        return true;
-                                        }
-                                        return false;
-                }
-            });
-        return objects;
-    }
-
-    int getModifiers() {
-        return (int) saKlass.getClassModifiers();
-    }
-
-    public List allLineLocations()
-                            throws AbsentInformationException {
-        return allLineLocations(vm.getDefaultStratum(), null);
-    }
-
-    public List allLineLocations(String stratumID, String sourceName)
-                            throws AbsentInformationException {
-        checkPrepared();
-        boolean someAbsent = false; // A method that should have info, didn't
-        SDE.Stratum stratum = stratum(stratumID);
-        List list = new ArrayList();  // location list
-
-        for (Iterator iter = methods().iterator(); iter.hasNext(); ) {
-            MethodImpl method = (MethodImpl)iter.next();
-            try {
-                list.addAll(
-                   method.allLineLocations(stratum.id(), sourceName));
-            } catch(AbsentInformationException exc) {
-                someAbsent = true;
-            }
-        }
-
-        // If we retrieved no line info, and at least one of the methods
-        // should have had some (as determined by an
-        // AbsentInformationException being thrown) then we rethrow
-        // the AbsentInformationException.
-        if (someAbsent && list.size() == 0) {
-            throw new AbsentInformationException();
-        }
-        return list;
-    }
-
-    public List locationsOfLine(int lineNumber)
-                           throws AbsentInformationException {
-        return locationsOfLine(vm.getDefaultStratum(),
-                               null,
-                               lineNumber);
-    }
-
-    public List locationsOfLine(String stratumID,
-                                String sourceName,
-                                int lineNumber)
-                           throws AbsentInformationException {
-        checkPrepared();
-        // A method that should have info, didn't
-        boolean someAbsent = false;
-        // A method that should have info, did
-        boolean somePresent = false;
-        List methods = methods();
-        SDE.Stratum stratum = stratum(stratumID);
-
-        List list = new ArrayList();
-
-        Iterator iter = methods.iterator();
-        while(iter.hasNext()) {
-            MethodImpl method = (MethodImpl)iter.next();
-            // eliminate native and abstract to eliminate
-            // false positives
-            if (!method.isAbstract() &&
-                !method.isNative()) {
-                try {
-                    list.addAll(
-                       method.locationsOfLine(stratum.id(),
-                                              sourceName,
-                                              lineNumber));
-                    somePresent = true;
-                } catch(AbsentInformationException exc) {
-                    someAbsent = true;
-                }
-            }
-        }
-        if (someAbsent && !somePresent) {
-            throw new AbsentInformationException();
-        }
-        return list;
-    }
-
-    Klass ref() {
-        return saKlass;
-    }
-
-
-    /*
-     * Return true if an instance of this type
-     * can be assigned to a variable of the given type
-     */
-    abstract boolean isAssignableTo(ReferenceType type);
-
-    boolean isAssignableFrom(ReferenceType type) {
-        return ((ReferenceTypeImpl)type).isAssignableTo(this);
-    }
-
-    boolean isAssignableFrom(ObjectReference object) {
-        return object == null ||
-            isAssignableFrom(object.referenceType());
-    }
-
-    int indexOf(Method method) {
-        // Make sure they're all here - the obsolete method
-        // won't be found and so will have index -1
-        return methods().indexOf(method);
-    }
-
-    int indexOf(Field field) {
-        // Make sure they're all here
-        return fields().indexOf(field);
-    }
-
-    private static boolean isPrimitiveArray(String signature) {
-        int i = signature.lastIndexOf('[');
-        /*
-         * TO DO: Centralize JNI signature knowledge.
-         *
-         * Ref:
-         *  jdk1.4/doc/guide/jpda/jdi/com/sun/jdi/doc-files/signature.html
-         */
-        boolean isPA;
-        if (i < 0) {
-            isPA = false;
-        } else {
-            char c = signature.charAt(i + 1);
-            isPA = (c != 'L');
-        }
-        return isPA;
-    }
-
-    Type findType(String signature) throws ClassNotLoadedException {
-        Type type;
-        if (signature.length() == 1) {
-            /* OTI FIX: Must be a primitive type or the void type */
-            char sig = signature.charAt(0);
-            if (sig == 'V') {
-                type = vm.theVoidType();
-            } else {
-                type = vm.primitiveTypeMirror(sig);
-            }
-        } else {
-            // Must be a reference type.
-            ClassLoaderReferenceImpl loader =
-                       (ClassLoaderReferenceImpl)classLoader();
-            if ((loader == null) ||
-                (isPrimitiveArray(signature)) //Work around 4450091
-                ) {
-                // Caller wants type of boot class field
-                type = vm.findBootType(signature);
-            } else {
-                // Caller wants type of non-boot class field
-                type = loader.findType(signature);
-            }
-        }
-        return type;
-    }
-
-    String loaderString() {
-        if (classLoader() != null) {
-            return "loaded by " + classLoader().toString();
-        } else {
-            return "loaded by bootstrap loader";
-        }
-    }
-
-    long uniqueID() {
-        return vm.getAddressValue(ref().getJavaMirror());
-    }
-
-    // new method since 1.6
-    public int majorVersion() {
-        if (!vm.canGetClassFileVersion()) {
-            throw new UnsupportedOperationException("Cannot get class file version");
-        }
-        return (int)((InstanceKlass)saKlass).majorVersion();
-    }
-
-    // new method since 1.6
-    public int minorVersion() {
-        if (!vm.canGetClassFileVersion()) {
-            throw new UnsupportedOperationException("Cannot get class file version");
-        }
-        return (int)((InstanceKlass)saKlass).minorVersion();
-    }
-
-    // new method since 1.6
-    public int constantPoolCount() {
-        if (!vm.canGetConstantPool()) {
-            throw new UnsupportedOperationException("Cannot get constant pool");
-        }
-        if (saKlass instanceof ArrayKlass) {
-            return 0;
-        } else {
-            return (int)((InstanceKlass)saKlass).getConstants().getLength();
-        }
-    }
-
-    // new method since 1.6
-    public byte[] constantPool() {
-        if (!vm.canGetConstantPool()) {
-            throw new UnsupportedOperationException("Cannot get constant pool");
-        }
-        if (this instanceof ArrayType || this instanceof PrimitiveType) {
-                        byte bytes[] = new byte[0];
-            return bytes;
-        } else {
-            ByteArrayOutputStream bs = new ByteArrayOutputStream();
-            try {
-                ((InstanceKlass)saKlass).getConstants().writeBytes(bs);
-            } catch (IOException ex) {
-                                ex.printStackTrace();
-                                byte bytes[] = new byte[0];
-                                return bytes;
-            }
-            return bs.toByteArray();
-        }
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SACoreAttachingConnector.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, 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.jdi;
-
-import com.sun.jdi.connect.*;
-import com.sun.jdi.Bootstrap;
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.VirtualMachineManager;
-
-import java.io.*;
-import java.lang.reflect.*;
-import java.net.*;
-import java.util.*;
-
-public class SACoreAttachingConnector extends ConnectorImpl implements AttachingConnector {
-
-    static final String ARG_COREFILE = "core";
-    static final String ARG_JAVA_EXECUTABLE = "javaExecutable";
-    private Transport transport;
-
-    public SACoreAttachingConnector(com.sun.tools.jdi.VirtualMachineManagerService ignored) {
-        this();
-    }
-
-    public SACoreAttachingConnector() {
-        super();
-        //fixme jjh  Must create resources for these strings
-        addStringArgument(
-                ARG_JAVA_EXECUTABLE,
-                "Java Executable",              //getString("sa.javaExecutable.label"),
-                "Pathname of Java Executable",  //getString("sa.javaExecutable.description");
-                "",
-                true);
-
-        addStringArgument(
-                ARG_COREFILE,
-                "Corefile",                                    // getString("sa.CoreFile.label"),
-                "Pathname of a corefile from a Java Process",  //getString("sa.CoreFile.description"),
-                "core",
-                false);
-
-        transport = new Transport() {
-                   public String name() {
-                       return "filesystem";
-                   }
-               };
-    }
-
-    // security check to see whether the caller can perform attach
-    private void checkCoreAttach(String corefile) {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            try {
-                // whether the caller can link against SA native library?
-                checkNativeLink(sm, System.getProperty("os.name"));
-                // check whether the caller can read the core file?
-                sm.checkRead(corefile);
-            } catch (SecurityException se) {
-                throw new SecurityException("permission denied to attach to " + corefile);
-            }
-        }
-    }
-
-    private VirtualMachine createVirtualMachine(Class vmImplClass,
-                                                String javaExec, String corefile)
-        throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
-        java.lang.reflect.Method connectByCoreMethod = vmImplClass.getMethod(
-                                 "createVirtualMachineForCorefile",
-                                  new Class[] {
-                                      VirtualMachineManager.class,
-                                      String.class, String.class,
-                                      Integer.TYPE
-                                  });
-        return (VirtualMachine) connectByCoreMethod.invoke(null,
-                                  new Object[] {
-                                      Bootstrap.virtualMachineManager(),
-                                      javaExec,
-                                      corefile,
-                                      new Integer(0)
-                                  });
-    }
-
-    public VirtualMachine attach(Map arguments) throws IOException,
-                                      IllegalConnectorArgumentsException {
-        String javaExec = argument(ARG_JAVA_EXECUTABLE, arguments).value();
-        if (javaExec == null || javaExec.equals("")) {
-            throw new IllegalConnectorArgumentsException("javaExec should be non-null and non-empty",
-                                                         ARG_JAVA_EXECUTABLE);
-        }
-        String corefile = argument(ARG_COREFILE, arguments).value();
-        if (corefile == null || corefile.equals("")) {
-            throw new IllegalConnectorArgumentsException("corefile should be non-null and non-empty",
-                                                         ARG_COREFILE);
-        }
-
-        checkCoreAttach(corefile);
-
-        VirtualMachine myVM = null;
-        try {
-            try {
-                Class vmImplClass = loadVirtualMachineImplClass();
-                myVM = createVirtualMachine(vmImplClass, javaExec, corefile);
-            } catch (InvocationTargetException ite) {
-                Class vmImplClass = handleVMVersionMismatch(ite);
-                if (vmImplClass != null) {
-                    return createVirtualMachine(vmImplClass, javaExec, corefile);
-                } else {
-                    throw ite;
-                }
-            }
-        } catch (Exception ee) {
-            if (DEBUG) {
-                System.out.println("VirtualMachineImpl() got an exception:");
-                ee.printStackTrace();
-                System.out.println("coreFile = " + corefile + ", javaExec = " + javaExec);
-            }
-            throw (IOException) new IOException().initCause(ee);
-        }
-        setVMDisposeObserver(myVM);
-        return myVM;
-    }
-
-    public String name() {
-        return "sun.jvm.hotspot.jdi.SACoreAttachingConnector";
-    }
-
-    public String description() {
-        return getString("This connector allows you to attach to a core file using the Serviceability Agent");
-    }
-
-    public Transport transport() {
-        return transport;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SADebugServer.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2003, 2012, 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.jdi;
-
-public final class SADebugServer {
-   // do not allow instance creation
-   private SADebugServer() {}
-
-   private static void usage() {
-      java.io.PrintStream out = System.out;
-      out.println("Usage: jsadebugd [options] <pid> [server-id]");
-      out.println("\t\t(to connect to a live java process)");
-      out.println("   or  jsadebugd [options] <executable> <core> [server-id]");
-      out.println("\t\t(to connect to a core file produced by <executable>)");
-      out.println("\t\tserver-id is an optional unique id for this debug server, needed ");
-      out.println("\t\tif multiple debug servers are run on the same machine");
-      out.println("where options include:");
-      out.println("   -h | -help\tto print this help message");
-      System.exit(1);
-  }
-
-   public static void main(String[] args) {
-      if ((args.length < 1) || (args.length > 3)) {
-         usage();
-      }
-
-      // Attempt to handle "-h" or "-help"
-      if (args[0].startsWith("-")) {
-         usage();
-      }
-
-      // By default SA agent classes prefer Windows process debugger
-      // to windbg debugger. SA expects special properties to be set
-      // to choose other debuggers. We will set those here before
-      // attaching to SA agent.
-
-       System.setProperty("sun.jvm.hotspot.debugger.useWindbgDebugger", "true");
-
-      // delegate to the actual SA debug server.
-      sun.jvm.hotspot.DebugServer.main(args);
-   }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SADebugServerAttachingConnector.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, 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.jdi;
-
-import com.sun.jdi.connect.*;
-import com.sun.jdi.Bootstrap;
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.VirtualMachineManager;
-
-import java.io.*;
-import java.lang.reflect.*;
-import java.net.*;
-import java.util.*;
-
-public class SADebugServerAttachingConnector extends ConnectorImpl implements AttachingConnector {
-
-    static final String ARG_DEBUG_SERVER_NAME = "debugServerName";
-    private Transport transport;
-
-    public SADebugServerAttachingConnector(com.sun.tools.jdi.VirtualMachineManagerService ignored) {
-        this();
-    }
-
-    public SADebugServerAttachingConnector() {
-         // fixme jjh  create resources for the these strings,
-        addStringArgument(
-                ARG_DEBUG_SERVER_NAME,
-                "Debug Server",                      //getString("sa.debugServer.label"),
-                "Name of a remote SA Debug Server",  //getString("sa.debugServer.description");
-                "",
-                true);
-        transport = new Transport() {
-                   public String name() {
-                       return "RMI";
-                   }
-                 };
-    }
-
-    private VirtualMachine createVirtualMachine(Class vmImplClass,
-                                                String debugServerName)
-        throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
-        java.lang.reflect.Method connectByServerMethod =
-                            vmImplClass.getMethod(
-                                   "createVirtualMachineForServer",
-                                   new Class[] {
-                                       VirtualMachineManager.class,
-                                       String.class,
-                                       Integer.TYPE
-                                   });
-        return (VirtualMachine) connectByServerMethod.invoke(null,
-                                   new Object[] {
-                                       Bootstrap.virtualMachineManager(),
-                                       debugServerName,
-                                       new Integer(0)
-                                   });
-    }
-
-    public VirtualMachine attach(Map arguments) throws IOException,
-                                      IllegalConnectorArgumentsException {
-        String debugServerName = argument(ARG_DEBUG_SERVER_NAME, arguments).value();
-        if (debugServerName == null || debugServerName.equals("")) {
-            throw new IllegalConnectorArgumentsException("debugServerName should be non-null and non-empty",
-                                                         ARG_DEBUG_SERVER_NAME);
-        }
-        VirtualMachine myVM;
-        try {
-            try {
-                Class vmImplClass = loadVirtualMachineImplClass();
-                myVM = createVirtualMachine(vmImplClass, debugServerName);
-            } catch (InvocationTargetException ite) {
-                Class vmImplClass = handleVMVersionMismatch(ite);
-                if (vmImplClass != null) {
-                    return createVirtualMachine(vmImplClass, debugServerName);
-                } else {
-                    throw ite;
-                }
-            }
-        } catch (Exception ee) {
-            if (DEBUG) {
-                System.out.println("VirtualMachineImpl() got an exception:");
-                ee.printStackTrace();
-                System.out.println("debug server name = " + debugServerName);
-            }
-            throw (IOException) new IOException().initCause(ee);
-        }
-        setVMDisposeObserver(myVM);
-        return myVM;
-    }
-
-    public String name() {
-        return "sun.jvm.hotspot.jdi.SADebugServerAttachingConnector";
-    }
-
-    public String description() {
-        return getString("This connector allows you to attach to a Java Process via a debug server with the Serviceability Agent");
-    }
-
-    public Transport transport() {
-        return transport;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SAJDIClassLoader.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.jdi;
-
-import java.io.*;
-import java.net.*;
-
-/*
- * This class loader is used for two different reasons:
- *
- * 1) To support multiple simultaneous debuggees.
- *
- * SA's architecture does not allow us to use multiple simultaneous
- * debuggees. This is because of lots of static fields caching
- * vmStruct fields and singleton assumption in classes such as
- * 'sun.jvm.hotspot.runtime.VM'. Hence, we use instances of this
- * class loader to create a separate namespace for each debuggee VM.
- *
- * 2) To support cross VM version debugging.
- *
- * SA has very close dependency on VM data structures. Due to this, a
- * version of SA can only support debuggees running a same dot-dot release and
- * update releases only. For eg. this version of SA supports only 1.4.2 and
- * 1.4.2_xx releases only. But, users may want to debug debuggees running
- * a different version of VM. To support this, we use an instance of this
- * class loader to load classes from corresponding sa-jdi.jar.
- *
- * Note that JDI classes would still be loaded from the debugger's tools.jar
- * and not from debuggee's tools.jar. This means that if JDI interface evolved
- * b/w debuggee and debugger VM versions, user may still get problems. This is
- * the case when debugger runs on 1.5.0 and debuggee runs on 1.4.2. Because JDI
- * evolved b/w these versions (generics, enum, varargs etc.), 1.4.2 sa-jdi.jar
- * won't implement 1.5.0 JDI properly and user would get verifier errors. This
- * class loader solution is suited for different dot-dot release where JDI will
- * not evolve but VM data structures might change and SA implementation might
- * have to change. For example, a debuggee running 1.5.1 VM can be debugged
- * with debugger running on 1.5.0 VM. Here, JDI is same but VM data structures
- * could still change.
- */
-
-class SAJDIClassLoader extends URLClassLoader {
-    private static final boolean DEBUG;
-    static {
-        DEBUG = System.getProperty("sun.jvm.hotspot.jdi.SAJDIClassLoader.DEBUG") != null;
-    }
-
-    private ClassLoader parent;
-    private boolean classPathSet;
-
-    SAJDIClassLoader(ClassLoader parent) {
-        super(new URL[0], parent);
-        this.parent = parent;
-    }
-
-    SAJDIClassLoader(ClassLoader parent, String classPath) {
-        this(parent);
-        this.classPathSet = true;
-        try {
-            addURL(new File(classPath).toURI().toURL());
-        } catch(MalformedURLException mue) {
-            throw new RuntimeException(mue);
-        }
-    }
-
-    public synchronized Class loadClass(String name)
-        throws ClassNotFoundException {
-        // First, check if the class has already been loaded
-        Class c = findLoadedClass(name);
-        if (c == null) {
-            /* If we are loading any class in 'sun.jvm.hotspot.'  or any of the
-             * sub-packages (except for 'debugger' sub-pkg. please refer below),
-             * we load it by 'this' loader. Or else, we forward the request to
-             * 'parent' loader, system loader etc. (rest of the code follows
-             * the patten in java.lang.ClassLoader.loadClass).
-             *
-             * 'sun.jvm.hotspot.debugger.' and sub-package classes are
-             * also loaded by parent loader. This is done for two reasons:
-             *
-             * 1. to avoid code bloat by too many classes.
-             * 2. to avoid loading same native library multiple times
-             *    from multiple class loaders (which results in getting a
-             *    UnsatisifiedLinkageError from System.loadLibrary).
-             */
-
-            if (name.startsWith("sun.jvm.hotspot.") &&
-                !name.startsWith("sun.jvm.hotspot.debugger.")) {
-                return findClass(name);
-            }
-            if (parent != null) {
-                c = parent.loadClass(name);
-            } else {
-                c = findSystemClass(name);
-            }
-        }
-        return c;
-    }
-
-    protected Class findClass(String name) throws ClassNotFoundException {
-        if (DEBUG) {
-            System.out.println("SA/JDI loader: about to load " + name);
-        }
-        if (classPathSet) {
-            return super.findClass(name);
-        } else {
-            byte[] b = null;
-            try {
-                InputStream in = getResourceAsStream(name.replace('.', '/') + ".class");
-                // Read until end of stream is reached
-                b = new byte[1024];
-                int total = 0;
-                int len = 0;
-                while ((len = in.read(b, total, b.length - total)) != -1) {
-                    total += len;
-                    if (total >= b.length) {
-                        byte[] tmp = new byte[total * 2];
-                        System.arraycopy(b, 0, tmp, 0, total);
-                        b = tmp;
-                    }
-                }
-                // Trim array to correct size, if necessary
-                if (total != b.length) {
-                    byte[] tmp = new byte[total];
-                    System.arraycopy(b, 0, tmp, 0, total);
-                    b = tmp;
-                }
-            } catch (Exception exp) {
-                throw (ClassNotFoundException) new ClassNotFoundException().initCause(exp);
-            }
-            return defineClass(name, b, 0, b.length);
-        }
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SAPIDAttachingConnector.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, 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.jdi;
-
-import com.sun.jdi.connect.*;
-import com.sun.jdi.Bootstrap;
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.VirtualMachineManager;
-
-import java.io.*;
-import java.lang.reflect.*;
-import java.net.*;
-import java.util.*;
-
-public class SAPIDAttachingConnector extends ConnectorImpl implements AttachingConnector {
-    static final String ARG_PID = "pid";
-    private Transport transport;
-
-    public SAPIDAttachingConnector(com.sun.tools.jdi.VirtualMachineManagerService ignored) {
-         this();
-    }
-
-    public SAPIDAttachingConnector() {
-         super();
-         // fixme jjh:  create resources for the these strings,
-        addStringArgument(
-                ARG_PID,
-                "PID",                     //getString("sa.pid.label"),
-                "PID of a Java process",   //getString("sa.pid.description");
-                "",
-                true);
-        transport = new Transport() {
-                   public String name() {
-                       return "local process";
-                       }
-                };
-    }
-
-    // security check to see whether the caller can perform attach
-    private void checkProcessAttach(int pid) {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            String os = System.getProperty("os.name");
-            try {
-                // Whether the caller can perform link against SA native library?
-                checkNativeLink(sm, os);
-                if (os.equals("SunOS") || os.equals("Linux")) {
-                    // Whether the caller can read /proc/<pid> file?
-                    sm.checkRead("/proc/" + pid);
-                }
-            } catch (SecurityException se) {
-                throw new SecurityException("permission denied to attach to " + pid);
-            }
-        }
-    }
-
-    private VirtualMachine createVirtualMachine(Class virtualMachineImplClass, int pid)
-        throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
-        java.lang.reflect.Method createByPIDMethod
-                  = virtualMachineImplClass.getMethod("createVirtualMachineForPID",
-                     new Class[] {
-                         VirtualMachineManager.class,
-                         Integer.TYPE, Integer.TYPE
-                     });
-        return (VirtualMachine) createByPIDMethod.invoke(null,
-                     new Object[] {
-                         Bootstrap.virtualMachineManager(),
-                         new Integer(pid),
-                         new Integer(0)
-                     });
-    }
-
-    public VirtualMachine attach(Map arguments) throws IOException,
-                                      IllegalConnectorArgumentsException {
-        int pid = 0;
-        try {
-            pid = Integer.parseInt(argument(ARG_PID, arguments).value());
-        } catch (NumberFormatException nfe) {
-            throw (IllegalConnectorArgumentsException) new IllegalConnectorArgumentsException
-                                                  (nfe.getMessage(), ARG_PID).initCause(nfe);
-        }
-
-        checkProcessAttach(pid);
-
-        VirtualMachine myVM = null;
-        try {
-            try {
-                Class vmImplClass = loadVirtualMachineImplClass();
-                myVM = createVirtualMachine(vmImplClass, pid);
-            } catch (InvocationTargetException ite) {
-                Class vmImplClass = handleVMVersionMismatch(ite);
-                if (vmImplClass != null) {
-                    return createVirtualMachine(vmImplClass, pid);
-                } else {
-                    throw ite;
-                }
-            }
-        } catch (Exception ee) {
-            if (DEBUG) {
-                System.out.println("VirtualMachineImpl() got an exception:");
-                ee.printStackTrace();
-                System.out.println("pid = " + pid);
-            }
-            throw (IOException) new IOException().initCause(ee);
-        }
-        setVMDisposeObserver(myVM);
-        return myVM;
-    }
-
-    public String name() {
-        return "sun.jvm.hotspot.jdi.SAPIDAttachingConnector";
-    }
-
-    public String description() {
-        return getString("This connector allows you to attach to a Java process using the Serviceability Agent");
-    }
-
-    public Transport transport() {
-        return transport;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/SDE.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,685 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.*;
-import java.io.File;
-
-class SDE {
-    private static final int INIT_SIZE_FILE = 3;
-    private static final int INIT_SIZE_LINE = 100;
-    private static final int INIT_SIZE_STRATUM = 3;
-
-    static final String BASE_STRATUM_NAME = "Java";
-
-    /* for C capatibility */
-    static final String NullString = null;
-
-    private class FileTableRecord {
-        int fileId;
-        String sourceName;
-        String sourcePath; // do not read - use accessor
-        boolean isConverted = false;
-
-        /**
-         * Return the sourcePath, computing it if not set.
-         * If set, convert '/' in the sourcePath to the
-         * local file separator.
-         */
-        String getSourcePath(ReferenceTypeImpl refType) {
-            if (!isConverted) {
-                if (sourcePath == null) {
-                    sourcePath = refType.baseSourceDir() + sourceName;
-                } else {
-                    StringBuffer buf = new StringBuffer();
-                    for (int i = 0; i < sourcePath.length(); ++i) {
-                        char ch = sourcePath.charAt(i);
-                        if (ch == '/') {
-                            buf.append(File.separatorChar);
-                        } else {
-                            buf.append(ch);
-                        }
-                    }
-                    sourcePath = buf.toString();
-                }
-                isConverted = true;
-            }
-            return sourcePath;
-        }
-    }
-
-    private class LineTableRecord {
-        int jplsStart;
-        int jplsEnd;
-        int jplsLineInc;
-        int njplsStart;
-        int njplsEnd;
-        int fileId;
-    }
-
-    private class StratumTableRecord {
-        String id;
-        int fileIndex;
-        int lineIndex;
-    }
-
-    class Stratum {
-        private final int sti; /* stratum index */
-
-        private Stratum(int sti) {
-            this.sti = sti;
-        }
-
-        String id() {
-            return stratumTable[sti].id;
-        }
-
-        boolean isJava() {
-            return sti == baseStratumIndex;
-        }
-
-        /**
-         * Return all the sourceNames for this stratum.
-         * Look from our starting fileIndex upto the starting
-         * fileIndex of next stratum - can do this since there
-         * is always a terminator stratum.
-         * Default sourceName (the first one) must be first.
-         */
-        List sourceNames(ReferenceTypeImpl refType) {
-            int i;
-            int fileIndexStart = stratumTable[sti].fileIndex;
-            /* one past end */
-            int fileIndexEnd = stratumTable[sti+1].fileIndex;
-            List result = new ArrayList(fileIndexEnd - fileIndexStart);
-            for (i = fileIndexStart; i < fileIndexEnd; ++i) {
-                result.add(fileTable[i].sourceName);
-            }
-            return result;
-        }
-
-        /**
-         * Return all the sourcePaths for this stratum.
-         * Look from our starting fileIndex upto the starting
-         * fileIndex of next stratum - can do this since there
-         * is always a terminator stratum.
-         * Default sourcePath (the first one) must be first.
-         */
-        List sourcePaths(ReferenceTypeImpl refType) {
-            int i;
-            int fileIndexStart = stratumTable[sti].fileIndex;
-            /* one past end */
-            int fileIndexEnd = stratumTable[sti+1].fileIndex;
-            List result = new ArrayList(fileIndexEnd - fileIndexStart);
-            for (i = fileIndexStart; i < fileIndexEnd; ++i) {
-                result.add(fileTable[i].getSourcePath(refType));
-            }
-            return result;
-        }
-
-        LineStratum lineStratum(ReferenceTypeImpl refType,
-                                int jplsLine) {
-            int lti = stiLineTableIndex(sti, jplsLine);
-            if (lti < 0) {
-                return null;
-            } else {
-                return new LineStratum(sti, lti, refType,
-                                       jplsLine);
-            }
-        }
-    }
-
-    class LineStratum {
-        private final int sti; /* stratum index */
-        private final int lti; /* line table index */
-        private final ReferenceTypeImpl refType;
-        private final int jplsLine;
-        private String sourceName = null;
-        private String sourcePath = null;
-
-        private LineStratum(int sti, int lti,
-                            ReferenceTypeImpl refType,
-                            int jplsLine) {
-            this.sti = sti;
-            this.lti = lti;
-            this.refType = refType;
-            this.jplsLine = jplsLine;
-        }
-
-        public boolean equals(Object obj) {
-            if ((obj != null) && (obj instanceof LineStratum)) {
-                LineStratum other = (LineStratum)obj;
-                return (lti == other.lti) &&
-                       (sti == other.sti) &&
-                       (lineNumber() == other.lineNumber()) &&
-                       (refType.equals(other.refType));
-            } else {
-                return false;
-            }
-        }
-
-        int lineNumber() {
-            return stiLineNumber(sti, lti, jplsLine);
-        }
-
-        /**
-         * Fetch the source name and source path for
-         * this line, converting or constructing
-         * the source path if needed.
-         */
-        void getSourceInfo() {
-            if (sourceName != null) {
-                // already done
-                return;
-            }
-            int fti = stiFileTableIndex(sti, lti);
-            if (fti == -1) {
-                throw new InternalError(
-              "Bad SourceDebugExtension, no matching source id " +
-              lineTable[lti].fileId + " jplsLine: " + jplsLine);
-            }
-            FileTableRecord ftr = fileTable[fti];
-            sourceName = ftr.sourceName;
-            sourcePath = ftr.getSourcePath(refType);
-        }
-
-        String sourceName() {
-            getSourceInfo();
-            return sourceName;
-        }
-
-        String sourcePath() {
-            getSourceInfo();
-            return sourcePath;
-        }
-    }
-
-    private FileTableRecord[] fileTable = null;
-    private LineTableRecord[] lineTable = null;
-    private StratumTableRecord[] stratumTable = null;
-
-    private int fileIndex = 0;
-    private int lineIndex = 0;
-    private int stratumIndex = 0;
-    private int currentFileId = 0;
-
-    private int defaultStratumIndex = -1;
-    private int baseStratumIndex = -2; /* so as not to match -1 above */
-    private int sdePos = 0;
-
-    final String sourceDebugExtension;
-    String jplsFilename = null;
-    String defaultStratumId = null;
-    boolean isValid = false;
-
-    SDE(String sourceDebugExtension) {
-        this.sourceDebugExtension = sourceDebugExtension;
-        decode();
-    }
-
-    SDE() {
-        this.sourceDebugExtension = null;
-        createProxyForAbsentSDE();
-    }
-
-    char sdePeek() {
-        if (sdePos >= sourceDebugExtension.length()) {
-            syntax();
-        }
-        return sourceDebugExtension.charAt(sdePos);
-    }
-
-    char sdeRead() {
-        if (sdePos >= sourceDebugExtension.length()) {
-            syntax();
-        }
-        return sourceDebugExtension.charAt(sdePos++);
-    }
-
-    void sdeAdvance() {
-        sdePos++;
-    }
-
-    void syntax() {
-        throw new InternalError("bad SourceDebugExtension syntax - position " +
-                                sdePos);
-    }
-
-    void syntax(String msg) {
-        throw new InternalError("bad SourceDebugExtension syntax: " + msg);
-    }
-
-    void assureLineTableSize() {
-        int len = lineTable == null? 0 : lineTable.length;
-        if (lineIndex >= len) {
-            int i;
-            int newLen = len == 0? INIT_SIZE_LINE : len * 2;
-            LineTableRecord[] newTable = new LineTableRecord[newLen];
-            for (i = 0; i < len; ++i) {
-                newTable[i] = lineTable[i];
-            }
-            for (; i < newLen; ++i) {
-                newTable[i] = new LineTableRecord();
-            }
-            lineTable = newTable;
-        }
-    }
-
-    void assureFileTableSize() {
-        int len = fileTable == null? 0 : fileTable.length;
-        if (fileIndex >= len) {
-            int i;
-            int newLen = len == 0? INIT_SIZE_FILE : len * 2;
-            FileTableRecord[] newTable = new FileTableRecord[newLen];
-            for (i = 0; i < len; ++i) {
-                newTable[i] = fileTable[i];
-            }
-            for (; i < newLen; ++i) {
-                newTable[i] = new FileTableRecord();
-            }
-            fileTable = newTable;
-        }
-    }
-
-    void assureStratumTableSize() {
-        int len = stratumTable == null? 0 : stratumTable.length;
-        if (stratumIndex >= len) {
-            int i;
-            int newLen = len == 0? INIT_SIZE_STRATUM : len * 2;
-            StratumTableRecord[] newTable = new StratumTableRecord[newLen];
-            for (i = 0; i < len; ++i) {
-                newTable[i] = stratumTable[i];
-            }
-            for (; i < newLen; ++i) {
-                newTable[i] = new StratumTableRecord();
-            }
-            stratumTable = newTable;
-        }
-    }
-
-    String readLine() {
-        StringBuffer sb = new StringBuffer();
-        char ch;
-
-        ignoreWhite();
-        while (((ch = sdeRead()) != '\n') && (ch != '\r')) {
-            sb.append((char)ch);
-        }
-        // check for CR LF
-        if ((ch == '\r') && (sdePeek() == '\n')) {
-            sdeRead();
-        }
-        ignoreWhite(); // leading white
-        return sb.toString();
-    }
-
-    private int defaultStratumTableIndex() {
-        if ((defaultStratumIndex == -1) && (defaultStratumId != null)) {
-            defaultStratumIndex =
-                stratumTableIndex(defaultStratumId);
-        }
-        return defaultStratumIndex;
-    }
-
-    int stratumTableIndex(String stratumId) {
-        int i;
-
-        if (stratumId == null) {
-            return defaultStratumTableIndex();
-        }
-        for (i = 0; i < (stratumIndex-1); ++i) {
-            if (stratumTable[i].id.equals(stratumId)) {
-                return i;
-            }
-        }
-        return defaultStratumTableIndex();
-    }
-
-    Stratum stratum(String stratumID) {
-        int sti = stratumTableIndex(stratumID);
-        return new Stratum(sti);
-    }
-
-    List availableStrata() {
-        List strata = new ArrayList();
-
-        for (int i = 0; i < (stratumIndex-1); ++i) {
-            StratumTableRecord rec = stratumTable[i];
-            strata.add(rec.id);
-        }
-        return strata;
-    }
-
-/*****************************
- * below functions/methods are written to compile under either Java or C
- *
- * Needed support functions:
- *   sdePeek()
- *   sdeRead()
- *   sdeAdvance()
- *   readLine()
- *   assureLineTableSize()
- *   assureFileTableSize()
- *   assureStratumTableSize()
- *   syntax()
- *
- *   stratumTableIndex(String)
- *
- * Needed support variables:
- *   lineTable
- *   lineIndex
- *   fileTable
- *   fileIndex
- *   currentFileId
- *
- * Needed types:
- *   String
- *
- * Needed constants:
- *   NullString
- */
-
-    void ignoreWhite() {
-        char ch;
-
-        while (((ch = sdePeek()) == ' ') || (ch == '\t')) {
-            sdeAdvance();
-        }
-    }
-
-    void ignoreLine() {
-        char ch;
-
-        while (((ch = sdeRead()) != '\n') && (ch != '\r')) {
-        }
-        /* check for CR LF */
-        if ((ch == '\r') && (sdePeek() == '\n')) {
-            sdeAdvance();
-        }
-        ignoreWhite(); /* leading white */
-    }
-
-    int readNumber() {
-        int value = 0;
-        char ch;
-
-        ignoreWhite();
-        while (((ch = sdePeek()) >= '0') && (ch <= '9')) {
-            sdeAdvance();
-            value = (value * 10) + ch - '0';
-        }
-        ignoreWhite();
-        return value;
-    }
-
-    void storeFile(int fileId, String sourceName, String sourcePath) {
-        assureFileTableSize();
-        fileTable[fileIndex].fileId = fileId;
-        fileTable[fileIndex].sourceName = sourceName;
-        fileTable[fileIndex].sourcePath = sourcePath;
-        ++fileIndex;
-    }
-
-    void fileLine() {
-        int hasAbsolute = 0; /* acts as boolean */
-        int fileId;
-        String sourceName;
-        String sourcePath = null;
-
-        /* is there an absolute filename? */
-        if (sdePeek() == '+') {
-            sdeAdvance();
-            hasAbsolute = 1;
-        }
-        fileId = readNumber();
-        sourceName = readLine();
-        if (hasAbsolute == 1) {
-            sourcePath = readLine();
-        }
-
-        storeFile(fileId, sourceName, sourcePath);
-    }
-
-    void storeLine(int jplsStart, int jplsEnd, int jplsLineInc,
-                  int njplsStart, int njplsEnd, int fileId) {
-        assureLineTableSize();
-        lineTable[lineIndex].jplsStart = jplsStart;
-        lineTable[lineIndex].jplsEnd = jplsEnd;
-        lineTable[lineIndex].jplsLineInc = jplsLineInc;
-        lineTable[lineIndex].njplsStart = njplsStart;
-        lineTable[lineIndex].njplsEnd = njplsEnd;
-        lineTable[lineIndex].fileId = fileId;
-        ++lineIndex;
-    }
-
-    /**
-     * Parse line translation info.  Syntax is
-     *     <NJ-start-line> [ # <file-id> ] [ , <line-count> ] :
-     *                 <J-start-line> [ , <line-increment> ] CR
-     */
-    void lineLine() {
-        int lineCount = 1;
-        int lineIncrement = 1;
-        int njplsStart;
-        int jplsStart;
-
-        njplsStart = readNumber();
-
-        /* is there a fileID? */
-        if (sdePeek() == '#') {
-            sdeAdvance();
-            currentFileId = readNumber();
-        }
-
-        /* is there a line count? */
-        if (sdePeek() == ',') {
-            sdeAdvance();
-            lineCount = readNumber();
-        }
-
-        if (sdeRead() != ':') {
-            syntax();
-        }
-        jplsStart = readNumber();
-        if (sdePeek() == ',') {
-            sdeAdvance();
-            lineIncrement = readNumber();
-        }
-        ignoreLine(); /* flush the rest */
-
-        storeLine(jplsStart,
-                  jplsStart + (lineCount * lineIncrement) -1,
-                  lineIncrement,
-                  njplsStart,
-                  njplsStart + lineCount -1,
-                  currentFileId);
-    }
-
-    /**
-     * Until the next stratum section, everything after this
-     * is in stratumId - so, store the current indicies.
-     */
-    void storeStratum(String stratumId) {
-        /* remove redundant strata */
-        if (stratumIndex > 0) {
-            if ((stratumTable[stratumIndex-1].fileIndex
-                                            == fileIndex) &&
-                (stratumTable[stratumIndex-1].lineIndex
-                                            == lineIndex)) {
-                /* nothing changed overwrite it */
-                --stratumIndex;
-            }
-        }
-        /* store the results */
-        assureStratumTableSize();
-        stratumTable[stratumIndex].id = stratumId;
-        stratumTable[stratumIndex].fileIndex = fileIndex;
-        stratumTable[stratumIndex].lineIndex = lineIndex;
-        ++stratumIndex;
-        currentFileId = 0;
-    }
-
-    /**
-     * The beginning of a stratum's info
-     */
-    void stratumSection() {
-        storeStratum(readLine());
-    }
-
-    void fileSection() {
-        ignoreLine();
-        while (sdePeek() != '*') {
-            fileLine();
-        }
-    }
-
-    void lineSection() {
-        ignoreLine();
-        while (sdePeek() != '*') {
-            lineLine();
-        }
-    }
-
-    /**
-     * Ignore a section we don't know about.
-     */
-    void ignoreSection() {
-        ignoreLine();
-        while (sdePeek() != '*') {
-            ignoreLine();
-        }
-    }
-
-    /**
-     * A base "Java" stratum is always available, though
-     * it is not in the SourceDebugExtension.
-     * Create the base stratum.
-     */
-    void createJavaStratum() {
-        baseStratumIndex = stratumIndex;
-        storeStratum(BASE_STRATUM_NAME);
-        storeFile(1, jplsFilename, NullString);
-        /* JPL line numbers cannot exceed 65535 */
-        storeLine(1, 65536, 1, 1, 65536, 1);
-        storeStratum("Aux"); /* in case they don't declare */
-    }
-
-    /**
-     * Decode a SourceDebugExtension which is in SourceMap format.
-     * This is the entry point into the recursive descent parser.
-     */
-    void decode() {
-        /* check for "SMAP" - allow EOF if not ours */
-        if ((sourceDebugExtension.length() < 4) ||
-            (sdeRead() != 'S') ||
-            (sdeRead() != 'M') ||
-            (sdeRead() != 'A') ||
-            (sdeRead() != 'P')) {
-            return; /* not our info */
-        }
-        ignoreLine(); /* flush the rest */
-        jplsFilename = readLine();
-        defaultStratumId = readLine();
-        createJavaStratum();
-        while (true) {
-            if (sdeRead() != '*') {
-                syntax();
-            }
-            switch (sdeRead()) {
-                case 'S':
-                    stratumSection();
-                    break;
-                case 'F':
-                    fileSection();
-                    break;
-                case 'L':
-                    lineSection();
-                    break;
-                case 'E':
-                    /* set end points */
-                    storeStratum("*terminator*");
-                    isValid = true;
-                    return;
-                default:
-                    ignoreSection();
-            }
-        }
-    }
-
-    void createProxyForAbsentSDE() {
-        jplsFilename = null;
-        defaultStratumId = BASE_STRATUM_NAME;
-        defaultStratumIndex = stratumIndex;
-        createJavaStratum();
-        storeStratum("*terminator*");
-    }
-
-    /***************** query functions ***********************/
-
-    private int stiLineTableIndex(int sti, int jplsLine) {
-        int i;
-        int lineIndexStart;
-        int lineIndexEnd;
-
-        lineIndexStart = stratumTable[sti].lineIndex;
-        /* one past end */
-        lineIndexEnd = stratumTable[sti+1].lineIndex;
-        for (i = lineIndexStart; i < lineIndexEnd; ++i) {
-            if ((jplsLine >= lineTable[i].jplsStart) &&
-                            (jplsLine <= lineTable[i].jplsEnd)) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    private int stiLineNumber(int sti, int lti, int jplsLine) {
-        return lineTable[lti].njplsStart +
-                (((jplsLine - lineTable[lti].jplsStart) /
-                                   lineTable[lti].jplsLineInc));
-    }
-
-    private int fileTableIndex(int sti, int fileId) {
-        int i;
-        int fileIndexStart = stratumTable[sti].fileIndex;
-        /* one past end */
-        int fileIndexEnd = stratumTable[sti+1].fileIndex;
-        for (i = fileIndexStart; i < fileIndexEnd; ++i) {
-            if (fileTable[i].fileId == fileId) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    private int stiFileTableIndex(int sti, int lti) {
-        return fileTableIndex(sti, lineTable[lti].fileId);
-    }
-
-    boolean isValid() {
-        return isValid;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ShortTypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public class ShortTypeImpl extends PrimitiveTypeImpl implements ShortType {
-    ShortTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return "S";
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedShortValue());
-    }
-
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ShortValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-/*
- * 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
- * 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.jdi;
-
-import com.sun.jdi.*;
-
-public class ShortValueImpl extends PrimitiveValueImpl
-                            implements ShortValue {
-    private short value;
-
-    ShortValueImpl(VirtualMachine aVm,short aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof ShortValue)) {
-            return (value == ((ShortValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(ShortValue shortVal) {
-        return value() - shortVal.value();
-    }
-
-    public Type type() {
-        return vm.theShortType();
-    }
-
-    public short value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/StackFrameImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,314 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.jdi;
-
-import com.sun.jdi.*;
-import sun.jvm.hotspot.oops.ObjectHeap;
-import sun.jvm.hotspot.debugger.OopHandle;
-import sun.jvm.hotspot.oops.Array;
-import sun.jvm.hotspot.oops.ObjArray;
-import sun.jvm.hotspot.oops.TypeArray;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.runtime.BasicType;
-import sun.jvm.hotspot.runtime.JavaVFrame;
-import sun.jvm.hotspot.runtime.StackValue;
-import sun.jvm.hotspot.runtime.StackValueCollection;
-import sun.jvm.hotspot.utilities.Assert;
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Collections;
-
-public class StackFrameImpl extends MirrorImpl
-                            implements StackFrame
-{
-    /* Once false, frame should not be used.
-     * access synchronized on (vm.state())
-     */
-    private boolean isValid = true;
-
-    private final ThreadReferenceImpl thread;
-    private final JavaVFrame saFrame;
-    private final Location location;
-    private Map visibleVariables =  null;
-    private ObjectReference thisObject = null;
-
-    StackFrameImpl(VirtualMachine vm, ThreadReferenceImpl thread,
-                   JavaVFrame jvf) {
-        super(vm);
-        this.thread = thread;
-        this.saFrame = jvf;
-
-        sun.jvm.hotspot.oops.Method SAMethod = jvf.getMethod();
-
-        ReferenceType rt = ((VirtualMachineImpl)vm).referenceType(SAMethod.getMethodHolder());
-
-        this.location = new LocationImpl(vm, rt, SAMethod, (long)jvf.getBCI());
-    }
-
-    private void validateStackFrame() {
-        if (!isValid) {
-            throw new InvalidStackFrameException("Thread has been resumed");
-        }
-    }
-
-    JavaVFrame getJavaVFrame() {
-        return saFrame;
-    }
-
-    /**
-     * Return the frame location.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    public Location location() {
-        validateStackFrame();
-        return location;
-    }
-
-    /**
-     * Return the thread holding the frame.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    public ThreadReference thread() {
-        validateStackFrame();
-        return thread;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof StackFrameImpl)) {
-            StackFrameImpl other = (StackFrameImpl)obj;
-            return (saFrame.equals(other.saFrame));
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return saFrame.hashCode();
-    }
-
-    public ObjectReference thisObject() {
-        validateStackFrame();
-        MethodImpl currentMethod = (MethodImpl)location.method();
-        if (currentMethod.isStatic() || currentMethod.isNative()) {
-            return null;
-        }
-        if (thisObject == null) {
-            StackValueCollection values = saFrame.getLocals();
-            if (Assert.ASSERTS_ENABLED) {
-                Assert.that(values.size() > 0, "this is missing");
-            }
-            // 'this' at index 0.
-            if (values.get(0).getType() == BasicType.getTConflict()) {
-              return null;
-            }
-            OopHandle handle = values.oopHandleAt(0);
-            ObjectHeap heap = vm.saObjectHeap();
-            thisObject = vm.objectMirror(heap.newOop(handle));
-        }
-        return thisObject;
-    }
-
-    /**
-     * Build the visible variable map.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    private void createVisibleVariables() throws AbsentInformationException {
-        if (visibleVariables == null) {
-            List allVariables = location.method().variables();
-            Map map = new HashMap(allVariables.size());
-
-            Iterator iter = allVariables.iterator();
-            while (iter.hasNext()) {
-                LocalVariableImpl variable = (LocalVariableImpl)iter.next();
-                String name = variable.name();
-                if (variable.isVisible(this)) {
-                    LocalVariable existing = (LocalVariable)map.get(name);
-                    if ((existing == null) ||
-                        variable.hides(existing)) {
-                        map.put(name, variable);
-                    }
-                }
-            }
-            visibleVariables = map;
-        }
-    }
-
-    /**
-     * Return the list of visible variable in the frame.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    public List visibleVariables() throws AbsentInformationException {
-        validateStackFrame();
-        createVisibleVariables();
-        List mapAsList = new ArrayList(visibleVariables.values());
-        Collections.sort(mapAsList);
-        return mapAsList;
-    }
-
-    /**
-     * Return a particular variable in the frame.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    public LocalVariable visibleVariableByName(String name) throws AbsentInformationException  {
-        validateStackFrame();
-        createVisibleVariables();
-        return (LocalVariable)visibleVariables.get(name);
-    }
-
-    public Value getValue(LocalVariable variable) {
-        List list = new ArrayList(1);
-        list.add(variable);
-        Map map = getValues(list);
-        return (Value)map.get(variable);
-    }
-
-    public Map getValues(List variables) {
-        validateStackFrame();
-        StackValueCollection values = saFrame.getLocals();
-
-        int count = variables.size();
-        Map map = new HashMap(count);
-        for (int ii=0; ii<count; ++ii) {
-            LocalVariableImpl variable = (LocalVariableImpl)variables.get(ii);
-            if (!variable.isVisible(this)) {
-                throw new IllegalArgumentException(variable.name() +
-                                 " is not valid at this frame location");
-            }
-            ValueImpl valueImpl;
-            int ss = variable.slot();
-            char c = variable.signature().charAt(0);
-            BasicType variableType = BasicType.charToBasicType(c);
-            valueImpl = getSlotValue(values, variableType, ss);
-            map.put(variable, valueImpl);
-        }
-        return map;
-    }
-
-    public List getArgumentValues() {
-        validateStackFrame();
-        StackValueCollection values = saFrame.getLocals();
-        MethodImpl mmm = (MethodImpl)location.method();
-        if (mmm.isNative())
-            return null;
-        List argSigs = mmm.argumentSignatures();
-        int count = argSigs.size();
-        List res = new ArrayList(0);
-
-        int slot = mmm.isStatic()? 0 : 1;
-        for (int ii = 0; ii < count; ++slot, ++ii) {
-            char sigChar = ((String)argSigs.get(ii)).charAt(0);
-            BasicType variableType = BasicType.charToBasicType(sigChar);
-            res.add(getSlotValue(values, variableType, slot));
-            if (sigChar == 'J' || sigChar == 'D') {
-                slot++;
-            }
-        }
-        return res;
-    }
-
-    private ValueImpl getSlotValue(StackValueCollection values,
-                       BasicType variableType, int ss) {
-        ValueImpl valueImpl = null;
-        OopHandle handle = null;
-        ObjectHeap heap = vm.saObjectHeap();
-        if (values.get(ss).getType() == BasicType.getTConflict()) {
-          // Dead locals, so just represent them as a zero of the appropriate type
-          if (variableType == BasicType.T_BOOLEAN) {
-            valueImpl = (BooleanValueImpl) vm.mirrorOf(false);
-          } else if (variableType == BasicType.T_CHAR) {
-            valueImpl = (CharValueImpl) vm.mirrorOf((char)0);
-          } else if (variableType == BasicType.T_FLOAT) {
-            valueImpl = (FloatValueImpl) vm.mirrorOf((float)0);
-          } else if (variableType == BasicType.T_DOUBLE) {
-            valueImpl = (DoubleValueImpl) vm.mirrorOf((double)0);
-          } else if (variableType == BasicType.T_BYTE) {
-            valueImpl = (ByteValueImpl) vm.mirrorOf((byte)0);
-          } else if (variableType == BasicType.T_SHORT) {
-            valueImpl = (ShortValueImpl) vm.mirrorOf((short)0);
-          } else if (variableType == BasicType.T_INT) {
-            valueImpl = (IntegerValueImpl) vm.mirrorOf((int)0);
-          } else if (variableType == BasicType.T_LONG) {
-            valueImpl = (LongValueImpl) vm.mirrorOf((long)0);
-          } else if (variableType == BasicType.T_OBJECT) {
-            // we may have an [Ljava/lang/Object; - i.e., Object[] with the
-            // elements themselves may be arrays because every array is an Object.
-            handle = null;
-            valueImpl = (ObjectReferenceImpl) vm.objectMirror(heap.newOop(handle));
-          } else if (variableType == BasicType.T_ARRAY) {
-            handle = null;
-            valueImpl = vm.arrayMirror((Array)heap.newOop(handle));
-          } else if (variableType == BasicType.T_VOID) {
-            valueImpl = new VoidValueImpl(vm);
-          } else {
-            throw new RuntimeException("Should not read here");
-          }
-        } else {
-          if (variableType == BasicType.T_BOOLEAN) {
-            valueImpl = (BooleanValueImpl) vm.mirrorOf(values.booleanAt(ss));
-          } else if (variableType == BasicType.T_CHAR) {
-            valueImpl = (CharValueImpl) vm.mirrorOf(values.charAt(ss));
-          } else if (variableType == BasicType.T_FLOAT) {
-            valueImpl = (FloatValueImpl) vm.mirrorOf(values.floatAt(ss));
-          } else if (variableType == BasicType.T_DOUBLE) {
-            valueImpl = (DoubleValueImpl) vm.mirrorOf(values.doubleAt(ss));
-          } else if (variableType == BasicType.T_BYTE) {
-            valueImpl = (ByteValueImpl) vm.mirrorOf(values.byteAt(ss));
-          } else if (variableType == BasicType.T_SHORT) {
-            valueImpl = (ShortValueImpl) vm.mirrorOf(values.shortAt(ss));
-          } else if (variableType == BasicType.T_INT) {
-            valueImpl = (IntegerValueImpl) vm.mirrorOf(values.intAt(ss));
-          } else if (variableType == BasicType.T_LONG) {
-            valueImpl = (LongValueImpl) vm.mirrorOf(values.longAt(ss));
-          } else if (variableType == BasicType.T_OBJECT) {
-            // we may have an [Ljava/lang/Object; - i.e., Object[] with the
-            // elements themselves may be arrays because every array is an Object.
-            handle = values.oopHandleAt(ss);
-            valueImpl = (ObjectReferenceImpl) vm.objectMirror(heap.newOop(handle));
-          } else if (variableType == BasicType.T_ARRAY) {
-            handle = values.oopHandleAt(ss);
-            valueImpl = vm.arrayMirror((Array)heap.newOop(handle));
-          } else if (variableType == BasicType.T_VOID) {
-            valueImpl = new VoidValueImpl(vm);
-          } else {
-            throw new RuntimeException("Should not read here");
-          }
-        }
-
-        return valueImpl;
-    }
-
-    public void setValue(LocalVariable variableIntf, Value valueIntf)
-        throws InvalidTypeException, ClassNotLoadedException {
-
-        vm.throwNotReadOnlyException("StackFrame.setValue()");
-    }
-
-    public String toString() {
-        return location.toString() + " in thread " + thread.toString();
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/StratumLineInfo.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-class StratumLineInfo implements LineInfo {
-    private final String stratumID;
-    private final int lineNumber;
-    private final String sourceName;
-    private final String sourcePath;
-
-    StratumLineInfo(String stratumID, int lineNumber,
-                    String sourceName, String sourcePath) {
-        this.stratumID = stratumID;
-        this.lineNumber = lineNumber;
-        this.sourceName = sourceName;
-        this.sourcePath = sourcePath;
-    }
-
-    public String liStratum() {
-        return stratumID;
-    }
-
-    public int liLineNumber() {
-        return lineNumber;
-    }
-
-    public String liSourceName()
-                            throws AbsentInformationException {
-        if (sourceName == null) {
-            throw new AbsentInformationException();
-        }
-        return sourceName;
-    }
-
-    public String liSourcePath()
-                            throws AbsentInformationException {
-        if (sourcePath == null) {
-            throw new AbsentInformationException();
-        }
-        return sourcePath;
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/StringReferenceImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.OopUtilities;
-
-public class StringReferenceImpl extends ObjectReferenceImpl
-    implements StringReference
-{
-    private String value;
-
-    StringReferenceImpl(VirtualMachine aVm, sun.jvm.hotspot.oops.Instance oRef) {
-        super(aVm,oRef);
-        value = OopUtilities.stringOopToString(oRef);
-    }
-
-    public String value() {
-        return value;
-    }
-
-    public String toString() {
-        return "\"" + value() + "\"";
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ThreadGroupReferenceImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import sun.jvm.hotspot.oops.Oop;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.OopUtilities;
-import sun.jvm.hotspot.runtime.JavaThread;
-import com.sun.jdi.*;
-import java.util.*;
-
-public class ThreadGroupReferenceImpl extends ObjectReferenceImpl
-    implements ThreadGroupReference
-{
-    ThreadGroupReferenceImpl(VirtualMachine aVm, sun.jvm.hotspot.oops.Oop oRef) {
-        super(aVm, oRef);
-    }
-
-    protected String description() {
-        return "ThreadGroupReference " + uniqueID();
-    }
-
-    public String name() {
-        return OopUtilities.threadGroupOopGetName(ref());
-    }
-
-    public ThreadGroupReference parent() {
-        return (ThreadGroupReferenceImpl)vm.threadGroupMirror(
-               (Instance)OopUtilities.threadGroupOopGetParent(ref()));
-    }
-
-    public void suspend() {
-        vm.throwNotReadOnlyException("ThreadGroupReference.suspend()");
-    }
-
-    public void resume() {
-        vm.throwNotReadOnlyException("ThreadGroupReference.resume()");
-    }
-
-    public List threads() {
-        // Each element of this array is the Oop for a thread;
-        // NOTE it is not the JavaThread that we need to create
-        // a ThreadReferenceImpl.
-        Oop[] myThreads = OopUtilities.threadGroupOopGetThreads(ref());
-
-        ArrayList myList = new ArrayList(myThreads.length);
-        for (int ii = 0; ii < myThreads.length; ii++) {
-            JavaThread jt = OopUtilities.threadOopGetJavaThread(myThreads[ii]);
-            if (jt != null) {
-                ThreadReferenceImpl xx = (ThreadReferenceImpl)vm.threadMirror(jt);
-                myList.add(xx);
-            }
-        }
-        return myList;
-    }
-
-    public List threadGroups() {
-        Oop[] myGroups = OopUtilities.threadGroupOopGetGroups(ref());
-        ArrayList myList = new ArrayList(myGroups.length);
-        for (int ii = 0; ii < myGroups.length; ii++) {
-            ThreadGroupReferenceImpl xx = (ThreadGroupReferenceImpl)vm.threadGroupMirror(
-                                          (Instance)myGroups[ii]);
-            myList.add(xx);
-
-        }
-        return myList;
-    }
-
-    public String toString() {
-        return "instance of " + referenceType().name() +
-               "(name='" + name() + "', " + "id=" + uniqueID() + ")";
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ThreadReferenceImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,400 +0,0 @@
-/*
- * Copyright (c) 2002, 2009, 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.jdi;
-
-import sun.jvm.hotspot.debugger.OopHandle;
-import sun.jvm.hotspot.runtime.VMObject;
-import sun.jvm.hotspot.runtime.JavaThread;
-import sun.jvm.hotspot.runtime.OSThread;
-//import sun.jvm.hotspot.runtime.StackFrameStream;
-import sun.jvm.hotspot.runtime.JavaVFrame;
-import sun.jvm.hotspot.runtime.JavaThreadState;
-import sun.jvm.hotspot.runtime.MonitorInfo;
-import sun.jvm.hotspot.runtime.ObjectMonitor;
-import sun.jvm.hotspot.oops.Oop;
-import sun.jvm.hotspot.oops.ObjectHeap;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.OopUtilities;
-import sun.jvm.hotspot.oops.Klass;
-import sun.jvm.hotspot.utilities.Assert;
-import com.sun.jdi.*;
-import java.util.*;
-
-public class ThreadReferenceImpl extends ObjectReferenceImpl
-             implements ThreadReference, /* imports */ JVMTIThreadState {
-
-    private JavaThread myJavaThread;
-    private ArrayList frames;    // StackFrames
-    private List ownedMonitors; // List<ObjectReferenceImpl>
-    private List ownedMonitorsInfo; // List<MonitorInfo>
-    private ObjectReferenceImpl currentContendingMonitor;
-
-    ThreadReferenceImpl(VirtualMachine aVm, sun.jvm.hotspot.runtime.JavaThread aRef) {
-        // We are given a JavaThread and save it in our myJavaThread field.
-        // But, our parent class is an ObjectReferenceImpl so we need an Oop
-        // for it.  JavaThread is a wrapper around a Thread Oop so we get
-        // that Oop and give it to our super.
-        // We can get it back again by calling ref().
-        super(aVm, (Instance)aRef.getThreadObj());
-        myJavaThread = aRef;
-    }
-
-    ThreadReferenceImpl(VirtualMachine vm, Instance oRef) {
-        // Instance must be of type java.lang.Thread
-        super(vm, oRef);
-
-        // JavaThread retrieved from java.lang.Thread instance may be null.
-        // This is the case for threads not-started and for zombies. Wherever
-        // appropriate, check for null instead of resulting in NullPointerException.
-        myJavaThread = OopUtilities.threadOopGetJavaThread(oRef);
-    }
-
-    // return value may be null. refer to the comment in constructor.
-    JavaThread getJavaThread() {
-        return myJavaThread;
-    }
-
-    protected String description() {
-        return "ThreadReference " + uniqueID();
-    }
-
-    /**
-     * Note that we only cache the name string while suspended because
-     * it can change via Thread.setName arbitrarily
-     */
-    public String name() {
-        return OopUtilities.threadOopGetName(ref());
-    }
-
-    public void suspend() {
-        vm.throwNotReadOnlyException("ThreadReference.suspend()");
-    }
-
-    public void resume() {
-        vm.throwNotReadOnlyException("ThreadReference.resume()");
-    }
-
-    public int suspendCount() {
-        // all threads are "suspended" when we attach to process or core.
-        // we interpret this as one suspend.
-        return 1;
-    }
-
-    public void stop(ObjectReference throwable) throws InvalidTypeException {
-        vm.throwNotReadOnlyException("ThreadReference.stop()");
-    }
-
-    public void interrupt() {
-        vm.throwNotReadOnlyException("ThreadReference.interrupt()");
-    }
-
-    // refer to jvmtiEnv::GetThreadState
-    private int jvmtiGetThreadState() {
-        // get most state bits
-        int state = OopUtilities.threadOopGetThreadStatus(ref());
-        // add more state bits
-        if (myJavaThread != null) {
-            JavaThreadState jts = myJavaThread.getThreadState();
-            if (myJavaThread.isBeingExtSuspended()) {
-                state |= JVMTI_THREAD_STATE_SUSPENDED;
-            }
-            if (jts == JavaThreadState.IN_NATIVE) {
-                state |= JVMTI_THREAD_STATE_IN_NATIVE;
-            }
-            OSThread osThread = myJavaThread.getOSThread();
-            if (osThread != null && osThread.interrupted()) {
-                state |= JVMTI_THREAD_STATE_INTERRUPTED;
-            }
-        }
-        return state;
-    }
-
-    public int status() {
-        int state = jvmtiGetThreadState();
-        int status = THREAD_STATUS_UNKNOWN;
-        // refer to map2jdwpThreadStatus in util.c (back-end)
-        if (! ((state & JVMTI_THREAD_STATE_ALIVE) != 0) ) {
-            if ((state & JVMTI_THREAD_STATE_TERMINATED) != 0) {
-                status = THREAD_STATUS_ZOMBIE;
-            } else {
-                status = THREAD_STATUS_NOT_STARTED;
-            }
-        } else {
-            if ((state & JVMTI_THREAD_STATE_SLEEPING) != 0) {
-                status = THREAD_STATUS_SLEEPING;
-            } else if ((state & JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER) != 0) {
-                status = THREAD_STATUS_MONITOR;
-            } else if ((state & JVMTI_THREAD_STATE_WAITING) != 0) {
-                status = THREAD_STATUS_WAIT;
-            } else if ((state & JVMTI_THREAD_STATE_RUNNABLE) != 0) {
-                status = THREAD_STATUS_RUNNING;
-            }
-        }
-        return status;
-    }
-
-    public boolean isSuspended() { //fixme jjh
-        // If we want to support doing this for a VM which was being
-        // debugged, then we need to fix this.
-        // In the meantime, we will say all threads are suspended,
-        // otherwise, some things won't work, like the jdb 'up' cmd.
-        return true;
-    }
-
-    public boolean isAtBreakpoint() { //fixme jjh
-        // If we want to support doing this for a VM which was being
-        // debugged, then we need to fix this.
-        return false;
-    }
-
-    public ThreadGroupReference threadGroup() {
-        return (ThreadGroupReferenceImpl)vm.threadGroupMirror(
-               (Instance)OopUtilities.threadOopGetThreadGroup(ref()));
-    }
-
-    public int frameCount() throws IncompatibleThreadStateException  { //fixme jjh
-        privateFrames(0, -1);
-        return frames.size();
-    }
-
-    public List frames() throws IncompatibleThreadStateException  {
-        return privateFrames(0, -1);
-    }
-
-    public StackFrame frame(int index) throws IncompatibleThreadStateException  {
-        List list = privateFrames(index, 1);
-        return (StackFrame)list.get(0);
-    }
-
-    public List frames(int start, int length)
-                              throws IncompatibleThreadStateException  {
-        if (length < 0) {
-            throw new IndexOutOfBoundsException(
-                "length must be greater than or equal to zero");
-        }
-        return privateFrames(start, length);
-    }
-
-    /**
-     * Private version of frames() allows "-1" to specify all
-     * remaining frames.
-     */
-
-    private List privateFrames(int start, int length)
-                              throws IncompatibleThreadStateException  {
-        if (myJavaThread == null) {
-            // for zombies and yet-to-be-started threads we need to throw exception
-            throw new IncompatibleThreadStateException();
-        }
-        if (frames == null) {
-            frames = new ArrayList(10);
-            JavaVFrame myvf = myJavaThread.getLastJavaVFrameDbg();
-            while (myvf != null) {
-                StackFrame myFrame = new StackFrameImpl(vm, this, myvf);
-                //fixme jjh null should be a Location
-                frames.add(myFrame);
-                myvf = (JavaVFrame)myvf.javaSender();
-            }
-        }
-
-        List retVal;
-        if (frames.size() == 0) {
-            retVal = new ArrayList(0);
-        } else {
-            int toIndex = start + length;
-            if (length == -1) {
-                toIndex = frames.size();
-            }
-            retVal = frames.subList(start, toIndex);
-        }
-        return Collections.unmodifiableList(retVal);
-    }
-
-    // refer to JvmtiEnvBase::get_owned_monitors
-    public List ownedMonitors()  throws IncompatibleThreadStateException {
-        if (vm.canGetOwnedMonitorInfo() == false) {
-            throw new UnsupportedOperationException();
-        }
-
-        if (myJavaThread == null) {
-           throw new IncompatibleThreadStateException();
-        }
-
-        if (ownedMonitors != null) {
-            return ownedMonitors;
-        }
-
-        ownedMonitorsWithStackDepth();
-
-        for (Iterator omi = ownedMonitorsInfo.iterator(); omi.hasNext(); ) {
-            //FIXME : Change the MonitorInfoImpl cast to com.sun.jdi.MonitorInfo
-            //        when hotspot start building with jdk1.6.
-            ownedMonitors.add(((MonitorInfoImpl)omi.next()).monitor());
-        }
-
-        return ownedMonitors;
-    }
-
-    // new method since 1.6.
-    // Real body will be supplied later.
-    public List ownedMonitorsAndFrames() throws IncompatibleThreadStateException {
-        if (!vm.canGetMonitorFrameInfo()) {
-            throw new UnsupportedOperationException(
-                "target does not support getting Monitor Frame Info");
-        }
-
-        if (myJavaThread == null) {
-           throw new IncompatibleThreadStateException();
-        }
-
-        if (ownedMonitorsInfo != null) {
-            return ownedMonitorsInfo;
-        }
-
-        ownedMonitorsWithStackDepth();
-        return ownedMonitorsInfo;
-    }
-
-    private void ownedMonitorsWithStackDepth() {
-
-        ownedMonitorsInfo = new ArrayList();
-        List lockedObjects = new ArrayList(); // List<OopHandle>
-        List stackDepth = new ArrayList(); // List<int>
-        ObjectMonitor waitingMonitor = myJavaThread.getCurrentWaitingMonitor();
-        ObjectMonitor pendingMonitor = myJavaThread.getCurrentPendingMonitor();
-        OopHandle waitingObj = null;
-        if (waitingMonitor != null) {
-            // save object of current wait() call (if any) for later comparison
-            waitingObj = waitingMonitor.object();
-        }
-        OopHandle pendingObj = null;
-        if (pendingMonitor != null) {
-            // save object of current enter() call (if any) for later comparison
-            pendingObj = pendingMonitor.object();
-        }
-
-        JavaVFrame frame = myJavaThread.getLastJavaVFrameDbg();
-        int depth=0;
-        while (frame != null) {
-            List frameMonitors = frame.getMonitors();  // List<MonitorInfo>
-            for (Iterator miItr = frameMonitors.iterator(); miItr.hasNext(); ) {
-                sun.jvm.hotspot.runtime.MonitorInfo mi = (sun.jvm.hotspot.runtime.MonitorInfo) miItr.next();
-                if (mi.eliminated() && frame.isCompiledFrame()) {
-                  continue; // skip eliminated monitor
-                }
-                OopHandle obj = mi.owner();
-                if (obj == null) {
-                    // this monitor doesn't have an owning object so skip it
-                    continue;
-                }
-
-                if (obj.equals(waitingObj)) {
-                    // the thread is waiting on this monitor so it isn't really owned
-                    continue;
-                }
-
-                if (obj.equals(pendingObj)) {
-                    // the thread is pending on this monitor so it isn't really owned
-                    continue;
-                }
-
-                boolean found = false;
-                for (Iterator loItr = lockedObjects.iterator(); loItr.hasNext(); ) {
-                    // check for recursive locks
-                    if (obj.equals(loItr.next())) {
-                        found = true;
-                        break;
-                    }
-                }
-                if (found) {
-                    // already have this object so don't include it
-                    continue;
-                }
-                // add the owning object to our list
-                lockedObjects.add(obj);
-                stackDepth.add(new Integer(depth));
-            }
-            frame = (JavaVFrame) frame.javaSender();
-            depth++;
-        }
-
-        // now convert List<OopHandle> to List<ObjectReference>
-        ObjectHeap heap = vm.saObjectHeap();
-        Iterator stk = stackDepth.iterator();
-        for (Iterator loItr = lockedObjects.iterator(); loItr.hasNext(); ) {
-            Oop obj = heap.newOop((OopHandle)loItr.next());
-            ownedMonitorsInfo.add(new MonitorInfoImpl(vm, vm.objectMirror(obj), this,
-                                                              ((Integer)stk.next()).intValue()));
-        }
-    }
-
-    // refer to JvmtiEnvBase::get_current_contended_monitor
-    public ObjectReference currentContendedMonitor()
-                              throws IncompatibleThreadStateException  {
-        if (vm.canGetCurrentContendedMonitor() == false) {
-            throw new UnsupportedOperationException();
-        }
-
-        if (myJavaThread == null) {
-           throw new IncompatibleThreadStateException();
-        }
-        ObjectMonitor mon = myJavaThread.getCurrentWaitingMonitor();
-        if (mon == null) {
-           // thread is not doing an Object.wait() call
-           mon = myJavaThread.getCurrentPendingMonitor();
-           if (mon != null) {
-               OopHandle handle = mon.object();
-               // If obj == NULL, then ObjectMonitor is raw which doesn't count
-               // as contended for this API
-               return vm.objectMirror(vm.saObjectHeap().newOop(handle));
-           } else {
-               // no contended ObjectMonitor
-               return null;
-           }
-        } else {
-           // thread is doing an Object.wait() call
-           OopHandle handle = mon.object();
-           if (Assert.ASSERTS_ENABLED) {
-               Assert.that(handle != null, "Object.wait() should have an object");
-           }
-           Oop obj = vm.saObjectHeap().newOop(handle);
-           return vm.objectMirror(obj);
-        }
-    }
-
-
-    public void popFrames(StackFrame frame) throws IncompatibleThreadStateException {
-        vm.throwNotReadOnlyException("ThreadReference.popFrames()");
-    }
-
-    public void forceEarlyReturn(Value returnValue) throws IncompatibleThreadStateException {
-        vm.throwNotReadOnlyException("ThreadReference.forceEarlyReturn()");
-    }
-
-    public String toString() {
-        return "instance of " + referenceType().name() +
-               "(name='" + name() + "', " + "id=" + uniqueID() + ")";
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/TypeComponentImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-import sun.jvm.hotspot.oops.Symbol;
-import sun.jvm.hotspot.oops.Oop;
-import sun.jvm.hotspot.oops.InstanceKlass;
-
-import java.util.List;
-
-/**
- * There is no SA class that corresponds to this.  Therefore,
- * all the methods in this class which involve the SA mirror class
- * have to be implemented in the subclasses.
- */
-abstract public class TypeComponentImpl extends MirrorImpl
-    implements TypeComponent {
-
-    protected final ReferenceTypeImpl declaringType;
-    protected String signature;
-
-    TypeComponentImpl(VirtualMachine vm, ReferenceTypeImpl declaringType) {
-        super(vm);
-        this.declaringType = declaringType;
-    }
-
-    public ReferenceType declaringType() {
-        return declaringType;
-    }
-
-    public String signature() {
-        return signature;
-    }
-
-    abstract public String name();
-    abstract public int modifiers();
-    abstract public boolean isPackagePrivate();
-    abstract public boolean isPrivate();
-    abstract public boolean isProtected();
-    abstract public boolean isPublic();
-    abstract public boolean isStatic();
-    abstract public boolean isFinal();
-    abstract public int hashCode();
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/TypeImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-public abstract class TypeImpl extends MirrorImpl implements Type
-{
-    private String typeName;
-
-    TypeImpl(VirtualMachine aVm) {
-        super(aVm);
-    }
-
-    public abstract String signature();
-
-    public String name() {
-        if (typeName == null) {
-            JNITypeParser parser = new JNITypeParser(signature());
-            typeName = parser.typeName();
-        }
-        return typeName;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof Type)) {
-            Type other = (Type)obj;
-            return signature().equals(other.signature()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return signature().hashCode();
-    }
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/VMModifiers.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import sun.jvm.hotspot.runtime.ClassConstants;
-import com.sun.jdi.*;
-
-public interface VMModifiers extends ClassConstants {
-    int PUBLIC       = (int) JVM_ACC_PUBLIC;       /* visible to everyone */
-    int PRIVATE      = (int) JVM_ACC_PRIVATE;      /* visible only to the defining class */
-    int PROTECTED    = (int) JVM_ACC_PROTECTED;    /* visible to subclasses */
-    int STATIC       = (int) JVM_ACC_STATIC;       /* instance variable is static */
-    int FINAL        = (int) JVM_ACC_FINAL;        /* no further subclassing, overriding */
-    int SYNCHRONIZED = (int) JVM_ACC_SYNCHRONIZED; /* wrap method call in monitor lock */
-    int VOLATILE     = (int) JVM_ACC_VOLATILE;     /* can cache in registers */
-    int BRIDGE       = (int) JVM_ACC_BRIDGE;       /* bridge method generated by compiler */
-    int TRANSIENT    = (int) JVM_ACC_TRANSIENT;    /* not persistant */
-    int VARARGS      = (int) JVM_ACC_VARARGS;      /* method declared with variable number of args */
-    int IS_ENUM_CONSTANT = (int) JVM_ACC_ENUM;     /* field is declared as element of enum */
-    int NATIVE       = (int) JVM_ACC_NATIVE;       /* implemented in C */
-    int INTERFACE    = (int) JVM_ACC_INTERFACE;    /* class is an interface */
-    int ABSTRACT     = (int) JVM_ACC_ABSTRACT;     /* no definition provided */
-    int SYNTHETIC    = (int) JVM_ACC_SYNTHETIC;    /* not in source code */
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ValueContainer.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-/*
- * This interface allows us to pass fields, variables, and
- * array components through the same interfaces. This currently allows
- * more common code for type checking. In the future we could use it for
- * more.
- */
-interface ValueContainer {
-    Type type() throws ClassNotLoadedException;
-    Type findType(String signature) throws ClassNotLoadedException;
-    String typeName();
-    String signature();
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/ValueImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.jdi;
-
-import com.sun.jdi.*;
-
-abstract class ValueImpl extends MirrorImpl implements Value {
-    ValueImpl(VirtualMachine aVm) {
-        super(aVm);
-    }
-
-    // type() is in the subclasses
-}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java	Fri Jul 29 16:50:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1224 +0,0 @@
-/*
- * Copyright (c) 2002, 2012, 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.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.EventQueue;
-import com.sun.jdi.request.EventRequestManager;
-
-import sun.jvm.hotspot.HotSpotAgent;
-import sun.jvm.hotspot.types.TypeDataBase;
-import sun.jvm.hotspot.oops.Klass;
-import sun.jvm.hotspot.oops.InstanceKlass;
-import sun.jvm.hotspot.oops.ArrayKlass;
-import sun.jvm.hotspot.oops.ObjArrayKlass;
-import sun.jvm.hotspot.oops.TypeArrayKlass;
-import sun.jvm.hotspot.oops.Oop;
-import sun.jvm.hotspot.oops.Instance;
-import sun.jvm.hotspot.oops.Array;
-import sun.jvm.hotspot.oops.ObjArray;
-import sun.jvm.hotspot.oops.TypeArray;
-import sun.jvm.hotspot.oops.Symbol;
-import sun.jvm.hotspot.oops.ObjectHeap;
-import sun.jvm.hotspot.oops.DefaultHeapVisitor;
-import sun.jvm.hotspot.oops.JVMDIClassStatus;
-import sun.jvm.hotspot.runtime.VM;
-import sun.jvm.hotspot.runtime.JavaThread;
-import sun.jvm.hotspot.memory.SystemDictionary;
-import sun.jvm.hotspot.memory.SymbolTable;
-import sun.jvm.hotspot.memory.Universe;
-import sun.jvm.hotspot.utilities.Assert;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.Iterator;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Observer;
-import java.util.StringTokenizer;
-import java.lang.ref.SoftReference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.Reference;
-
-public class VirtualMachineImpl extends MirrorImpl implements PathSearchingVirtualMachine {
-
-    private HotSpotAgent     saAgent = new HotSpotAgent();
-    private VM               saVM;
-    private Universe         saUniverse;
-    private SystemDictionary saSystemDictionary;
-    private SymbolTable      saSymbolTable;
-    private ObjectHeap       saObjectHeap;
-
-    VM saVM() {
-        return saVM;
-    }
-
-    SystemDictionary saSystemDictionary() {
-        return saSystemDictionary;
-    }
-
-    SymbolTable saSymbolTable() {
-        return saSymbolTable;
-    }
-
-    Universe saUniverse() {
-        return saUniverse;
-    }
-
-    ObjectHeap saObjectHeap() {
-        return saObjectHeap;
-    }
-
-    com.sun.jdi.VirtualMachineManager vmmgr;
-
-    private final ThreadGroup             threadGroupForJDI;
-
-    // Per-vm singletons for primitive types and for void.
-    // singleton-ness protected by "synchronized(this)".
-    private BooleanType theBooleanType;
-    private ByteType    theByteType;
-    private CharType    theCharType;
-    private ShortType   theShortType;
-    private IntegerType theIntegerType;
-    private LongType    theLongType;
-    private FloatType   theFloatType;
-    private DoubleType  theDoubleType;
-
-    private VoidType    theVoidType;
-
-    private VoidValue voidVal;
-    private Map       typesByID;             // Map<Klass, ReferenceTypeImpl>
-    private List      typesBySignature;      // List<ReferenceTypeImpl> - used in signature search
-    private boolean   retrievedAllTypes = false;
-    private List      bootstrapClasses;      // all bootstrap classes
-    private ArrayList allThreads;
-    private ArrayList topLevelGroups;
-    final   int       sequenceNumber;
-
-    // ObjectReference cache
-    // "objectsByID" protected by "synchronized(this)".
-    private final Map            objectsByID = new HashMap();
-    private final ReferenceQueue referenceQueue = new ReferenceQueue();
-
-    // names of some well-known classes to jdi
-    private Symbol javaLangString;
-    private Symbol javaLangThread;
-    private Symbol javaLangThreadGroup;
-    private Symbol javaLangClass;
-    private Symbol javaLangClassLoader;
-
-    // used in ReferenceTypeImpl.isThrowableBacktraceField
-    private Symbol javaLangThrowable;
-
-    // names of classes used in array assignment check
-    // refer to ArrayTypeImpl.isAssignableTo
-    private Symbol javaLangObject;
-    private Symbol javaLangCloneable;
-    private Symbol javaIoSerializable;
-
-    // symbol used in ClassTypeImpl.isEnum check
-    private Symbol javaLangEnum;
-
-    Symbol javaLangObject() {
-        return javaLangObject;
-    }
-
-    Symbol javaLangCloneable() {
-        return javaLangCloneable;
-    }
-
-    Symbol javaIoSerializable() {
-        return javaIoSerializable;
-    }
-
-    Symbol javaLangEnum() {
-        return javaLangEnum;
-    }
-
-    Symbol javaLangThrowable() {
-        return javaLangThrowable;
-    }
-
-    // name of the current default stratum
-    private String defaultStratum;
-
-    // initialize known class name symbols
-    private void initClassNameSymbols() {
-        SymbolTable st = saSymbolTable();
-        javaLangString = st.probe("java/lang/String");
-        javaLangThread = st.probe("java/lang/Thread");
-        javaLangThreadGroup = st.probe("java/lang/ThreadGroup");
-        javaLangClass = st.probe("java/lang/Class");
-        javaLangClassLoader = st.probe("java/lang/ClassLoader");
-        javaLangThrowable = st.probe("java/lang/Throwable");
-        javaLangObject = st.probe("java/lang/Object");
-        javaLangCloneable = st.probe("java/lang/Cloneable");
-        javaIoSerializable = st.probe("java/io/Serializable");
-        javaLangEnum = st.probe("java/lang/Enum");
-    }
-
-    private void init() {
-        saVM = VM.getVM();
-        saUniverse = saVM.getUniverse();
-        saSystemDictionary = saVM.getSystemDictionary();
-        saSymbolTable = saVM.getSymbolTable();
-        saObjectHeap = saVM.getObjectHeap();
-        initClassNameSymbols();
-    }
-
-    static public VirtualMachineImpl createVirtualMachineForCorefile(VirtualMachineManager mgr,
-                                                                     String javaExecutableName,
-                                                                     String coreFileName,
-                                                                     int sequenceNumber)
-        throws Exception {
-        if (Assert.ASSERTS_ENABLED) {
-            Assert.that(coreFileName != null, "SA VirtualMachineImpl: core filename = null is not yet implemented");
-        }
-        if (Assert.ASSERTS_ENABLED) {
-            Assert.that(javaExecutableName != null, "SA VirtualMachineImpl: java executable = null is not yet implemented");
-        }
-
-        VirtualMachineImpl myvm = new VirtualMachineImpl(mgr, sequenceNumber);
-        try {
-            myvm.saAgent.attach(javaExecutableName, coreFileName);
-            myvm.init();
-        } catch (Exception ee) {
-            myvm.saAgent.detach();
-            throw ee;
-        }
-        return myvm;
-    }
-
-    static public VirtualMachineImpl createVirtualMachineForPID(VirtualMachineManager mgr,
-                                                                int pid,
-                                                                int sequenceNumber)
-        throws Exception {
-
-        VirtualMachineImpl myvm = new VirtualMachineImpl(mgr, sequenceNumber);
-        try {
-            myvm.saAgent.attach(pid);
-            myvm.init();
-        } catch (Exception ee) {
-            myvm.saAgent.detach();
-            throw ee;
-        }
-        return myvm;
-    }
-
-    static public VirtualMachineImpl createVirtualMachineForServer(VirtualMachineManager mgr,
-                                                                String server,
-                                                                int sequenceNumber)
-        throws Exception {
-        if (Assert.ASSERTS_ENABLED) {
-            Assert.that(server != null, "SA VirtualMachineImpl: DebugServer = null is not yet implemented");
-        }
-
-        VirtualMachineImpl myvm = new VirtualMachineImpl(mgr, sequenceNumber);
-        try {
-            myvm.saAgent.attach(server);
-            myvm.init();
-        } catch (Exception ee) {
-            myvm.saAgent.detach();
-            throw ee;
-        }
-        return myvm;
-    }
-
-
-    VirtualMachineImpl(VirtualMachineManager mgr, int sequenceNumber)
-        throws Exception {
-        super(null);  // Can't use super(this)
-        vm = this;
-
-        this.sequenceNumber = sequenceNumber;
-        this.vmmgr = mgr;
-
-        /* Create ThreadGroup to be used by all threads servicing
-         * this VM.
-         */
-        threadGroupForJDI = new ThreadGroup("JDI [" +
-                                            this.hashCode() + "]");
-
-        ((com.sun.tools.jdi.VirtualMachineManagerImpl)mgr).addVirtualMachine(this);
-
-        // By default SA agent classes prefer Windows process debugger
-        // to windbg debugger. SA expects special properties to be set
-        // to choose other debuggers. We will set those here before
-        // attaching to SA agent.
-
-        System.setProperty("sun.jvm.hotspot.debugger.useWindbgDebugger", "true");
-    }
-
-    // we reflectively use newly spec'ed class because our ALT_BOOTDIR
-    // is 1.4.2 and not 1.5.
-    private static Class vmCannotBeModifiedExceptionClass = null;
-    void throwNotReadOnlyException(String operation) {
-        RuntimeException re = null;
-        if (vmCannotBeModifiedExceptionClass == null) {
-            try {
-                vmCannotBeModifiedExceptionClass = Class.forName("com.sun.jdi.VMCannotBeModifiedException");
-            } catch (ClassNotFoundException cnfe) {
-                vmCannotBeModifiedExceptionClass = UnsupportedOperationException.class;
-            }
-        }
-        try {
-            re = (RuntimeException) vmCannotBeModifiedExceptionClass.newInstance();
-        } catch (Exception exp) {
-            re = new RuntimeException(exp.getMessage());
-        }
-        throw re;
-    }
-
-    public boolean equals(Object obj) {
-        // Oh boy; big recursion troubles if we don't have this!
-        // See MirrorImpl.equals
-        return this == obj;
-    }
-
-    public int hashCode() {
-        // big recursion if we don't have this. See MirrorImpl.hashCode
-        return System.identityHashCode(this);
-    }
-
-    public List classesByName(String className) {
-        String signature = JNITypeParser.typeNameToSignature(className);
-        List list;
-        if (!retrievedAllTypes) {
-            retrieveAllClasses();
-        }
-        list = findReferenceTypes(signature);
-        return Collections.unmodifiableList(list);
-    }
-
-    public List allClasses() {
-        if (!retrievedAllTypes) {
-            retrieveAllClasses();
-        }
-        ArrayList a;
-        synchronized (this) {
-            a = new ArrayList(typesBySignature);
-        }
-        return Collections.unmodifiableList(a);
-    }
-
-    // classes loaded by bootstrap loader
-    List bootstrapClasses() {
-        if (bootstrapClasses == null) {
-            bootstrapClasses = new ArrayList();
-            List all = allClasses();
-            for (Iterator itr = all.iterator(); itr.hasNext();) {
-               ReferenceType type = (ReferenceType) itr.next();
-               if (type.classLoader() == null) {
-                   bootstrapClasses.add(type);
-               }
-            }
-        }
-        return bootstrapClasses;
-    }
-
-    private synchronized List findReferenceTypes(String signature) {
-        if (typesByID == null) {
-            return new ArrayList(0);
-        }
-
-        // we haven't sorted types by signatures. But we can take
-        // advantage of comparing symbols instead of name. In the worst
-        // case, we will be comparing N addresses rather than N strings
-        // where N being total no. of classes in allClasses() list.
-
-        // The signature could be Lx/y/z; or [....
-        // If it is Lx/y/z; the internal type name is x/y/x
-        // for array klasses internal type name is same as
-        // signature
-        String typeName = null;
-        if (signature.charAt(0) == 'L') {
-            typeName = signature.substring(1, signature.length() - 1);
-        } else {
-            typeName = signature;
-        }
-
-        Symbol typeNameSym = saSymbolTable().probe(typeName);
-        // if there is no symbol in VM, then we wouldn't have that type
-        if (typeNameSym == null) {
-            return new ArrayList(0);
-        }
-
-        Iterator iter = typesBySignature.iterator();
-        List list = new ArrayList();
-        while (iter.hasNext()) {
-            // We have cached type name as symbol in reference type
-            ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
-            if (typeNameSym.equals(type.typeNameAsSymbol())) {
-                list.add(type);
-            }
-        }
-        return list;
-    }
-
-    private void retrieveAllClasses() {
-        final List saKlasses = new ArrayList();
-        SystemDictionary.ClassVisitor visitor = new SystemDictionary.ClassVisitor() {
-                public void visit(Klass k) {
-                    for (Klass l = k; l != null; l = l.arrayKlassOrNull()) {
-                        // for non-array classes filter out un-prepared classes
-                        // refer to 'allClasses' in share/back/VirtualMachineImpl.c
-                        if (l instanceof ArrayKlass) {
-                           saKlasses.add(l);
-                        } else {
-                           int status = l.getClassStatus();
-                           if ((status & JVMDIClassStatus.PREPARED) != 0) {
-                               saKlasses.add(l);
-                           }
-                        }
-                    }
-                }
-        };
-
-        // refer to jvmtiGetLoadedClasses.cpp - getLoadedClasses in VM code.
-
-        // classes from SystemDictionary
-        saSystemDictionary.classesDo(visitor);
-
-        // From SystemDictionary we do not get primitive single
-        // dimensional array classes. add primitive single dimensional array
-        // klasses from Universe.
-        saVM.getUniverse().basicTypeClassesDo(visitor);
-
-        // Hold lock during processing to improve performance
-        // and to have safe check/set of retrievedAllTypes
-        synchronized (this) {
-            if (!retrievedAllTypes) {
-                // Number of classes
-                int count = saKlasses.size();
-                for (int ii = 0; ii < count; ii++) {
-                    Klass kk = (Klass)saKlasses.get(ii);
-                    ReferenceTypeImpl type = referenceType(kk);
-                }
-                retrievedAllTypes = true;
-            }
-        }
-    }
-
-    ReferenceTypeImpl referenceType(Klass kk) {
-        ReferenceTypeImpl retType = null;
-        synchronized (this) {
-            if (typesByID != null) {
-                retType = (ReferenceTypeImpl)typesByID.get(kk);
-            }
-            if (retType == null) {
-                retType = addReferenceType(kk);
-            }
-        }
-        return retType;
-    }
-
-    private void initReferenceTypes() {
-        typesByID = new HashMap();
-        typesBySignature = new ArrayList();
-    }
-
-    private synchronized ReferenceTypeImpl addReferenceType(Klass kk) {
-        if (typesByID == null) {
-            initReferenceTypes();
-        }
-        ReferenceTypeImpl newRefType = null;
-        if (kk instanceof ObjArrayKlass || kk instanceof TypeArrayKlass) {
-            newRefType = new ArrayTypeImpl(this, (ArrayKlass)kk);
-        } else if (kk instanceof InstanceKlass) {
-            if (kk.isInterface()) {
-                newRefType = new InterfaceTypeImpl(this, (InstanceKlass)kk);
-            } else {
-                newRefType = new ClassTypeImpl(this, (InstanceKlass)kk);
-            }
-        } else {
-            throw new RuntimeException("should not reach here:" + kk);
-        }
-
-        typesByID.put(kk, newRefType);
-        typesBySignature.add(newRefType);
-        return newRefType;
-    }
-
-    ThreadGroup threadGroupForJDI() {
-        return threadGroupForJDI;
-    }
-
-    public void redefineClasses(Map classToBytes) {
-        throwNotReadOnlyException("VirtualMachineImpl.redefineClasses()");
-    }
-
-    private List getAllThreads() {
-        if (allThreads == null) {
-            allThreads = new ArrayList(10);  // Might be enough, might not be
-            for (sun.jvm.hotspot.runtime.JavaThread thread =
-                     saVM.getThreads().first(); thread != null;
-                     thread = thread.next()) {
-                // refer to JvmtiEnv::GetAllThreads in jvmtiEnv.cpp.
-                // filter out the hidden-from-external-view threads.
-                if (thread.isHiddenFromExternalView() == false) {
-                    ThreadReferenceImpl myThread = threadMirror(thread);
-                    allThreads.add(myThread);
-                }
-            }
-        }
-        return allThreads;
-    }
-
-    public List allThreads() { //fixme jjh
-        return Collections.unmodifiableList(getAllThreads());
-    }
-
-    public void suspend() {
-        throwNotReadOnlyException("VirtualMachineImpl.suspend()");
-    }
-
-    public void resume() {
-        throwNotReadOnlyException("VirtualMachineImpl.resume()");
-    }
-
-    public List topLevelThreadGroups() { //fixme jjh
-        // The doc for ThreadGroup says that The top-level thread group
-        // is the only thread group whose parent is null.  This means there is
-        // only one top level thread group.  There will be a thread in this
-        // group so we will just find a thread whose threadgroup has no parent
-        // and that will be it.
-
-        if (topLevelGroups == null) {
-            topLevelGroups = new ArrayList(1);
-            Iterator myIt = getAllThreads().iterator();
-            while (myIt.hasNext()) {
-                ThreadReferenceImpl myThread = (ThreadReferenceImpl)myIt.next();
-                ThreadGroupReference myGroup = myThread.threadGroup();
-                ThreadGroupReference myParent = myGroup.parent();
-                if (myGroup.parent() == null) {
-                    topLevelGroups.add(myGroup);
-                    break;
-                }
-            }
-        }
-        return  Collections.unmodifiableList(topLevelGroups);
-    }
-
-    public EventQueue eventQueue() {
-        throwNotReadOnlyException("VirtualMachine.eventQueue()