changeset 16420:0fe6f1afaf7c

Merge
author lana
date Fri, 15 Mar 2013 23:08:07 -0700
parents 50dd98738641 e505e54df5ed
children 20fe195f45a1 f7a6d4c675bb 0ea2ced96d3e
files hotspot/agent/make/bugspot.bat hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/amd64/AMD64FloatRegister.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/JavaLineNumberInfo.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/Main.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/PCFinder.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/PackageScanner.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/RegisterPanel.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/StackTraceEntry.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/StackTracePanel.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/ThreadListPanel.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/VariablePanel.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/AddressTreeNodeAdapter.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/DoubleTreeNodeAdapter.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/EnumTreeNodeAdapter.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/FieldTreeNodeAdapter.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/FloatTreeNodeAdapter.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/LongTreeNodeAdapter.java hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/ObjectTreeNodeAdapter.java hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/BreakpointEvent.java hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/CIntegerAccessor.java hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/CStringAccessor.java hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/Event.java hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/ExceptionEvent.java hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/JNIHandleAccessor.java hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/ServiceabilityAgentJVMDIModule.java hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PermStat.java hotspot/agent/src/share/native/jvmdi/sa.cpp hotspot/agent/src/share/native/jvmdi/sa.dsp hotspot/agent/src/share/native/jvmdi/sa.dsw hotspot/agent/src/share/native/jvmdi/sa.hpp hotspot/make/bsd/makefiles/wb.make hotspot/make/linux/makefiles/wb.make hotspot/make/solaris/makefiles/wb.make hotspot/make/windows/makefiles/wb.make hotspot/src/share/tools/whitebox/sun/hotspot/WhiteBox.java hotspot/src/share/tools/whitebox/sun/hotspot/parser/DiagnosticCommand.java
diffstat 205 files changed, 2899 insertions(+), 7451 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Thu Mar 14 01:41:20 2013 -0400
+++ b/.hgtags	Fri Mar 15 23:08:07 2013 -0700
@@ -200,3 +200,5 @@
 f407160c280d1c5b00d314c535441ac26f195fee jdk8-b76
 d17eb2e13e362085e866d46235314c50cc4661cc jdk8-b77
 6d3dcd34b5b962ea1ef9eed0dafdee9e812401bc jdk8-b78
+a1313a8d90d17d363a3b2a645dc4030ec204b168 jdk8-b79
+3fa21fbf9be7e6b482af43aacb6a09acfa30bdb6 jdk8-b80
--- a/.hgtags-top-repo	Thu Mar 14 01:41:20 2013 -0400
+++ b/.hgtags-top-repo	Fri Mar 15 23:08:07 2013 -0700
@@ -201,3 +201,5 @@
 3933eebc659d58c597aa8cb4b3e58f2250ce3e1a jdk8-b77
 fd1a5574cf68af24bfd52decc37ac6361afb278a jdk8-b78
 91d35211e74464dca5edf9b66ab01d0d0d8cded7 jdk8-b79
+907a926d3c96472f357617b48b6b968ea855c23c jdk8-b80
+145dbc56f931c134e837b675b9e6e7bf08902e93 jdk8-b81
--- a/common/autoconf/build-performance.m4	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/autoconf/build-performance.m4	Fri Mar 15 23:08:07 2013 -0700
@@ -47,10 +47,6 @@
         FOUND_CORES=yes
     fi
 
-    # For c/c++ code we run twice as many concurrent build
-    # jobs than we have cores, otherwise we will stall on io.
-    CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
-
     if test "x$FOUND_CORES" = xyes; then
         AC_MSG_RESULT([$NUM_CORES])
     else
@@ -98,32 +94,62 @@
 
 AC_DEFUN_ONCE([BPERF_SETUP_BUILD_CORES],
 [
-# How many cores do we have on this build system?
-AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores],
+  # How many cores do we have on this build system?
+  AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores],
     [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])])
-if test "x$with_num_cores" = x; then
+  if test "x$with_num_cores" = x; then
     # The number of cores were not specified, try to probe them.
     BPERF_CHECK_CORES
-else
+  else
     NUM_CORES=$with_num_cores
-    CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
-fi
-AC_SUBST(NUM_CORES)
-AC_SUBST(CONCURRENT_BUILD_JOBS)
+  fi
+  AC_SUBST(NUM_CORES)
 ])
 
 AC_DEFUN_ONCE([BPERF_SETUP_BUILD_MEMORY],
 [
-# How much memory do we have on this build system?
-AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size],
+  # How much memory do we have on this build system?
+  AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size],
     [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])])
-if test "x$with_memory_size" = x; then
+  if test "x$with_memory_size" = x; then
     # The memory size was not specified, try to probe it.
     BPERF_CHECK_MEMORY_SIZE
-else
+  else
     MEMORY_SIZE=$with_memory_size
-fi
-AC_SUBST(MEMORY_SIZE)
+  fi
+  AC_SUBST(MEMORY_SIZE)
+])
+
+AC_DEFUN_ONCE([BPERF_SETUP_BUILD_JOBS],
+[
+  # Provide a decent default number of parallel jobs for make depending on 
+  # number of cores, amount of memory and machine architecture.
+  AC_ARG_WITH(jobs, [AS_HELP_STRING([--with-jobs],
+    [number of parallel jobs to let make run @<:@calculated based on cores and memory@:>@])])
+  if test "x$with_jobs" = x; then
+    # Number of jobs was not specified, calculate.
+    AC_MSG_CHECKING([for appropriate number of jobs to run in parallel])
+    # Approximate memory in GB, rounding up a bit.
+    memory_gb=`expr $MEMORY_SIZE / 1100`
+    # Pick the lowest of memory in gb and number of cores.
+    if test "$memory_gb" -lt "$NUM_CORES"; then
+      JOBS="$memory_gb"
+    else
+      JOBS="$NUM_CORES"
+      # On bigger machines, leave some room for other processes to run
+      if test "$JOBS" -gt "4"; then
+        JOBS=`expr $JOBS '*' 90 / 100`
+      fi
+    fi
+    # Cap number of jobs to 16
+    if test "$JOBS" -gt "16"; then
+      JOBS=16
+    fi
+    AC_MSG_RESULT([$JOBS])
+  else
+    JOBS=$with_jobs
+  fi
+  AC_SUBST(JOBS)
 ])
 
 AC_DEFUN([BPERF_SETUP_CCACHE],
--- a/common/autoconf/configure.ac	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/autoconf/configure.ac	Fri Mar 15 23:08:07 2013 -0700
@@ -204,6 +204,7 @@
 
 BPERF_SETUP_BUILD_CORES
 BPERF_SETUP_BUILD_MEMORY
+BPERF_SETUP_BUILD_JOBS
 
 # Setup smart javac (after cores and memory have been setup)
 BPERF_SETUP_SMART_JAVAC
--- a/common/autoconf/generated-configure.sh	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/autoconf/generated-configure.sh	Fri Mar 15 23:08:07 2013 -0700
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for OpenJDK jdk8.
+# Generated by GNU Autoconf 2.68 for OpenJDK jdk8.
 #
 # Report bugs to <build-dev@openjdk.java.net>.
 #
@@ -91,6 +91,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -216,11 +217,18 @@
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -601,8 +609,8 @@
 ENABLE_SJAVAC
 SJAVAC_SERVER_CORES
 SJAVAC_SERVER_JAVA
+JOBS
 MEMORY_SIZE
-CONCURRENT_BUILD_JOBS
 NUM_CORES
 SALIB_NAME
 HOTSPOT_MAKE_ARGS
@@ -725,6 +733,8 @@
 BUILD_CXX
 BUILD_CC
 MSVCR_DLL
+DXSDK_INCLUDE_PATH
+DXSDK_LIB_PATH
 VS_PATH
 VS_LIB
 VS_INCLUDE
@@ -986,6 +996,9 @@
 with_override_jdk
 with_import_hotspot
 with_msvcr_dll
+with_dxsdk
+with_dxsdk_lib
+with_dxsdk_include
 with_extra_cflags
 with_extra_cxxflags
 with_extra_ldflags
@@ -1003,6 +1016,7 @@
 with_stdc__lib
 with_num_cores
 with_memory_size
+with_jobs
 with_sjavac_server_java
 with_sjavac_server_cores
 enable_sjavac
@@ -1435,7 +1449,7 @@
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1736,6 +1750,11 @@
                           source
   --with-msvcr-dll        copy this msvcr100.dll into the built JDK (Windows
                           only) [probed]
+  --with-dxsdk            the DirectX SDK (Windows only) [probed]
+  --with-dxsdk-lib        the DirectX SDK lib directory (Windows only)
+                          [probed]
+  --with-dxsdk-include    the DirectX SDK include directory (Windows only)
+                          [probed]
   --with-extra-cflags     extra flags to be used when compiling jdk c-files
   --with-extra-cxxflags   extra flags to be used when compiling jdk c++-files
   --with-extra-ldflags    extra flags to be used when linking jdk
@@ -1761,6 +1780,8 @@
                           --with-num-cores=8 [probed]
   --with-memory-size      memory (in MB) available in the build system, e.g.
                           --with-memory-size=1024 [probed]
+  --with-jobs             number of parallel jobs to let make run [calculated
+                          based on cores and memory]
   --with-sjavac-server-java
                           use this java binary for running the sjavac
                           background server [Boot JDK java]
@@ -1860,7 +1881,7 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 OpenJDK configure jdk8
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1906,7 +1927,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1944,7 +1965,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_compile
@@ -1982,7 +2003,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_objc_try_compile
@@ -2019,7 +2040,7 @@
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -2056,7 +2077,7 @@
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_cpp
@@ -2069,10 +2090,10 @@
 ac_fn_cxx_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -2139,7 +2160,7 @@
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -2148,7 +2169,7 @@
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_cxx_check_header_mongrel
 
@@ -2189,7 +2210,7 @@
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_run
@@ -2203,7 +2224,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2221,7 +2242,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_cxx_check_header_compile
 
@@ -2398,7 +2419,7 @@
 rm -f conftest.val
 
   fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_compute_int
@@ -2444,7 +2465,7 @@
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_link
@@ -2457,7 +2478,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2512,7 +2533,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_cxx_check_func
 
@@ -2525,7 +2546,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2543,7 +2564,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 cat >config.log <<_ACEOF
@@ -2551,7 +2572,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by OpenJDK $as_me jdk8, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2809,7 +2830,7 @@
       || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
@@ -3330,6 +3351,8 @@
 
 
 
+
+
 #
 # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -3716,6 +3739,10 @@
 
 
 
+# Setup the DXSDK paths
+
+
+
 
 
 
@@ -3725,7 +3752,7 @@
 #CUSTOM_AUTOCONF_INCLUDE
 
 # Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1362540061
+DATE_WHEN_GENERATED=1363150186
 
 ###############################################################################
 #
@@ -3763,7 +3790,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_BASENAME+set}" = set; then :
+if ${ac_cv_path_BASENAME+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $BASENAME in
@@ -3822,7 +3849,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_BASH+set}" = set; then :
+if ${ac_cv_path_BASH+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $BASH in
@@ -3881,7 +3908,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CAT+set}" = set; then :
+if ${ac_cv_path_CAT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CAT in
@@ -3940,7 +3967,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CHMOD+set}" = set; then :
+if ${ac_cv_path_CHMOD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CHMOD in
@@ -3999,7 +4026,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CMP+set}" = set; then :
+if ${ac_cv_path_CMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CMP in
@@ -4058,7 +4085,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_COMM+set}" = set; then :
+if ${ac_cv_path_COMM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $COMM in
@@ -4117,7 +4144,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CP+set}" = set; then :
+if ${ac_cv_path_CP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CP in
@@ -4176,7 +4203,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CPIO+set}" = set; then :
+if ${ac_cv_path_CPIO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CPIO in
@@ -4235,7 +4262,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CUT+set}" = set; then :
+if ${ac_cv_path_CUT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CUT in
@@ -4294,7 +4321,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_DATE+set}" = set; then :
+if ${ac_cv_path_DATE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $DATE in
@@ -4353,7 +4380,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_DIFF+set}" = set; then :
+if ${ac_cv_path_DIFF+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $DIFF in
@@ -4412,7 +4439,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_DIRNAME+set}" = set; then :
+if ${ac_cv_path_DIRNAME+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $DIRNAME in
@@ -4471,7 +4498,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_ECHO+set}" = set; then :
+if ${ac_cv_path_ECHO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $ECHO in
@@ -4530,7 +4557,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_EXPR+set}" = set; then :
+if ${ac_cv_path_EXPR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $EXPR in
@@ -4589,7 +4616,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_FILE+set}" = set; then :
+if ${ac_cv_path_FILE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $FILE in
@@ -4648,7 +4675,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_FIND+set}" = set; then :
+if ${ac_cv_path_FIND+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $FIND in
@@ -4707,7 +4734,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_HEAD+set}" = set; then :
+if ${ac_cv_path_HEAD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $HEAD in
@@ -4766,7 +4793,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_LN+set}" = set; then :
+if ${ac_cv_path_LN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $LN in
@@ -4825,7 +4852,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_LS+set}" = set; then :
+if ${ac_cv_path_LS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $LS in
@@ -4884,7 +4911,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_MKDIR+set}" = set; then :
+if ${ac_cv_path_MKDIR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MKDIR in
@@ -4943,7 +4970,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_MKTEMP+set}" = set; then :
+if ${ac_cv_path_MKTEMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MKTEMP in
@@ -5002,7 +5029,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_MV+set}" = set; then :
+if ${ac_cv_path_MV+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MV in
@@ -5061,7 +5088,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PRINTF+set}" = set; then :
+if ${ac_cv_path_PRINTF+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PRINTF in
@@ -5120,7 +5147,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_THEPWDCMD+set}" = set; then :
+if ${ac_cv_path_THEPWDCMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $THEPWDCMD in
@@ -5179,7 +5206,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_RM+set}" = set; then :
+if ${ac_cv_path_RM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $RM in
@@ -5238,7 +5265,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_SH+set}" = set; then :
+if ${ac_cv_path_SH+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $SH in
@@ -5297,7 +5324,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_SORT+set}" = set; then :
+if ${ac_cv_path_SORT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $SORT in
@@ -5356,7 +5383,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_TAIL+set}" = set; then :
+if ${ac_cv_path_TAIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $TAIL in
@@ -5415,7 +5442,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_TAR+set}" = set; then :
+if ${ac_cv_path_TAR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $TAR in
@@ -5474,7 +5501,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_TEE+set}" = set; then :
+if ${ac_cv_path_TEE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $TEE in
@@ -5533,7 +5560,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_TOUCH+set}" = set; then :
+if ${ac_cv_path_TOUCH+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $TOUCH in
@@ -5592,7 +5619,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_TR+set}" = set; then :
+if ${ac_cv_path_TR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $TR in
@@ -5651,7 +5678,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_UNAME+set}" = set; then :
+if ${ac_cv_path_UNAME+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $UNAME in
@@ -5710,7 +5737,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_UNIQ+set}" = set; then :
+if ${ac_cv_path_UNIQ+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $UNIQ in
@@ -5769,7 +5796,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_WC+set}" = set; then :
+if ${ac_cv_path_WC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $WC in
@@ -5828,7 +5855,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_WHICH+set}" = set; then :
+if ${ac_cv_path_WHICH+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $WHICH in
@@ -5887,7 +5914,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_XARGS+set}" = set; then :
+if ${ac_cv_path_XARGS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $XARGS in
@@ -5947,7 +5974,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -5997,7 +6024,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -6072,7 +6099,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -6151,7 +6178,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
+if ${ac_cv_path_FGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
@@ -6230,7 +6257,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -6316,7 +6343,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_NAWK+set}" = set; then :
+if ${ac_cv_path_NAWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $NAWK in
@@ -6376,7 +6403,7 @@
 set dummy cygpath; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CYGPATH+set}" = set; then :
+if ${ac_cv_path_CYGPATH+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CYGPATH in
@@ -6416,7 +6443,7 @@
 set dummy readlink; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_READLINK+set}" = set; then :
+if ${ac_cv_path_READLINK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $READLINK in
@@ -6456,7 +6483,7 @@
 set dummy df; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_DF+set}" = set; then :
+if ${ac_cv_path_DF+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $DF in
@@ -6496,7 +6523,7 @@
 set dummy SetFile; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_SETFILE+set}" = set; then :
+if ${ac_cv_path_SETFILE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $SETFILE in
@@ -6542,7 +6569,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
@@ -6558,7 +6585,7 @@
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -6576,7 +6603,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
@@ -6591,7 +6618,7 @@
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -6609,7 +6636,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
 $as_echo_n "checking target system type... " >&6; }
-if test "${ac_cv_target+set}" = set; then :
+if ${ac_cv_target+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$target_alias" = x; then
@@ -6624,7 +6651,7 @@
 $as_echo "$ac_cv_target" >&6; }
 case $ac_cv_target in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
 esac
 target=$ac_cv_target
 ac_save_IFS=$IFS; IFS='-'
@@ -8090,7 +8117,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_PKGHANDLER+set}" = set; then :
+if ${ac_cv_prog_PKGHANDLER+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$PKGHANDLER"; then
@@ -8455,7 +8482,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CHECK_GMAKE+set}" = set; then :
+if ${ac_cv_path_CHECK_GMAKE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CHECK_GMAKE in
@@ -8809,7 +8836,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CHECK_MAKE+set}" = set; then :
+if ${ac_cv_path_CHECK_MAKE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CHECK_MAKE in
@@ -9168,7 +9195,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CHECK_TOOLSDIR_GMAKE+set}" = set; then :
+if ${ac_cv_path_CHECK_TOOLSDIR_GMAKE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CHECK_TOOLSDIR_GMAKE in
@@ -9521,7 +9548,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CHECK_TOOLSDIR_MAKE+set}" = set; then :
+if ${ac_cv_path_CHECK_TOOLSDIR_MAKE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CHECK_TOOLSDIR_MAKE in
@@ -9917,7 +9944,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_UNZIP+set}" = set; then :
+if ${ac_cv_path_UNZIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $UNZIP in
@@ -9976,7 +10003,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_ZIP+set}" = set; then :
+if ${ac_cv_path_ZIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $ZIP in
@@ -10035,7 +10062,7 @@
 set dummy ldd; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_LDD+set}" = set; then :
+if ${ac_cv_path_LDD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $LDD in
@@ -10081,7 +10108,7 @@
 set dummy otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_OTOOL+set}" = set; then :
+if ${ac_cv_path_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $OTOOL in
@@ -10126,7 +10153,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_READELF+set}" = set; then :
+if ${ac_cv_path_READELF+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $READELF in
@@ -10169,7 +10196,7 @@
 set dummy hg; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_HG+set}" = set; then :
+if ${ac_cv_path_HG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $HG in
@@ -10209,7 +10236,7 @@
 set dummy stat; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_STAT+set}" = set; then :
+if ${ac_cv_path_STAT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $STAT in
@@ -10249,7 +10276,7 @@
 set dummy time; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_TIME+set}" = set; then :
+if ${ac_cv_path_TIME+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $TIME in
@@ -10294,7 +10321,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_COMM+set}" = set; then :
+if ${ac_cv_path_COMM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $COMM in
@@ -10358,7 +10385,7 @@
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PKG_CONFIG in
@@ -10401,7 +10428,7 @@
 set dummy pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $ac_pt_PKG_CONFIG in
@@ -10574,7 +10601,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then :
+if ${ac_cv_prog_BDEPS_UNZIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$BDEPS_UNZIP"; then
@@ -10620,7 +10647,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then :
+if ${ac_cv_prog_BDEPS_FTP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$BDEPS_FTP"; then
@@ -11887,7 +11914,7 @@
 set dummy javac; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_JAVAC_CHECK+set}" = set; then :
+if ${ac_cv_path_JAVAC_CHECK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $JAVAC_CHECK in
@@ -11927,7 +11954,7 @@
 set dummy java; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_JAVA_CHECK+set}" = set; then :
+if ${ac_cv_path_JAVA_CHECK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $JAVA_CHECK in
@@ -16001,7 +16028,7 @@
 set dummy link; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CYGWIN_LINK+set}" = set; then :
+if ${ac_cv_path_CYGWIN_LINK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CYGWIN_LINK in
@@ -16963,6 +16990,432 @@
   fi
 
 
+
+
+# Check whether --with-dxsdk was given.
+if test "${with_dxsdk+set}" = set; then :
+  withval=$with_dxsdk;
+fi
+
+
+# Check whether --with-dxsdk-lib was given.
+if test "${with_dxsdk_lib+set}" = set; then :
+  withval=$with_dxsdk_lib;
+fi
+
+
+# Check whether --with-dxsdk-include was given.
+if test "${with_dxsdk_include+set}" = set; then :
+  withval=$with_dxsdk_include;
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DirectX SDK" >&5
+$as_echo_n "checking for DirectX SDK... " >&6; }
+
+  if test "x$with_dxsdk" != x; then
+    dxsdk_path="$with_dxsdk"
+  elif test "x$DXSDK_DIR" != x; then
+    dxsdk_path="$DXSDK_DIR"
+  elif test -d "C:/DXSDK"; then
+    dxsdk_path="C:/DXSDK"
+  else
+    as_fn_error $? "Could not find the DirectX SDK" "$LINENO" 5
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dxsdk_path" >&5
+$as_echo "$dxsdk_path" >&6; }
+
+  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+
+  # Input might be given as Windows format, start by converting to
+  # unix format.
+  path="$dxsdk_path"
+  new_path=`$CYGPATH -u "$path"`
+
+  # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
+  # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
+  # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
+  # "foo.exe" is OK but "foo" is an error.
+  #
+  # This test is therefore slightly more accurate than "test -f" to check for file precense.
+  # It is also a way to make sure we got the proper file name for the real test later on.
+  test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
+  if test "x$test_shortpath" = x; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: The path of dxsdk_path, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of dxsdk_path, which resolves as \"$path\", is invalid." >&6;}
+    as_fn_error $? "Cannot locate the the path of dxsdk_path" "$LINENO" 5
+  fi
+
+  # Call helper function which possibly converts this using DOS-style short mode.
+  # If so, the updated path is stored in $new_path.
+
+  input_path="$new_path"
+  # Check if we need to convert this using DOS-style short mode. If the path
+  # contains just simple characters, use it. Otherwise (spaces, weird characters),
+  # take no chances and rewrite it.
+  # Note: m4 eats our [], so we need to use [ and ] instead.
+  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
+  if test "x$has_forbidden_chars" != x; then
+    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+    shortmode_path=`$CYGPATH -s -m -a "$input_path"`
+    path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
+    if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
+      # Going to short mode and back again did indeed matter. Since short mode is
+      # case insensitive, let's make it lowercase to improve readability.
+      shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+      # Now convert it back to Unix-stile (cygpath)
+      input_path=`$CYGPATH -u "$shortmode_path"`
+      new_path="$input_path"
+    fi
+  fi
+
+  test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
+  if test "x$test_cygdrive_prefix" = x; then
+    # As a simple fix, exclude /usr/bin since it's not a real path.
+    if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
+      # The path is in a Cygwin special directory (e.g. /home). We need this converted to
+      # a path prefixed by /cygdrive for fixpath to work.
+      new_path="$CYGWIN_ROOT_PATH$input_path"
+    fi
+  fi
+
+
+  if test "x$path" != "x$new_path"; then
+    dxsdk_path="$new_path"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting dxsdk_path to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting dxsdk_path to \"$new_path\"" >&6;}
+  fi
+
+  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+
+  path="$dxsdk_path"
+  has_colon=`$ECHO $path | $GREP ^.:`
+  new_path="$path"
+  if test "x$has_colon" = x; then
+    # Not in mixed or Windows style, start by that.
+    new_path=`cmd //c echo $path`
+  fi
+
+
+  input_path="$new_path"
+  # Check if we need to convert this using DOS-style short mode. If the path
+  # contains just simple characters, use it. Otherwise (spaces, weird characters),
+  # take no chances and rewrite it.
+  # Note: m4 eats our [], so we need to use [ and ] instead.
+  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
+  if test "x$has_forbidden_chars" != x; then
+    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+    new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+  fi
+
+
+  windows_path="$new_path"
+  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+    unix_path=`$CYGPATH -u "$windows_path"`
+    new_path="$unix_path"
+  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
+    new_path="$unix_path"
+  fi
+
+  if test "x$path" != "x$new_path"; then
+    dxsdk_path="$new_path"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting dxsdk_path to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting dxsdk_path to \"$new_path\"" >&6;}
+  fi
+
+  # Save the first 10 bytes of this path to the storage, so fixpath can work.
+  all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
+
+  else
+    # We're on a posix platform. Hooray! :)
+    path="$dxsdk_path"
+
+    if test ! -f "$path" && test ! -d "$path"; then
+      as_fn_error $? "The path of dxsdk_path, which resolves as \"$path\", is not found." "$LINENO" 5
+    fi
+
+    has_space=`$ECHO "$path" | $GREP " "`
+    if test "x$has_space" != x; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: The path of dxsdk_path, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of dxsdk_path, which resolves as \"$path\", is invalid." >&6;}
+      as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
+    fi
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DirectX SDK lib dir" >&5
+$as_echo_n "checking for DirectX SDK lib dir... " >&6; }
+  if test "x$with_dxsdk_lib" != x; then
+    DXSDK_LIB_PATH="$with_dxsdk_lib"
+  elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
+    DXSDK_LIB_PATH="$dxsdk_path/Lib/x64"
+  else
+    DXSDK_LIB_PATH="$dxsdk_path/Lib"
+  fi
+  # dsound.lib is linked to in jsoundds
+  if test ! -f "$DXSDK_LIB_PATH/dsound.lib"; then
+    as_fn_error $? "Invalid DirectX SDK lib dir" "$LINENO" 5
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DXSDK_LIB_PATH" >&5
+$as_echo "$DXSDK_LIB_PATH" >&6; }
+
+  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+
+  # Input might be given as Windows format, start by converting to
+  # unix format.
+  path="$DXSDK_LIB_PATH"
+  new_path=`$CYGPATH -u "$path"`
+
+  # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
+  # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
+  # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
+  # "foo.exe" is OK but "foo" is an error.
+  #
+  # This test is therefore slightly more accurate than "test -f" to check for file precense.
+  # It is also a way to make sure we got the proper file name for the real test later on.
+  test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
+  if test "x$test_shortpath" = x; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DXSDK_LIB_PATH, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of DXSDK_LIB_PATH, which resolves as \"$path\", is invalid." >&6;}
+    as_fn_error $? "Cannot locate the the path of DXSDK_LIB_PATH" "$LINENO" 5
+  fi
+
+  # Call helper function which possibly converts this using DOS-style short mode.
+  # If so, the updated path is stored in $new_path.
+
+  input_path="$new_path"
+  # Check if we need to convert this using DOS-style short mode. If the path
+  # contains just simple characters, use it. Otherwise (spaces, weird characters),
+  # take no chances and rewrite it.
+  # Note: m4 eats our [], so we need to use [ and ] instead.
+  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
+  if test "x$has_forbidden_chars" != x; then
+    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+    shortmode_path=`$CYGPATH -s -m -a "$input_path"`
+    path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
+    if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
+      # Going to short mode and back again did indeed matter. Since short mode is
+      # case insensitive, let's make it lowercase to improve readability.
+      shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+      # Now convert it back to Unix-stile (cygpath)
+      input_path=`$CYGPATH -u "$shortmode_path"`
+      new_path="$input_path"
+    fi
+  fi
+
+  test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
+  if test "x$test_cygdrive_prefix" = x; then
+    # As a simple fix, exclude /usr/bin since it's not a real path.
+    if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
+      # The path is in a Cygwin special directory (e.g. /home). We need this converted to
+      # a path prefixed by /cygdrive for fixpath to work.
+      new_path="$CYGWIN_ROOT_PATH$input_path"
+    fi
+  fi
+
+
+  if test "x$path" != "x$new_path"; then
+    DXSDK_LIB_PATH="$new_path"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting DXSDK_LIB_PATH to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting DXSDK_LIB_PATH to \"$new_path\"" >&6;}
+  fi
+
+  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+
+  path="$DXSDK_LIB_PATH"
+  has_colon=`$ECHO $path | $GREP ^.:`
+  new_path="$path"
+  if test "x$has_colon" = x; then
+    # Not in mixed or Windows style, start by that.
+    new_path=`cmd //c echo $path`
+  fi
+
+
+  input_path="$new_path"
+  # Check if we need to convert this using DOS-style short mode. If the path
+  # contains just simple characters, use it. Otherwise (spaces, weird characters),
+  # take no chances and rewrite it.
+  # Note: m4 eats our [], so we need to use [ and ] instead.
+  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
+  if test "x$has_forbidden_chars" != x; then
+    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+    new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+  fi
+
+
+  windows_path="$new_path"
+  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+    unix_path=`$CYGPATH -u "$windows_path"`
+    new_path="$unix_path"
+  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
+    new_path="$unix_path"
+  fi
+
+  if test "x$path" != "x$new_path"; then
+    DXSDK_LIB_PATH="$new_path"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting DXSDK_LIB_PATH to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting DXSDK_LIB_PATH to \"$new_path\"" >&6;}
+  fi
+
+  # Save the first 10 bytes of this path to the storage, so fixpath can work.
+  all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
+
+  else
+    # We're on a posix platform. Hooray! :)
+    path="$DXSDK_LIB_PATH"
+
+    if test ! -f "$path" && test ! -d "$path"; then
+      as_fn_error $? "The path of DXSDK_LIB_PATH, which resolves as \"$path\", is not found." "$LINENO" 5
+    fi
+
+    has_space=`$ECHO "$path" | $GREP " "`
+    if test "x$has_space" != x; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DXSDK_LIB_PATH, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of DXSDK_LIB_PATH, which resolves as \"$path\", is invalid." >&6;}
+      as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
+    fi
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DirectX SDK include dir" >&5
+$as_echo_n "checking for DirectX SDK include dir... " >&6; }
+  if test "x$with_dxsdk_include" != x; then
+    DXSDK_INCLUDE_PATH="$with_dxsdk_include"
+  else
+    DXSDK_INCLUDE_PATH="$dxsdk_path/Include"
+  fi
+  # dsound.h is included in jsoundds
+  if test ! -f "$DXSDK_INCLUDE_PATH/dsound.h"; then
+    as_fn_error $? "Invalid DirectX SDK lib dir" "$LINENO" 5
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DXSDK_INCLUDE_PATH" >&5
+$as_echo "$DXSDK_INCLUDE_PATH" >&6; }
+
+  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+
+  # Input might be given as Windows format, start by converting to
+  # unix format.
+  path="$DXSDK_INCLUDE_PATH"
+  new_path=`$CYGPATH -u "$path"`
+
+  # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
+  # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
+  # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
+  # "foo.exe" is OK but "foo" is an error.
+  #
+  # This test is therefore slightly more accurate than "test -f" to check for file precense.
+  # It is also a way to make sure we got the proper file name for the real test later on.
+  test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
+  if test "x$test_shortpath" = x; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DXSDK_INCLUDE_PATH, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of DXSDK_INCLUDE_PATH, which resolves as \"$path\", is invalid." >&6;}
+    as_fn_error $? "Cannot locate the the path of DXSDK_INCLUDE_PATH" "$LINENO" 5
+  fi
+
+  # Call helper function which possibly converts this using DOS-style short mode.
+  # If so, the updated path is stored in $new_path.
+
+  input_path="$new_path"
+  # Check if we need to convert this using DOS-style short mode. If the path
+  # contains just simple characters, use it. Otherwise (spaces, weird characters),
+  # take no chances and rewrite it.
+  # Note: m4 eats our [], so we need to use [ and ] instead.
+  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
+  if test "x$has_forbidden_chars" != x; then
+    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+    shortmode_path=`$CYGPATH -s -m -a "$input_path"`
+    path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
+    if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
+      # Going to short mode and back again did indeed matter. Since short mode is
+      # case insensitive, let's make it lowercase to improve readability.
+      shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+      # Now convert it back to Unix-stile (cygpath)
+      input_path=`$CYGPATH -u "$shortmode_path"`
+      new_path="$input_path"
+    fi
+  fi
+
+  test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
+  if test "x$test_cygdrive_prefix" = x; then
+    # As a simple fix, exclude /usr/bin since it's not a real path.
+    if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
+      # The path is in a Cygwin special directory (e.g. /home). We need this converted to
+      # a path prefixed by /cygdrive for fixpath to work.
+      new_path="$CYGWIN_ROOT_PATH$input_path"
+    fi
+  fi
+
+
+  if test "x$path" != "x$new_path"; then
+    DXSDK_INCLUDE_PATH="$new_path"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting DXSDK_INCLUDE_PATH to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting DXSDK_INCLUDE_PATH to \"$new_path\"" >&6;}
+  fi
+
+  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+
+  path="$DXSDK_INCLUDE_PATH"
+  has_colon=`$ECHO $path | $GREP ^.:`
+  new_path="$path"
+  if test "x$has_colon" = x; then
+    # Not in mixed or Windows style, start by that.
+    new_path=`cmd //c echo $path`
+  fi
+
+
+  input_path="$new_path"
+  # Check if we need to convert this using DOS-style short mode. If the path
+  # contains just simple characters, use it. Otherwise (spaces, weird characters),
+  # take no chances and rewrite it.
+  # Note: m4 eats our [], so we need to use [ and ] instead.
+  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
+  if test "x$has_forbidden_chars" != x; then
+    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+    new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+  fi
+
+
+  windows_path="$new_path"
+  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+    unix_path=`$CYGPATH -u "$windows_path"`
+    new_path="$unix_path"
+  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
+    new_path="$unix_path"
+  fi
+
+  if test "x$path" != "x$new_path"; then
+    DXSDK_INCLUDE_PATH="$new_path"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting DXSDK_INCLUDE_PATH to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting DXSDK_INCLUDE_PATH to \"$new_path\"" >&6;}
+  fi
+
+  # Save the first 10 bytes of this path to the storage, so fixpath can work.
+  all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
+
+  else
+    # We're on a posix platform. Hooray! :)
+    path="$DXSDK_INCLUDE_PATH"
+
+    if test ! -f "$path" && test ! -d "$path"; then
+      as_fn_error $? "The path of DXSDK_INCLUDE_PATH, which resolves as \"$path\", is not found." "$LINENO" 5
+    fi
+
+    has_space=`$ECHO "$path" | $GREP " "`
+    if test "x$has_space" != x; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DXSDK_INCLUDE_PATH, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of DXSDK_INCLUDE_PATH, which resolves as \"$path\", is invalid." >&6;}
+      as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
+    fi
+  fi
+
+
+
+
+  LDFLAGS_JDK="$LDFLAGS_JDK -libpath:$DXSDK_LIB_PATH"
+
 fi
 
 
@@ -16990,7 +17443,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_BUILD_CC+set}" = set; then :
+if ${ac_cv_path_BUILD_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $BUILD_CC in
@@ -17301,7 +17754,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_BUILD_CXX+set}" = set; then :
+if ${ac_cv_path_BUILD_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $BUILD_CXX in
@@ -17610,7 +18063,7 @@
 set dummy ld; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_BUILD_LD+set}" = set; then :
+if ${ac_cv_path_BUILD_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $BUILD_LD in
@@ -18126,7 +18579,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_TOOLS_DIR_CC+set}" = set; then :
+if ${ac_cv_path_TOOLS_DIR_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $TOOLS_DIR_CC in
@@ -18178,7 +18631,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_POTENTIAL_CC+set}" = set; then :
+if ${ac_cv_path_POTENTIAL_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $POTENTIAL_CC in
@@ -18591,7 +19044,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_PROPER_COMPILER_CC+set}" = set; then :
+if ${ac_cv_prog_PROPER_COMPILER_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$PROPER_COMPILER_CC"; then
@@ -18635,7 +19088,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_PROPER_COMPILER_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_PROPER_COMPILER_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_PROPER_COMPILER_CC"; then
@@ -19085,7 +19538,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -19129,7 +19582,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -19182,7 +19635,7 @@
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -19297,7 +19750,7 @@
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -19340,7 +19793,7 @@
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -19399,7 +19852,7 @@
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -19410,7 +19863,7 @@
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19451,7 +19904,7 @@
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -19461,7 +19914,7 @@
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19498,7 +19951,7 @@
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -19576,7 +20029,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -19699,7 +20152,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_TOOLS_DIR_CXX+set}" = set; then :
+if ${ac_cv_path_TOOLS_DIR_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $TOOLS_DIR_CXX in
@@ -19751,7 +20204,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_POTENTIAL_CXX+set}" = set; then :
+if ${ac_cv_path_POTENTIAL_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $POTENTIAL_CXX in
@@ -20164,7 +20617,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_PROPER_COMPILER_CXX+set}" = set; then :
+if ${ac_cv_prog_PROPER_COMPILER_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$PROPER_COMPILER_CXX"; then
@@ -20208,7 +20661,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_PROPER_COMPILER_CXX+set}" = set; then :
+if ${ac_cv_prog_ac_ct_PROPER_COMPILER_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_PROPER_COMPILER_CXX"; then
@@ -20662,7 +21115,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
+if ${ac_cv_prog_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CXX"; then
@@ -20706,7 +21159,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CXX"; then
@@ -20784,7 +21237,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20821,7 +21274,7 @@
 ac_save_CXXFLAGS=$CXXFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
 $as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
+if ${ac_cv_prog_cxx_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_cxx_werror_flag=$ac_cxx_werror_flag
@@ -20919,7 +21372,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJC+set}" = set; then :
+if ${ac_cv_prog_OBJC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJC"; then
@@ -20963,7 +21416,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJC"; then
@@ -21039,7 +21492,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5
 $as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; }
-if test "${ac_cv_objc_compiler_gnu+set}" = set; then :
+if ${ac_cv_objc_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -21076,7 +21529,7 @@
 ac_save_OBJCFLAGS=$OBJCFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5
 $as_echo_n "checking whether $OBJC accepts -g... " >&6; }
-if test "${ac_cv_prog_objc_g+set}" = set; then :
+if ${ac_cv_prog_objc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_objc_werror_flag=$ac_objc_werror_flag
@@ -21452,7 +21905,7 @@
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -21492,7 +21945,7 @@
 set dummy ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -21834,7 +22287,7 @@
 set dummy link; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_WINLD+set}" = set; then :
+if ${ac_cv_prog_WINLD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$WINLD"; then
@@ -22173,7 +22626,7 @@
 set dummy mt; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_MT+set}" = set; then :
+if ${ac_cv_prog_MT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$MT"; then
@@ -22494,7 +22947,7 @@
 set dummy rc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RC+set}" = set; then :
+if ${ac_cv_prog_RC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RC"; then
@@ -22885,7 +23338,7 @@
 set dummy lib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_WINAR+set}" = set; then :
+if ${ac_cv_prog_WINAR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$WINAR"; then
@@ -23191,7 +23644,7 @@
 set dummy dumpbin; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DUMPBIN"; then
@@ -23510,7 +23963,7 @@
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -23626,7 +24079,7 @@
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=cpp
@@ -23910,7 +24363,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
 $as_echo_n "checking how to run the C++ preprocessor... " >&6; }
 if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
+  if ${ac_cv_prog_CXXCPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CXXCPP needs to be expanded
@@ -24026,7 +24479,7 @@
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=cpp
@@ -24328,7 +24781,7 @@
 set dummy as; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_AS+set}" = set; then :
+if ${ac_cv_path_AS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $AS in
@@ -24642,7 +25095,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_NM+set}" = set; then :
+if ${ac_cv_path_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $NM in
@@ -24951,7 +25404,7 @@
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_STRIP+set}" = set; then :
+if ${ac_cv_path_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $STRIP in
@@ -25257,7 +25710,7 @@
 set dummy mcs; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_MCS+set}" = set; then :
+if ${ac_cv_path_MCS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MCS in
@@ -25565,7 +26018,7 @@
 set dummy ${ac_tool_prefix}nm; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NM+set}" = set; then :
+if ${ac_cv_prog_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
@@ -25605,7 +26058,7 @@
 set dummy nm; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NM+set}" = set; then :
+if ${ac_cv_prog_ac_ct_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_NM"; then
@@ -25923,7 +26376,7 @@
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -25963,7 +26416,7 @@
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -26288,7 +26741,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJCOPY+set}" = set; then :
+if ${ac_cv_prog_OBJCOPY+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJCOPY"; then
@@ -26332,7 +26785,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJCOPY"; then
@@ -26659,7 +27112,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -26703,7 +27156,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -27027,7 +27480,7 @@
 set dummy lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_LIPO+set}" = set; then :
+if ${ac_cv_path_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $LIPO in
@@ -27342,7 +27795,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -27518,7 +27971,7 @@
 for ac_header in stdio.h
 do :
   ac_fn_cxx_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdio_h" = x""yes; then :
+if test "x$ac_cv_header_stdio_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDIO_H 1
 _ACEOF
@@ -27547,7 +28000,7 @@
 # This bug is HP SR number 8606223364.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5
 $as_echo_n "checking size of int *... " >&6; }
-if test "${ac_cv_sizeof_int_p+set}" = set; then :
+if ${ac_cv_sizeof_int_p+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p"        "$ac_includes_default"; then :
@@ -27557,7 +28010,7 @@
      { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (int *)
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
    else
      ac_cv_sizeof_int_p=0
    fi
@@ -27604,7 +28057,7 @@
 #
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
 $as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if test "${ac_cv_c_bigendian+set}" = set; then :
+if ${ac_cv_c_bigendian+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_c_bigendian=unknown
@@ -28615,8 +29068,8 @@
   have_x=disabled
 else
   case $x_includes,$x_libraries in #(
-    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #(
-    *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then :
+    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
+    *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # One or both of the vars are not set, and there is no cached value.
@@ -28893,7 +29346,7 @@
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
-if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then :
+if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -28927,14 +29380,14 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then :
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
   X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
 fi
 
     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
-if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then :
+if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -28968,7 +29421,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then :
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
   X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
 fi
 
@@ -28987,14 +29440,14 @@
     # The functions gethostbyname, getservbyname, and inet_addr are
     # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
     ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
-if test "x$ac_cv_func_gethostbyname" = x""yes; then :
+if test "x$ac_cv_func_gethostbyname" = xyes; then :
 
 fi
 
     if test $ac_cv_func_gethostbyname = no; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
-if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -29028,14 +29481,14 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
-if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
   X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
 fi
 
       if test $ac_cv_lib_nsl_gethostbyname = no; then
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
-if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then :
+if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -29069,7 +29522,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
-if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then :
+if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
   X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
 fi
 
@@ -29084,14 +29537,14 @@
     # must be given before -lnsl if both are needed.  We assume that
     # if connect needs -lnsl, so does gethostbyname.
     ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect"
-if test "x$ac_cv_func_connect" = x""yes; then :
+if test "x$ac_cv_func_connect" = xyes; then :
 
 fi
 
     if test $ac_cv_func_connect = no; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
 $as_echo_n "checking for connect in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_connect+set}" = set; then :
+if ${ac_cv_lib_socket_connect+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -29125,7 +29578,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
 $as_echo "$ac_cv_lib_socket_connect" >&6; }
-if test "x$ac_cv_lib_socket_connect" = x""yes; then :
+if test "x$ac_cv_lib_socket_connect" = xyes; then :
   X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
 fi
 
@@ -29133,14 +29586,14 @@
 
     # Guillermo Gomez says -lposix is necessary on A/UX.
     ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove"
-if test "x$ac_cv_func_remove" = x""yes; then :
+if test "x$ac_cv_func_remove" = xyes; then :
 
 fi
 
     if test $ac_cv_func_remove = no; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
 $as_echo_n "checking for remove in -lposix... " >&6; }
-if test "${ac_cv_lib_posix_remove+set}" = set; then :
+if ${ac_cv_lib_posix_remove+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -29174,7 +29627,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
 $as_echo "$ac_cv_lib_posix_remove" >&6; }
-if test "x$ac_cv_lib_posix_remove" = x""yes; then :
+if test "x$ac_cv_lib_posix_remove" = xyes; then :
   X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
 fi
 
@@ -29182,14 +29635,14 @@
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
-if test "x$ac_cv_func_shmat" = x""yes; then :
+if test "x$ac_cv_func_shmat" = xyes; then :
 
 fi
 
     if test $ac_cv_func_shmat = no; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
 $as_echo_n "checking for shmat in -lipc... " >&6; }
-if test "${ac_cv_lib_ipc_shmat+set}" = set; then :
+if ${ac_cv_lib_ipc_shmat+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -29223,7 +29676,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
 $as_echo "$ac_cv_lib_ipc_shmat" >&6; }
-if test "x$ac_cv_lib_ipc_shmat" = x""yes; then :
+if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
   X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
 fi
 
@@ -29241,7 +29694,7 @@
   # John Interrante, Karl Berry
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
-if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then :
+if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -29275,7 +29728,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
-if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then :
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
   X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
 fi
 
@@ -30288,7 +30741,7 @@
             LDFLAGS="$FREETYPE2_LIBS"
             { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FT_Init_FreeType in -lfreetype" >&5
 $as_echo_n "checking for FT_Init_FreeType in -lfreetype... " >&6; }
-if test "${ac_cv_lib_freetype_FT_Init_FreeType+set}" = set; then :
+if ${ac_cv_lib_freetype_FT_Init_FreeType+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -30322,7 +30775,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_freetype_FT_Init_FreeType" >&5
 $as_echo "$ac_cv_lib_freetype_FT_Init_FreeType" >&6; }
-if test "x$ac_cv_lib_freetype_FT_Init_FreeType" = x""yes; then :
+if test "x$ac_cv_lib_freetype_FT_Init_FreeType" = xyes; then :
   FREETYPE2_FOUND=true
 else
   as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5
@@ -30610,7 +31063,7 @@
 	    for ac_header in alsa/asoundlib.h
 do :
   ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then :
+if test "x$ac_cv_header_alsa_asoundlib_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_ALSA_ASOUNDLIB_H 1
 _ACEOF
@@ -30669,7 +31122,7 @@
 USE_EXTERNAL_LIBJPEG=true
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5
 $as_echo_n "checking for main in -ljpeg... " >&6; }
-if test "${ac_cv_lib_jpeg_main+set}" = set; then :
+if ${ac_cv_lib_jpeg_main+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -30697,7 +31150,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5
 $as_echo "$ac_cv_lib_jpeg_main" >&6; }
-if test "x$ac_cv_lib_jpeg_main" = x""yes; then :
+if test "x$ac_cv_lib_jpeg_main" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBJPEG 1
 _ACEOF
@@ -30721,7 +31174,7 @@
 USE_EXTERNAL_LIBJPEG=true
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5
 $as_echo_n "checking for main in -lgif... " >&6; }
-if test "${ac_cv_lib_gif_main+set}" = set; then :
+if ${ac_cv_lib_gif_main+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -30749,7 +31202,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5
 $as_echo "$ac_cv_lib_gif_main" >&6; }
-if test "x$ac_cv_lib_gif_main" = x""yes; then :
+if test "x$ac_cv_lib_gif_main" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBGIF 1
 _ACEOF
@@ -30779,7 +31232,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5
 $as_echo_n "checking for compress in -lz... " >&6; }
-if test "${ac_cv_lib_z_compress+set}" = set; then :
+if ${ac_cv_lib_z_compress+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -30813,7 +31266,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5
 $as_echo "$ac_cv_lib_z_compress" >&6; }
-if test "x$ac_cv_lib_z_compress" = x""yes; then :
+if test "x$ac_cv_lib_z_compress" = xyes; then :
    ZLIB_FOUND=yes
 else
    ZLIB_FOUND=no
@@ -30906,7 +31359,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
 $as_echo_n "checking for cos in -lm... " >&6; }
-if test "${ac_cv_lib_m_cos+set}" = set; then :
+if ${ac_cv_lib_m_cos+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -30940,7 +31393,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
 $as_echo "$ac_cv_lib_m_cos" >&6; }
-if test "x$ac_cv_lib_m_cos" = x""yes; then :
+if test "x$ac_cv_lib_m_cos" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBM 1
 _ACEOF
@@ -30964,7 +31417,7 @@
 LIBS=""
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -30998,7 +31451,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBDL 1
 _ACEOF
@@ -31249,14 +31702,14 @@
 ###############################################################################
 
 
-# How many cores do we have on this build system?
+  # How many cores do we have on this build system?
 
 # Check whether --with-num-cores was given.
 if test "${with_num_cores+set}" = set; then :
   withval=$with_num_cores;
 fi
 
-if test "x$with_num_cores" = x; then
+  if test "x$with_num_cores" = x; then
     # The number of cores were not specified, try to probe them.
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for number of cores" >&5
@@ -31282,10 +31735,6 @@
         FOUND_CORES=yes
     fi
 
-    # For c/c++ code we run twice as many concurrent build
-    # jobs than we have cores, otherwise we will stall on io.
-    CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
-
     if test "x$FOUND_CORES" = xyes; then
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5
 $as_echo "$NUM_CORES" >&6; }
@@ -31297,22 +31746,20 @@
     fi
 
 
-else
+  else
     NUM_CORES=$with_num_cores
-    CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
-fi
-
-
-
-
-# How much memory do we have on this build system?
+  fi
+
+
+
+  # How much memory do we have on this build system?
 
 # Check whether --with-memory-size was given.
 if test "${with_memory_size+set}" = set; then :
   withval=$with_memory_size;
 fi
 
-if test "x$with_memory_size" = x; then
+  if test "x$with_memory_size" = x; then
     # The memory size was not specified, try to probe it.
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memory size" >&5
@@ -31352,9 +31799,45 @@
 $as_echo "$as_me: WARNING: This might seriously impact build performance!" >&2;}
     fi
 
-else
+  else
     MEMORY_SIZE=$with_memory_size
-fi
+  fi
+
+
+
+  # Provide a decent default number of parallel jobs for make depending on
+  # number of cores, amount of memory and machine architecture.
+
+# Check whether --with-jobs was given.
+if test "${with_jobs+set}" = set; then :
+  withval=$with_jobs;
+fi
+
+  if test "x$with_jobs" = x; then
+    # Number of jobs was not specified, calculate.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for appropriate number of jobs to run in parallel" >&5
+$as_echo_n "checking for appropriate number of jobs to run in parallel... " >&6; }
+    # Approximate memory in GB, rounding up a bit.
+    memory_gb=`expr $MEMORY_SIZE / 1100`
+    # Pick the lowest of memory in gb and number of cores.
+    if test "$memory_gb" -lt "$NUM_CORES"; then
+      JOBS="$memory_gb"
+    else
+      JOBS="$NUM_CORES"
+      # On bigger machines, leave some room for other processes to run
+      if test "$JOBS" -gt "4"; then
+        JOBS=`expr $JOBS '*' 90 / 100`
+      fi
+    fi
+    # Cap number of jobs to 16
+    if test "$JOBS" -gt "16"; then
+      JOBS=16
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JOBS" >&5
+$as_echo "$JOBS" >&6; }
+  else
+    JOBS=$with_jobs
+  fi
 
 
 
@@ -31642,7 +32125,7 @@
 set dummy ccache; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CCACHE+set}" = set; then :
+if ${ac_cv_path_CCACHE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CCACHE in
@@ -31903,10 +32386,21 @@
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -31938,7 +32432,7 @@
 
 
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -32039,6 +32533,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -32346,7 +32841,7 @@
 # values after options handling.
 ac_log="
 This file was extended by OpenJDK $as_me jdk8, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -32409,7 +32904,7 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 OpenJDK config.status jdk8
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -32538,7 +33033,7 @@
     "$OUTPUT_ROOT/spec.sh") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" ;;
     "$OUTPUT_ROOT/Makefile") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" ;;
 
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -32560,9 +33055,10 @@
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -32570,12 +33066,13 @@
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -32597,7 +33094,7 @@
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -32625,7 +33122,7 @@
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -32673,7 +33170,7 @@
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -32705,7 +33202,7 @@
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -32739,7 +33236,7 @@
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -32751,8 +33248,8 @@
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -32853,7 +33350,7 @@
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -32872,7 +33369,7 @@
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -32881,7 +33378,7 @@
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -32907,8 +33404,8 @@
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -33033,21 +33530,22 @@
 s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -33058,20 +33556,20 @@
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
  ;;
@@ -33167,7 +33665,7 @@
 
 printf "\n"
 printf "Build performance summary:\n"
-printf "* Cores to use:   $NUM_CORES\n"
+printf "* Cores to use:   $JOBS\n"
 printf "* Memory limit:   $MEMORY_SIZE MB\n"
 printf "* ccache status:  $CCACHE_STATUS\n"
 printf "\n"
--- a/common/autoconf/help.m4	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/autoconf/help.m4	Fri Mar 15 23:08:07 2013 -0700
@@ -174,7 +174,7 @@
 
 printf "\n"
 printf "Build performance summary:\n"
-printf "* Cores to use:   $NUM_CORES\n"
+printf "* Cores to use:   $JOBS\n"
 printf "* Memory limit:   $MEMORY_SIZE MB\n"
 printf "* ccache status:  $CCACHE_STATUS\n"
 printf "\n"
--- a/common/autoconf/hotspot-spec.gmk.in	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/autoconf/hotspot-spec.gmk.in	Fri Mar 15 23:08:07 2013 -0700
@@ -80,7 +80,7 @@
 
 HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ @STATIC_CXX_SETTING@
 # This is used from the libjvm build for C/C++ code.
-HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@
+HOTSPOT_BUILD_JOBS:=$(JOBS)
 # Control wether Hotspot runs Queens test after building
 TEST_IN_BUILD=@TEST_IN_BUILD@
 
--- a/common/autoconf/spec.gmk.in	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/autoconf/spec.gmk.in	Fri Mar 15 23:08:07 2013 -0700
@@ -263,6 +263,9 @@
 # the sjavac server log files.
 SJAVAC_SERVER_DIR:=@SJAVAC_SERVER_DIR@
 
+# Number of parallel jobs to use for compilation
+JOBS?=@JOBS@
+
 # The OpenJDK makefiles should be changed to using the standard
 # configure output ..._CFLAGS and ..._LIBS. In the meantime we
 # extract the information here.
@@ -285,6 +288,10 @@
 X_LIBS:=@X_LIBS@
 OPENWIN_HOME:=@OPENWIN_HOME@
 
+# DirectX SDK
+DXSDK_LIB_PATH=@DXSDK_LIB_PATH@
+DXSDK_INCLUDE_PATH=@DXSDK_INCLUDE_PATH@
+
 # The lowest required version of macosx to enforce compatiblity for
 MACOSX_VERSION_MIN=@MACOSX_VERSION_MIN@
 
--- a/common/autoconf/toolchain.m4	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/autoconf/toolchain.m4	Fri Mar 15 23:08:07 2013 -0700
@@ -176,6 +176,7 @@
 [
 if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
   TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV
+  TOOLCHAIN_SETUP_DXSDK
 fi
 
 AC_SUBST(MSVCR_DLL)
--- a/common/autoconf/toolchain_windows.m4	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/autoconf/toolchain_windows.m4	Fri Mar 15 23:08:07 2013 -0700
@@ -262,3 +262,61 @@
   AC_MSG_RESULT([$MSVCR_DLL])
   BASIC_FIXUP_PATH(MSVCR_DLL)
 ])
+
+
+# Setup the DXSDK paths
+AC_DEFUN([TOOLCHAIN_SETUP_DXSDK],
+[
+  AC_ARG_WITH(dxsdk, [AS_HELP_STRING([--with-dxsdk],
+      [the DirectX SDK (Windows only) @<:@probed@:>@])])
+  AC_ARG_WITH(dxsdk-lib, [AS_HELP_STRING([--with-dxsdk-lib],
+      [the DirectX SDK lib directory (Windows only) @<:@probed@:>@])])
+  AC_ARG_WITH(dxsdk-include, [AS_HELP_STRING([--with-dxsdk-include],
+      [the DirectX SDK include directory (Windows only) @<:@probed@:>@])])
+
+  AC_MSG_CHECKING([for DirectX SDK])
+
+  if test "x$with_dxsdk" != x; then
+    dxsdk_path="$with_dxsdk"
+  elif test "x$DXSDK_DIR" != x; then
+    dxsdk_path="$DXSDK_DIR"
+  elif test -d "C:/DXSDK"; then
+    dxsdk_path="C:/DXSDK"
+  else
+    AC_MSG_ERROR([Could not find the DirectX SDK])
+  fi
+  AC_MSG_RESULT([$dxsdk_path])
+  BASIC_FIXUP_PATH(dxsdk_path)
+
+  AC_MSG_CHECKING([for DirectX SDK lib dir])
+  if test "x$with_dxsdk_lib" != x; then
+    DXSDK_LIB_PATH="$with_dxsdk_lib"
+  elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
+    DXSDK_LIB_PATH="$dxsdk_path/Lib/x64"
+  else
+    DXSDK_LIB_PATH="$dxsdk_path/Lib"
+  fi
+  # dsound.lib is linked to in jsoundds
+  if test ! -f "$DXSDK_LIB_PATH/dsound.lib"; then
+    AC_MSG_ERROR([Invalid DirectX SDK lib dir])
+  fi
+  AC_MSG_RESULT([$DXSDK_LIB_PATH])
+  BASIC_FIXUP_PATH(DXSDK_LIB_PATH)
+
+  AC_MSG_CHECKING([for DirectX SDK include dir])
+  if test "x$with_dxsdk_include" != x; then
+    DXSDK_INCLUDE_PATH="$with_dxsdk_include"
+  else
+    DXSDK_INCLUDE_PATH="$dxsdk_path/Include"
+  fi
+  # dsound.h is included in jsoundds
+  if test ! -f "$DXSDK_INCLUDE_PATH/dsound.h"; then
+    AC_MSG_ERROR([Invalid DirectX SDK lib dir])
+  fi
+  AC_MSG_RESULT([$DXSDK_INCLUDE_PATH])
+  BASIC_FIXUP_PATH(DXSDK_INCLUDE_PATH)
+
+  AC_SUBST(DXSDK_LIB_PATH)
+  AC_SUBST(DXSDK_INCLUDE_PATH)
+  LDFLAGS_JDK="$LDFLAGS_JDK -libpath:$DXSDK_LIB_PATH"
+])
--- a/common/makefiles/JavaCompilation.gmk	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/makefiles/JavaCompilation.gmk	Fri Mar 15 23:08:07 2013 -0700
@@ -501,7 +501,7 @@
 		$(ECHO) Compiling $1
 		($$($1_JVM) $$($1_SJAVAC) \
 			$$($1_REMOTE) \
-			-j $(NUM_CORES) \
+			-j $(JOBS) \
 			--permit-unidentified-artifacts \
 			--permit-sources-without-package \
 			--compare-found-sources $$($1_BIN)/_the.batch.tmp \
--- a/common/makefiles/Main.gmk	Thu Mar 14 01:41:20 2013 -0400
+++ b/common/makefiles/Main.gmk	Fri Mar 15 23:08:07 2013 -0700
@@ -58,9 +58,6 @@
 
 # Setup number of jobs to use. -jN is unfortunately not available for us to parse from the command line,
 # hence this workaround.
-ifeq ($(JOBS),)
-    JOBS=$(NUM_CORES)
-endif
 MAKE_ARGS:=$(MAKE_ARGS) -j$(JOBS)
 
 ### Main targets
--- a/corba/.hgtags	Thu Mar 14 01:41:20 2013 -0400
+++ b/corba/.hgtags	Fri Mar 15 23:08:07 2013 -0700
@@ -200,3 +200,5 @@
 58be6ca3c0603882a1ec478724e337aac85e0da0 jdk8-b76
 35684a40c5845782324dbcc9ac8969528020ff61 jdk8-b77
 27d6368ae8ba570c31c2f0e696d39c99fa2f4538 jdk8-b78
+e41fb1aa0329767b2737303c994e38bede1baa07 jdk8-b79
+5f3d4a6bdd027a1631d97e2dfff63fd5e46987a4 jdk8-b80
--- a/hotspot/.hgtags	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/.hgtags	Fri Mar 15 23:08:07 2013 -0700
@@ -318,3 +318,7 @@
 9f19f4a7d48a4ebe7f616b6068971ea5f8b075fa hs25-b19
 d5e12e7d2f719144d84903d9151455661c47b476 jdk8-b78
 555ec35a250783110aa070dbc8a8603f6cabe41f hs25-b20
+6691814929b606fe0e7954fd6e485dd876505c83 jdk8-b79
+df5396524152118535c36da5801d828b560d19a2 hs25-b21
+4a198b201f3ce84433fa94a3ca65d061473e7c4c jdk8-b80
+dd6350b4abc4a6c19c89dd982cc0e4f3d119885c hs25-b22
--- a/hotspot/agent/make/Makefile	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/make/Makefile	Fri Mar 15 23:08:07 2013 -0700
@@ -19,7 +19,7 @@
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
-#  
+#
 #
 
 # This guards against adding broken .java files to the directory
@@ -42,8 +42,6 @@
 sun.jvm.hotspot \
 sun.jvm.hotspot.asm \
 sun.jvm.hotspot.asm.sparc \
-sun.jvm.hotspot.bugspot \
-sun.jvm.hotspot.bugspot.tree \
 sun.jvm.hotspot.c1 \
 sun.jvm.hotspot.ci \
 sun.jvm.hotspot.code \
@@ -84,7 +82,6 @@
 sun.jvm.hotspot.gc_interface \
 sun.jvm.hotspot.interpreter \
 sun.jvm.hotspot.jdi \
-sun.jvm.hotspot.livejvm \
 sun.jvm.hotspot.memory \
 sun.jvm.hotspot.opto \
 sun.jvm.hotspot.oops \
@@ -130,8 +127,6 @@
 sun/jvm/hotspot/*.java \
 sun/jvm/hotspot/asm/*.java \
 sun/jvm/hotspot/asm/sparc/*.java \
-sun/jvm/hotspot/bugspot/*.java \
-sun/jvm/hotspot/bugspot/tree/*.java \
 sun/jvm/hotspot/c1/*.java \
 sun/jvm/hotspot/ci/*.java \
 sun/jvm/hotspot/code/*.java \
@@ -168,7 +163,6 @@
 sun/jvm/hotspot/gc_implementation/shared/*.java \
 sun/jvm/hotspot/interpreter/*.java \
 sun/jvm/hotspot/jdi/*.java \
-sun/jvm/hotspot/livejvm/*.java \
 sun/jvm/hotspot/memory/*.java \
 sun/jvm/hotspot/oops/*.java \
 sun/jvm/hotspot/opto/*.java \
@@ -205,7 +199,7 @@
 sun/jvm/hotspot/utilities/memo/*.java \
 sun/jvm/hotspot/utilities/soql/*.java \
 com/sun/java/swing/action/*.java \
-com/sun/java/swing/ui/*.java 
+com/sun/java/swing/ui/*.java
 #END FILELIST
 
 ifneq "x$(ALT_BOOTDIR)" "x"
@@ -231,7 +225,7 @@
 OUTPUT_DIR = $(BUILD_DIR)/classes
 DOC_DIR    = $(BUILD_DIR)/doc
 
-# gnumake 3.78.1 does not accept the *s, 
+# gnumake 3.78.1 does not accept the *s,
 # so use the shell to expand them
 ALLFILES := $(patsubst %,$(SRC_DIR)/%,$(FILELIST))
 ALLFILES := $(shell /bin/ls $(ALLFILES))
@@ -303,7 +297,7 @@
 cscope: $(ALLFILES)
 	rm -f java.files
 	echo $(ALLFILES) > java.files
-	cscope -b -i java.files -f java.out 
+	cscope -b -i java.files -f java.out
 	rm -f java.files
 
 .PHONY: sa.jar
--- a/hotspot/agent/make/bugspot.bat	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-REM
-REM Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved.
-REM DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-REM
-REM This code is free software; you can redistribute it and/or modify it
-REM under the terms of the GNU General Public License version 2 only, as
-REM published by the Free Software Foundation.
-REM
-REM This code is distributed in the hope that it will be useful, but WITHOUT
-REM ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-REM FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-REM version 2 for more details (a copy is included in the LICENSE file that
-REM accompanied this code).
-REM
-REM You should have received a copy of the GNU General Public License version
-REM 2 along with this work; if not, write to the Free Software Foundation,
-REM Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-REM
-REM Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-REM or visit www.oracle.com if you need additional information or have any
-REM questions.
-REM  
-REM
-
-java -showversion -cp ..\build\classes;..\src\share\lib\js.jar;.\sa.jar;lib\js.jar sun.jvm.hotspot.bugspot.Main
--- a/hotspot/agent/make/marks_notes.html	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/make/marks_notes.html	Fri Mar 15 23:08:07 2013 -0700
@@ -26,14 +26,12 @@
 
     <ul>
       <li><code>java -cp classes sun.jvm.hotspot.HSDB</code>
-      <li><code>java -cp classes sun.jvm.hotspot.bugspot.Main</code>
     </ul>
 
     <h2>Feedback</h2>
     <p>
       Refactoring of package hierarchy. All user interface components should be in
-      the ui package. Perhaps: sun.jvm.hotspot.ui.hsdb.Main for the HSDB and
-      sun.jvm.hotspot.ui.bugspot.Main for BugSpot.
+      the ui package. Perhaps: sun.jvm.hotspot.ui.hsdb.Main for the HSDB.
     <p>
       The src\share\vm\agent area seems like a workspace so it should be organized like
       one. In particular, I'd like to suggest the following directory layout:<br>
@@ -47,7 +45,7 @@
     </ul>
 
     <p>
-      Seems like there is a lot of redundant functionality. Between the HSDB and BugSpot. Perhaps
+      Seems like there is a lot of redundant functionality. Perhaps
       this can be consolidated with a <code>javax.swing.Actions</code> architecture.
 
     <h2>Tasklist</h2>
@@ -55,11 +53,7 @@
     <p>
       <b>Stack memory pane</b>: 
       It's one of the more useful JVM debugging tools in the SA. However, it
-      doesn't support any interaction with the text; the Memory Panel in BugSpot
-      was written afterward (with help from Shannon) and implements proper
-      selection, scrolling, and drag-and-drop, but no annotations. I'm not sure how
-      to integrate the annotations with the JTable that's being used for the memory
-      view; if you have suggestions here please let me know.
+      doesn't support any interaction with the text.
     <p>
       <b>Integrations with the NetBeans architecture (plug in).</b> See the
       <a href="http://openide.netbeans.org">Netbeans Open APIs homepage</a>
--- a/hotspot/agent/src/os/bsd/MacosxDebuggerLocal.m	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/os/bsd/MacosxDebuggerLocal.m	Fri Mar 15 23:08:07 2013 -0700
@@ -160,7 +160,7 @@
   CHECK_EXCEPTION_(0);
 
   unsigned long alignedAddress;
-  unsigned long alignedLength;
+  unsigned long alignedLength = 0;
   kern_return_t result;
   vm_offset_t *pages;
   int *mapped;
@@ -630,7 +630,7 @@
     /* Couldn't find entry point.  error_message should contain some
      * platform dependent error message.
      */
-    THROW_NEW_DEBUGGER_EXCEPTION(error_message);
+    THROW_NEW_DEBUGGER_EXCEPTION_(error_message, (jlong)func);
   }
   return (jlong)func;
 }
--- a/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c	Fri Mar 15 23:08:07 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -25,6 +25,13 @@
 #include <jni.h>
 #include "libproc.h"
 
+#include <elf.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+#include <limits.h>
+
 #if defined(x86_64) && !defined(amd64)
 #define amd64 1
 #endif
@@ -154,6 +161,39 @@
   }
 }
 
+
+/*
+ * Verify that a named ELF binary file (core or executable) has the same
+ * bitness as ourselves.
+ * Throw an exception if there is a mismatch or other problem.
+ *
+ * If we proceed using a mismatched debugger/debuggee, the best to hope
+ * for is a missing symbol, the worst is a crash searching for debug symbols.
+ */
+void verifyBitness(JNIEnv *env, const char *binaryName) {
+  int fd = open(binaryName, O_RDONLY);
+  if (fd < 0) {
+    THROW_NEW_DEBUGGER_EXCEPTION("cannot open binary file");
+  }
+  unsigned char elf_ident[EI_NIDENT];
+  int i = read(fd, &elf_ident, sizeof(elf_ident));
+  close(fd);
+
+  if (i < 0) {
+    THROW_NEW_DEBUGGER_EXCEPTION("cannot read binary file");
+  }
+#ifndef _LP64
+  if (elf_ident[EI_CLASS] == ELFCLASS64) {
+    THROW_NEW_DEBUGGER_EXCEPTION("debuggee is 64 bit, use 64-bit java for debugger");
+  }
+#else
+  if (elf_ident[EI_CLASS] != ELFCLASS64) {
+    THROW_NEW_DEBUGGER_EXCEPTION("debuggee is 32 bit, use 32 bit java for debugger");
+  }
+#endif
+}
+
+
 /*
  * Class:     sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal
  * Method:    attach0
@@ -162,6 +202,12 @@
 JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_attach0__I
   (JNIEnv *env, jobject this_obj, jint jpid) {
 
+  // For bitness checking, locate binary at /proc/jpid/exe
+  char buf[PATH_MAX];
+  snprintf((char *) &buf, PATH_MAX, "/proc/%d/exe", jpid);
+  verifyBitness(env, (char *) &buf);
+  CHECK_EXCEPTION;
+
   struct ps_prochandle* ph;
   if ( (ph = Pgrab(jpid)) == NULL) {
     THROW_NEW_DEBUGGER_EXCEPTION("Can't attach to the process");
@@ -187,6 +233,9 @@
   coreName_cstr = (*env)->GetStringUTFChars(env, coreName, &isCopy);
   CHECK_EXCEPTION;
 
+  verifyBitness(env, execName_cstr);
+  CHECK_EXCEPTION;
+
   if ( (ph = Pgrab_core(execName_cstr, coreName_cstr)) == NULL) {
     (*env)->ReleaseStringUTFChars(env, execName, execName_cstr);
     (*env)->ReleaseStringUTFChars(env, coreName, coreName_cstr);
--- a/hotspot/agent/src/os/win32/windbg/sawindbg.cpp	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/os/win32/windbg/sawindbg.cpp	Fri Mar 15 23:08:07 2013 -0700
@@ -372,8 +372,7 @@
 
      We are attaching to a process in 'read-only' mode. i.e., we do not want to
      put breakpoints, suspend/resume threads etc. For read-only JDI and HSDB kind of
-     usage this should suffice. We are not intending to use this for full-fledged
-     ProcessControl implementation to be used with BugSpotAgent.
+     usage this should suffice.
 
      Please refer to DEBUG_ATTACH_NONINVASIVE mode source comments from dbgeng.h.
      In this mode, debug engine does not call DebugActiveProrcess. i.e., we are not
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/amd64/AMD64FloatRegister.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 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.asm.amd64;
-
-import sun.jvm.hotspot.asm.Register;
-import sun.jvm.hotspot.utilities.Assert;
-
-public class AMD64FloatRegister extends Register {
-
-   public AMD64FloatRegister(int number) {
-      super(number);
-   }
-
-   public int getNumber() {
-      return number;
-   }
-
-   public int getNumberOfRegisters() {
-      return AMD64FloatRegisters.getNumRegisters();
-   }
-
-   public boolean isFloat() {
-      return true;
-   }
-
-   public boolean isFramePointer() {
-      return false;
-   }
-
-   public boolean isStackPointer() {
-      return false;
-   }
-
-   public boolean isValid() {
-      return number >= 0 && number < AMD64FloatRegisters.getNumRegisters();
-   }
-
-   public String toString() {
-      return AMD64FloatRegisters.getRegisterName(number);
-   }
-
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1536 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.filechooser.*;
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.debugger.posix.*;
-import sun.jvm.hotspot.debugger.windbg.*;
-import sun.jvm.hotspot.livejvm.*;
-import sun.jvm.hotspot.memory.*;
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.runtime.*;
-import sun.jvm.hotspot.ui.*;
-import sun.jvm.hotspot.utilities.*;
-
-/** The BugSpot component. This is embeddable in an application by
-    virtue of its being a JComponent. It (currently) requires the use
-    of a menu bar which can be fetched via getMenuBar(). This is
-    intended ultimately to replace HSDB. */
-
-public class BugSpot extends JPanel {
-  public BugSpot() {
-    super();
-    Runtime.getRuntime().addShutdownHook(new java.lang.Thread() {
-        public void run() {
-          detachDebugger();
-        }
-      });
-  }
-
-  /** Turn on or off MDI (Multiple Document Interface) mode. When MDI
-      is enabled, the BugSpot component contains a JDesktopPane and all
-      windows are JInternalFrames. When disabled, only the menu bar is
-      relevant. */
-  public void setMDIMode(boolean onOrOff) {
-    mdiMode = onOrOff;
-  }
-
-  /** Indicates whether MDI mode is enabled. */
-  public boolean getMDIMode() {
-    return mdiMode;
-  }
-
-  /** Build user interface widgets. This must be called before adding
-      the BugSpot component to its parent. */
-  public void build() {
-    setLayout(new BorderLayout());
-
-    menuBar = new JMenuBar();
-
-    attachMenuItems = new java.util.ArrayList();
-    detachMenuItems = new java.util.ArrayList();
-    debugMenuItems  = new java.util.ArrayList();
-    suspendDebugMenuItems = new java.util.ArrayList();
-    resumeDebugMenuItems = new java.util.ArrayList();
-
-    //
-    // File menu
-    //
-
-    JMenu menu = createMenu("File", 'F', 0);
-    JMenuItem item;
-    item = createMenuItem("Open source file...",
-                          new ActionListener() {
-                              public void actionPerformed(ActionEvent e) {
-                                openSourceFile();
-                              }
-                            },
-                          KeyEvent.VK_O, InputEvent.CTRL_MASK,
-                          'O', 0);
-    menu.add(item);
-    detachMenuItems.add(item);
-
-    menu.addSeparator();
-
-    item = createMenuItem("Attach to process...",
-                          new ActionListener() {
-                              public void actionPerformed(ActionEvent e) {
-                                showAttachDialog();
-                              }
-                            },
-                          'A', 0);
-    menu.add(item);
-    attachMenuItems.add(item);
-
-    item = createMenuItem("Detach",
-                          new ActionListener() {
-                              public void actionPerformed(ActionEvent e) {
-                                detach();
-                              }
-                            },
-                          'D', 0);
-    menu.add(item);
-    detachMenuItems.add(item);
-
-    // Disable detach menu items at first
-    setMenuItemsEnabled(detachMenuItems, false);
-
-    menu.addSeparator();
-
-    menu.add(createMenuItem("Exit",
-                            new ActionListener() {
-                                public void actionPerformed(ActionEvent e) {
-                                  detach();
-                                  System.exit(0);
-                                }
-                              },
-                            'x', 1));
-
-    menuBar.add(menu);
-
-    //
-    // Debug menu
-    //
-
-    debugMenu = createMenu("Debug", 'D', 0);
-    item = createMenuItem("Go",
-                          new ActionListener() {
-                              public void actionPerformed(ActionEvent e) {
-                                if (!attached) return;
-                                if (!isSuspended()) return;
-                                resume();
-                              }
-                            },
-                          KeyEvent.VK_F5, 0,
-                          'G', 0);
-    debugMenu.add(item);
-    resumeDebugMenuItems.add(item);
-
-    item = createMenuItem("Break",
-                          new ActionListener() {
-                              public void actionPerformed(ActionEvent e) {
-                                if (!attached) {
-                                  System.err.println("Not attached");
-                                  return;
-                                }
-                                if (isSuspended()) {
-                                  System.err.println("Already suspended");
-                                  return;
-                                }
-                                suspend();
-                              }
-                            },
-                          'B', 0);
-    debugMenu.add(item);
-    suspendDebugMenuItems.add(item);
-
-    debugMenu.addSeparator();
-
-    item = createMenuItem("Threads...",
-                          new ActionListener() {
-                              public void actionPerformed(ActionEvent e) {
-                                showThreadsDialog();
-                              }
-                            },
-                          'T', 0);
-    debugMenu.add(item);
-    debugMenuItems.add(item);
-    // FIXME: belongs under "View -> Debug Windows"
-    item = createMenuItem("Memory",
-                          new ActionListener() {
-                              public void actionPerformed(ActionEvent e) {
-                                showMemoryDialog();
-                              }
-                            },
-                          'M', 0);
-    debugMenu.add(item);
-    debugMenuItems.add(item);
-
-    debugMenu.setEnabled(false);
-    menuBar.add(debugMenu);
-
-    if (mdiMode) {
-      desktop = new JDesktopPane();
-      add(desktop, BorderLayout.CENTER);
-    }
-
-    fixedWidthFont = GraphicsUtilities.lookupFont("Courier");
-
-    debugEventTimer = new javax.swing.Timer(100, new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          pollForDebugEvent();
-        }
-      });
-  }
-
-  public JMenuBar getMenuBar() {
-    return menuBar;
-  }
-
-  public void showAttachDialog() {
-    setMenuItemsEnabled(attachMenuItems, false);
-    final FrameWrapper attachDialog = newFrame("Attach to process");
-    attachDialog.getContentPane().setLayout(new BorderLayout());
-    attachDialog.setClosable(true);
-    attachDialog.setResizable(true);
-
-    JPanel panel = new JPanel();
-    panel.setLayout(new BorderLayout());
-    panel.setBorder(GraphicsUtilities.newBorder(5));
-    attachDialog.setBackground(panel.getBackground());
-
-    JPanel listPanel = new JPanel();
-    listPanel.setLayout(new BorderLayout());
-    final ProcessListPanel plist = new ProcessListPanel(getLocalDebugger());
-    panel.add(plist, BorderLayout.CENTER);
-    JCheckBox check = new JCheckBox("Update list continuously");
-    check.addItemListener(new ItemListener() {
-        public void itemStateChanged(ItemEvent e) {
-          if (e.getStateChange() == ItemEvent.SELECTED) {
-            plist.start();
-          } else {
-            plist.stop();
-          }
-        }
-      });
-    listPanel.add(plist, BorderLayout.CENTER);
-    listPanel.add(check, BorderLayout.SOUTH);
-    panel.add(listPanel, BorderLayout.CENTER);
-    attachDialog.getContentPane().add(panel, BorderLayout.CENTER);
-    attachDialog.setClosingActionListener(new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          plist.stop();
-          setMenuItemsEnabled(attachMenuItems, true);
-        }
-      });
-
-    ActionListener attacher = new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          plist.stop();
-          attachDialog.setVisible(false);
-          removeFrame(attachDialog);
-          ProcessInfo info = plist.getSelectedProcess();
-          if (info != null) {
-            attach(info.getPid());
-          }
-        }
-      };
-
-    Box hbox = Box.createHorizontalBox();
-    hbox.add(Box.createGlue());
-    JButton button = new JButton("OK");
-    button.addActionListener(attacher);
-    hbox.add(button);
-    hbox.add(Box.createHorizontalStrut(20));
-    button = new JButton("Cancel");
-    button.addActionListener(new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          plist.stop();
-          attachDialog.setVisible(false);
-          removeFrame(attachDialog);
-          setMenuItemsEnabled(attachMenuItems, true);
-        }
-      });
-    hbox.add(button);
-    hbox.add(Box.createGlue());
-    panel = new JPanel();
-    panel.setBorder(GraphicsUtilities.newBorder(5));
-    panel.add(hbox);
-
-    attachDialog.getContentPane().add(panel, BorderLayout.SOUTH);
-
-    addFrame(attachDialog);
-    attachDialog.pack();
-    attachDialog.setSize(400, 300);
-    GraphicsUtilities.centerInContainer(attachDialog.getComponent(),
-                                        getParentDimension(attachDialog.getComponent()));
-    attachDialog.setVisible(true);
-  }
-
-  public void showThreadsDialog() {
-    final FrameWrapper threadsDialog = newFrame("Threads");
-    threadsDialog.getContentPane().setLayout(new BorderLayout());
-    threadsDialog.setClosable(true);
-    threadsDialog.setResizable(true);
-
-    ThreadListPanel threads = new ThreadListPanel(getCDebugger(), getAgent().isJavaMode());
-    threads.addListener(new ThreadListPanel.Listener() {
-        public void setFocus(ThreadProxy thread, JavaThread jthread) {
-          setCurrentThread(thread);
-          // FIXME: print this to GUI, bring some windows to foreground
-          System.err.println("Focus changed to thread " + thread);
-        }
-      });
-    threads.setBorder(GraphicsUtilities.newBorder(5));
-    threadsDialog.getContentPane().add(threads);
-    addFrame(threadsDialog);
-    threadsDialog.pack();
-    GraphicsUtilities.reshapeToAspectRatio(threadsDialog.getComponent(),
-                                           3.0f,
-                                           0.9f,
-                                           getParentDimension(threadsDialog.getComponent()));
-    GraphicsUtilities.centerInContainer(threadsDialog.getComponent(),
-                                        getParentDimension(threadsDialog.getComponent()));
-    threadsDialog.setVisible(true);
-  }
-
-  public void showMemoryDialog() {
-    final FrameWrapper memoryDialog = newFrame("Memory");
-    memoryDialog.getContentPane().setLayout(new BorderLayout());
-    memoryDialog.setClosable(true);
-    memoryDialog.setResizable(true);
-
-    memoryDialog.getContentPane().add(new MemoryViewer(getDebugger(),
-                                                       (getDebugger().getMachineDescription().getAddressSize() == 8)),
-                                      BorderLayout.CENTER);
-    addFrame(memoryDialog);
-    memoryDialog.pack();
-    GraphicsUtilities.reshapeToAspectRatio(memoryDialog.getComponent(),
-                                           1.0f,
-                                           0.7f,
-                                           getParentDimension(memoryDialog.getComponent()));
-    GraphicsUtilities.centerInContainer(memoryDialog.getComponent(),
-                                        getParentDimension(memoryDialog.getComponent()));
-    memoryDialog.setVisible(true);
-  }
-
-  /** Changes the editor factory this debugger uses to display source
-      code. Specified factory may be null, in which case the default
-      factory is used. */
-  public void setEditorFactory(EditorFactory fact) {
-    if (fact != null) {
-      editorFact = fact;
-    } else {
-      editorFact = new DefaultEditorFactory();
-    }
-  }
-
-  //----------------------------------------------------------------------
-  // Internals only below this point
-  //
-
-  private WorkerThread    workerThread;
-  private boolean         mdiMode;
-  private JVMDebugger     localDebugger;
-  private BugSpotAgent    agent = new BugSpotAgent();
-  private JMenuBar        menuBar;
-  /** List <JMenuItem> */
-  private java.util.List  attachMenuItems;
-  private java.util.List  detachMenuItems;
-  private java.util.List  debugMenuItems;
-  private java.util.List  suspendDebugMenuItems;
-  private java.util.List  resumeDebugMenuItems;
-  private FrameWrapper    stackFrame;
-  private VariablePanel   localsPanel;
-  private StackTracePanel stackTracePanel;
-  private FrameWrapper    registerFrame;
-  private RegisterPanel   registerPanel;
-  // Used for mixed-language stack traces
-  private Map             threadToJavaThreadMap;
-
-  private JMenu debugMenu;
-
-  // MDI mode only: desktop pane
-  private JDesktopPane desktop;
-
-  // Attach/detach state
-  private boolean attached;
-
-  // Suspension (combined Java/C++) state
-  private boolean suspended;
-
-  // Fixed-width font
-  private Font fixedWidthFont;
-
-  // Breakpoint setting
-  // Maps Strings to List/*<LineNumberInfo>*/
-  private Map sourceFileToLineNumberInfoMap;
-  // Maps Strings (file names) to Sets of Integers (line numbers)
-  private Map fileToBreakpointMap;
-
-  // Debug events
-  private javax.swing.Timer debugEventTimer;
-
-  // Java debug events
-  private boolean javaEventPending;
-
-  static class BreakpointResult {
-    private boolean success;
-    private boolean set;
-    private int lineNo;
-    private String why;
-
-    /** For positive results */
-    BreakpointResult(boolean success, boolean set, int lineNo) {
-      this(success, set, lineNo, null);
-    }
-
-    /** For negative results */
-    BreakpointResult(boolean success, boolean set, int lineNo, String why) {
-      this.success = success;
-      this.set = set;
-      this.lineNo = lineNo;
-      this.why = why;
-    }
-
-    public boolean succeeded() {
-      return success;
-    }
-
-    public boolean set() {
-      return set;
-    }
-
-    /** Line at which the breakpoint was actually set; only valid if
-        succeeded() returns true */
-    public int getLine() {
-      return lineNo;
-    }
-
-    public String getWhy() {
-      return why;
-    }
-  }
-
-
-  // Editors for source code. File name-to-Editor mapping.
-  private Map editors;
-  private EditorFactory editorFact = new DefaultEditorFactory();
-  private EditorCommands editorComm = new EditorCommands() {
-      public void windowClosed(Editor editor) {
-        editors.remove(editor.getSourceFileName());
-      }
-
-      public void toggleBreakpointAtLine(Editor editor, int lineNumber) {
-        // FIXME: handle "lazy" breakpoints where the source file has
-        // been opened with some other mechanism (File -> Open) and we
-        // don't have debug information pointing to that file yet
-        // FIXME: NOT FINISHED
-
-        BreakpointResult res =
-          handleBreakpointToggle(editor, lineNumber);
-        if (res.succeeded()) {
-          if (res.set()) {
-            editor.showBreakpointAtLine(res.getLine());
-          } else {
-            editor.clearBreakpointAtLine(res.getLine());
-          }
-        } else {
-          String why = res.getWhy();
-          if (why == null) {
-            why = "";
-          } else {
-            why = ": " + why;
-          }
-          showMessageDialog("Unable to toggle breakpoint" + why,
-                            "Unable to toggle breakpoint",
-                            JOptionPane.WARNING_MESSAGE);
-        }
-      }
-    };
-
-  private void attach(final int pid) {
-    try {
-      getAgent().attach(pid);
-      setMenuItemsEnabled(detachMenuItems, true);
-      setMenuItemsEnabled(suspendDebugMenuItems, false);
-      setMenuItemsEnabled(resumeDebugMenuItems, true);
-      debugMenu.setEnabled(true);
-      attached = true;
-      suspended = true;
-
-      if (getAgent().isJavaMode()) {
-        System.err.println("Java HotSpot(TM) virtual machine detected.");
-      } else {
-        System.err.println("(No Java(TM) virtual machine detected)");
-      }
-
-      // Set up editor map
-      editors = new HashMap();
-
-      // Initialize breakpoints
-      fileToBreakpointMap = new HashMap();
-
-      // Create combined stack trace and local variable panel
-      JPanel framePanel = new JPanel();
-      framePanel.setLayout(new BorderLayout());
-      framePanel.setBorder(GraphicsUtilities.newBorder(5));
-      localsPanel = new VariablePanel();
-      JTabbedPane tab = new JTabbedPane();
-      tab.addTab("Locals", localsPanel);
-      tab.setTabPlacement(JTabbedPane.BOTTOM);
-      framePanel.add(tab, BorderLayout.CENTER);
-      JPanel stackPanel = new JPanel();
-      stackPanel.setLayout(new BoxLayout(stackPanel, BoxLayout.X_AXIS));
-      stackPanel.add(new JLabel("Context:"));
-      stackPanel.add(Box.createHorizontalStrut(5));
-      stackTracePanel = new StackTracePanel();
-      stackTracePanel.addListener(new StackTracePanel.Listener() {
-          public void frameChanged(CFrame fr, JavaVFrame jfr) {
-            setCurrentFrame(fr, jfr);
-          }
-        });
-      stackPanel.add(stackTracePanel);
-      framePanel.add(stackPanel, BorderLayout.NORTH);
-      stackFrame = newFrame("Stack");
-      stackFrame.getContentPane().setLayout(new BorderLayout());
-      stackFrame.getContentPane().add(framePanel, BorderLayout.CENTER);
-      stackFrame.setResizable(true);
-      stackFrame.setClosable(false);
-      addFrame(stackFrame);
-      stackFrame.setSize(400, 200);
-      GraphicsUtilities.moveToInContainer(stackFrame.getComponent(), 0.0f, 1.0f, 0, 20);
-      stackFrame.setVisible(true);
-
-      // Create register panel
-      registerPanel = new RegisterPanel();
-      registerPanel.setFont(fixedWidthFont);
-      registerFrame = newFrame("Registers");
-      registerFrame.getContentPane().setLayout(new BorderLayout());
-      registerFrame.getContentPane().add(registerPanel, BorderLayout.CENTER);
-      addFrame(registerFrame);
-      registerFrame.setResizable(true);
-      registerFrame.setClosable(false);
-      registerFrame.setSize(225, 200);
-      GraphicsUtilities.moveToInContainer(registerFrame.getComponent(),
-                                          1.0f, 0.0f, 0, 0);
-      registerFrame.setVisible(true);
-
-      resetCurrentThread();
-    } catch (DebuggerException e) {
-      final String errMsg = formatMessage(e.getMessage(), 80);
-      setMenuItemsEnabled(attachMenuItems, true);
-      showMessageDialog("Unable to connect to process ID " + pid + ":\n\n" + errMsg,
-                        "Unable to Connect",
-                        JOptionPane.WARNING_MESSAGE);
-      getAgent().detach();
-    }
-  }
-
-  private synchronized void detachDebugger() {
-    if (!attached) {
-      return;
-    }
-    if (isSuspended()) {
-      resume(); // Necessary for JVMDI resumption
-    }
-    getAgent().detach();
-    // FIXME: clear out breakpoints (both Java and C/C++) from target
-    // process
-    sourceFileToLineNumberInfoMap = null;
-    fileToBreakpointMap = null;
-    threadToJavaThreadMap = null;
-    editors = null;
-    attached = false;
-  }
-
-  private synchronized void detach() {
-    detachDebugger();
-    setMenuItemsEnabled(attachMenuItems, true);
-    setMenuItemsEnabled(detachMenuItems, false);
-    debugMenu.setEnabled(false);
-    if (mdiMode) {
-      // FIXME: is this sufficient, or will I have to do anything else
-      // to the components to kill them off? What about WorkerThreads?
-      desktop.removeAll();
-      desktop.invalidate();
-      desktop.validate();
-      desktop.repaint();
-    }
-    // FIXME: keep track of all windows and close them even in non-MDI
-    // mode
-    debugEventTimer.stop();
-  }
-
-  // Returns a Debugger for processes on the local machine. This is
-  // only used to fetch the process list.
-  private Debugger getLocalDebugger() {
-    if (localDebugger == null) {
-      String os  = PlatformInfo.getOS();
-      String cpu = PlatformInfo.getCPU();
-
-      if (os.equals("win32")) {
-        if (!cpu.equals("x86")) {
-          throw new DebuggerException("Unsupported CPU \"" + cpu + "\" for Windows");
-        }
-
-        localDebugger = new WindbgDebuggerLocal(new MachineDescriptionIntelX86(), true);
-      } else if (os.equals("linux")) {
-        if (!cpu.equals("x86")) {
-          throw new DebuggerException("Unsupported CPU \"" + cpu + "\" for Linux");
-        }
-
-        // FIXME: figure out how to specify path to debugger module
-        throw new RuntimeException("FIXME: figure out how to specify path to debugger module");
-        //        localDebugger = new PosixDebuggerLocal(new MachineDescriptionIntelX86(), true);
-      } else {
-        // FIXME: port to Solaris
-        throw new DebuggerException("Unsupported OS \"" + os + "\"");
-      }
-
-      // FIXME: we require that the primitive type sizes be configured
-      // in order to use basic functionality in class Address such as
-      // the fetching of floating-point values. There are a lot of
-      // assumptions in the current code that Java floats and doubles
-      // are of equivalent size to C values. The configurability of the
-      // primitive type sizes hasn't seemed necessary and in this kind
-      // of debugging scenario (namely, debugging arbitrary C++
-      // processes) it appears difficult to support that kind of
-      // flexibility.
-      localDebugger.configureJavaPrimitiveTypeSizes(1, 1, 2, 8, 4, 4, 8, 2);
-    }
-
-    return localDebugger;
-  }
-
-  private BugSpotAgent getAgent() {
-    return agent;
-  }
-
-  private Debugger getDebugger() {
-    return getAgent().getDebugger();
-  }
-
-  private CDebugger getCDebugger() {
-    return getAgent().getCDebugger();
-  }
-
-  private void resetCurrentThread() {
-    setCurrentThread((ThreadProxy) getCDebugger().getThreadList().get(0));
-  }
-
-  private void setCurrentThread(ThreadProxy t) {
-    // Create stack trace
-    // FIXME: add ability to intermix C/Java frames
-    java.util.List trace = new ArrayList();
-    CFrame fr = getCDebugger().topFrameForThread(t);
-    while (fr != null) {
-      trace.add(new StackTraceEntry(fr, getCDebugger()));
-      try {
-        fr = fr.sender(t);
-      } catch (AddressException e) {
-        e.printStackTrace();
-        showMessageDialog("Error while walking stack; stack trace will be truncated\n(see console for details)",
-                          "Error walking stack",
-                          JOptionPane.WARNING_MESSAGE);
-        fr = null;
-      }
-    }
-    JavaThread jthread = javaThreadForProxy(t);
-    if (jthread != null) {
-      // Java mode, and we have a Java thread.
-      // Find all Java frames on the stack. We currently do this in a
-      // manner which involves minimal interaction between the Java
-      // and C/C++ debugging systems: any C frame which has a PC in an
-      // unknown location (i.e., not in any DSO) is assumed to be a
-      // Java frame. We merge stack segments of unknown frames with
-      // segments of Java frames beginning with native methods.
-      java.util.List javaTrace = new ArrayList();
-      VFrame vf = jthread.getLastJavaVFrameDbg();
-      while (vf != null) {
-        if (vf.isJavaFrame()) {
-          javaTrace.add(new StackTraceEntry((JavaVFrame) vf));
-          vf = vf.sender();
-        }
-      }
-      // Merge stack traces
-      java.util.List mergedTrace = new ArrayList();
-      int c = 0;
-      int j = 0;
-      while (c < trace.size()) {
-        StackTraceEntry entry = (StackTraceEntry) trace.get(c);
-        if (entry.isUnknownCFrame()) {
-          boolean gotJavaFrame = false;
-          while (j < javaTrace.size()) {
-            StackTraceEntry javaEntry = (StackTraceEntry) javaTrace.get(j);
-            JavaVFrame jvf = javaEntry.getJavaFrame();
-            Method m = jvf.getMethod();
-            if (!m.isNative() || !gotJavaFrame) {
-              gotJavaFrame = true;
-              mergedTrace.add(javaEntry);
-              ++j;
-            } else {
-              break; // Reached native method; have intervening C frames
-            }
-          }
-          if (gotJavaFrame) {
-            // Skip this sequence of unknown frames, as we've
-            // successfully identified it as Java frames
-            while (c < trace.size() && entry.isUnknownCFrame()) {
-              ++c;
-              if (c < trace.size()) {
-                entry = (StackTraceEntry) trace.get(c);
-              }
-            }
-            continue;
-          }
-        }
-        // If we get here, we either have an unknown frame we didn't
-        // know how to categorize or we have a known C frame. Add it
-        // to the trace.
-        mergedTrace.add(entry);
-        ++c;
-      }
-      trace = mergedTrace;
-    }
-    stackTracePanel.setTrace(trace);
-
-    registerPanel.update(t);
-  }
-
-  private void setCurrentFrame(CFrame fr, JavaVFrame jfr) {
-    localsPanel.clear();
-
-    if (fr != null) {
-      localsPanel.update(fr);
-
-      // FIXME: load source file if we can find it, otherwise display disassembly
-      LoadObject lo = getCDebugger().loadObjectContainingPC(fr.pc());
-      if (lo != null) {
-        CDebugInfoDataBase db = lo.getDebugInfoDataBase();
-        if (db != null) {
-          LineNumberInfo info = db.lineNumberForPC(fr.pc());
-          if (info != null) {
-            System.err.println("PC " + fr.pc() + ": Source file \"" +
-                               info.getSourceFileName() +
-                               "\", line number " +
-                               info.getLineNumber() +
-                               ", PC range [" +
-                               info.getStartPC() +
-                               ", " +
-                               info.getEndPC() +
-                               ")");
-            // OK, here we go...
-            showLineNumber(null, info.getSourceFileName(), info.getLineNumber());
-          } else {
-            System.err.println("(No line number information for PC " + fr.pc() + ")");
-            // Dump line number information for database
-            db.iterate(new LineNumberVisitor() {
-                public void doLineNumber(LineNumberInfo info) {
-                  System.err.println("  Source file \"" +
-                                     info.getSourceFileName() +
-                                     "\", line number " +
-                                     info.getLineNumber() +
-                                     ", PC range [" +
-                                     info.getStartPC() +
-                                     ", " +
-                                     info.getEndPC() +
-                                     ")");
-                }
-              });
-          }
-        }
-      }
-    } else {
-      if (Assert.ASSERTS_ENABLED) {
-        Assert.that(jfr != null, "Must have either C or Java frame");
-      }
-      localsPanel.update(jfr);
-      // See whether we can locate source file and line number
-      // FIXME: infer pathmap entries from user's locating of this
-      // source file
-      // FIXME: figure out what to do for native methods. Possible to
-      // go to line number for the native method declaration?
-      Method m = jfr.getMethod();
-      Symbol sfn = ((InstanceKlass) m.getMethodHolder()).getSourceFileName();
-      if (sfn != null) {
-        int bci = jfr.getBCI();
-        int lineNo = m.getLineNumberFromBCI(bci);
-        if (lineNo >= 0) {
-          // FIXME: show disassembly otherwise
-          showLineNumber(packageName(m.getMethodHolder().getName().asString()),
-                         sfn.asString(), lineNo);
-        }
-      }
-    }
-  }
-
-  private String packageName(String str) {
-    int idx = str.lastIndexOf('/');
-    if (idx < 0) {
-      return "";
-    }
-    return str.substring(0, idx).replace('/', '.');
-  }
-
-  private JavaThread javaThreadForProxy(ThreadProxy t) {
-    if (!getAgent().isJavaMode()) {
-      return null;
-    }
-    if (threadToJavaThreadMap == null) {
-      threadToJavaThreadMap = new HashMap();
-      Threads threads = VM.getVM().getThreads();
-      for (JavaThread thr = threads.first(); thr != null; thr = thr.next()) {
-        threadToJavaThreadMap.put(thr.getThreadProxy(), thr);
-      }
-    }
-    return (JavaThread) threadToJavaThreadMap.get(t);
-  }
-
-  private static JMenu createMenu(String name, char mnemonic, int mnemonicPos) {
-    JMenu menu = new JMenu(name);
-    menu.setMnemonic(mnemonic);
-    menu.setDisplayedMnemonicIndex(mnemonicPos);
-    return menu;
-  }
-
-  private static JMenuItem createMenuItem(String name, ActionListener l) {
-    JMenuItem item = new JMenuItem(name);
-    item.addActionListener(l);
-    return item;
-  }
-
-  private static JMenuItem createMenuItemInternal(String name, ActionListener l, int accelerator, int modifiers) {
-    JMenuItem item = createMenuItem(name, l);
-    item.setAccelerator(KeyStroke.getKeyStroke(accelerator, modifiers));
-    return item;
-  }
-
-  private static JMenuItem createMenuItem(String name, ActionListener l, int accelerator) {
-    return createMenuItemInternal(name, l, accelerator, 0);
-  }
-
-  private static JMenuItem createMenuItem(String name, ActionListener l, char mnemonic, int mnemonicPos) {
-    JMenuItem item = createMenuItem(name, l);
-    item.setMnemonic(mnemonic);
-    item.setDisplayedMnemonicIndex(mnemonicPos);
-    return item;
-  }
-
-  private static JMenuItem createMenuItem(String name,
-                                          ActionListener l,
-                                          int accelerator,
-                                          int acceleratorMods,
-                                          char mnemonic,
-                                          int mnemonicPos) {
-    JMenuItem item = createMenuItemInternal(name, l, accelerator, acceleratorMods);
-    item.setMnemonic(mnemonic);
-    item.setDisplayedMnemonicIndex(mnemonicPos);
-    return item;
-  }
-
-  /** Punctuates the given string with \n's where necessary to not
-      exceed the given number of characters per line. Strips
-      extraneous whitespace. */
-  private static String formatMessage(String message, int charsPerLine) {
-    StringBuffer buf = new StringBuffer(message.length());
-    StringTokenizer tokenizer = new StringTokenizer(message);
-    int curLineLength = 0;
-    while (tokenizer.hasMoreTokens()) {
-      String tok = tokenizer.nextToken();
-      if (curLineLength + tok.length() > charsPerLine) {
-        buf.append('\n');
-        curLineLength = 0;
-      } else {
-        if (curLineLength != 0) {
-          buf.append(' ');
-          ++curLineLength;
-        }
-      }
-      buf.append(tok);
-      curLineLength += tok.length();
-    }
-    return buf.toString();
-  }
-
-  private void setMenuItemsEnabled(java.util.List items, boolean enabled) {
-    for (Iterator iter = items.iterator(); iter.hasNext(); ) {
-      ((JMenuItem) iter.next()).setEnabled(enabled);
-    }
-  }
-
-  private void showMessageDialog(final String message, final String title, final int jOptionPaneKind) {
-    SwingUtilities.invokeLater(new Runnable() {
-        public void run() {
-          if (mdiMode) {
-            JOptionPane.showInternalMessageDialog(desktop, message, title, jOptionPaneKind);
-          } else {
-            JOptionPane.showMessageDialog(null, message, title, jOptionPaneKind);
-          }
-        }
-      });
-  }
-
-  private FrameWrapper newFrame(String title) {
-    if (mdiMode) {
-      return new JInternalFrameWrapper(new JInternalFrame(title));
-    } else {
-      return new JFrameWrapper(new JFrame(title));
-    }
-  }
-
-  private void addFrame(FrameWrapper frame) {
-    if (mdiMode) {
-      desktop.add(frame.getComponent());
-    }
-  }
-
-  private void removeFrame(FrameWrapper frame) {
-    if (mdiMode) {
-      desktop.remove(frame.getComponent());
-      desktop.invalidate();
-      desktop.validate();
-      desktop.repaint();
-    }
-    // FIXME: do something when not in MDI mode
-  }
-
-  private Dimension getParentDimension(Component c) {
-    if (mdiMode) {
-      return desktop.getSize();
-    } else {
-      return Toolkit.getDefaultToolkit().getScreenSize();
-    }
-  }
-
-  // Default editor implementation
-  class DefaultEditor implements Editor {
-    private DefaultEditorFactory factory;
-    private FrameWrapper    editorFrame;
-    private String          filename;
-    private SourceCodePanel code;
-    private boolean         shown;
-    private Object          userData;
-
-    public DefaultEditor(DefaultEditorFactory fact, String filename, final EditorCommands comm) {
-      this.filename = filename;
-      this.factory = fact;
-      editorFrame = newFrame(filename);
-      code = new SourceCodePanel();
-      // FIXME: when font changes, change font in editors as well
-      code.setFont(fixedWidthFont);
-      editorFrame.getContentPane().add(code);
-      editorFrame.setClosable(true);
-      editorFrame.setResizable(true);
-      editorFrame.setClosingActionListener(new ActionListener() {
-          public void actionPerformed(ActionEvent e) {
-            comm.windowClosed(DefaultEditor.this);
-            removeFrame(editorFrame);
-            editorFrame.dispose();
-            factory.editorClosed(DefaultEditor.this);
-          }
-        });
-      editorFrame.setActivatedActionListener(new ActionListener() {
-          public void actionPerformed(ActionEvent e) {
-            factory.makeEditorCurrent(DefaultEditor.this);
-            code.requestFocus();
-          }
-        });
-      code.setEditorCommands(comm, this);
-    }
-
-    public boolean openFile()                        { return code.openFile(filename);     }
-    public String  getSourceFileName()               { return filename;                    }
-    public int     getCurrentLineNumber()            { return code.getCurrentLineNumber(); }
-    public void showLineNumber(int lineNo) {
-      if (!shown) {
-        addFrame(editorFrame);
-        GraphicsUtilities.reshapeToAspectRatio(editorFrame.getComponent(),
-                                               1.0f,
-                                               0.85f,
-                                               getParentDimension(editorFrame.getComponent()));
-        editorFrame.setVisible(true);
-        shown = true;
-      }
-      code.showLineNumber(lineNo);
-      editorFrame.toFront();
-    }
-    public void    highlightLineNumber(int lineNo)   { code.highlightLineNumber(lineNo);        }
-    public void    showBreakpointAtLine(int lineNo)  { code.showBreakpointAtLine(lineNo);       }
-    public boolean hasBreakpointAtLine(int lineNo)   { return code.hasBreakpointAtLine(lineNo); }
-    public void    clearBreakpointAtLine(int lineNo) { code.clearBreakpointAtLine(lineNo);      }
-    public void    clearBreakpoints()                { code.clearBreakpoints();                 }
-    public void    setUserData(Object o)             { userData = o;                            }
-    public Object  getUserData()                     { return userData;                         }
-    public void    toFront()                         { editorFrame.toFront();
-                                                       factory.makeEditorCurrent(this);         }
-  }
-
-  class DefaultEditorFactory implements EditorFactory {
-    private LinkedList/*<Editor>*/ editors = new LinkedList();
-
-    public Editor openFile(String filename, EditorCommands commands) {
-      DefaultEditor editor = new DefaultEditor(this, filename, editorComm);
-      if (!editor.openFile()) {
-        return null;
-      }
-      return editor;
-    }
-
-    public Editor getCurrentEditor() {
-      if (editors.isEmpty()) {
-        return null;
-      }
-      return (Editor) editors.getFirst();
-    }
-
-    void editorClosed(Editor editor) {
-      editors.remove(editor);
-    }
-
-    void makeEditorCurrent(Editor editor) {
-      editors.remove(editor);
-      editors.addFirst(editor);
-    }
-  }
-
-  // Helper class for loading .java files; show only those with
-  // correct file name which are also in the correct package
-  static class JavaFileFilter extends javax.swing.filechooser.FileFilter {
-    private String packageName;
-    private String fileName;
-
-    JavaFileFilter(String packageName, String fileName) {
-      this.packageName = packageName;
-      this.fileName = fileName;
-    }
-
-    public boolean accept(File f) {
-      if (f.isDirectory()) {
-        return true;
-      }
-      // This rejects most files
-      if (!f.getName().equals(fileName)) {
-        return false;
-      }
-      // Ensure selected file is in the correct package
-      PackageScanner scanner = new PackageScanner();
-      String pkg = scanner.scan(f);
-      if (!pkg.equals(packageName)) {
-        return false;
-      }
-      return true;
-    }
-
-    public String getDescription() { return "Java source files"; }
-  }
-
-  // Auxiliary information used only for Java source files
-  static class JavaUserData {
-    private String packageName; // External format
-    private String sourceFileName;
-
-    /** Source file name is equivalent to that found in the .java
-        file; i.e., not a full path */
-    JavaUserData(String packageName, String sourceFileName) {
-      this.packageName = packageName;
-      this.sourceFileName = sourceFileName;
-    }
-
-    String packageName()    { return packageName; }
-    String sourceFileName() { return sourceFileName; }
-  }
-
-  // Opens a source file. This makes it available for the setting of
-  // lazy breakpoints.
-  private void openSourceFile() {
-    JFileChooser chooser = new JFileChooser();
-    chooser.setDialogTitle("Open source code file");
-    chooser.setMultiSelectionEnabled(false);
-    if (chooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION) {
-      return;
-    }
-    File chosen = chooser.getSelectedFile();
-    if (chosen == null) {
-      return;
-    }
-
-    // See whether we have a Java source file. If so, derive a package
-    // name for it.
-    String path = chosen.getPath();
-    String name = null;
-    JavaUserData data = null;
-    if (path.endsWith(".java")) {
-      PackageScanner scanner = new PackageScanner();
-      String pkg = scanner.scan(chosen);
-      // Now knowing both the package name and file name, we can put
-      // this in the editor map and use it for setting breakpoints
-      // later
-      String fileName = chosen.getName();
-      name = pkg + "." + fileName;
-      data = new JavaUserData(pkg, fileName);
-    } else {
-      // FIXME: need pathmap mechanism
-      name = path;
-    }
-    Editor editor = (Editor) editors.get(name);
-    if (editor == null) {
-      editor = editorFact.openFile(path, editorComm);
-      if (editor == null) {
-        showMessageDialog("Unable to open file \"" + path + "\" -- unexpected error.",
-                          "Unable to open file",
-                          JOptionPane.WARNING_MESSAGE);
-        return;
-      }
-      editors.put(name, editor);
-      if (data != null) {
-        editor.setUserData(data);
-      }
-    } else {
-      editor.toFront();
-    }
-    editor.showLineNumber(1);
-    // Show breakpoints as well if we have any for this file
-    Set set = (Set) fileToBreakpointMap.get(editor.getSourceFileName());
-    if (set != null) {
-      for (Iterator iter = set.iterator(); iter.hasNext(); ) {
-        editor.showBreakpointAtLine(((Integer) iter.next()).intValue());
-      }
-    }
-  }
-
-  // Package name may be null, in which case the file is assumed to be
-  // a C source file. Otherwise it is assumed to be a Java source file
-  // and certain filtering rules will be applied.
-  private void showLineNumber(String packageName, String fileName, int lineNumber) {
-    String name;
-    if (packageName == null) {
-      name = fileName;
-    } else {
-      name = packageName + "." + fileName;
-    }
-    Editor editor = (Editor) editors.get(name);
-    if (editor == null) {
-      // See whether file exists
-      File file = new File(fileName);
-      String realFileName = fileName;
-      if (!file.exists()) {
-        // User must specify path to file
-        JFileChooser chooser = new JFileChooser();
-        chooser.setDialogTitle("Please locate " + fileName);
-        chooser.setMultiSelectionEnabled(false);
-        if (packageName != null) {
-          chooser.setFileFilter(new JavaFileFilter(packageName, fileName));
-        }
-        int res = chooser.showOpenDialog(null);
-        if (res != JFileChooser.APPROVE_OPTION) {
-          // FIXME: show disassembly instead
-          return;
-        }
-        // FIXME: would like to infer more from the selection; i.e.,
-        // a pathmap leading up to this file
-        File chosen = chooser.getSelectedFile();
-        if (chosen == null) {
-          return;
-        }
-        realFileName = chosen.getPath();
-      }
-      // Now instruct editor factory to open file
-      editor = editorFact.openFile(realFileName, editorComm);
-      if (editor == null) {
-        showMessageDialog("Unable to open file \"" + realFileName + "\" -- unexpected error.",
-                          "Unable to open file",
-                          JOptionPane.WARNING_MESSAGE);
-        return;
-      }
-      // Got an editor; put it in map
-      editors.put(name, editor);
-      // If Java source file, add additional information for later
-      if (packageName != null) {
-        editor.setUserData(new JavaUserData(packageName, fileName));
-      }
-    }
-    // Got editor; show line
-    editor.showLineNumber(lineNumber);
-    editor.highlightLineNumber(lineNumber);
-    // Show breakpoints as well if we have any for this file
-    Set set = (Set) fileToBreakpointMap.get(editor.getSourceFileName());
-    if (set != null) {
-      for (Iterator iter = set.iterator(); iter.hasNext(); ) {
-        editor.showBreakpointAtLine(((Integer) iter.next()).intValue());
-      }
-    }
-  }
-
-  //
-  // Suspend/resume
-  //
-
-  private boolean isSuspended() {
-    return suspended;
-  }
-
-  private synchronized void suspend() {
-    setMenuItemsEnabled(resumeDebugMenuItems, true);
-    setMenuItemsEnabled(suspendDebugMenuItems, false);
-    BugSpotAgent agent = getAgent();
-    if (agent.canInteractWithJava() && !agent.isJavaSuspended()) {
-      agent.suspendJava();
-    }
-    agent.suspend();
-    // FIXME: call VM.getVM().fireVMSuspended()
-    resetCurrentThread();
-    debugEventTimer.stop();
-    suspended = true;
-  }
-
-  private synchronized void resume() {
-    // Note: we don't wipe out the cached state like the
-    // sourceFileToLineNumberInfoMap since it is too expensive to
-    // recompute. Instead we recompute it if any DLLs are loaded or
-    // unloaded.
-    threadToJavaThreadMap = null;
-    setMenuItemsEnabled(resumeDebugMenuItems, false);
-    setMenuItemsEnabled(suspendDebugMenuItems, true);
-    registerPanel.clear();
-    // FIXME: call VM.getVM().fireVMResumed()
-    BugSpotAgent agent = getAgent();
-    agent.resume();
-    if (agent.canInteractWithJava()) {
-      if (agent.isJavaSuspended()) {
-        agent.resumeJava();
-      }
-      if (javaEventPending) {
-        javaEventPending = false;
-        // Clear it out before resuming polling for events
-        agent.javaEventContinue();
-      }
-    }
-    agent.enableJavaInteraction();
-    suspended = false;
-    debugEventTimer.start();
-  }
-
-  //
-  // Breakpoints
-  //
-
-  private synchronized BreakpointResult handleBreakpointToggle(Editor editor, int lineNumber) {
-    // Currently we only use user data in editors to indicate Java
-    // source files. If this changes then this code will need to
-    // change.
-    JavaUserData data = (JavaUserData) editor.getUserData();
-    String filename = editor.getSourceFileName();
-    if (data == null) {
-      // C/C++ code
-      // FIXME: as noted above in EditorCommands.toggleBreakpointAtLine,
-      // this needs more work to handle "lazy" breakpoints in files
-      // which we don't know about in the debug information yet
-      CDebugger dbg = getCDebugger();
-      ProcessControl prctl = dbg.getProcessControl();
-      if (prctl == null) {
-        return new BreakpointResult(false, false, 0, "Process control not enabled");
-      }
-      boolean mustSuspendAndResume = (!prctl.isSuspended());
-      try {
-        if (mustSuspendAndResume) {
-          prctl.suspend();
-        }
-        // Search debug info for all DSOs
-        LineNumberInfo info = getLineNumberInfo(filename, lineNumber);
-        if (info != null) {
-          Set bpset = (Set) fileToBreakpointMap.get(filename);
-          if (bpset == null) {
-            bpset = new HashSet();
-            fileToBreakpointMap.put(filename, bpset);
-          }
-          Integer key = new Integer(info.getLineNumber());
-          if (bpset.contains(key)) {
-            // Clear breakpoint at this line's PC
-            prctl.clearBreakpoint(info.getStartPC());
-            bpset.remove(key);
-            return new BreakpointResult(true, false, info.getLineNumber());
-          } else {
-            // Set breakpoint at this line's PC
-            System.err.println("Setting breakpoint at PC " + info.getStartPC());
-            prctl.setBreakpoint(info.getStartPC());
-            bpset.add(key);
-            return new BreakpointResult(true, true, info.getLineNumber());
-          }
-        } else {
-          return new BreakpointResult(false, false, 0, "No debug information for this source file and line");
-        }
-      } finally {
-        if (mustSuspendAndResume) {
-          prctl.resume();
-        }
-      }
-    } else {
-      BugSpotAgent agent = getAgent();
-      if (!agent.canInteractWithJava()) {
-        String why;
-        if (agent.isJavaInteractionDisabled()) {
-          why = "Can not toggle Java breakpoints while stopped because\nof C/C++ debug events (breakpoints, single-stepping)";
-        } else {
-          why = "Could not talk to SA's JVMDI module to enable Java\nprogramming language breakpoints (run with -Xdebug -Xrunsa)";
-        }
-        return new BreakpointResult(false, false, 0, why);
-      }
-      Set bpset = (Set) fileToBreakpointMap.get(filename);
-      if (bpset == null) {
-        bpset = new HashSet();
-        fileToBreakpointMap.put(filename, bpset);
-      }
-      boolean mustResumeAndSuspend = isSuspended();
-      try {
-        if (mustResumeAndSuspend) {
-          agent.resume();
-        }
-        ServiceabilityAgentJVMDIModule.BreakpointToggleResult res =
-          getAgent().toggleJavaBreakpoint(data.sourceFileName(),
-                                          data.packageName(),
-                                          lineNumber);
-        if (res.getSuccess()) {
-          Integer key = new Integer(res.getLineNumber());
-          boolean addRemRes = false;
-          if (res.getWasSet()) {
-            addRemRes = bpset.add(key);
-            System.err.println("Setting breakpoint at " + res.getMethodName() + res.getMethodSignature() +
-                               ", bci " + res.getBCI() + ", line " + res.getLineNumber());
-          } else {
-            addRemRes = bpset.remove(key);
-            System.err.println("Clearing breakpoint at " + res.getMethodName() + res.getMethodSignature() +
-                               ", bci " + res.getBCI() + ", line " + res.getLineNumber());
-          }
-          if (Assert.ASSERTS_ENABLED) {
-            Assert.that(addRemRes, "Inconsistent Java breakpoint state with respect to target process");
-          }
-          return new BreakpointResult(true, res.getWasSet(), res.getLineNumber());
-        } else {
-          return new BreakpointResult(false, false, 0, res.getErrMsg());
-        }
-      } finally {
-        if (mustResumeAndSuspend) {
-          agent.suspend();
-          resetCurrentThread();
-        }
-      }
-    }
-  }
-
-  // Must call only when suspended
-  private LineNumberInfo getLineNumberInfo(String filename, int lineNumber) {
-    Map map = getSourceFileToLineNumberInfoMap();
-    java.util.List infos = (java.util.List) map.get(filename);
-    if (infos == null) {
-      return null;
-    }
-    // Binary search for line number
-    return searchLineNumbers(infos, lineNumber, 0, infos.size());
-  }
-
-  // Must call only when suspended
-  private Map getSourceFileToLineNumberInfoMap() {
-    if (sourceFileToLineNumberInfoMap == null) {
-      // Build from debug info
-      java.util.List loadObjects = getCDebugger().getLoadObjectList();
-      final Map map = new HashMap();
-      for (Iterator iter = loadObjects.iterator(); iter.hasNext(); ) {
-        LoadObject lo = (LoadObject) iter.next();
-        CDebugInfoDataBase db = lo.getDebugInfoDataBase();
-        if (db != null) {
-          db.iterate(new LineNumberVisitor() {
-              public void doLineNumber(LineNumberInfo info) {
-                String name = info.getSourceFileName();
-                if (name != null) {
-                  java.util.List val = (java.util.List) map.get(name);
-                  if (val == null) {
-                    val = new ArrayList();
-                    map.put(name, val);
-                  }
-                  val.add(info);
-                }
-              }
-            });
-        }
-      }
-      // Sort all lists
-      for (Iterator iter = map.values().iterator(); iter.hasNext(); ) {
-        java.util.List list = (java.util.List) iter.next();
-        Collections.sort(list, new Comparator() {
-            public int compare(Object o1, Object o2) {
-              LineNumberInfo l1 = (LineNumberInfo) o1;
-              LineNumberInfo l2 = (LineNumberInfo) o2;
-              int n1 = l1.getLineNumber();
-              int n2 = l2.getLineNumber();
-              if (n1 < n2) return -1;
-              if (n1 == n2) return 0;
-              return 1;
-            }
-          });
-      }
-      sourceFileToLineNumberInfoMap = map;
-    }
-    return sourceFileToLineNumberInfoMap;
-  }
-
-  private LineNumberInfo searchLineNumbers(java.util.List infoList, int lineNo, int lowIdx, int highIdx) {
-    if (highIdx < lowIdx) return null;
-    if (lowIdx == highIdx) {
-      // Base case: see whether start PC is less than or equal to addr
-      if (checkLineNumber(infoList, lineNo, lowIdx)) {
-        return (LineNumberInfo) infoList.get(lowIdx);
-      } else {
-        return null;
-      }
-    } else if (lowIdx == highIdx - 1) {
-      if (checkLineNumber(infoList, lineNo, lowIdx)) {
-        return (LineNumberInfo) infoList.get(lowIdx);
-      } else if (checkLineNumber(infoList, lineNo, highIdx)) {
-        return (LineNumberInfo) infoList.get(highIdx);
-      } else {
-        return null;
-      }
-    }
-    int midIdx = (lowIdx + highIdx) >> 1;
-    LineNumberInfo info = (LineNumberInfo) infoList.get(midIdx);
-    if (lineNo < info.getLineNumber()) {
-      // Always move search down
-      return searchLineNumbers(infoList, lineNo, lowIdx, midIdx);
-    } else if (lineNo == info.getLineNumber()) {
-      return info;
-    } else {
-      // Move search up
-      return searchLineNumbers(infoList, lineNo, midIdx, highIdx);
-    }
-  }
-
-  private boolean checkLineNumber(java.util.List infoList, int lineNo, int idx) {
-    LineNumberInfo info = (LineNumberInfo) infoList.get(idx);
-    return (info.getLineNumber() >= lineNo);
-  }
-
-  //
-  // Debug events
-  //
-
-  private synchronized void pollForDebugEvent() {
-    ProcessControl prctl = getCDebugger().getProcessControl();
-    if (prctl == null) {
-      return;
-    }
-    DebugEvent ev = prctl.debugEventPoll();
-    if (ev != null) {
-      DebugEvent.Type t = ev.getType();
-      if (t == DebugEvent.Type.LOADOBJECT_LOAD ||
-          t == DebugEvent.Type.LOADOBJECT_UNLOAD) {
-        // Conservatively clear cached debug info state
-        sourceFileToLineNumberInfoMap = null;
-        // FIXME: would be very useful to have "stop on load/unload"
-        // events
-        // FIXME: must do work at these events to implement lazy
-        // breakpoints
-        prctl.debugEventContinue();
-      } else if (t == DebugEvent.Type.BREAKPOINT) {
-        // Note: Visual C++ only notifies on breakpoints it doesn't
-        // know about
-
-        // FIXME: put back test
-        //        if (!prctl.isBreakpointSet(ev.getPC())) {
-          showMessageDialog("Breakpoint reached at PC " + ev.getPC(),
-                            "Breakpoint reached",
-                            JOptionPane.INFORMATION_MESSAGE);
-          //        }
-        agent.disableJavaInteraction();
-        suspend();
-        prctl.debugEventContinue();
-      } else if (t == DebugEvent.Type.SINGLE_STEP) {
-        agent.disableJavaInteraction();
-        suspend();
-        prctl.debugEventContinue();
-      } else if (t == DebugEvent.Type.ACCESS_VIOLATION) {
-        showMessageDialog("Access violation attempting to " +
-                          (ev.getWasWrite() ? "write" : "read") +
-                          " address " + ev.getAddress() +
-                          " at PC " + ev.getPC(),
-                          "Access Violation",
-                          JOptionPane.WARNING_MESSAGE);
-        agent.disableJavaInteraction();
-        suspend();
-        prctl.debugEventContinue();
-      } else {
-        String info = "Unknown debug event encountered";
-        if (ev.getUnknownEventDetail() != null) {
-          info = info + ": " + ev.getUnknownEventDetail();
-        }
-        showMessageDialog(info, "Unknown debug event", JOptionPane.INFORMATION_MESSAGE);
-        suspend();
-        prctl.debugEventContinue();
-      }
-      return;
-    }
-
-    // No C++ debug event; poll for Java debug event
-    if (getAgent().canInteractWithJava()) {
-      if (!javaEventPending) {
-        if (getAgent().javaEventPending()) {
-          suspend();
-          // This does a lot of work and we want to have the page
-          // cache available to us as it runs
-          sun.jvm.hotspot.livejvm.Event jev = getAgent().javaEventPoll();
-          if (jev != null) {
-            javaEventPending = true;
-            if (jev.getType() == sun.jvm.hotspot.livejvm.Event.Type.BREAKPOINT) {
-              BreakpointEvent bpev = (BreakpointEvent) jev;
-              showMessageDialog("Breakpoint reached in method\n" +
-                                bpev.methodID().method().externalNameAndSignature() +
-                                ",\nbci " + bpev.location(),
-                                "Breakpoint reached",
-                                JOptionPane.INFORMATION_MESSAGE);
-            } else if (jev.getType() == sun.jvm.hotspot.livejvm.Event.Type.EXCEPTION) {
-              ExceptionEvent exev = (ExceptionEvent) jev;
-              showMessageDialog(exev.exception().getKlass().getName().asString() +
-                                "\nthrown in method\n" +
-                                exev.methodID().method().externalNameAndSignature() +
-                                "\nat BCI " + exev.location(),
-                                "Exception thrown",
-                                JOptionPane.INFORMATION_MESSAGE);
-            } else {
-              Assert.that(false, "Should not reach here");
-            }
-          }
-        }
-      }
-    }
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,799 +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.bugspot;
-
-import java.io.PrintStream;
-import java.net.*;
-import java.rmi.*;
-import sun.jvm.hotspot.*;
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.bsd.*;
-import sun.jvm.hotspot.debugger.proc.*;
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.debugger.windbg.*;
-import sun.jvm.hotspot.debugger.linux.*;
-import sun.jvm.hotspot.debugger.sparc.*;
-import sun.jvm.hotspot.debugger.remote.*;
-import sun.jvm.hotspot.livejvm.*;
-import sun.jvm.hotspot.memory.*;
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.runtime.*;
-import sun.jvm.hotspot.types.*;
-import sun.jvm.hotspot.utilities.*;
-
-/** <P> This class wraps the basic functionality for connecting to the
- * target process or debug server. It makes it simple to start up the
- * debugging system. </P>
- *
- * <P> This agent (as compared to the HotSpotAgent) can connect to
- * and interact with arbitrary processes. If the target process
- * happens to be a HotSpot JVM, the Java debugging features of the
- * Serviceability Agent are enabled. Further, if the Serviceability
- * Agent's JVMDI module is loaded into the target VM, interaction
- * with the live Java program is possible, specifically the catching
- * of exceptions and setting of breakpoints. </P>
- *
- * <P> The BugSpot debugger requires that the underlying Debugger
- * support C/C++ debugging via the CDebugger interface. </P>
- *
- * <P> FIXME: especially with the addition of remote debugging, this
- * has turned into a mess; needs rethinking. </P> */
-
-public class BugSpotAgent {
-
-    private JVMDebugger debugger;
-    private MachineDescription machDesc;
-    private TypeDataBase db;
-
-    private String os;
-    private String cpu;
-    private String fileSep;
-
-    // The system can work in several ways:
-    //  - Attaching to local process
-    //  - Attaching to local core file
-    //  - Connecting to remote debug server
-    //  - Starting debug server for process
-    //  - Starting debug server for core file
-
-    // These are options for the "client" side of things
-    private static final int PROCESS_MODE   = 0;
-    private static final int CORE_FILE_MODE = 1;
-    private static final int REMOTE_MODE    = 2;
-    private int startupMode;
-
-    // This indicates whether we are really starting a server or not
-    private boolean isServer;
-
-    // All possible required information for connecting
-    private int pid;
-    private String executableName;
-    private String coreFileName;
-    private String debugServerID;
-
-    // All needed information for server side
-    private String serverID;
-
-    // Indicates whether we are attached to a HotSpot JVM or not
-    private boolean javaMode;
-
-    // Indicates whether we have process control over a live HotSpot JVM
-    // or not; non-null if so.
-    private ServiceabilityAgentJVMDIModule jvmdi;
-    // While handling C breakpoints interactivity with the Java program
-    // is forbidden. Too many invariants are broken while the target is
-    // stopped at a C breakpoint to risk making JVMDI calls.
-    private boolean javaInteractionDisabled;
-
-    private String[] jvmLibNames;
-    private String[] saLibNames;
-
-    // FIXME: make these configurable, i.e., via a dotfile; also
-    // consider searching within the JDK from which this Java executable
-    // comes to find them
-    private static final String defaultDbxPathPrefix                = "/net/jano.eng/export/disk05/hotspot/sa";
-    private static final String defaultDbxSvcAgentDSOPathPrefix     = "/net/jano.eng/export/disk05/hotspot/sa";
-
-    private static final boolean DEBUG;
-    static {
-        DEBUG = System.getProperty("sun.jvm.hotspot.bugspot.BugSpotAgent.DEBUG")
-        != null;
-    }
-
-    static void debugPrintln(String str) {
-        if (DEBUG) {
-            System.err.println(str);
-        }
-    }
-
-    static void showUsage() {
-        System.out.println("    You can also pass these -D options to java to specify where to find dbx and the \n" +
-        "    Serviceability Agent plugin for dbx:");
-        System.out.println("       -DdbxPathName=<path-to-dbx-executable>\n" +
-        "             Default is derived from dbxPathPrefix");
-        System.out.println("    or");
-        System.out.println("       -DdbxPathPrefix=<xxx>\n" +
-        "             where xxx is the path name of a dir structure that contains:\n" +
-        "                   <os>/<arch>/bin/dbx\n" +
-        "             The default is " + defaultDbxPathPrefix);
-        System.out.println("    and");
-        System.out.println("       -DdbxSvcAgentDSOPathName=<path-to-dbx-serviceability-agent-module>\n" +
-        "             Default is determined from dbxSvcAgentDSOPathPrefix");
-        System.out.println("    or");
-        System.out.println("       -DdbxSvcAgentDSOPathPrefix=<xxx>\n" +
-        "             where xxx is the pathname of a dir structure that contains:\n" +
-        "                   <os>/<arch>/bin/lib/libsvc_agent_dbx.so\n" +
-        "             The default is " + defaultDbxSvcAgentDSOPathPrefix);
-    }
-
-    public BugSpotAgent() {
-        // for non-server add shutdown hook to clean-up debugger in case
-        // of forced exit. For remote server, shutdown hook is added by
-        // DebugServer.
-        Runtime.getRuntime().addShutdownHook(new java.lang.Thread(
-        new Runnable() {
-            public void run() {
-                synchronized (BugSpotAgent.this) {
-                    if (!isServer) {
-                        detach();
-                    }
-                }
-            }
-        }));
-    }
-
-    //--------------------------------------------------------------------------------
-    // Accessors (once the system is set up)
-    //
-
-    public synchronized Debugger getDebugger() {
-        return debugger;
-    }
-
-    public synchronized CDebugger getCDebugger() {
-        return getDebugger().getCDebugger();
-    }
-
-    public synchronized ProcessControl getProcessControl() {
-        return getCDebugger().getProcessControl();
-    }
-
-    public synchronized TypeDataBase getTypeDataBase() {
-        return db;
-    }
-
-    /** Indicates whether the target process is suspended
-      completely. Equivalent to getProcessControl().isSuspended(). */
-    public synchronized boolean isSuspended() throws DebuggerException {
-        return getProcessControl().isSuspended();
-    }
-
-    /** Suspends the target process completely. Equivalent to
-      getProcessControl().suspend(). */
-    public synchronized void suspend() throws DebuggerException {
-        getProcessControl().suspend();
-    }
-
-    /** Resumes the target process completely. Equivalent to
-      getProcessControl().suspend(). */
-    public synchronized void resume() throws DebuggerException {
-        getProcessControl().resume();
-    }
-
-    /** Indicates whether we are attached to a Java HotSpot virtual
-      machine */
-    public synchronized boolean isJavaMode() {
-        return javaMode;
-    }
-
-    /** Temporarily disables interaction with the target process via
-      JVMDI. This is done while the target process is stopped at a C
-      breakpoint. Can be called even if the JVMDI agent has not been
-      initialized. */
-    public synchronized void disableJavaInteraction() {
-        javaInteractionDisabled = true;
-    }
-
-    /** Re-enables interaction with the target process via JVMDI. This
-      is done while the target process is continued past a C
-      braekpoint. Can be called even if the JVMDI agent has not been
-      initialized. */
-    public synchronized void enableJavaInteraction() {
-        javaInteractionDisabled = false;
-    }
-
-    /** Indicates whether Java interaction has been disabled */
-    public synchronized boolean isJavaInteractionDisabled() {
-        return javaInteractionDisabled;
-    }
-
-    /** Indicates whether we can talk to the Serviceability Agent's
-      JVMDI module to be able to set breakpoints */
-    public synchronized boolean canInteractWithJava() {
-        return (jvmdi != null) && !javaInteractionDisabled;
-    }
-
-    /** Suspends all Java threads in the target process. Can only be
-      called if we are attached to a HotSpot JVM and can connect to
-      the SA's JVMDI module. Must not be called when the target
-      process has been suspended with suspend(). */
-    public synchronized void suspendJava() throws DebuggerException {
-        if (!canInteractWithJava()) {
-            throw new DebuggerException("Could not connect to SA's JVMDI module");
-        }
-        if (jvmdi.isSuspended()) {
-            throw new DebuggerException("Target process already suspended via JVMDI");
-        }
-        jvmdi.suspend();
-    }
-
-    /** Resumes all Java threads in the target process. Can only be
-      called if we are attached to a HotSpot JVM and can connect to
-      the SA's JVMDI module. Must not be called when the target
-      process has been suspended with suspend(). */
-    public synchronized void resumeJava() throws DebuggerException {
-        if (!canInteractWithJava()) {
-            throw new DebuggerException("Could not connect to SA's JVMDI module");
-        }
-        if (!jvmdi.isSuspended()) {
-            throw new DebuggerException("Target process already resumed via JVMDI");
-        }
-        jvmdi.resume();
-    }
-
-    /** Indicates whether the target process has been suspended at the
-      Java language level via the SA's JVMDI module */
-    public synchronized boolean isJavaSuspended() throws DebuggerException {
-        return jvmdi.isSuspended();
-    }
-
-    /** Toggle a Java breakpoint at the given location. */
-    public synchronized ServiceabilityAgentJVMDIModule.BreakpointToggleResult
-    toggleJavaBreakpoint(String srcFileName,
-    String pkgName,
-    int lineNo) {
-        if (!canInteractWithJava()) {
-            throw new DebuggerException("Could not connect to SA's JVMDI module; can not toggle Java breakpoints");
-        }
-        return jvmdi.toggleBreakpoint(srcFileName, pkgName, lineNo);
-    }
-
-    /** Access to JVMDI module's eventPending */
-    public synchronized boolean javaEventPending() throws DebuggerException {
-        if (!canInteractWithJava()) {
-            throw new DebuggerException("Could not connect to SA's JVMDI module; can not poll for Java debug events");
-        }
-        return jvmdi.eventPending();
-    }
-
-    /** Access to JVMDI module's eventPoll */
-    public synchronized Event javaEventPoll() throws DebuggerException {
-        if (!canInteractWithJava()) {
-            throw new DebuggerException("Could not connect to SA's JVMDI module; can not poll for Java debug events");
-        }
-        return jvmdi.eventPoll();
-    }
-
-    /** Access to JVMDI module's eventContinue */
-    public synchronized void javaEventContinue() throws DebuggerException {
-        if (!canInteractWithJava()) {
-            throw new DebuggerException("Could not connect to SA's JVMDI module; can not continue past Java debug events");
-        }
-        jvmdi.eventContinue();
-    }
-
-
-    // FIXME: add other accessors. For example, suspension and
-    // resumption should be done through this interface, as well as
-    // interaction with the live Java process such as breakpoint setting.
-    // Probably should not expose the ServiceabilityAgentJVMDIModule
-    // from this interface.
-
-    //--------------------------------------------------------------------------------
-    // Client-side operations
-    //
-
-    /** This attaches to a process running on the local machine. */
-    public synchronized void attach(int processID)
-    throws DebuggerException {
-        if (debugger != null) {
-            throw new DebuggerException("Already attached");
-        }
-        pid = processID;
-        startupMode = PROCESS_MODE;
-        isServer = false;
-        go();
-    }
-
-    /** This opens a core file on the local machine */
-    public synchronized void attach(String executableName, String coreFileName)
-    throws DebuggerException {
-        if (debugger != null) {
-            throw new DebuggerException("Already attached");
-        }
-        if ((executableName == null) || (coreFileName == null)) {
-            throw new DebuggerException("Both the core file name and executable name must be specified");
-        }
-        this.executableName = executableName;
-        this.coreFileName = coreFileName;
-        startupMode = CORE_FILE_MODE;
-        isServer = false;
-        go();
-    }
-
-    /** This attaches to a "debug server" on a remote machine; this
-      remote server has already attached to a process or opened a
-      core file and is waiting for RMI calls on the Debugger object to
-      come in. */
-    public synchronized void attach(String remoteServerID)
-    throws DebuggerException {
-        if (debugger != null) {
-            throw new DebuggerException("Already attached to a process");
-        }
-        if (remoteServerID == null) {
-            throw new DebuggerException("Debug server id must be specified");
-        }
-
-        debugServerID = remoteServerID;
-        startupMode = REMOTE_MODE;
-        isServer = false;
-        go();
-    }
-
-    /** This should only be called by the user on the client machine,
-      not the server machine */
-    public synchronized boolean detach() throws DebuggerException {
-        if (isServer) {
-            throw new DebuggerException("Should not call detach() for server configuration");
-        }
-        return detachInternal();
-    }
-
-    //--------------------------------------------------------------------------------
-    // Server-side operations
-    //
-
-    /** This attaches to a process running on the local machine and
-      starts a debug server, allowing remote machines to connect and
-      examine this process. uniqueID is used to uniquely identify the
-      debuggee */
-    public synchronized void startServer(int processID, String uniqueID)
-    throws DebuggerException {
-        if (debugger != null) {
-            throw new DebuggerException("Already attached");
-        }
-        pid = processID;
-        startupMode = PROCESS_MODE;
-        isServer = true;
-        serverID = uniqueID;
-        go();
-    }
-
-    /** This attaches to a process running on the local machine and
-      starts a debug server, allowing remote machines to connect and
-      examine this process. */
-    public synchronized void startServer(int processID)
-    throws DebuggerException {
-        startServer(processID, null);
-    }
-
-    /** This opens a core file on the local machine and starts a debug
-      server, allowing remote machines to connect and examine this
-      core file. uniqueID is used to uniquely identify the
-      debuggee */
-    public synchronized void startServer(String executableName, String coreFileName,
-    String uniqueID)
-    throws DebuggerException {
-        if (debugger != null) {
-            throw new DebuggerException("Already attached");
-        }
-        if ((executableName == null) || (coreFileName == null)) {
-            throw new DebuggerException("Both the core file name and Java executable name must be specified");
-        }
-        this.executableName = executableName;
-        this.coreFileName = coreFileName;
-        startupMode = CORE_FILE_MODE;
-        isServer = true;
-        serverID = uniqueID;
-        go();
-    }
-
-    /** This opens a core file on the local machine and starts a debug
-      server, allowing remote machines to connect and examine this
-      core file.*/
-    public synchronized void startServer(String executableName, String coreFileName)
-    throws DebuggerException {
-        startServer(executableName, coreFileName, null);
-    }
-
-    /** This may only be called on the server side after startServer()
-      has been called */
-    public synchronized boolean shutdownServer() throws DebuggerException {
-        if (!isServer) {
-            throw new DebuggerException("Should not call shutdownServer() for client configuration");
-        }
-        return detachInternal();
-    }
-
-
-    //--------------------------------------------------------------------------------
-    // Internals only below this point
-    //
-
-    private boolean detachInternal() {
-        if (debugger == null) {
-            return false;
-        }
-        if (canInteractWithJava()) {
-            jvmdi.detach();
-            jvmdi = null;
-        }
-        boolean retval = true;
-        if (!isServer) {
-            VM.shutdown();
-        }
-        // We must not call detach() if we are a client and are connected
-        // to a remote debugger
-        Debugger dbg = null;
-        DebuggerException ex = null;
-        if (isServer) {
-            try {
-                RMIHelper.unbind(serverID);
-            }
-            catch (DebuggerException de) {
-                ex = de;
-            }
-            dbg = debugger;
-        } else {
-            if (startupMode != REMOTE_MODE) {
-                dbg = debugger;
-            }
-        }
-        if (dbg != null) {
-            retval = dbg.detach();
-        }
-
-        debugger = null;
-        machDesc = null;
-        db = null;
-        if (ex != null) {
-            throw(ex);
-        }
-        return retval;
-    }
-
-    private void go() {
-        setupDebugger();
-        javaMode = setupVM();
-    }
-
-    private void setupDebugger() {
-        if (startupMode != REMOTE_MODE) {
-            //
-            // Local mode (client attaching to local process or setting up
-            // server, but not client attaching to server)
-            //
-
-            try {
-                os  = PlatformInfo.getOS();
-                cpu = PlatformInfo.getCPU();
-            }
-            catch (UnsupportedPlatformException e) {
-                throw new DebuggerException(e);
-            }
-            fileSep = System.getProperty("file.separator");
-
-            if (os.equals("solaris")) {
-                setupDebuggerSolaris();
-            } else if (os.equals("win32")) {
-                setupDebuggerWin32();
-            } else if (os.equals("linux")) {
-                setupDebuggerLinux();
-            } else if (os.equals("bsd")) {
-                setupDebuggerBsd();
-            } else {
-                // Add support for more operating systems here
-                throw new DebuggerException("Operating system " + os + " not yet supported");
-            }
-            if (isServer) {
-                RemoteDebuggerServer remote = null;
-                try {
-                    remote = new RemoteDebuggerServer(debugger);
-                }
-                catch (RemoteException rem) {
-                    throw new DebuggerException(rem);
-                }
-                RMIHelper.rebind(serverID, remote);
-            }
-        } else {
-            //
-            // Remote mode (client attaching to server)
-            //
-
-            // Create and install a security manager
-
-            // FIXME: currently commented out because we were having
-            // security problems since we're "in the sun.* hierarchy" here.
-            // Perhaps a permissive policy file would work around this. In
-            // the long run, will probably have to move into com.sun.*.
-
-            //    if (System.getSecurityManager() == null) {
-            //      System.setSecurityManager(new RMISecurityManager());
-            //    }
-
-            connectRemoteDebugger();
-        }
-    }
-
-    private boolean setupVM() {
-        // We need to instantiate a HotSpotTypeDataBase on both the client
-        // and server machine. On the server it is only currently used to
-        // configure the Java primitive type sizes (which we should
-        // consider making constant). On the client it is used to
-        // configure the VM.
-
-        try {
-            if (os.equals("solaris")) {
-                db = new HotSpotTypeDataBase(machDesc, new HotSpotSolarisVtblAccess(debugger, jvmLibNames),
-                debugger, jvmLibNames);
-            } else if (os.equals("win32")) {
-                db = new HotSpotTypeDataBase(machDesc, new Win32VtblAccess(debugger, jvmLibNames),
-                debugger, jvmLibNames);
-            } else if (os.equals("linux")) {
-                db = new HotSpotTypeDataBase(machDesc, new LinuxVtblAccess(debugger, jvmLibNames),
-                debugger, jvmLibNames);
-            } else if (os.equals("bsd")) {
-                db = new HotSpotTypeDataBase(machDesc, new BsdVtblAccess(debugger, jvmLibNames),
-                debugger, jvmLibNames);
-            } else {
-                throw new DebuggerException("OS \"" + os + "\" not yet supported (no VtblAccess implemented yet)");
-            }
-        }
-        catch (NoSuchSymbolException e) {
-            e.printStackTrace();
-            return false;
-        }
-
-        if (startupMode != REMOTE_MODE) {
-            // Configure the debugger with the primitive type sizes just obtained from the VM
-            debugger.configureJavaPrimitiveTypeSizes(db.getJBooleanType().getSize(),
-            db.getJByteType().getSize(),
-            db.getJCharType().getSize(),
-            db.getJDoubleType().getSize(),
-            db.getJFloatType().getSize(),
-            db.getJIntType().getSize(),
-            db.getJLongType().getSize(),
-            db.getJShortType().getSize());
-        }
-
-        if (!isServer) {
-            // Do not initialize the VM on the server (unnecessary, since it's
-            // instantiated on the client)
-            VM.initialize(db, debugger);
-        }
-
-        try {
-            jvmdi = new ServiceabilityAgentJVMDIModule(debugger, saLibNames);
-            if (jvmdi.canAttach()) {
-                jvmdi.attach();
-                jvmdi.setCommandTimeout(6000);
-                debugPrintln("Attached to Serviceability Agent's JVMDI module.");
-                // Jog VM to suspended point with JVMDI module
-                resume();
-                suspendJava();
-                suspend();
-                debugPrintln("Suspended all Java threads.");
-            } else {
-                debugPrintln("Could not locate SA's JVMDI module; skipping attachment");
-                jvmdi = null;
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            jvmdi = null;
-        }
-
-        return true;
-    }
-
-    //--------------------------------------------------------------------------------
-    // OS-specific debugger setup/connect routines
-    //
-
-    //
-    // Solaris
-    //
-
-    private void setupDebuggerSolaris() {
-        setupJVMLibNamesSolaris();
-        ProcDebuggerLocal dbg = new ProcDebuggerLocal(null, true);
-        debugger = dbg;
-        attachDebugger();
-
-        // Set up CPU-dependent stuff
-        if (cpu.equals("x86")) {
-            machDesc = new MachineDescriptionIntelX86();
-        } else if (cpu.equals("sparc")) {
-            int addressSize = dbg.getRemoteProcessAddressSize();
-            if (addressSize == -1) {
-                throw new DebuggerException("Error occurred while trying to determine the remote process's address size");
-            }
-
-            if (addressSize == 32) {
-                machDesc = new MachineDescriptionSPARC32Bit();
-            } else if (addressSize == 64) {
-                machDesc = new MachineDescriptionSPARC64Bit();
-            } else {
-                throw new DebuggerException("Address size " + addressSize + " is not supported on SPARC");
-            }
-        } else if (cpu.equals("amd64")) {
-            machDesc = new MachineDescriptionAMD64();
-        } else {
-            throw new DebuggerException("Solaris only supported on sparc/sparcv9/x86/amd64");
-        }
-
-        dbg.setMachineDescription(machDesc);
-    }
-
-    private void connectRemoteDebugger() throws DebuggerException {
-        RemoteDebugger remote =
-        (RemoteDebugger) RMIHelper.lookup(debugServerID);
-        debugger = new RemoteDebuggerClient(remote);
-        machDesc = ((RemoteDebuggerClient) debugger).getMachineDescription();
-        os = debugger.getOS();
-        if (os.equals("solaris")) {
-            setupJVMLibNamesSolaris();
-        } else if (os.equals("win32")) {
-            setupJVMLibNamesWin32();
-        } else if (os.equals("linux")) {
-            setupJVMLibNamesLinux();
-        } else if (os.equals("bsd")) {
-            setupJVMLibNamesBsd();
-        } else {
-            throw new RuntimeException("Unknown OS type");
-        }
-
-        cpu = debugger.getCPU();
-    }
-
-    private void setupJVMLibNamesSolaris() {
-        jvmLibNames = new String[] { "libjvm.so", "libjvm_g.so", "gamma_g" };
-        saLibNames = new String[] { "libsa.so", "libsa_g.so" };
-    }
-
-    //
-    // Win32
-    //
-
-    private void setupDebuggerWin32() {
-        setupJVMLibNamesWin32();
-
-        if (cpu.equals("x86")) {
-            machDesc = new MachineDescriptionIntelX86();
-        } else if (cpu.equals("amd64")) {
-            machDesc = new MachineDescriptionAMD64();
-        } else if (cpu.equals("ia64")) {
-            machDesc = new MachineDescriptionIA64();
-        } else {
-            throw new DebuggerException("Win32 supported under x86, amd64 and ia64 only");
-        }
-
-        // Note we do not use a cache for the local debugger in server
-        // mode; it will be taken care of on the client side (once remote
-        // debugging is implemented).
-
-        debugger = new WindbgDebuggerLocal(machDesc, !isServer);
-
-        attachDebugger();
-    }
-
-    private void setupJVMLibNamesWin32() {
-        jvmLibNames = new String[] { "jvm.dll", "jvm_g.dll" };
-        saLibNames = new String[] { "sa.dll", "sa_g.dll" };
-    }
-
-    //
-    // Linux
-    //
-
-    private void setupDebuggerLinux() {
-        setupJVMLibNamesLinux();
-
-        if (cpu.equals("x86")) {
-            machDesc = new MachineDescriptionIntelX86();
-        } else if (cpu.equals("ia64")) {
-            machDesc = new MachineDescriptionIA64();
-        } else if (cpu.equals("amd64")) {
-            machDesc = new MachineDescriptionAMD64();
-        } else if (cpu.equals("sparc")) {
-            if (LinuxDebuggerLocal.getAddressSize()==8) {
-               machDesc = new MachineDescriptionSPARC64Bit();
-            } else {
-               machDesc = new MachineDescriptionSPARC32Bit();
-            }
-        } else {
-          try {
-            machDesc = (MachineDescription)
-              Class.forName("sun.jvm.hotspot.debugger.MachineDescription" +
-              cpu.toUpperCase()).newInstance();
-          } catch (Exception e) {
-            throw new DebuggerException("unsupported machine type");
-          }
-        }
-
-
-        // Note we do not use a cache for the local debugger in server
-        // mode; it will be taken care of on the client side (once remote
-        // debugging is implemented).
-
-        debugger = new LinuxDebuggerLocal(machDesc, !isServer);
-        attachDebugger();
-    }
-
-    private void setupJVMLibNamesLinux() {
-        // same as solaris
-        setupJVMLibNamesSolaris();
-    }
-
-    //
-    // BSD
-    //
-
-    private void setupDebuggerBsd() {
-        setupJVMLibNamesBsd();
-
-        if (cpu.equals("x86")) {
-            machDesc = new MachineDescriptionIntelX86();
-        } else if (cpu.equals("amd64") || (cpu.equals("x86_64"))) {
-            machDesc = new MachineDescriptionAMD64();
-        } else {
-            throw new DebuggerException("Bsd only supported on x86/x86_64. Current arch: " + cpu);
-        }
-
-        // Note we do not use a cache for the local debugger in server
-        // mode; it will be taken care of on the client side (once remote
-        // debugging is implemented).
-
-        debugger = new BsdDebuggerLocal(machDesc, !isServer);
-        attachDebugger();
-    }
-
-    private void setupJVMLibNamesBsd() {
-        // same as solaris
-        setupJVMLibNamesSolaris();
-    }
-
-    /** Convenience routine which should be called by per-platform
-      debugger setup. Should not be called when startupMode is
-      REMOTE_MODE. */
-    private void attachDebugger() {
-        if (startupMode == PROCESS_MODE) {
-            debugger.attach(pid);
-        } else if (startupMode == CORE_FILE_MODE) {
-            debugger.attach(executableName, coreFileName);
-        } else {
-            throw new DebuggerException("Should not call attach() for startupMode == " + startupMode);
-        }
-    }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/JavaLineNumberInfo.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +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.bugspot;
-
-import sun.jvm.hotspot.oops.*;
-
-/** Wrapper class which describes line number information for Java
-    class files. The line number table is converted into this
-    representation on demand. These objects are then sorted by line
-    number for fast lookup when setting breakpoints in a particular
-    source file. */
-
-public class JavaLineNumberInfo {
-  private InstanceKlass klass;
-  private Method method;
-  private int startBCI;
-  private int lineNumber;
-
-  public JavaLineNumberInfo(InstanceKlass klass,
-                            Method method,
-                            int startBCI,
-                            int lineNumber) {
-    this.klass = klass;
-    this.method = method;
-    this.startBCI = startBCI;
-    this.lineNumber = lineNumber;
-  }
-
-  public InstanceKlass getKlass()      { return klass; }
-  public Method        getMethod()     { return method; }
-  public int           getStartBCI()   { return startBCI; }
-  public int           getLineNumber() { return lineNumber; }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/Main.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-
-import sun.jvm.hotspot.ui.*;
-
-/** The main class for the BugSpot debugger. */
-
-public class Main {
-  public static void main(String[] args) {
-    JFrame frame = new JFrame("BugSpot");
-    frame.setSize(800, 600);
-    BugSpot db = new BugSpot();
-    db.setMDIMode(true);
-    db.build();
-    frame.setJMenuBar(db.getMenuBar());
-    frame.getContentPane().add(db);
-    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
-
-    GraphicsUtilities.reshapeToAspectRatio(frame,
-                                           4.0f/3.0f, 0.85f, Toolkit.getDefaultToolkit().getScreenSize());
-    GraphicsUtilities.centerInContainer(frame,
-                                        Toolkit.getDefaultToolkit().getScreenSize());
-    frame.setVisible(true);
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/PCFinder.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot;
-
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.cdbg.*;
-
-/** Helper class for locating a program counter. Indicates the
-    confidence of the find. */
-
-public class PCFinder {
-  public static final int LOW_CONFIDENCE = 1;
-  public static final int HIGH_CONFIDENCE = 2;
-
-  public static class Info {
-    private String name;
-    private long   offset;
-    private int    confidence;
-
-    public Info(String name, long offset, int confidence) {
-      this.name = name;
-      this.offset = offset;
-      this.confidence = confidence;
-    }
-
-    /** May be null */
-    public String getName()       { return name;       }
-
-    /** If this is -1, a symbol could not be found, and the offset
-        should not be shown */
-    public long   getOffset()     { return offset;     }
-
-    /** PCFinder.LOW_CONFIDENCE or PCFinder.HIGH_CONFIDENCE */
-    public int    getConfidence() { return confidence; }
-  }
-
-  /** Passed loadobject may be null in which case the returned Info
-      object has low confidence */
-  public static Info findPC(Address pc, LoadObject lo, CDebugger dbg) {
-    if (lo == null) {
-      return new Info(null, -1, LOW_CONFIDENCE);
-    }
-
-    // First try debug info
-    BlockSym sym = lo.debugInfoForPC(pc);
-    while (sym != null) {
-      if (sym.isFunction()) {
-        // Highest confidence
-        return new Info(sym.toString(), pc.minus(sym.getAddress()), HIGH_CONFIDENCE);
-      }
-    }
-
-    // Now try looking up symbol in loadobject
-
-    // FIXME: must add support for mapfiles on Win32 and try looking
-    // up there first if possible. Should we hide that behind
-    // LoadObject.closestSymbolToPC and have the ClosestSymbol return
-    // confidence? I think so. On Solaris there is no notion of a
-    // mapfile, and the confidence for closestSymbolToPC will be high
-    // instead of low.
-
-    int confidence = HIGH_CONFIDENCE;
-
-    ClosestSymbol cs = lo.closestSymbolToPC(pc);
-    if (cs != null) {
-      // FIXME: currently low confidence (only on Win32)
-      return new Info(cs.getName() + "()", cs.getOffset(), LOW_CONFIDENCE);
-    }
-
-    // Unknown location
-    return new Info(dbg.getNameOfFile(lo.getName()).toUpperCase() +
-                    "! " + pc + "()", -1, HIGH_CONFIDENCE);
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/PackageScanner.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +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.bugspot;
-
-import java.io.*;
-
-/** Scans a .java file for the package that it is in. */
-
-public class PackageScanner {
-
-  public PackageScanner() {
-  }
-
-  public String scan(String filename) {
-    return scan(new File(filename));
-  }
-
-  /** Returns the String comprising the package name of the classes in
-      this .java file. Returns the (non-null) empty string if any
-      error occurs or if the classes are in the unnamed package. */
-  public String scan(File file) {
-    BufferedReader buf = null;
-    String res = "";
-    try {
-      buf = new BufferedReader(new FileReader(file));
-      StreamTokenizer tok = new StreamTokenizer(buf);
-      tok.slashStarComments(true);
-      tok.slashSlashComments(true);
-      if (tok.nextToken() != StreamTokenizer.TT_WORD) {
-        return res;
-      }
-      if (!tok.sval.equals("package")) {
-        return res;
-      }
-      if (tok.nextToken() != StreamTokenizer.TT_WORD) {
-        return res;
-      }
-      res = tok.sval;
-      return res;
-    } catch (FileNotFoundException e) {
-      return res;
-    } catch (IOException e) {
-      return res;
-    } finally {
-      try {
-        if (buf != null) {
-          buf.close();
-        }
-      } catch (IOException e) {
-      }
-    }
-  }
-
-  public static void main(String[] args) {
-    if (args.length != 1) {
-      usage();
-    }
-
-    System.out.println(new PackageScanner().scan(args[0]));
-  }
-
-  private static void usage() {
-    System.err.println("Usage: java PackageScanner <.java file name>");
-    System.err.println("Prints package the .java file is in to stdout.");
-    System.exit(1);
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/RegisterPanel.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot;
-
-import java.awt.*;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.table.*;
-
-import sun.jvm.hotspot.debugger.*;
-
-/** Displays registers in a window. FIXME: this will need more work to
-    understand and handle register windows. */
-
-public class RegisterPanel extends JPanel {
-  private java.util.List/*<RegisterInfo>*/ registers;
-  private AbstractTableModel dataModel;
-  private boolean valid;
-  private boolean editable;
-  private String nullAddressString;
-  private ThreadProxy curThread;
-  private JTable table;
-
-  static class RegisterInfo {
-    private String name;
-    private Address value;
-
-    RegisterInfo(String name, Address value) {
-      this.name = name;
-      this.value = value;
-    }
-
-    String  getName()  { return name;  }
-    Address getValue() { return value; }
-  }
-
-  public RegisterPanel() {
-    super();
-
-    registers = new ArrayList();
-
-    dataModel = new AbstractTableModel() {
-        public int getColumnCount() { return 2; }
-        public int getRowCount()    { return registers.size(); }
-        public String getColumnName(int col) {
-          switch (col) {
-          case 0:
-            return "Register Name";
-          case 1:
-            return "Register Value";
-          default:
-            throw new RuntimeException("Index " + col + " out of bounds");
-          }
-        }
-        public Object getValueAt(int row, int col) {
-          RegisterInfo info = (RegisterInfo) registers.get(row);
-
-          switch (col) {
-          case 0:
-            return info.getName();
-          case 1:
-            if (valid) {
-              Address val = info.getValue();
-              if (val != null) {
-                return val;
-              } else {
-                return nullAddressString;
-              }
-            } else {
-              return "-";
-            }
-          default:
-            throw new RuntimeException("Index (" + col + ", " + row + ") out of bounds");
-          }
-        }
-        public boolean isCellEditable(int row, int col) {
-          if (col == 0) return false;
-          if (!valid) return false;
-          if (curThread == null) return false;
-          if (!curThread.canSetContext()) return false;
-
-          // FIXME: add listener to watch for register changes
-          //          return true;
-          return false;
-        }
-      };
-
-    // Build user interface
-    setLayout(new BorderLayout());
-    table = new JTable(dataModel);
-    table.setCellSelectionEnabled(true);
-    table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
-    table.setDragEnabled(true);
-    JTableHeader header = table.getTableHeader();
-    header.setReorderingAllowed(false);
-    JScrollPane scrollPane = new JScrollPane(table);
-    add(scrollPane, BorderLayout.CENTER);
-  }
-
-
-  /** Updates the register panel with the register set from the
-      specified thread. Call this when the process has been suspended
-      and the current thread has been set. FIXME: this interface will
-      need to change to support register windows. */
-  public void update(ThreadProxy curThread) {
-    this.curThread = curThread;
-    ThreadContext context = curThread.getContext();
-    editable = curThread.canSetContext();
-    registers.clear();
-    for (int i = 0; i < context.getNumRegisters(); i++) {
-      String name = context.getRegisterName(i);
-      Address addr = context.getRegisterAsAddress(i);
-      if ((nullAddressString == null) && (addr != null)) {
-        String addrStr = addr.toString();
-        StringBuffer buf = new StringBuffer();
-        buf.append("0x");
-        int len = addrStr.length() - 2;
-        for (int j = 0; j < len; j++) {
-          buf.append("0");
-        }
-        nullAddressString = buf.toString();
-      }
-      registers.add(new RegisterInfo(name, addr));
-    }
-    valid = true;
-    SwingUtilities.invokeLater(new Runnable() {
-        public void run() {
-          dataModel.fireTableDataChanged();
-        }
-      });
-  }
-
-  /** Clears the registers' values. Call this when the processs has
-      been resumed. */
-  public void clear() {
-    valid = false;
-    nullAddressString = null;
-    SwingUtilities.invokeLater(new Runnable() {
-        public void run() {
-          dataModel.fireTableDataChanged();
-        }
-      });
-  }
-
-  public void setFont(Font font) {
-    super.setFont(font);
-    if (table != null) {
-      table.setFont(font);
-    }
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/StackTraceEntry.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot;
-
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.runtime.*;
-
-/** This class describes a frame in a stack trace. It abstracts over
-    C/C++ and Java frames. */
-
-public class StackTraceEntry {
-  private CFrame cFrame;
-  private CDebugger dbg;
-  private JavaVFrame javaFrame;
-  private String value; // What is displayed in a stack trace
-  // For merging C and Java stack traces.
-  // For more precise stack traces, should probably have a way to
-  // convert a CFrame to a sun.jvm.hotspot.runtime.Frame. For now,
-  // doing similar algorithm to jdbx (which does not have intimate
-  // knowledge of the VM).
-  private boolean isUnknownCFrame;
-
-  public StackTraceEntry(CFrame cFrame, CDebugger dbg) {
-    this.cFrame = cFrame;
-    this.dbg = dbg;
-    computeValue();
-  }
-
-  public StackTraceEntry(JavaVFrame javaFrame) {
-    this.javaFrame = javaFrame;
-    computeValue();
-  }
-
-  public boolean    isCFrame()     { return (cFrame != null);    }
-  public boolean    isJavaFrame()  { return (javaFrame != null); }
-  public CFrame     getCFrame()    { return cFrame;              }
-  public JavaVFrame getJavaFrame() { return javaFrame;           }
-  public boolean    isUnknownCFrame() { return isUnknownCFrame;  }
-  public String toString() {
-    return value;
-  }
-
-  private void computeValue() {
-    isUnknownCFrame = true;
-    value = "<unknown>";
-    if (cFrame != null) {
-      PCFinder.Info info = PCFinder.findPC(cFrame.pc(), cFrame.loadObjectForPC(), dbg);
-      if (info.getName() != null) {
-        value = "(C) " + info.getName();
-        isUnknownCFrame = false;
-        if (info.getConfidence() == PCFinder.LOW_CONFIDENCE) {
-          value = value + " (?)";
-        }
-        if (info.getOffset() >= 0) {
-          value = value + " + 0x" + Long.toHexString(info.getOffset());
-        }
-      }
-    } else if (javaFrame != null) {
-      isUnknownCFrame = false;
-      Method m = javaFrame.getMethod();
-      value = "(J) " + m.externalNameAndSignature();
-    }
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/StackTracePanel.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.util.*;
-import javax.swing.*;
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.runtime.*;
-import sun.jvm.hotspot.ui.*;
-
-/** This panel contains a ListBox with all of the stack frames in a
-    given thread. When a given entry is selected, an event is
-    fired. */
-
-public class StackTracePanel extends JPanel {
-  public interface Listener {
-    public void frameChanged(CFrame fr, JavaVFrame jfr);
-  }
-
-  class Model extends AbstractListModel implements ComboBoxModel {
-    private Object selectedItem;
-    public Object getElementAt(int index) {
-      if (trace == null) return null;
-      return trace.get(index);
-    }
-    public int getSize() {
-      if (trace == null) return 0;
-      return trace.size();
-    }
-    public Object getSelectedItem() {
-      return selectedItem;
-    }
-    public void setSelectedItem(Object item) {
-      selectedItem = item;
-    }
-    public void dataChanged() {
-      fireContentsChanged(this, 0, trace.size());
-    }
-  }
-
-  private java.util.List trace;
-  private Model model;
-  private JComboBox list;
-  private java.util.List listeners;
-
-  public StackTracePanel() {
-    super();
-
-    model = new Model();
-
-    // Build user interface
-    setLayout(new BorderLayout());
-    setBorder(GraphicsUtilities.newBorder(5));
-    list = new JComboBox(model);
-    list.setPrototypeDisplayValue("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
-    add(list, BorderLayout.CENTER);
-
-    // Add selection listener
-    list.addItemListener(new ItemListener() {
-        public void itemStateChanged(ItemEvent e) {
-          if (e.getStateChange() == ItemEvent.SELECTED) {
-            fireFrameChanged();
-          }
-        }
-      });
-  }
-
-  /** Takes a List of StackTraceEntry objects */
-  public void setTrace(java.util.List trace) {
-    this.trace = trace;
-    model.dataChanged();
-    list.setSelectedIndex(0);
-    fireFrameChanged();
-  }
-
-  public void addListener(Listener listener) {
-    if (listeners == null) {
-      listeners = new ArrayList();
-    }
-    listeners.add(listener);
-  }
-
-  protected void fireFrameChanged() {
-    if (listeners != null) {
-      StackTraceEntry entry = (StackTraceEntry) trace.get(list.getSelectedIndex());
-      for (Iterator iter = listeners.iterator(); iter.hasNext(); ) {
-        ((Listener) iter.next()).frameChanged(entry.getCFrame(), entry.getJavaFrame());
-      }
-    }
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/ThreadListPanel.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,237 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.table.*;
-
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.runtime.*;
-import sun.jvm.hotspot.ui.*;
-
-// NOTE: this class was not placed in sun.jvm.hotspot.ui to prevent
-// mixing components designed for C and C++ debugging with the ones
-// that work with the core serviceability agent functionality (which
-// does not require that the CDebugger interface be implemented).
-
-/** The ThreadListPanel is used for C and C++ debugging and can
-    visualize all threads in the target process. The caller passes in
-    a CDebugger attached to the target process and can request that
-    JavaThreads' associations with these underlying threads be
-    displayed; this option is only valid when attached to a HotSpot
-    JVM and when the {@link sun.jvm.hotspot.runtime.VM} has been
-    initialized. */
-
-public class ThreadListPanel extends JPanel {
-  /** Listener which can be added to receive "Set Focus" events */
-  public static interface Listener {
-    /** ThreadProxy will always be provided; JavaThread will only be
-        present if displayJavaThreads was specified in the constructor
-        for the panel and the thread was a JavaThread. */
-    public void setFocus(ThreadProxy thread, JavaThread jthread);
-  }
-
-  static class ThreadInfo {
-    private ThreadProxy thread;
-    // Distinguish between PC == null and no top frame
-    private boolean     gotPC;
-    private Address     pc;
-    private String      location;
-    private JavaThread  javaThread;
-    private String      javaThreadName;
-
-    public ThreadInfo(ThreadProxy thread, CDebugger dbg, JavaThread jthread) {
-      this.thread = thread;
-      this.location = "<unknown>";
-      CFrame fr = dbg.topFrameForThread(thread);
-      if (fr != null) {
-        gotPC = true;
-        pc = fr.pc();
-        PCFinder.Info info = PCFinder.findPC(pc, fr.loadObjectForPC(), dbg);
-        if (info.getName() != null) {
-          location = info.getName();
-          if (info.getConfidence() == PCFinder.LOW_CONFIDENCE) {
-            location = location + " (?)";
-          }
-          if (info.getOffset() < 0) {
-            location = location + " + 0x" + Long.toHexString(info.getOffset());
-          }
-        }
-      }
-      if (jthread != null) {
-        javaThread = jthread;
-        javaThreadName = jthread.getThreadName();
-      }
-    }
-
-    public ThreadProxy getThread()    { return thread;       }
-    public boolean     hasPC()        { return gotPC;        }
-    public Address     getPC()        { return pc;           }
-    public String      getLocation()  { return location;     }
-    public boolean     isJavaThread() { return (javaThread != null); }
-    public JavaThread  getJavaThread() { return javaThread; }
-    public String      getJavaThreadName() { return javaThreadName; }
-  }
-
-  // List<ThreadInfo>
-  private java.util.List threadList;
-  private JTable table;
-  private AbstractTableModel dataModel;
-  // List<Listener>
-  private java.util.List listeners;
-
-  /** Takes a CDebugger from which the thread list is queried.
-      displayJavaThreads must only be set to true if the debugger is
-      attached to a HotSpot JVM and if the VM has already been
-      initialized. */
-  public ThreadListPanel(CDebugger dbg, final boolean displayJavaThreads) {
-    super();
-
-    Map threadToJavaThreadMap = null;
-    if (displayJavaThreads) {
-      // Collect Java threads from virtual machine and insert them in
-      // table for later querying
-      threadToJavaThreadMap = new HashMap();
-      Threads threads = VM.getVM().getThreads();
-      for (JavaThread thr = threads.first(); thr != null; thr = thr.next()) {
-        threadToJavaThreadMap.put(thr.getThreadProxy(), thr);
-      }
-    }
-
-    java.util.List/*<ThreadProxy>*/ threads = dbg.getThreadList();
-    threadList = new ArrayList(threads.size());
-    for (Iterator iter = threads.iterator(); iter.hasNext(); ) {
-      ThreadProxy thr = (ThreadProxy) iter.next();
-      JavaThread jthr = null;
-      if (displayJavaThreads) {
-        jthr = (JavaThread) threadToJavaThreadMap.get(thr);
-      }
-      threadList.add(new ThreadInfo(thr, dbg, jthr));
-    }
-
-    // Thread ID, current PC, current symbol, Java Thread, [Java thread name]
-    dataModel = new AbstractTableModel() {
-        public int getColumnCount() { return (displayJavaThreads ? 5 : 3); }
-        public int getRowCount()    { return threadList.size(); }
-        public String getColumnName(int col) {
-          switch (col) {
-          case 0:
-            return "Thread ID";
-          case 1:
-            return "PC";
-          case 2:
-            return "Location";
-          case 3:
-            return "Java?";
-          case 4:
-            return "Java Thread Name";
-          default:
-            throw new RuntimeException("Index " + col + " out of bounds");
-          }
-        }
-        public Object getValueAt(int row, int col) {
-          ThreadInfo info = (ThreadInfo) threadList.get(row);
-
-          switch (col) {
-          case 0:
-            return info.getThread();
-          case 1:
-            {
-              if (info.hasPC()) {
-                return info.getPC();
-              }
-              return "<no frames on stack>";
-            }
-          case 2:
-            return info.getLocation();
-          case 3:
-            if (info.isJavaThread()) {
-              return "Yes";
-            } else {
-              return "";
-            }
-          case 4:
-            if (info.isJavaThread()) {
-              return info.getJavaThreadName();
-            } else {
-              return "";
-            }
-          default:
-            throw new RuntimeException("Index (" + col + ", " + row + ") out of bounds");
-          }
-        }
-      };
-
-    // Build user interface
-    setLayout(new BorderLayout());
-    table = new JTable(dataModel);
-    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-    JTableHeader header = table.getTableHeader();
-    header.setReorderingAllowed(false);
-    table.setRowSelectionAllowed(true);
-    table.setColumnSelectionAllowed(false);
-    JScrollPane scrollPane = new JScrollPane(table);
-    add(scrollPane, BorderLayout.CENTER);
-    if (threadList.size() > 0) {
-      table.setRowSelectionInterval(0, 0);
-    }
-
-    JButton button = new JButton("Set Focus");
-    button.addActionListener(new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          int i = table.getSelectedRow();
-          if (i < 0) {
-            return;
-          }
-          ThreadInfo info = (ThreadInfo) threadList.get(i);
-          for (Iterator iter = listeners.iterator(); iter.hasNext(); ) {
-            ((Listener) iter.next()).setFocus(info.getThread(), info.getJavaThread());
-          }
-        }
-      });
-    JPanel focusPanel = new JPanel();
-    focusPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
-    focusPanel.setLayout(new BoxLayout(focusPanel, BoxLayout.Y_AXIS));
-    focusPanel.add(Box.createGlue());
-    focusPanel.add(button);
-    focusPanel.add(Box.createGlue());
-    add(focusPanel, BorderLayout.EAST);
-
-    // FIXME: make listener model for the debugger so if the user
-    // specifies a mapfile for or path to a given DSO later we can
-    // update our state
-  }
-
-  public void addListener(Listener l) {
-    if (listeners == null) {
-      listeners = new ArrayList();
-    }
-    listeners.add(l);
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/VariablePanel.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,252 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot;
-
-import java.awt.*;
-import javax.swing.*;
-import java.util.*;
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.bugspot.tree.*;
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.runtime.*;
-import sun.jvm.hotspot.ui.tree.*;
-import sun.jvm.hotspot.ui.treetable.*;
-
-/** Manages display of a set of local variables in a frame, or the
-    contents of the "this" pointer */
-
-public class VariablePanel extends JPanel {
-  private JTreeTable treeTable;
-  private SimpleTreeTableModel model;
-  private SimpleTreeGroupNode root;
-
-  public VariablePanel() {
-    super();
-
-    model = new SimpleTreeTableModel();
-    model.setValuesEditable(false);
-    root = new SimpleTreeGroupNode();
-    model.setRoot(root);
-    treeTable = new JTreeTable(model);
-    treeTable.setRootVisible(false);
-    treeTable.setShowsRootHandles(true);
-    treeTable.setShowsIcons(false);
-    treeTable.setTreeEditable(false);
-    treeTable.getTableHeader().setReorderingAllowed(false);
-    treeTable.setCellSelectionEnabled(true);
-    treeTable.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
-    treeTable.setDragEnabled(true);
-    JScrollPane sp = new JScrollPane(treeTable);
-    sp.getViewport().setBackground(Color.white);
-
-    setLayout(new BorderLayout());
-    add(sp, BorderLayout.CENTER);
-  }
-
-  /** Clear the contents of this VariablePanel */
-  public void clear() {
-    root.removeAllChildren();
-    model.fireTreeStructureChanged();
-  }
-
-  /** Update the contents of this VariablePanel from the given CFrame */
-  public void update(CFrame fr) {
-    // Collect locals
-    CCollector coll = new CCollector();
-    fr.iterateLocals(coll);
-    update(coll);
-  }
-
-  /** Update the contents of this VariablePanel from the given JavaVFrame */
-  public void update(JavaVFrame jfr) {
-    Method m = jfr.getMethod();
-    if (!m.hasLocalVariableTable()) {
-      return;
-    }
-    int bci = jfr.getBCI();
-    // Get local variable table
-    LocalVariableTableElement[] locals = m.getLocalVariableTable();
-    // Get locals as StackValueCollection
-    StackValueCollection coll = jfr.getLocals();
-    root.removeAllChildren();
-    // See which locals are live
-    for (int i = 0; i < locals.length; i++) {
-      LocalVariableTableElement local = locals[i];
-      if (local.getStartBCI() <= bci && bci < local.getStartBCI() + local.getLength()) {
-        // Valid; add it
-        SimpleTreeNode node = null;
-        Symbol name = null;
-        try {
-          name = m.getConstants().getSymbolAt(local.getNameCPIndex());
-          if (name == null) {
-            System.err.println("Null name at slot " +
-                               local.getNameCPIndex() +
-                               " for local variable at slot " +
-                               local.getSlot());
-            continue;
-          }
-        } catch (Exception e) {
-          System.err.println("Unable to fetch name at slot " +
-                             local.getNameCPIndex() +
-                             " for local variable at slot " +
-                             local.getSlot());
-          e.printStackTrace();
-          continue;
-        }
-        sun.jvm.hotspot.oops.NamedFieldIdentifier f =
-          new sun.jvm.hotspot.oops.NamedFieldIdentifier(name.asString());
-        Symbol descriptor = null;
-        try {
-          descriptor = m.getConstants().getSymbolAt(local.getDescriptorCPIndex());
-        } catch (Exception e) {
-          System.err.println("Unable to fetch descriptor at slot " +
-                             local.getDescriptorCPIndex() +
-                             " for local variable " + f.getName() +
-                             " at slot " + local.getSlot());
-          e.printStackTrace();
-          continue;
-        }
-
-        if (descriptor != null) {
-          switch (descriptor.getByteAt(0)) {
-          case 'F': {
-            node = new sun.jvm.hotspot.ui.tree.FloatTreeNodeAdapter(coll.floatAt(local.getSlot()), f, true);
-            break;
-          }
-          case 'D': {
-            node = new sun.jvm.hotspot.ui.tree.DoubleTreeNodeAdapter(coll.doubleAt(local.getSlot()), f, true);
-            break;
-          }
-          case 'C': {
-            node = new sun.jvm.hotspot.ui.tree.CharTreeNodeAdapter((char) coll.intAt(local.getSlot()), f, true);
-            break;
-          }
-          case 'B':
-          case 'S':
-          case 'I': {
-            node = new sun.jvm.hotspot.ui.tree.LongTreeNodeAdapter(coll.intAt(local.getSlot()), f, true);
-            break;
-          }
-          case 'Z': {
-            node = new sun.jvm.hotspot.ui.tree.BooleanTreeNodeAdapter(
-              ((coll.intAt(local.getSlot()) != 0) ? true : false), f, true
-            );
-            break;
-          }
-          case 'J': {
-            node = new sun.jvm.hotspot.ui.tree.LongTreeNodeAdapter(coll.longAt(local.getSlot()), f, true);
-            break;
-          }
-          default: {
-            try {
-              node = new sun.jvm.hotspot.ui.tree.OopTreeNodeAdapter(
-                VM.getVM().getObjectHeap().newOop(coll.oopHandleAt(local.getSlot())), f, true
-              );
-            } catch (AddressException e) {
-              node = new sun.jvm.hotspot.ui.tree.FieldTreeNodeAdapter(f, true) {
-                  public int getChildCount()                       { return 0;     }
-                  public SimpleTreeNode getChild(int i)            { return null;  }
-                  public boolean isLeaf()                          { return false; }
-                  public int getIndexOfChild(SimpleTreeNode child) { return 0;     }
-                  public String getValue() {
-                    return "<Bad oop>";
-                  }
-                };
-            }
-            break;
-          }
-          }
-          if (node != null) {
-            root.addChild(node);
-          }
-        }
-      }
-    }
-
-    model.fireTreeStructureChanged();
-  }
-
-  /** Update the contents of this VariablePanel from the given "this"
-      pointer of the given type */
-  public void update(Address thisAddr, Type type) {
-    // Collect fields
-    CCollector coll = new CCollector();
-    type.iterateObject(thisAddr, coll);
-    update(coll);
-  }
-
-  private void update(CCollector coll) {
-    root.removeAllChildren();
-    for (int i = 0; i < coll.getNumChildren(); i++) {
-      root.addChild(coll.getChild(i));
-    }
-    model.fireTreeStructureChanged();
-  }
-
-  static class CCollector extends DefaultObjectVisitor {
-    private java.util.List children;
-
-    public CCollector() {
-      children = new ArrayList();
-    }
-
-    public int getNumChildren() {
-      return children.size();
-    }
-
-    public SimpleTreeNode getChild(int i) {
-      return (SimpleTreeNode) children.get(i);
-    }
-
-    public void doBit(sun.jvm.hotspot.debugger.cdbg.FieldIdentifier f, long val) {
-      children.add(new sun.jvm.hotspot.bugspot.tree.LongTreeNodeAdapter(val, f, true));
-    }
-    public void doInt(sun.jvm.hotspot.debugger.cdbg.FieldIdentifier f, long val) {
-      children.add(new sun.jvm.hotspot.bugspot.tree.LongTreeNodeAdapter(val, f, true));
-    }
-    public void doEnum(sun.jvm.hotspot.debugger.cdbg.FieldIdentifier f, long val, String enumName) {
-      children.add(new sun.jvm.hotspot.bugspot.tree.EnumTreeNodeAdapter(enumName, val, f, true));
-    }
-    public void doFloat(sun.jvm.hotspot.debugger.cdbg.FieldIdentifier f, float val) {
-      children.add(new sun.jvm.hotspot.bugspot.tree.FloatTreeNodeAdapter(val, f, true));
-    }
-    public void doDouble(sun.jvm.hotspot.debugger.cdbg.FieldIdentifier f, double val) {
-      children.add(new sun.jvm.hotspot.bugspot.tree.DoubleTreeNodeAdapter(val, f, true));
-    }
-    public void doPointer(sun.jvm.hotspot.debugger.cdbg.FieldIdentifier f, Address val) {
-      children.add(new sun.jvm.hotspot.bugspot.tree.AddressTreeNodeAdapter(val, f, true));
-    }
-    public void doArray(sun.jvm.hotspot.debugger.cdbg.FieldIdentifier f, Address val) {
-      children.add(new sun.jvm.hotspot.bugspot.tree.AddressTreeNodeAdapter(val, f, true));
-    }
-    public void doRef(sun.jvm.hotspot.debugger.cdbg.FieldIdentifier f, Address val) {
-      children.add(new sun.jvm.hotspot.bugspot.tree.AddressTreeNodeAdapter(val, f, true));
-    }
-    public void doCompound(sun.jvm.hotspot.debugger.cdbg.FieldIdentifier f, Address val) {
-      children.add(new sun.jvm.hotspot.bugspot.tree.ObjectTreeNodeAdapter(val, f, true));
-    }
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/AddressTreeNodeAdapter.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot.tree;
-
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.ui.tree.SimpleTreeNode;
-
-/** Encapsulates a float value in a tree handled by SimpleTreeModel */
-
-public class AddressTreeNodeAdapter extends FieldTreeNodeAdapter {
-  private Address val;
-
-  public AddressTreeNodeAdapter(Address val, FieldIdentifier id) {
-    this(val, id, false);
-  }
-
-  public AddressTreeNodeAdapter(Address val, FieldIdentifier id, boolean treeTableMode) {
-    super(id, treeTableMode);
-    this.val = val;
-  }
-
-  public int getChildCount() {
-    return 0;
-  }
-
-  public SimpleTreeNode getChild(int index) {
-    return null;
-  }
-
-  public boolean isLeaf() {
-    return true;
-  }
-
-  public int getIndexOfChild(SimpleTreeNode child) {
-    return 0;
-  }
-
-  public String getValue() {
-    if (val != null) {
-      return val.toString();
-    }
-    return "NULL";
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/DoubleTreeNodeAdapter.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot.tree;
-
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.ui.tree.SimpleTreeNode;
-
-/** Encapsulates a double value in a tree handled by SimpleTreeModel */
-
-public class DoubleTreeNodeAdapter extends FieldTreeNodeAdapter {
-  private double val;
-
-  public DoubleTreeNodeAdapter(double val, FieldIdentifier id) {
-    this(val, id, false);
-  }
-
-  public DoubleTreeNodeAdapter(double val, FieldIdentifier id, boolean treeTableMode) {
-    super(id, treeTableMode);
-    this.val = val;
-  }
-
-  public int getChildCount() {
-    return 0;
-  }
-
-  public SimpleTreeNode getChild(int index) {
-    return null;
-  }
-
-  public boolean isLeaf() {
-    return true;
-  }
-
-  public int getIndexOfChild(SimpleTreeNode child) {
-    return 0;
-  }
-
-  public String getValue() {
-    return Double.toString(val);
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/EnumTreeNodeAdapter.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot.tree;
-
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.ui.tree.SimpleTreeNode;
-
-/** Encapsulates an enumerated value in a tree handled by SimpleTreeModel */
-
-public class EnumTreeNodeAdapter extends FieldTreeNodeAdapter {
-  private long val;
-  private String enumName;
-
-  public EnumTreeNodeAdapter(String enumName, long val, FieldIdentifier id) {
-    this(enumName, val, id, false);
-  }
-
-  public EnumTreeNodeAdapter(String enumName, long val, FieldIdentifier id, boolean treeTableMode) {
-    super(id, treeTableMode);
-    this.enumName = enumName;
-    this.val = val;
-  }
-
-  public int getChildCount() {
-    return 0;
-  }
-
-  public SimpleTreeNode getChild(int index) {
-    return null;
-  }
-
-  public boolean isLeaf() {
-    return true;
-  }
-
-  public int getIndexOfChild(SimpleTreeNode child) {
-    return 0;
-  }
-
-  public String getValue() {
-    if (enumName != null) {
-      return enumName;
-    } else {
-      return Long.toString(val);
-    }
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/FieldTreeNodeAdapter.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot.tree;
-
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.ui.tree.SimpleTreeNode;
-
-/** Abstract base class for all adapters for fields of C/C++ objects */
-
-public abstract class FieldTreeNodeAdapter implements SimpleTreeNode {
-  private FieldIdentifier id;
-  private boolean         treeTableMode;
-
-  /** The identifier may be null, i.e., for the root of the tree */
-  public FieldTreeNodeAdapter(FieldIdentifier id, boolean treeTableMode) {
-    this.id = id;
-    this.treeTableMode = treeTableMode;
-  }
-
-  public FieldIdentifier getID() {
-    return id;
-  }
-
-  /** Defaults to false in subclasses */
-  public boolean getTreeTableMode() {
-    return treeTableMode;
-  }
-
-  public Type getType() {
-    return getID().getType();
-  }
-
-  public String getName() {
-    if (getID() != null) {
-      return getID().toString();
-    }
-    return "";
-  }
-
-  public String toString() {
-    if (treeTableMode) {
-      return getName();
-    } else {
-      if (getID() != null) {
-        return getName() + ": " + getValue();
-      } else {
-        return getValue();
-      }
-    }
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/FloatTreeNodeAdapter.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot.tree;
-
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.ui.tree.SimpleTreeNode;
-
-/** Encapsulates a float value in a tree handled by SimpleTreeModel */
-
-public class FloatTreeNodeAdapter extends FieldTreeNodeAdapter {
-  private float val;
-
-  public FloatTreeNodeAdapter(float val, FieldIdentifier id) {
-    this(val, id, false);
-  }
-
-  public FloatTreeNodeAdapter(float val, FieldIdentifier id, boolean treeTableMode) {
-    super(id, treeTableMode);
-    this.val = val;
-  }
-
-  public int getChildCount() {
-    return 0;
-  }
-
-  public SimpleTreeNode getChild(int index) {
-    return null;
-  }
-
-  public boolean isLeaf() {
-    return true;
-  }
-
-  public int getIndexOfChild(SimpleTreeNode child) {
-    return 0;
-  }
-
-  public String getValue() {
-    return Float.toString(val);
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/LongTreeNodeAdapter.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot.tree;
-
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.ui.tree.SimpleTreeNode;
-
-/** Encapsulates a long value in a tree handled by SimpleTreeModel */
-
-public class LongTreeNodeAdapter extends FieldTreeNodeAdapter {
-  private long val;
-
-  public LongTreeNodeAdapter(long val, FieldIdentifier id) {
-    this(val, id, false);
-  }
-
-  public LongTreeNodeAdapter(long val, FieldIdentifier id, boolean treeTableMode) {
-    super(id, treeTableMode);
-    this.val = val;
-  }
-
-  public int getChildCount() {
-    return 0;
-  }
-
-  public SimpleTreeNode getChild(int index) {
-    return null;
-  }
-
-  public boolean isLeaf() {
-    return true;
-  }
-
-  public int getIndexOfChild(SimpleTreeNode child) {
-    return 0;
-  }
-
-  public String getValue() {
-    return Long.toString(val);
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/tree/ObjectTreeNodeAdapter.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,216 +0,0 @@
-/*
- * Copyright (c) 2001, 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.bugspot.tree;
-
-import java.io.*;
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.ui.tree.SimpleTreeNode;
-
-/** An adapter class which allows C/C++ objects to be displayed in a
-    tree via the SimpleTreeNode interface. */
-
-public class ObjectTreeNodeAdapter extends FieldTreeNodeAdapter {
-  // Address of object
-  private Address addr;
-
-  /** The address may be null (for object fields of objcets which are
-      null). The FieldIdentifier should not be null. treeTableMode
-      defaults to false. */
-  public ObjectTreeNodeAdapter(Address addr, FieldIdentifier id) {
-    this(addr, id, false);
-  }
-
-  /** The address may be null (for object fields of objcets which are
-      null). The FieldIdentifier should not be null. */
-  public ObjectTreeNodeAdapter(Address addr, FieldIdentifier id, boolean treeTableMode) {
-    super(id, treeTableMode);
-    this.addr = addr;
-  }
-
-  public int getChildCount() {
-    if (addr == null) {
-      return 0;
-    }
-
-    Counter c = new Counter();
-    getType().iterateObject(addr, c);
-    return c.getNumFields();
-  }
-
-  public SimpleTreeNode getChild(int index) {
-    if (addr == null) {
-      return null;
-    }
-
-    Fetcher f = new Fetcher(index);
-    getType().iterateObject(addr, f);
-    return f.getChild();
-  }
-
-  public boolean isLeaf() {
-    return (addr == null);
-  }
-
-  public int getIndexOfChild(SimpleTreeNode child) {
-    FieldIdentifier id = ((FieldTreeNodeAdapter) child).getID();
-    Finder f = new Finder(id);
-    getType().iterateObject(addr, f);
-    return f.getIndex();
-  }
-
-  public String getValue() {
-    if (addr != null) {
-      return addr.toString();
-    }
-    return "NULL";
-  }
-
-  /** Should be used only once, then have the number of fields
-      fetched. */
-  static class Counter extends DefaultObjectVisitor {
-    private int numFields;
-
-    public int getNumFields() {
-      return numFields;
-    }
-
-    public void doBit(FieldIdentifier f, long val)                   { ++numFields; }
-    public void doInt(FieldIdentifier f, long val)                   { ++numFields; }
-    public void doEnum(FieldIdentifier f, long val, String enumName) { ++numFields; }
-    public void doFloat(FieldIdentifier f, float val)                { ++numFields; }
-    public void doDouble(FieldIdentifier f, double val)              { ++numFields; }
-    public void doPointer(FieldIdentifier f, Address val)            { ++numFields; }
-    public void doArray(FieldIdentifier f, Address val)              { ++numFields; }
-    public void doRef(FieldIdentifier f, Address val)                { ++numFields; }
-    public void doCompound(FieldIdentifier f, Address addr)          { ++numFields; }
-  }
-
-  /** Creates a new SimpleTreeNode for the given field. */
-  class Fetcher extends DefaultObjectVisitor {
-    private int index;
-    private int curField;
-    private SimpleTreeNode child;
-
-    public Fetcher(int index) {
-      this.index = index;
-    }
-
-    public SimpleTreeNode getChild() {
-      return child;
-    }
-
-    public void doBit(FieldIdentifier f, long val) {
-      if (curField == index) {
-        child = new LongTreeNodeAdapter(val, f, getTreeTableMode());
-      }
-      ++curField;
-    }
-
-    public void doInt(FieldIdentifier f, long val) {
-      if (curField == index) {
-        child = new LongTreeNodeAdapter(val, f, getTreeTableMode());
-      }
-      ++curField;
-    }
-
-    public void doEnum(FieldIdentifier f, long val, String enumName) {
-      if (curField == index) {
-        child = new EnumTreeNodeAdapter(enumName, val, f, getTreeTableMode());
-      }
-      ++curField;
-    }
-
-    public void doFloat(FieldIdentifier f, float val) {
-      if (curField == index) {
-        child = new FloatTreeNodeAdapter(val, f, getTreeTableMode());
-      }
-      ++curField;
-    }
-
-    public void doDouble(FieldIdentifier f, double val) {
-      if (curField == index) {
-        child = new DoubleTreeNodeAdapter(val, f, getTreeTableMode());
-      }
-      ++curField;
-    }
-
-    public void doPointer(FieldIdentifier f, Address val) {
-      if (curField == index) {
-        child = new AddressTreeNodeAdapter(val, f, getTreeTableMode());
-      }
-      ++curField;
-    }
-
-    public void doArray(FieldIdentifier f, Address val) {
-      if (curField == index) {
-        child = new AddressTreeNodeAdapter(val, f, getTreeTableMode());
-      }
-      ++curField;
-    }
-
-    public void doRef(FieldIdentifier f, Address val) {
-      if (curField == index) {
-        child = new AddressTreeNodeAdapter(val, f, getTreeTableMode());
-      }
-      ++curField;
-    }
-
-    public void doCompound(FieldIdentifier f, Address val) {
-      if (curField == index) {
-        child = new ObjectTreeNodeAdapter(val, f, getTreeTableMode());
-      }
-      ++curField;
-    }
-  }
-
-  /** Finds the index of the given FieldIdentifier. */
-  static class Finder extends DefaultObjectVisitor {
-    private FieldIdentifier id;
-    private int curField;
-    private int index = -1;
-
-    public Finder(FieldIdentifier id) {
-      this.id = id;
-    }
-
-    /** Returns -1 if not found */
-    public int getIndex() {
-      return index;
-    }
-
-    public void doBit(FieldIdentifier f, long val)        { if (f.equals(id)) { index = curField; } ++curField; }
-    public void doInt(FieldIdentifier f, long val)        { if (f.equals(id)) { index = curField; } ++curField; }
-    public void doEnum(FieldIdentifier f, long val,
-                       String enumName)                   { if (f.equals(id)) { index = curField; } ++curField; }
-    public void doFloat(FieldIdentifier f, float val)     { if (f.equals(id)) { index = curField; } ++curField; }
-    public void doDouble(FieldIdentifier f, double val)   { if (f.equals(id)) { index = curField; } ++curField; }
-    public void doPointer(FieldIdentifier f, Address val) { if (f.equals(id)) { index = curField; } ++curField; }
-    public void doArray(FieldIdentifier f, Address val)   { if (f.equals(id)) { index = curField; } ++curField; }
-    public void doRef(FieldIdentifier f, Address val)     { if (f.equals(id)) { index = curField; } ++curField; }
-    public void doCompound(FieldIdentifier f,
-                           Address val)                   { if (f.equals(id)) { index = curField; } ++curField; }
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java	Fri Mar 15 23:08:07 2013 -0700
@@ -60,8 +60,13 @@
         return null;
       }
 
+      // Check alignment of rbp
+      if ( dbg.getAddressValue(rbp) % ADDRESS_SIZE != 0) {
+        return null;
+      }
+
       Address nextRBP = rbp.getAddressAt( 0 * ADDRESS_SIZE);
-      if (nextRBP == null) {
+      if (nextRBP == null || nextRBP.lessThanOrEqual(rbp)) {
         return null;
       }
       Address nextPC  = rbp.getAddressAt( 1 * ADDRESS_SIZE);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java	Fri Mar 15 23:08:07 2013 -0700
@@ -61,8 +61,13 @@
         return null;
       }
 
+      // Check alignment of ebp
+      if ( dbg.getAddressValue(ebp) % ADDRESS_SIZE != 0) {
+        return null;
+      }
+
       Address nextEBP = ebp.getAddressAt( 0 * ADDRESS_SIZE);
-      if (nextEBP == null) {
+      if (nextEBP == null || nextEBP.lessThanOrEqual(ebp)) {
         return null;
       }
       Address nextPC  = ebp.getAddressAt( 1 * ADDRESS_SIZE);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/BreakpointEvent.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +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.livejvm;
-
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.runtime.*;
-
-public class BreakpointEvent extends Event {
-  private Oop thread;
-  private Oop clazz;
-  private JNIid method;
-  private int location;
-
-  public BreakpointEvent(Oop thread,
-                         Oop clazz,
-                         JNIid method,
-                         int location) {
-    super(Event.Type.BREAKPOINT);
-    this.thread = thread;
-    this.clazz = clazz;
-    this.method = method;
-    this.location = location;
-  }
-
-  public Oop thread()     { return thread;   }
-  public Oop clazz()      { return clazz;    }
-  public JNIid methodID() { return method;   }
-  public int location()   { return location; }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/CIntegerAccessor.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +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.livejvm;
-
-import sun.jvm.hotspot.debugger.*;
-
-class CIntegerAccessor {
-  private Address addr;
-  private long numBytes;
-  private boolean isUnsigned;
-
-  CIntegerAccessor(Address addr, long numBytes, boolean isUnsigned) {
-    this.addr = addr;
-    this.numBytes = numBytes;
-    this.isUnsigned = isUnsigned;
-  }
-
-  long getValue() {
-    return addr.getCIntegerAt(0, numBytes, isUnsigned);
-  }
-
-  void setValue(long value) {
-    addr.setCIntegerAt(0, numBytes, value);
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/CStringAccessor.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +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.livejvm;
-
-import java.io.UnsupportedEncodingException;
-import sun.jvm.hotspot.debugger.*;
-
-class CStringAccessor {
-  private Address addr;
-  private int bufLen;
-
-  CStringAccessor(Address addr, int bufLen) {
-    this.addr = addr;
-    this.bufLen = bufLen;
-  }
-
-  String getValue() throws DebuggerException {
-    int len = 0;
-    while ((addr.getCIntegerAt(len, 1, true) != 0) && (len < bufLen)) {
-      ++len;
-    }
-    byte[] res = new byte[len];
-    for (int i = 0; i < len; i++) {
-      res[i] = (byte) addr.getCIntegerAt(i, 1, true);
-    }
-    try {
-      return new String(res, "US-ASCII");
-    } catch (UnsupportedEncodingException e) {
-      throw new DebuggerException("Unable to use US-ASCII encoding");
-    }
-  }
-
-  void setValue(String value) throws DebuggerException {
-    try {
-      byte[] data = value.getBytes("US-ASCII");
-      if (data.length >= bufLen) {
-        throw new DebuggerException("String too long");
-      }
-      for (int i = 0; i < data.length; i++) {
-        addr.setCIntegerAt(i, 1, data[i]);
-      }
-      addr.setCIntegerAt(data.length, 1, 0);
-    } catch (UnsupportedEncodingException e) {
-      throw new DebuggerException("Unable to use US-ASCII encoding");
-    }
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/Event.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +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.livejvm;
-
-public class Event {
-  public static class Type {
-    private Type() {}
-    public static final Type BREAKPOINT = new Type();
-    public static final Type EXCEPTION  = new Type();
-  }
-
-  private Type type;
-
-  public Event(Type type) {
-    this.type = type;
-  }
-
-  public Type getType() { return type; }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/ExceptionEvent.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +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.livejvm;
-
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.runtime.*;
-
-public class ExceptionEvent extends Event {
-  private Oop thread;
-  private Oop clazz;
-  private JNIid method;
-  private int location;
-  private Oop exception;
-  private Oop catchClass;
-  private JNIid catchMethod;
-  private int catchLocation;
-
-  public ExceptionEvent(Oop thread,
-                        Oop clazz,
-                        JNIid method,
-                        int location,
-                        Oop exception,
-                        Oop catchClass,
-                        JNIid catchMethod,
-                        int catchLocation) {
-    super(Event.Type.EXCEPTION);
-    this.thread        = thread;
-    this.clazz         = clazz;
-    this.method        = method;
-    this.location      = location;
-    this.exception     = exception;
-    this.catchClass    = catchClass;
-    this.catchMethod   = catchMethod;
-    this.catchLocation = catchLocation;
-  }
-
-  public Oop   thread()        { return thread;        }
-  public Oop   clazz()         { return clazz;         }
-  public JNIid methodID()      { return method;        }
-  public int   location()      { return location;      }
-  public Oop   exception()     { return exception;     }
-  public Oop   catchClass()    { return catchClass;    }
-  public JNIid catchMethodID() { return catchMethod;   }
-  public int   catchLocation() { return catchLocation; }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/JNIHandleAccessor.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +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.livejvm;
-
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.utilities.*;
-
-class JNIHandleAccessor {
-  private Address addr;
-  private ObjectHeap heap;
-
-  JNIHandleAccessor(Address addr, ObjectHeap heap) {
-    this.addr = addr;
-    this.heap = heap;
-  }
-
-  Oop getValue() {
-    // Accessing the contents of the JNIHandle is a double dereference
-    Address handle = addr.getAddressAt(0);
-    if (handle == null) return null;
-    return heap.newOop(handle.getOopHandleAt(0));
-  }
-
-  void setValue(Oop value) {
-    Address handle = addr.getAddressAt(0);
-    if (Assert.ASSERTS_ENABLED) {
-      Assert.that(handle != null, "Must have valid global JNI handle for setting");
-    }
-    handle.setOopHandleAt(0, value.getHandle());
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/livejvm/ServiceabilityAgentJVMDIModule.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,415 +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.livejvm;
-
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.runtime.*;
-
-/** Provides Java programming language-level interaction with a live
-    Java HotSpot VM via the use of the SA's JVMDI module. This is an
-    experimental mechanism. The BugSpot debugger should be converted
-    to use the JVMDI/JDWP-based JDI implementation for live process
-    interaction once the JDI binding for the SA is complete. */
-
-public class ServiceabilityAgentJVMDIModule {
-  private Debugger dbg;
-  private String[] saLibNames;
-  private String   saLibName;
-  private boolean  attached;
-
-  private boolean  suspended;
-
-  private static final int JVMDI_EVENT_BREAKPOINT = 2;
-  private static final int JVMDI_EVENT_EXCEPTION = 4;
-
-  private static long timeoutMillis = 3000;
-
-  // Values in target process
-  // Events sent from VM to SA
-  private CIntegerAccessor saAttached;
-  private CIntegerAccessor saEventPending;
-  private CIntegerAccessor saEventKind;
-  // Exception events
-  private JNIHandleAccessor saExceptionThread;
-  private JNIHandleAccessor saExceptionClass;
-  private JNIid             saExceptionMethod;
-  private CIntegerAccessor  saExceptionLocation;
-  private JNIHandleAccessor saExceptionException;
-  private JNIHandleAccessor saExceptionCatchClass;
-  private JNIid             saExceptionCatchMethod;
-  private CIntegerAccessor  saExceptionCatchLocation;
-  // Breakpoint events
-  private JNIHandleAccessor saBreakpointThread;
-  private JNIHandleAccessor saBreakpointClass;
-  private JNIid             saBreakpointMethod;
-  private CIntegerAccessor  saBreakpointLocation;
-  // Commands sent by the SA to the VM
-  private int               SA_CMD_SUSPEND_ALL;
-  private int               SA_CMD_RESUME_ALL;
-  private int               SA_CMD_TOGGLE_BREAKPOINT;
-  private int               SA_CMD_BUF_SIZE;
-  private CIntegerAccessor  saCmdPending;
-  private CIntegerAccessor  saCmdType;
-  private CIntegerAccessor  saCmdResult;
-  private CStringAccessor   saCmdResultErrMsg;
-  // Toggle breakpoint command arguments
-  private CStringAccessor   saCmdBkptSrcFileName;
-  private CStringAccessor   saCmdBkptPkgName;
-  private CIntegerAccessor  saCmdBkptLineNumber;
-  private CIntegerAccessor  saCmdBkptResWasError;
-  private CIntegerAccessor  saCmdBkptResLineNumber;
-  private CIntegerAccessor  saCmdBkptResBCI;
-  private CIntegerAccessor  saCmdBkptResWasSet;
-  private CStringAccessor   saCmdBkptResMethodName;
-  private CStringAccessor   saCmdBkptResMethodSig;
-
-  public ServiceabilityAgentJVMDIModule(Debugger dbg, String[] saLibNames) {
-    this.dbg = dbg;
-    this.saLibNames = saLibNames;
-  }
-
-  /** Indicates whether a call to attach() should complete without an
-      exception. */
-  public boolean canAttach() {
-    return setupLookup("SA_CMD_SUSPEND_ALL");
-  }
-
-  /** Attempt to initiate a connection with the JVMDI module in the
-      target VM. */
-  public void attach() throws DebuggerException {
-    if (!canAttach()) {
-      throw new DebuggerException("Unable to initiate symbol lookup in SA's JVMDI module");
-    }
-
-    if (attached) {
-      throw new DebuggerException("Already attached");
-    }
-
-    // Attempt to look up well-known symbols in the target VM.
-    SA_CMD_SUSPEND_ALL      = lookupConstInt("SA_CMD_SUSPEND_ALL");
-    SA_CMD_RESUME_ALL       = lookupConstInt("SA_CMD_RESUME_ALL");
-    SA_CMD_TOGGLE_BREAKPOINT = lookupConstInt("SA_CMD_TOGGLE_BREAKPOINT");
-    SA_CMD_BUF_SIZE         = lookupConstInt("SA_CMD_BUF_SIZE");
-
-    saAttached              = lookupCInt("saAttached");
-    saEventPending          = lookupCInt("saEventPending");
-    saEventKind             = lookupCInt("saEventKind");
-    saCmdPending            = lookupCInt("saCmdPending");
-    saCmdType               = lookupCInt("saCmdType");
-    saCmdResult             = lookupCInt("saCmdResult");
-    saCmdResultErrMsg       = lookupCString("saCmdResultErrMsg", SA_CMD_BUF_SIZE);
-    // Toggling of breakpoints
-    saCmdBkptSrcFileName    = lookupCString("saCmdBkptSrcFileName", SA_CMD_BUF_SIZE);
-    saCmdBkptPkgName        = lookupCString("saCmdBkptPkgName", SA_CMD_BUF_SIZE);
-    saCmdBkptLineNumber     = lookupCInt("saCmdBkptLineNumber");
-    saCmdBkptResWasError    = lookupCInt("saCmdBkptResWasError");
-    saCmdBkptResLineNumber  = lookupCInt("saCmdBkptResLineNumber");
-    saCmdBkptResBCI         = lookupCInt("saCmdBkptResBCI");
-    saCmdBkptResWasSet      = lookupCInt("saCmdBkptResWasSet");
-    saCmdBkptResMethodName  = lookupCString("saCmdBkptResMethodName", SA_CMD_BUF_SIZE);
-    saCmdBkptResMethodSig   = lookupCString("saCmdBkptResMethodSig", SA_CMD_BUF_SIZE);
-
-    // Check for existence of symbols needed later
-    // FIXME: should probably cache these since we can't support the
-    // -Xrun module or the VM getting unloaded anyway
-    lookup("saExceptionThread");
-    lookup("saExceptionClass");
-    lookup("saExceptionMethod");
-    lookup("saExceptionLocation");
-    lookup("saExceptionException");
-    lookup("saExceptionCatchClass");
-    lookup("saExceptionCatchMethod");
-    lookup("saExceptionCatchLocation");
-    lookup("saBreakpointThread");
-    lookup("saBreakpointClass");
-    lookup("saBreakpointMethod");
-    lookup("saBreakpointLocation");
-
-    saAttached.setValue(1);
-    attached = true;
-  }
-
-  public void detach() {
-    saAttached.setValue(0);
-    attached = false;
-    saLibName = null;
-  }
-
-  /** Set the timeout value (in milliseconds) for the VM to reply to
-      commands. Once this timeout has elapsed, the VM is assumed to
-      have disconnected. Defaults to 3000 milliseconds (3 seconds). */
-  public void setCommandTimeout(long millis) {
-    timeoutMillis = millis;
-  }
-
-  /** Get the timeout value (in milliseconds) for the VM to reply to
-      commands. Once this timeout has elapsed, the VM is assumed to
-      have disconnected. Defaults to 3000 milliseconds (3 seconds). */
-  public long getCommandTimeout() {
-    return timeoutMillis;
-  }
-
-  /** Indicates whether a Java debug event is pending */
-  public boolean eventPending() {
-    return (saEventPending.getValue() != 0);
-  }
-
-  /** Poll for event; returns null if none pending. */
-  public Event eventPoll() {
-    if (saEventPending.getValue() == 0) {
-      return null;
-    }
-
-    int kind = (int) saEventKind.getValue();
-    switch (kind) {
-    case JVMDI_EVENT_EXCEPTION: {
-      JNIHandleAccessor thread = lookupJNIHandle("saExceptionThread");
-      JNIHandleAccessor clazz = lookupJNIHandle("saExceptionClass");
-      JNIid method = lookupJNIid("saExceptionMethod");
-      CIntegerAccessor location = lookupCInt("saExceptionLocation");
-      JNIHandleAccessor exception = lookupJNIHandle("saExceptionException");
-      JNIHandleAccessor catchClass = lookupJNIHandle("saExceptionCatchClass");
-      JNIid catchMethod = lookupJNIid("saExceptionCatchMethod");
-      CIntegerAccessor catchLocation = lookupCInt("saExceptionCatchLocation");
-      return new ExceptionEvent(thread.getValue(), clazz.getValue(), method,
-                                (int) location.getValue(), exception.getValue(),
-                                catchClass.getValue(), catchMethod, (int) catchLocation.getValue());
-    }
-
-    case JVMDI_EVENT_BREAKPOINT: {
-      JNIHandleAccessor thread = lookupJNIHandle("saBreakpointThread");
-      JNIHandleAccessor clazz = lookupJNIHandle("saBreakpointClass");
-      JNIid method = lookupJNIid("saBreakpointMethod");
-      CIntegerAccessor location = lookupCInt("saBreakpointLocation");
-      return new BreakpointEvent(thread.getValue(), clazz.getValue(),
-                                 method, (int) location.getValue());
-    }
-
-    default:
-      throw new DebuggerException("Unsupported event type " + kind);
-    }
-  }
-
-  /** Continue past current event */
-  public void eventContinue() {
-    saEventPending.setValue(0);
-  }
-
-  /** Suspend all Java threads in the target VM. Throws
-      DebuggerException if the VM disconnected. */
-  public void suspend() {
-    saCmdType.setValue(SA_CMD_SUSPEND_ALL);
-    saCmdPending.setValue(1);
-    waitForCommandCompletion();
-    suspended = true;
-  }
-
-  /** Resume all Java threads in the target VM. Throws
-      DebuggerException if the VM disconnected. */
-  public void resume() {
-    saCmdType.setValue(SA_CMD_RESUME_ALL);
-    saCmdPending.setValue(1);
-    waitForCommandCompletion();
-    suspended = false;
-  }
-
-  /** Indicates whether all Java threads have been suspended via this
-      interface. */
-  public boolean isSuspended() {
-    return suspended;
-  }
-
-  /** Information about toggling of breakpoints */
-  public static class BreakpointToggleResult {
-    private boolean success;
-    private String errMsg;
-    private int lineNumber;
-    private int bci;
-    private boolean wasSet;
-    private String methodName;
-    private String methodSig;
-
-    /** Success constructor */
-    public BreakpointToggleResult(int lineNumber, int bci, boolean wasSet,
-                                  String methodName, String methodSig) {
-      this.lineNumber = lineNumber;
-      this.bci = bci;
-      this.wasSet = wasSet;
-      this.methodName = methodName;
-      this.methodSig = methodSig;
-      success = true;
-    }
-
-    /** Failure constructor */
-    public BreakpointToggleResult(String errMsg) {
-      this.errMsg = errMsg;
-      success = false;
-    }
-
-    /** Indicates whether this represents a successful return or not */
-    public boolean getSuccess() { return success; }
-
-    /** Valid only if getSuccess() returns false */
-    public String getErrMsg() { return errMsg; }
-
-    /** Line number at which breakpoint toggle occurred; valid only if
-        getSuccess() returns true. */
-    public int getLineNumber() { return lineNumber; }
-
-    /** BCI at which breakpoint toggle occurred; valid only if
-        getSuccess() returns true. */
-    public int getBCI() { return bci; }
-
-    /** Indicates whether the breakpoint toggle was the set of a
-        breakpoint or not; valid only if getSuccess() returns true. */
-    public boolean getWasSet() { return wasSet; }
-
-    /** Method name in which the breakpoint toggle occurred; valid
-        only if getSuccess() returns true. */
-    public String getMethodName() { return methodName; }
-
-    /** Method signature in which the breakpoint toggle occurred;
-        valid only if getSuccess() returns true. */
-    public String getMethodSignature() { return methodSig; }
-  }
-
-  /** Toggle a breakpoint. Throws DebuggerException if a real error
-      occurred; otherwise returns non-null BreakpointToggleResult. The
-      work of scanning the loaded classes is done in the target VM
-      because it turns out to be significantly faster than scanning
-      through the system dictionary from the SA, and interactivity
-      when setting breakpoints is important. */
-  public BreakpointToggleResult toggleBreakpoint(String srcFileName,
-                                                 String pkgName,
-                                                 int lineNo) {
-    saCmdBkptSrcFileName.setValue(srcFileName);
-    saCmdBkptPkgName.setValue(pkgName);
-    saCmdBkptLineNumber.setValue(lineNo);
-    saCmdType.setValue(SA_CMD_TOGGLE_BREAKPOINT);
-    saCmdPending.setValue(1);
-    if (waitForCommandCompletion(true)) {
-      return new BreakpointToggleResult((int) saCmdBkptResLineNumber.getValue(),
-                                        (int) saCmdBkptResBCI.getValue(),
-                                        (saCmdBkptResWasSet.getValue() != 0),
-                                        saCmdBkptResMethodName.getValue(),
-                                        saCmdBkptResMethodSig.getValue());
-    } else {
-      return new BreakpointToggleResult(saCmdResultErrMsg.getValue());
-    }
-  }
-
-
-  //----------------------------------------------------------------------
-  // Internals only below this point
-  //
-
-  private CIntegerAccessor lookupCInt(String symbolName) {
-    return new CIntegerAccessor(lookup(symbolName), 4, false);
-  }
-
-  private CStringAccessor lookupCString(String symbolName, int bufLen) {
-    return new CStringAccessor(lookup(symbolName), bufLen);
-  }
-
-  private JNIHandleAccessor lookupJNIHandle(String symbolName) {
-    return new JNIHandleAccessor(lookup(symbolName), VM.getVM().getObjectHeap());
-  }
-
-  private JNIid lookupJNIid(String symbolName) {
-    Address idAddr = lookup(symbolName).getAddressAt(0);
-    if (idAddr == null) {
-      return null;
-    }
-    return new JNIid(idAddr, VM.getVM().getObjectHeap());
-  }
-
-  private int lookupConstInt(String symbolName) {
-    Address addr = lookup(symbolName);
-    return (int) addr.getCIntegerAt(0, 4, false);
-  }
-
-  private boolean setupLookup(String symbolName) {
-    if (saLibName == null) {
-      for (int i = 0; i < saLibNames.length; i++) {
-        Address addr = dbg.lookup(saLibNames[i], symbolName);
-        if (addr != null) {
-          saLibName = saLibNames[i];
-          return true;
-        }
-      }
-      return false;
-    }
-    return true;
-  }
-
-  private Address lookup(String symbolName) {
-    if (saLibName == null) {
-      for (int i = 0; i < saLibNames.length; i++) {
-        Address addr = dbg.lookup(saLibNames[i], symbolName);
-        if (addr != null) {
-          saLibName = saLibNames[i];
-          return addr;
-        }
-      }
-      throw new DebuggerException("Unable to find symbol " + symbolName + " in any of the known names for the SA");
-    }
-
-    Address addr = dbg.lookup(saLibName, symbolName);
-    if (addr == null) {
-      throw new DebuggerException("Unable to find symbol " + symbolName + " in " + saLibName);
-    }
-    return addr;
-  }
-
-  private void waitForCommandCompletion() {
-    waitForCommandCompletion(false);
-  }
-
-  /** Returns true if command succeeded, false if not */
-  private boolean waitForCommandCompletion(boolean forBreakpoint) {
-    long start = System.currentTimeMillis();
-    long cur = start;
-    while ((saCmdPending.getValue() != 0) &&
-           (cur - start < timeoutMillis)) {
-      try {
-        java.lang.Thread.currentThread().sleep(10);
-      } catch (InterruptedException e) {
-      }
-      cur = System.currentTimeMillis();
-    }
-    if (saCmdPending.getValue() != 0) {
-      detach();
-      throw new DebuggerException("VM appears to have died");
-    }
-    boolean succeeded = saCmdResult.getValue() == 0;
-    if (!succeeded &&
-        (!forBreakpoint || saCmdBkptResWasError.getValue() != 0)) {
-      String err = saCmdResultErrMsg.getValue();
-      throw new DebuggerException("Error executing JVMDI command: " + err);
-    }
-    return succeeded;
-  }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java	Fri Mar 15 23:08:07 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -469,7 +469,6 @@
     case JVM_CONSTANT_UnresolvedClassInError:    return "JVM_CONSTANT_UnresolvedClassInError";
     case JVM_CONSTANT_MethodHandleInError:return "JVM_CONSTANT_MethodHandleInError";
     case JVM_CONSTANT_MethodTypeInError:  return "JVM_CONSTANT_MethodTypeInError";
-    case JVM_CONSTANT_Object:             return "JVM_CONSTANT_Object";
     }
     throw new InternalError("Unknown tag: " + tag);
   }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java	Fri Mar 15 23:08:07 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -67,7 +67,6 @@
     public static final int JVM_CONSTANT_UnresolvedClassInError   = 103;  // Error tag due to resolution error
     public static final int JVM_CONSTANT_MethodHandleInError      = 104;  // Error tag due to resolution error
     public static final int JVM_CONSTANT_MethodTypeInError        = 105;  // Error tag due to resolution error
-    public static final int JVM_CONSTANT_Object                   = 106;  // Required for BoundMethodHandle arguments.
 
     // 1.5 major/minor version numbers from JVM spec. 3rd edition
     public static final short MAJOR_VERSION = 49;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/ClassLoaderStats.java	Fri Mar 15 23:08:07 2013 -0700
@@ -0,0 +1,277 @@
+/*
+ * Copyright (c) 2003, 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.tools;
+
+import java.io.*;
+import java.util.*;
+
+import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.memory.*;
+import sun.jvm.hotspot.oops.*;
+import sun.jvm.hotspot.runtime.*;
+import sun.jvm.hotspot.tools.*;
+import sun.jvm.hotspot.utilities.*;
+
+/**
+  A command line tool to print class loader statistics.
+*/
+
+public class ClassLoaderStats extends Tool {
+   boolean verbose = true;
+
+   public static void main(String[] args) {
+      ClassLoaderStats cls = new ClassLoaderStats();
+      cls.start(args);
+      cls.stop();
+   }
+
+   private static class ClassData {
+      Klass klass;
+      long  size;
+
+      ClassData(Klass klass, long size) {
+         this.klass = klass; this.size = size;
+      }
+   }
+
+   private static class LoaderData {
+      long     numClasses;
+      long     classSize;
+      List     classDetail = new ArrayList(); // List<ClassData>
+   }
+
+   public void run() {
+      printClassLoaderStatistics();
+   }
+
+   private void printClassLoaderStatistics() {
+      final PrintStream out = System.out;
+      final PrintStream err = System.err;
+      final Map loaderMap = new HashMap();
+      // loader data for bootstrap class loader
+      final LoaderData bootstrapLoaderData = new LoaderData();
+      if (verbose) {
+         err.print("finding class loader instances ..");
+      }
+
+      VM vm = VM.getVM();
+      ObjectHeap heap = vm.getObjectHeap();
+      Klass classLoaderKlass = vm.getSystemDictionary().getClassLoaderKlass();
+      try {
+         heap.iterateObjectsOfKlass(new DefaultHeapVisitor() {
+                         public boolean doObj(Oop oop) {
+                            loaderMap.put(oop, new LoaderData());
+                                                        return false;
+                         }
+                      }, classLoaderKlass);
+      } catch (Exception se) {
+         se.printStackTrace();
+      }
+
+      if (verbose) {
+         err.println("done.");
+         err.print("computing per loader stat ..");
+      }
+
+      SystemDictionary dict = VM.getVM().getSystemDictionary();
+      dict.classesDo(new SystemDictionary.ClassAndLoaderVisitor() {
+                        public void visit(Klass k, Oop loader) {
+                           if (! (k instanceof InstanceKlass)) {
+                              return;
+                           }
+                           LoaderData ld = (loader != null) ? (LoaderData)loaderMap.get(loader)
+                                                            : bootstrapLoaderData;
+                           if (ld != null) {
+                              ld.numClasses++;
+                              long size = computeSize((InstanceKlass)k);
+                              ld.classDetail.add(new ClassData(k, size));
+                              ld.classSize += size;
+                           }
+                        }
+                     });
+
+      if (verbose) {
+         err.println("done.");
+         err.print("please wait.. computing liveness");
+      }
+
+      // compute reverse pointer analysis (takes long time for larger app)
+      ReversePtrsAnalysis analysis = new ReversePtrsAnalysis();
+
+      if (verbose) {
+         analysis.setHeapProgressThunk(new HeapProgressThunk() {
+            public void heapIterationFractionUpdate(double fractionOfHeapVisited) {
+               err.print('.');
+            }
+            // This will be called after the iteration is complete
+            public void heapIterationComplete() {
+               err.println("done.");
+            }
+         });
+      }
+
+      try {
+         analysis.run();
+      } catch (Exception e) {
+         // e.printStackTrace();
+         if (verbose)
+           err.println("liveness analysis may be inaccurate ...");
+      }
+      ReversePtrs liveness = VM.getVM().getRevPtrs();
+
+      out.println("class_loader\tclasses\tbytes\tparent_loader\talive?\ttype");
+      out.println();
+
+      long numClassLoaders = 1L;
+      long totalNumClasses = bootstrapLoaderData.numClasses;
+      long totalClassSize  = bootstrapLoaderData.classSize;
+      long numAliveLoaders = 1L;
+      long numDeadLoaders  = 0L;
+
+      // print bootstrap loader details
+      out.print("<bootstrap>");
+      out.print('\t');
+      out.print(bootstrapLoaderData.numClasses);
+      out.print('\t');
+      out.print(bootstrapLoaderData.classSize);
+      out.print('\t');
+      out.print("  null  ");
+      out.print('\t');
+      // bootstrap loader is always alive
+      out.print("live");
+      out.print('\t');
+      out.println("<internal>");
+
+      for (Iterator keyItr = loaderMap.keySet().iterator(); keyItr.hasNext();) {
+         Oop loader = (Oop) keyItr.next();
+         LoaderData data = (LoaderData) loaderMap.get(loader);
+         numClassLoaders ++;
+         totalNumClasses += data.numClasses;
+         totalClassSize  += data.classSize;
+
+         out.print(loader.getHandle());
+         out.print('\t');
+         out.print(data.numClasses);
+         out.print('\t');
+         out.print(data.classSize);
+         out.print('\t');
+
+         class ParentFinder extends DefaultOopVisitor {
+            public void doOop(OopField field, boolean isVMField) {
+               if (field.getID().getName().equals("parent")) {
+                  parent = field.getValue(getObj());
+               }
+            }
+            private Oop parent = null;
+            public Oop getParent() { return parent; }
+         }
+
+         ParentFinder parentFinder = new ParentFinder();
+         loader.iterate(parentFinder, false);
+         Oop parent = parentFinder.getParent();
+         out.print((parent != null)? parent.getHandle().toString() : "  null  ");
+         out.print('\t');
+         boolean alive = (liveness != null) ? (liveness.get(loader) != null) : true;
+         out.print(alive? "live" : "dead");
+         if (alive) numAliveLoaders++; else numDeadLoaders++;
+         out.print('\t');
+         Klass loaderKlass = loader.getKlass();
+         if (loaderKlass != null) {
+            out.print(loaderKlass.getName().asString());
+            out.print('@');
+            out.print(loader.getKlass().getAddress());
+         } else {
+            out.print("    null!    ");
+         }
+         out.println();
+      }
+
+      out.println();
+      // summary line
+      out.print("total = ");
+      out.print(numClassLoaders);
+      out.print('\t');
+      out.print(totalNumClasses);
+      out.print('\t');
+      out.print(totalClassSize);
+      out.print('\t');
+      out.print("    N/A    ");
+      out.print('\t');
+      out.print("alive=");
+      out.print(numAliveLoaders);
+      out.print(", dead=");
+      out.print(numDeadLoaders);
+      out.print('\t');
+      out.print("    N/A    ");
+      out.println();
+   }
+
+   private static long objectSize(Oop oop) {
+      return oop == null ? 0L : oop.getObjectSize();
+   }
+
+   // Don't count the shared empty arrays
+   private static long arraySize(GenericArray arr) {
+     return arr.getLength() != 0L ? arr.getSize() : 0L;
+   }
+
+   private long computeSize(InstanceKlass k) {
+      long size = 0L;
+      // the InstanceKlass object itself
+      size += k.getSize();
+
+      // Constant pool
+      ConstantPool cp = k.getConstants();
+      size += cp.getSize();
+      if (cp.getCache() != null) {
+        size += cp.getCache().getSize();
+      }
+      size += arraySize(cp.getTags());
+
+      // Interfaces
+      size += arraySize(k.getLocalInterfaces());
+      size += arraySize(k.getTransitiveInterfaces());
+
+      // Inner classes
+      size += arraySize(k.getInnerClasses());
+
+      // Fields
+      size += arraySize(k.getFields());
+
+      // Methods
+      MethodArray methods = k.getMethods();
+      int nmethods = (int) methods.getLength();
+      if (nmethods != 0L) {
+         size += methods.getSize();
+         for (int i = 0; i < nmethods; ++i) {
+            Method m = methods.at(i);
+            size += m.getSize();
+            size += m.getConstMethod().getSize();
+         }
+      }
+
+      return size;
+   }
+}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java	Fri Mar 15 23:08:07 2013 -0700
@@ -57,17 +57,18 @@
       printGCAlgorithm(flagMap);
       System.out.println();
       System.out.println("Heap Configuration:");
-      printValue("MinHeapFreeRatio = ", getFlagValue("MinHeapFreeRatio", flagMap));
-      printValue("MaxHeapFreeRatio = ", getFlagValue("MaxHeapFreeRatio", flagMap));
-      printValMB("MaxHeapSize      = ", getFlagValue("MaxHeapSize", flagMap));
-      printValMB("NewSize          = ", getFlagValue("NewSize", flagMap));
-      printValMB("MaxNewSize       = ", getFlagValue("MaxNewSize", flagMap));
-      printValMB("OldSize          = ", getFlagValue("OldSize", flagMap));
-      printValue("NewRatio         = ", getFlagValue("NewRatio", flagMap));
-      printValue("SurvivorRatio    = ", getFlagValue("SurvivorRatio", flagMap));
-      printValMB("MetaspaceSize    = ", getFlagValue("MetaspaceSize", flagMap));
-      printValMB("MaxMetaspaceSize = ", getFlagValue("MaxMetaspaceSize", flagMap));
-      printValMB("G1HeapRegionSize = ", HeapRegion.grainBytes());
+      printValue("MinHeapFreeRatio   = ", getFlagValue("MinHeapFreeRatio", flagMap));
+      printValue("MaxHeapFreeRatio   = ", getFlagValue("MaxHeapFreeRatio", flagMap));
+      printValMB("MaxHeapSize        = ", getFlagValue("MaxHeapSize", flagMap));
+      printValMB("NewSize            = ", getFlagValue("NewSize", flagMap));
+      printValMB("MaxNewSize         = ", getFlagValue("MaxNewSize", flagMap));
+      printValMB("OldSize            = ", getFlagValue("OldSize", flagMap));
+      printValue("NewRatio           = ", getFlagValue("NewRatio", flagMap));
+      printValue("SurvivorRatio      = ", getFlagValue("SurvivorRatio", flagMap));
+      printValMB("MetaspaceSize      = ", getFlagValue("MetaspaceSize", flagMap));
+      printValMB("ClassMetaspaceSize = ", getFlagValue("ClassMetaspaceSize", flagMap));
+      printValMB("MaxMetaspaceSize   = ", getFlagValue("MaxMetaspaceSize", flagMap));
+      printValMB("G1HeapRegionSize   = ", HeapRegion.grainBytes());
 
       System.out.println();
       System.out.println("Heap Usage:");
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/JMap.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/JMap.java	Fri Mar 15 23:08:07 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -45,7 +45,7 @@
     }
 
     protected String getCommandFlags() {
-        return "-heap|-heap:format=b|-histo|-permstat|-finalizerinfo";
+        return "-heap|-heap:format=b|-histo|-clstats|-finalizerinfo";
     }
 
     protected void printFlagsUsage() {
@@ -53,14 +53,14 @@
         System.out.println("    -heap\tto print java heap summary");
         System.out.println("    -heap:format=b\tto dump java heap in hprof binary format");
         System.out.println("    -histo\tto print histogram of java object heap");
-        System.out.println("    -permstat\tto print permanent generation statistics");
+        System.out.println("    -clstats\tto print class loader statistics");
         System.out.println("    -finalizerinfo\tto print information on objects awaiting finalization");
         super.printFlagsUsage();
     }
 
     public static final int MODE_HEAP_SUMMARY = 0;
     public static final int MODE_HISTOGRAM = 1;
-    public static final int MODE_PERMSTAT = 2;
+    public static final int MODE_CLSTATS = 2;
     public static final int MODE_PMAP = 3;
     public static final int MODE_HEAP_GRAPH_HPROF_BIN = 4;
     public static final int MODE_HEAP_GRAPH_GXL = 5;
@@ -78,8 +78,8 @@
             tool = new ObjectHistogram();
             break;
 
-        case MODE_PERMSTAT:
-            tool = new PermStat();
+        case MODE_CLSTATS:
+            tool = new ClassLoaderStats();
             break;
 
         case MODE_PMAP:
@@ -118,7 +118,9 @@
             } else if (modeFlag.equals("-histo")) {
                 mode = MODE_HISTOGRAM;
             } else if (modeFlag.equals("-permstat")) {
-                mode = MODE_PERMSTAT;
+                mode = MODE_CLSTATS;
+            } else if (modeFlag.equals("-clstats")) {
+                mode = MODE_CLSTATS;
             } else if (modeFlag.equals("-finalizerinfo")) {
                 mode = MODE_FINALIZERINFO;
             } else {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PMap.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PMap.java	Fri Mar 15 23:08:07 2013 -0700
@@ -58,10 +58,6 @@
       }
    }
 
-   protected boolean requiresVM() {
-      return false;
-   }
-
    public static void main(String[] args) throws Exception {
       PMap t = new PMap();
       t.start(args);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java	Fri Mar 15 23:08:07 2013 -0700
@@ -50,29 +50,23 @@
 
    public void run(PrintStream out) {
       Debugger dbg = getAgent().getDebugger();
-      run(out, dbg, getAgent().isJavaMode());
+      run(out, dbg);
    }
 
    public void run(PrintStream out, Debugger dbg) {
-      run(out, dbg, true);
-   }
-
-   private void run(PrintStream out, Debugger dbg, final boolean isJava) {
       CDebugger cdbg = dbg.getCDebugger();
       if (cdbg != null) {
          ConcurrentLocksPrinter concLocksPrinter = null;
-         if (isJava) {
-            // compute and cache java Vframes.
-            initJFrameCache();
-            if (concurrentLocks) {
-               concLocksPrinter = new ConcurrentLocksPrinter();
-            }
-            // print Java level deadlocks
-            try {
-               DeadlockDetector.print(out);
-            } catch (Exception exp) {
-               out.println("can't print deadlock information: " + exp.getMessage());
-            }
+         // compute and cache java Vframes.
+         initJFrameCache();
+         if (concurrentLocks) {
+            concLocksPrinter = new ConcurrentLocksPrinter();
+         }
+         // print Java level deadlocks
+         try {
+            DeadlockDetector.print(out);
+         } catch (Exception exp) {
+            out.println("can't print deadlock information: " + exp.getMessage());
          }
 
          List l = cdbg.getThreadList();
@@ -100,63 +94,59 @@
                      }
                      out.println();
                   } else {
-                     if (isJava) {
-                        // look for one or more java frames
-                        String[] names = null;
-                        // check interpreter frame
-                        Interpreter interp = VM.getVM().getInterpreter();
-                        if (interp.contains(pc)) {
-                           names = getJavaNames(th, f.localVariableBase());
-                           // print codelet name if we can't determine method
-                           if (names == null || names.length == 0) {
-                              out.print("<interpreter> ");
-                              InterpreterCodelet ic = interp.getCodeletContaining(pc);
-                              if (ic != null) {
-                                 String desc = ic.getDescription();
-                                 if (desc != null) out.print(desc);
-                              }
-                              out.println();
-                           }
-                        } else {
-                           // look for known code blobs
-                           CodeCache c = VM.getVM().getCodeCache();
-                           if (c.contains(pc)) {
-                              CodeBlob cb = c.findBlobUnsafe(pc);
-                              if (cb.isNMethod()) {
-                                 names = getJavaNames(th, f.localVariableBase());
-                                 // just print compiled code, if can't determine method
-                                 if (names == null || names.length == 0) {
-                                    out.println("<Unknown compiled code>");
-                                 }
-                              } else if (cb.isBufferBlob()) {
-                                 out.println("<StubRoutines>");
-                              } else if (cb.isRuntimeStub()) {
-                                 out.println("<RuntimeStub>");
-                              } else if (cb.isDeoptimizationStub()) {
-                                 out.println("<DeoptimizationStub>");
-                              } else if (cb.isUncommonTrapStub()) {
-                                 out.println("<UncommonTrap>");
-                              } else if (cb.isExceptionStub()) {
-                                 out.println("<ExceptionStub>");
-                              } else if (cb.isSafepointStub()) {
-                                 out.println("<SafepointStub>");
-                              } else {
-                                 out.println("<Unknown code blob>");
-                              }
-                           } else {
-                              printUnknown(out);
-                           }
-                        }
-                        // print java frames, if any
-                        if (names != null && names.length != 0) {
-                           // print java frame(s)
-                           for (int i = 0; i < names.length; i++) {
-                               out.println(names[i]);
-                           }
-                        }
-                     } else {
-                        printUnknown(out);
-                     }
+                      // look for one or more java frames
+                      String[] names = null;
+                      // check interpreter frame
+                      Interpreter interp = VM.getVM().getInterpreter();
+                      if (interp.contains(pc)) {
+                         names = getJavaNames(th, f.localVariableBase());
+                         // print codelet name if we can't determine method
+                         if (names == null || names.length == 0) {
+                            out.print("<interpreter> ");
+                            InterpreterCodelet ic = interp.getCodeletContaining(pc);
+                            if (ic != null) {
+                               String desc = ic.getDescription();
+                               if (desc != null) out.print(desc);
+                            }
+                            out.println();
+                         }
+                      } else {
+                         // look for known code blobs
+                         CodeCache c = VM.getVM().getCodeCache();
+                         if (c.contains(pc)) {
+                            CodeBlob cb = c.findBlobUnsafe(pc);
+                            if (cb.isNMethod()) {
+                               names = getJavaNames(th, f.localVariableBase());
+                               // just print compiled code, if can't determine method
+                               if (names == null || names.length == 0) {
+                                  out.println("<Unknown compiled code>");
+                               }
+                            } else if (cb.isBufferBlob()) {
+                               out.println("<StubRoutines>");
+                            } else if (cb.isRuntimeStub()) {
+                               out.println("<RuntimeStub>");
+                            } else if (cb.isDeoptimizationStub()) {
+                               out.println("<DeoptimizationStub>");
+                            } else if (cb.isUncommonTrapStub()) {
+                               out.println("<UncommonTrap>");
+                            } else if (cb.isExceptionStub()) {
+                               out.println("<ExceptionStub>");
+                            } else if (cb.isSafepointStub()) {
+                               out.println("<SafepointStub>");
+                            } else {
+                               out.println("<Unknown code blob>");
+                            }
+                         } else {
+                            printUnknown(out);
+                         }
+                      }
+                      // print java frames, if any
+                      if (names != null && names.length != 0) {
+                         // print java frame(s)
+                         for (int i = 0; i < names.length; i++) {
+                             out.println(names[i]);
+                         }
+                      }
                   }
                   f = f.sender(th);
                }
@@ -164,7 +154,7 @@
                exp.printStackTrace();
                // continue, may be we can do a better job for other threads
             }
-            if (isJava && concurrentLocks) {
+            if (concurrentLocks) {
                JavaThread jthread = (JavaThread) proxyToThread.get(th);
                if (jthread != null) {
                    concLocksPrinter.print(jthread, out);
@@ -180,10 +170,6 @@
       }
    }
 
-   protected boolean requiresVM() {
-      return false;
-   }
-
    public static void main(String[] args) throws Exception {
       PStack t = new PStack();
       t.start(args);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PermStat.java	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,277 +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.tools;
-
-import java.io.*;
-import java.util.*;
-
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.memory.*;
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.runtime.*;
-import sun.jvm.hotspot.tools.*;
-import sun.jvm.hotspot.utilities.*;
-
-/**
-  A command line tool to print perm. generation statistics.
-*/
-
-public class PermStat extends Tool {
-   boolean verbose = true;
-
-   public static void main(String[] args) {
-      PermStat ps = new PermStat();
-      ps.start(args);
-      ps.stop();
-   }
-
-   private static class ClassData {
-      Klass klass;
-      long  size;
-
-      ClassData(Klass klass, long size) {
-         this.klass = klass; this.size = size;
-      }
-   }
-
-   private static class LoaderData {
-      long     numClasses;
-      long     classSize;
-      List     classDetail = new ArrayList(); // List<ClassData>
-   }
-
-   public void run() {
-      printClassLoaderStatistics();
-   }
-
-   private void printClassLoaderStatistics() {
-      final PrintStream out = System.out;
-      final PrintStream err = System.err;
-      final Map loaderMap = new HashMap();
-      // loader data for bootstrap class loader
-      final LoaderData bootstrapLoaderData = new LoaderData();
-      if (verbose) {
-         err.print("finding class loader instances ..");
-      }
-
-      VM vm = VM.getVM();
-      ObjectHeap heap = vm.getObjectHeap();
-      Klass classLoaderKlass = vm.getSystemDictionary().getClassLoaderKlass();
-      try {
-         heap.iterateObjectsOfKlass(new DefaultHeapVisitor() {
-                         public boolean doObj(Oop oop) {
-                            loaderMap.put(oop, new LoaderData());
-                                                        return false;
-                         }
-                      }, classLoaderKlass);
-      } catch (Exception se) {
-         se.printStackTrace();
-      }
-
-      if (verbose) {
-         err.println("done.");
-         err.print("computing per loader stat ..");
-      }
-
-      SystemDictionary dict = VM.getVM().getSystemDictionary();
-      dict.classesDo(new SystemDictionary.ClassAndLoaderVisitor() {
-                        public void visit(Klass k, Oop loader) {
-                           if (! (k instanceof InstanceKlass)) {
-                              return;
-                           }
-                           LoaderData ld = (loader != null) ? (LoaderData)loaderMap.get(loader)
-                                                            : bootstrapLoaderData;
-                           if (ld != null) {
-                              ld.numClasses++;
-                              long size = computeSize((InstanceKlass)k);
-                              ld.classDetail.add(new ClassData(k, size));
-                              ld.classSize += size;
-                           }
-                        }
-                     });
-
-      if (verbose) {
-         err.println("done.");
-         err.print("please wait.. computing liveness");
-      }
-
-      // compute reverse pointer analysis (takes long time for larger app)
-      ReversePtrsAnalysis analysis = new ReversePtrsAnalysis();
-
-      if (verbose) {
-         analysis.setHeapProgressThunk(new HeapProgressThunk() {
-            public void heapIterationFractionUpdate(double fractionOfHeapVisited) {
-               err.print('.');
-            }
-            // This will be called after the iteration is complete
-            public void heapIterationComplete() {
-               err.println("done.");
-            }
-         });
-      }
-
-      try {
-         analysis.run();
-      } catch (Exception e) {
-         // e.printStackTrace();
-         if (verbose)
-           err.println("liveness analysis may be inaccurate ...");
-      }
-      ReversePtrs liveness = VM.getVM().getRevPtrs();
-
-      out.println("class_loader\tclasses\tbytes\tparent_loader\talive?\ttype");
-      out.println();
-
-      long numClassLoaders = 1L;
-      long totalNumClasses = bootstrapLoaderData.numClasses;
-      long totalClassSize  = bootstrapLoaderData.classSize;
-      long numAliveLoaders = 1L;
-      long numDeadLoaders  = 0L;
-
-      // print bootstrap loader details
-      out.print("<bootstrap>");
-      out.print('\t');
-      out.print(bootstrapLoaderData.numClasses);
-      out.print('\t');
-      out.print(bootstrapLoaderData.classSize);
-      out.print('\t');
-      out.print("  null  ");
-      out.print('\t');
-      // bootstrap loader is always alive
-      out.print("live");
-      out.print('\t');
-      out.println("<internal>");
-
-      for (Iterator keyItr = loaderMap.keySet().iterator(); keyItr.hasNext();) {
-         Oop loader = (Oop) keyItr.next();
-         LoaderData data = (LoaderData) loaderMap.get(loader);
-         numClassLoaders ++;
-         totalNumClasses += data.numClasses;
-         totalClassSize  += data.classSize;
-
-         out.print(loader.getHandle());
-         out.print('\t');
-         out.print(data.numClasses);
-         out.print('\t');
-         out.print(data.classSize);
-         out.print('\t');
-
-         class ParentFinder extends DefaultOopVisitor {
-            public void doOop(OopField field, boolean isVMField) {
-               if (field.getID().getName().equals("parent")) {
-                  parent = field.getValue(getObj());
-               }
-            }
-            private Oop parent = null;
-            public Oop getParent() { return parent; }
-         }
-
-         ParentFinder parentFinder = new ParentFinder();
-         loader.iterate(parentFinder, false);
-         Oop parent = parentFinder.getParent();
-         out.print((parent != null)? parent.getHandle().toString() : "  null  ");
-         out.print('\t');
-         boolean alive = (liveness != null) ? (liveness.get(loader) != null) : true;
-         out.print(alive? "live" : "dead");
-         if (alive) numAliveLoaders++; else numDeadLoaders++;
-         out.print('\t');
-         Klass loaderKlass = loader.getKlass();
-         if (loaderKlass != null) {
-            out.print(loaderKlass.getName().asString());
-            out.print('@');
-            out.print(loader.getKlass().getAddress());
-         } else {
-            out.print("    null!    ");
-         }
-         out.println();
-      }
-
-      out.println();
-      // summary line
-      out.print("total = ");
-      out.print(numClassLoaders);
-      out.print('\t');
-      out.print(totalNumClasses);
-      out.print('\t');
-      out.print(totalClassSize);
-      out.print('\t');
-      out.print("    N/A    ");
-      out.print('\t');
-      out.print("alive=");
-      out.print(numAliveLoaders);
-      out.print(", dead=");
-      out.print(numDeadLoaders);
-      out.print('\t');
-      out.print("    N/A    ");
-      out.println();
-   }
-
-   private static long objectSize(Oop oop) {
-      return oop == null ? 0L : oop.getObjectSize();
-   }
-
-   // Don't count the shared empty arrays
-   private static long arraySize(GenericArray arr) {
-     return arr.getLength() != 0L ? arr.getSize() : 0L;
-   }
-
-   private long computeSize(InstanceKlass k) {
-      long size = 0L;
-      // the InstanceKlass object itself
-      size += k.getSize();
-
-      // Constant pool
-      ConstantPool cp = k.getConstants();
-      size += cp.getSize();
-      if (cp.getCache() != null) {
-        size += cp.getCache().getSize();
-      }
-      size += arraySize(cp.getTags());
-
-      // Interfaces
-      size += arraySize(k.getLocalInterfaces());
-      size += arraySize(k.getTransitiveInterfaces());
-
-      // Inner classes
-      size += arraySize(k.getInnerClasses());
-
-      // Fields
-      size += arraySize(k.getFields());
-
-      // Methods
-      MethodArray methods = k.getMethods();
-      int nmethods = (int) methods.getLength();
-      if (nmethods != 0L) {
-         size += methods.getSize();
-         for (int i = 0; i < nmethods; ++i) {
-            Method m = methods.at(i);
-            size += m.getSize();
-            size += m.getConstMethod().getSize();
-         }
-      }
-
-      return size;
-   }
-}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/Tool.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/Tool.java	Fri Mar 15 23:08:07 2013 -0700
@@ -27,7 +27,6 @@
 import java.io.PrintStream;
 import java.util.Hashtable;
 import sun.jvm.hotspot.*;
-import sun.jvm.hotspot.bugspot.*;
 import sun.jvm.hotspot.runtime.*;
 import sun.jvm.hotspot.debugger.*;
 
@@ -35,7 +34,7 @@
 // override run & code main as shown below.
 
 public abstract class Tool implements Runnable {
-   private BugSpotAgent agent;
+   private HotSpotAgent agent;
    private int debugeeType;
 
    // debugeeType is one of constants below
@@ -51,12 +50,7 @@
       return true;
    }
 
-   // whether this tool requires debuggee to be java process or core?
-   protected boolean requiresVM() {
-      return true;
-   }
-
-   protected void setAgent(BugSpotAgent a) {
+   protected void setAgent(HotSpotAgent a) {
       agent = a;
    }
 
@@ -64,7 +58,7 @@
       debugeeType = dt;
    }
 
-   protected BugSpotAgent getAgent() {
+   protected HotSpotAgent getAgent() {
       return agent;
    }
 
@@ -155,7 +149,7 @@
            usage();
       }
 
-      agent = new BugSpotAgent();
+      agent = new HotSpotAgent();
       try {
         switch (debugeeType) {
           case DEBUGEE_PID:
@@ -198,33 +192,24 @@
 
       err.println("Debugger attached successfully.");
 
-      boolean isJava = agent.isJavaMode();
-      if (isJava) {
-         VM vm = VM.getVM();
-         if (vm.isCore()) {
-           err.println("Core build detected.");
-         } else if (vm.isClientCompiler()) {
-           err.println("Client compiler detected.");
-         } else if (vm.isServerCompiler()) {
-           err.println("Server compiler detected.");
-         } else {
-           throw new RuntimeException("Fatal error: " +
-                                 "should have been able to detect core/C1/C2 build");
-         }
+      VM vm = VM.getVM();
+      if (vm.isCore()) {
+        err.println("Core build detected.");
+      } else if (vm.isClientCompiler()) {
+        err.println("Client compiler detected.");
+      } else if (vm.isServerCompiler()) {
+        err.println("Server compiler detected.");
+      } else {
+        throw new RuntimeException("Fatal error: "
+            + "should have been able to detect core/C1/C2 build");
+      }
 
-         String version = vm.getVMRelease();
-         if (version != null) {
-            err.print("JVM version is ");
-            err.println(version);
-         }
+      String version = vm.getVMRelease();
+      if (version != null) {
+        err.print("JVM version is ");
+        err.println(version);
+      }
 
-         run();
-      } else { // not a java process or core
-         if (requiresVM()) {
-            err.println(getName() + " requires a java VM process/core!");
-         } else {
-            run();
-         }
-      }
+      run();
    }
 }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/SAPanel.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/SAPanel.java	Fri Mar 15 23:08:07 2013 -0700
@@ -50,7 +50,7 @@
 /**
  * This base class encapsulates many of the events that are fired from
  * the various panels in this directory so they can easily be plugged
- * in to different containing frameworks (HSDB, BugSpot).
+ * in to different containing frameworks (HSDB).
  */
 public class SAPanel extends JPanel {
     protected List listeners = new ArrayList();
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ConstantTag.java	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ConstantTag.java	Fri Mar 15 23:08:07 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -51,7 +51,6 @@
   private static final int JVM_CONSTANT_UnresolvedClassInError  = 103; // Resolution failed
   private static final int JVM_CONSTANT_MethodHandleInError     = 104; // Error tag due to resolution error
   private static final int JVM_CONSTANT_MethodTypeInError       = 105; // Error tag due to resolution error
-  private static final int JVM_CONSTANT_Object                  = 106; // Required for BoundMethodHandle arguments.
 
   // JVM_CONSTANT_MethodHandle subtypes //FIXME: connect these to data structure
   private static int JVM_REF_getField                = 1;
@@ -96,8 +95,6 @@
   public boolean isKlassIndex()             { return tag == JVM_CONSTANT_ClassIndex; }
   public boolean isStringIndex()            { return tag == JVM_CONSTANT_StringIndex; }
 
-  public boolean isObject()                 { return tag == JVM_CONSTANT_Object; }
-
   public boolean isKlassReference()   { return isKlassIndex() || isUnresolvedKlass(); }
   public boolean isFieldOrMethod()    { return isField() || isMethod() || isInterfaceMethod(); }
   public boolean isSymbol()           { return isUtf8(); }
@@ -123,7 +120,6 @@
     case JVM_CONSTANT_StringIndex :
     case JVM_CONSTANT_MethodHandle :
     case JVM_CONSTANT_MethodType :
-    case JVM_CONSTANT_Object :
       return BasicType.T_OBJECT;
     default:
       throw new InternalError("unexpected tag: " + tag);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js	Thu Mar 14 01:41:20 2013 -0400
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js	Fri Mar 15 23:08:07 2013 -0700
@@ -31,7 +31,6 @@
 
 sapkg.hotspot = Packages.sun.jvm.hotspot;
 sapkg.asm = sapkg.hotspot.asm;
-sapkg.bugspot = sapkg.hotspot.bugspot;
 sapkg.c1 = sapkg.hotspot.c1;
 sapkg.code = sapkg.hotspot.code;
 sapkg.compiler = sapkg.hotspot.compiler;
@@ -40,7 +39,6 @@
 // sapkg.debugger = sapkg.hotspot.debugger;
 
 sapkg.interpreter = sapkg.hotspot.interpreter;
-sapkg.livejvm = sapkg.hotspot.livejvm;
 sapkg.jdi = sapkg.hotspot.jdi;
 sapkg.memory = sapkg.hotspot.memory;
 sapkg.oops = sapkg.hotspot.oops;
--- a/hotspot/agent/src/share/native/jvmdi/sa.cpp	Thu Mar 14 01:41:20 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,601 +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.
- *
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <vector>
-#include "sa.hpp"
-#include "jni.h"
-#include "jvmdi.h"
-
-#ifndef WIN32
- #include <inttypes.h>
-#else
- typedef int int32_t;
-#endif
-
-#ifdef WIN32
- #include <windows.h>
- #define YIELD() Sleep(0)
- #define SLEEP() Sleep(10)
- #define vsnprintf _vsnprintf
-#else
- Error: please port YIELD() and SLEEP() macros to your platform
-#endif
-
-using namespace std;
-
-//////////////////////////////////////////////////////////////////////
-//                                                                  //
-// Exported "interface" for Java language-level interaction between //
-// the SA and the VM. Note that the SA knows about the layout of    //
-// certain VM data structures and that knowledge is taken advantage //
-// of in this code, although this interfaces with the VM via JVMDI. //
-//                                                                  //
-//////////////////////////////////////////////////////////////////////
-
-extern "C" {
-  /////////////////////////////////////
-  //                                 //
-  // Events sent by the VM to the SA //
-  //                                 //
-  /////////////////////////////////////
-
-  // Set by the SA when it attaches. Indicates that events should be
-  // posted via these exported variables, and that the VM should wait
-  // for those events to be acknowledged by the SA (via its setting
-  // saEventPending to 0).
-  JNIEXPORT volatile int32_t saAttached     = 0;
-
-  // Set to nonzero value by the VM when an event has been posted; set
-  // back to 0 by the SA when it has processed that event.
-  JNIEXPORT volatile int32_t saEventPending = 0;
-
-  // Kind of the event (from jvmdi.h)
-  JNIEXPORT volatile int32_t saEventKind    = 0;
-
-  //
-  // Exception events
-  //
-  JNIEXPORT jthread   saExceptionThread;
-  JNIEXPORT jclass    saExceptionClass;
-  JNIEXPORT jmethodID saExceptionMethod;
-  JNIEXPORT int32_t   saExceptionLocation;
-  JNIEXPORT jobject   saExceptionException;
-  JNIEXPORT jclass    saExceptionCatchClass;
-  JNIEXPORT jmethodID saExceptionCatchMethod;
-  JNIEXPORT int32_t   saExceptionCatchLocation;
-
-  //
-  // Breakpoint events
-  //
-  JNIEXPORT jthread   saBreakpointThread;
-  JNIEXPORT jclass    saBreakpointClass;
-  JNIEXPORT jmethodID saBreakpointMethod;
-  JNIEXPORT jlocation saBreakpointLocation;
-
-  ///////////////////////////////////////
-  //                                   //
-  // Commands sent by the SA to the VM //
-  //                                   //
-  ///////////////////////////////////////
-
-  extern JNIEXPORT const int32_t SA_CMD_SUSPEND_ALL       = 0;
-  extern JNIEXPORT const int32_t SA_CMD_RESUME_ALL        = 1;
-  extern JNIEXPORT const int32_t SA_CMD_TOGGLE_BREAKPOINT = 2;
-  extern JNIEXPORT const int32_t SA_CMD_BUF_SIZE          = 1024;
-
-  // SA sets this to a nonzero value when it is requesting a command
-  // to be processed; VM sets it back to 0 when the command has been
-  // executed
-  JNIEXPORT volatile int32_t saCmdPending   = 0;
-
-  // SA sets this to one of the manifest constants above to indicate
-  // the kind of command to be executed
-  JNIEXPORT volatile int32_t saCmdType      = 0;
-
-  // VM sets this to 0 if the last command succeeded or a nonzero
-  // value if it failed
-  JNIEXPORT volatile int32_t saCmdResult    = 0;
-
-  // If last command failed, this buffer will contain a descriptive
-  // error message
-  JNIEXPORT char             saCmdResultErrMsg[SA_CMD_BUF_SIZE];
-
-  //
-  // Toggling of breakpoint command arguments.
-  //
-  // Originally there were separate set/clear breakpoint commands
-  // taking a class name, method name and signature, and the iteration
-  // through the debug information was done in the SA. It turns out
-  // that doing this work in the target VM is significantly faster,
-  // and since interactivity when setting and clearing breakpoints is
-  // important, the solution which resulted in more C/C++ code was used.
-  //
-
-  // Source file name
-  JNIEXPORT char    saCmdBkptSrcFileName[SA_CMD_BUF_SIZE];
-
-  // Package name ('/' as separator instead of '.')
-  JNIEXPORT char    saCmdBkptPkgName[SA_CMD_BUF_SIZE];
-
-  // Line number
-  JNIEXPORT int32_t saCmdBkptLineNumber;
-
-  // Output back to SA: indicator whether the last failure of a
-  // breakpoint toggle command was really an error or just a lack of
-  // debug information covering the requested line. 0 if not error.
-  // Valid only if saCmdResult != 0.
-  JNIEXPORT int32_t saCmdBkptResWasError;
-
-  // Output back to SA: resulting line number at which the breakpoint
-  // was set or cleared (valid only if saCmdResult == 0)
-  JNIEXPORT int32_t saCmdBkptResLineNumber;
-
-  // Output back to SA: resulting byte code index at which the
-  // breakpoint was set or cleared (valid only if saCmdResult == 0)
-  JNIEXPORT int32_t saCmdBkptResBCI;
-
-  // Output back to SA: indicator whether the breakpoint operation
-  // resulted in a set or cleared breakpoint; nonzero if set, zero if
-  // cleared (valid only if saCmdResult == 0)
-  JNIEXPORT int32_t saCmdBkptResWasSet;
-
-  // Output back to SA: method name the breakpoint was set in (valid
-  // only if saCmdResult == 0)
-  JNIEXPORT char    saCmdBkptResMethodName[SA_CMD_BUF_SIZE];
-
-  // Output back to SA: method signature (JNI style) the breakpoint
-  // was set in (valid only if saCmdResult == 0)
-  JNIEXPORT char    saCmdBkptResMethodSig[SA_CMD_BUF_SIZE];
-}
-
-// Internal state
-static JavaVM* jvm = NULL;
-static JVMDI_Interface_1* jvmdi = NULL;
-static jthread debugThreadObj = NULL;
-static bool suspended = false;
-static vector<jthread> suspendedThreads;
-static JVMDI_RawMonitor eventLock = NULL;
-
-class MonitorLocker {
-private:
-  JVMDI_RawMonitor lock;
-public:
-  MonitorLocker(JVMDI_RawMonitor lock) {
-    this->lock = lock;
-    if (lock != NULL) {
-      jvmdi->RawMonitorEnter(lock);
-    }
-  }
-  ~MonitorLocker() {
-    if (lock != NULL) {
-      jvmdi->RawMonitorExit(lock);
-    }
-  }
-};
-
-class JvmdiDeallocator {
-private:
-  void* ptr;
-public:
-  JvmdiDeallocator(void* ptr) {
-    this->ptr = ptr;
-  }
-  ~JvmdiDeallocator() {
-    jvmdi->Deallocate((jbyte*) ptr);
-  }
-};
-
-class JvmdiRefListDeallocator {
-private:
-  JNIEnv* env;
-  jobject* refList;
-  jint refCount;
-public:
-  JvmdiRefListDeallocator(JNIEnv* env, jobject* refList, jint refCount) {
-    this->env = env;
-    this->refList = refList;
-    this->refCount = refCount;
-  }
-  ~JvmdiRefListDeallocator() {
-    for (int i = 0; i < refCount; i++) {
-      env->DeleteGlobalRef(refList[i]);
-    }
-    jvmdi->Deallocate((jbyte*) refList);
-  }
-};
-
-static void
-stop(char* msg) {
-  fprintf(stderr, "%s", msg);
-  fprintf(stderr, "\n");
-  exit(1);
-}
-
-// This fills in the command result error message, sets the command
-// result to -1, and clears the pending command flag
-static void
-reportErrorToSA(const char* str, ...) {
-  va_list varargs;
-  va_start(varargs, str);
-  vsnprintf(saCmdResultErrMsg, sizeof(saCmdResultErrMsg), str, varargs);
-  va_end(varargs);
-  saCmdResult = -1;