changeset 2937:5b29b2f26eea

Merge
author Andrew John Hughes <ahughes@redhat.com>
date Wed, 05 Dec 2012 14:55:23 +0000
parents 3e928e5030ad (current diff) cea49ba2afcd (diff)
children 6b20a50ba2fa
files ChangeLog Makefile.am patches/cacao/jsig.patch
diffstat 12 files changed, 1149 insertions(+), 58 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Oct 31 11:42:49 2012 +0000
+++ b/ChangeLog	Wed Dec 05 14:55:23 2012 +0000
@@ -1,3 +1,106 @@
+2012-11-28  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* javac.in:
+	Restore deferencing of ecj arguments
+	lost when backporting from 7.
+
+2012-11-28  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* Makefile.am:
+	(add-archive): Only run -Xshare:dump when java
+	exists and we aren't building CACAO or JamVM.
+	(add-archive-debug): Likewise.
+	(add-archive-ecj): Likewise.
+
+2012-11-28  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* acinclude.m4:
+	(IT_FIND_COMPILER): Invoke IT_USING_ECJ.
+	* javac.in:
+	Add final else block which exits with an error.
+
+2011-07-05  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* javac.in: Add -XDignore.symbol.file=true
+	when using javac to avoid numerous proprietary
+	warnings.
+
+2010-12-08  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* javac.in:
+	Pass -Xprefer:source (if javac is used) to
+	pick up local OpenJDK versions of classes
+	prior to those in the boot JDK.
+
+2009-07-21  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* acinclude.m4:
+	(IT_USING_ECJ): Work out whether javac is ecj or not.
+	* javac.in:
+	Run @JAVAC@ rather than @ECJ@ and vary arguments as
+	needed depending on @USING_ECJ@.
+
+2009-07-09  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* Makefile.am:
+	Add ANT_RESPECT_JAVA_HOME for Gentoo ant support.
+
+2012-11-28  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* Makefile.am:
+	(ICEDTEA_BOOTSTRAP_CLASSES): Add the generated
+	file ORBUtilSystemException.java if the build JDK
+	has the old version.
+	* configure.ac:
+	Add checks for com.sun.corba.se.impl.logging.ORBUtilSystemException
+	and the method ioExceptionOnClose(Throwable).
+	* patches/ecj/corba-dependencies.patch:
+	Regenerated against new version of icedtea.patch.
+	* patches/ecj/icedtea.patch:
+	Remove unneeded addition of bootclasspath.
+
+2012-11-20  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	RH513605: Updating/Installing OpenJDK should recreate
+	the shared class-data archive
+	* Makefile.am:
+	(icedtea-against-icedtea): Depend on add-archive.
+	(clean-icedtea-against-icedtea): Depend on clean-add-archive.
+	(icedtea-debug-against-icedtea): Depend on add-archive-debug.
+	(clean-icedtea-against-icedtea): Depend on clean-add-archive-debug.
+	(add-archive): Run -Xshare:dump on the newly built JDK.
+	(clean-add-archive): Delete stamp.
+	(add-archive-debug): Same as add-archive for icedtea-debug.
+	(clean-add-archive-debug): Same as clean-add-archive for icedtea-debug.
+	(icedtea-ecj-against-icedtea): Depend on add-archive-ecj.
+	(clean-icedtea-against-icedtea): Depend on clean-add-archive-ecj.
+	(add-archive-ecj): Same as add-archive for icedtea-ecj.
+	(clean-add-archive-ecj): Same as clean-add-archive for icedtea-ecj.
+	* NEWS: Mention.
+
+2012-11-06  Xerxes RĂ„nby  <xerxes@zafena.se>
+	    Stefan Ring  <stefan@complang.tuwien.ac.at>
+
+	* Makefile.am (CACAO_VERSION, CACAO_SHA256SUM): Updated.
+	(ICEDTEA_PATCHES): Removed patches/cacao/jsig.patch.
+	(stamps/cacao.stamp): Create Xusage.txt and libjsig.so as for JamVM.
+	* patches/cacao/jsig.patch: Removed.
+	* HACKING: Updated.
+	* NEWS: Updated.
+
+2012-11-01  Lukas Berk  <lberk@redhat.com>
+
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Add patches/systemtap.patch.
+	(EXTRA_DIST): Add tapset/hotspot_gc.stp.in.
+	(stamps/icedtea.stamp): Build tapset/hotspot_gc.stp.
+	(stamps/icedtea-debug.stamp): Likewise.
+	* configure.ac: Generate tapset/hotspot_gc.stp.
+	* patches/systemtap_gc.patch:
+	Add Garbage Collection dtrace/systemtap probes to hotspot.
+	* tapset/hotspot_gc.stp.in:
+	Systemtap tapset allowing use of GC probes more comfortablely.
+
 2012-10-31  Andrew John Hughes  <gnu.andrew@redhat.com>
 
 	* NEWS: Correct bad CVE number given by Oracle.
--- a/HACKING	Wed Oct 31 11:42:49 2012 +0000
+++ b/HACKING	Wed Dec 05 14:55:23 2012 +0000
@@ -89,9 +89,6 @@
 * icedtea-java2d-mitre-join.patch: Backport fix for mitre join decoration (S6812600).
 * icedtea-java2d-stroker-internal-joint.patch: Fix penultimate joint created by GeneralPath.closePath().
 * icedtea-java2d-stroker-internal-close-joint.patch: Fix final joint created by GeneralPath.closePath().
-* icedtea-cacao.patch: For the 'java' command, create new thread depending on the current VM.
-* icedtea-cacao-no-mmap-first-page.patch: Don't mmap the first memory page.
-* cacao/no-strict-aliasing.patch: Turn off strict aliasing which causes an issue with the verifier when building with GCC 4.4 (cacao PR129).
 * icedtea-shark.patch: Add support for the Shark JIT.
 * icedtea-xshm.patch: Support newer X11 headers for awt_GraphicsEnv.h.
 
@@ -138,6 +135,9 @@
 
 The following patches are only applied when building with the CACAO virtual machine:
 
+* cacao/launcher.patch: For the 'java' command, create new thread depending on the current VM.
+* cacao/memory.patch: Increase memory while building langtools for cacao builds.
+
 The following patches are to support Xrender pipeline (-Dsun.java2d.xrender):
 
 * icedtea-xrender-xxx.patch: Numbered patches from xrender branch
--- a/Makefile.am	Wed Oct 31 11:42:49 2012 +0000
+++ b/Makefile.am	Wed Dec 05 14:55:23 2012 +0000
@@ -5,8 +5,8 @@
 OPENJDK_VERSION = b28
 OPENJDK_URL = http://download.java.net/openjdk/jdk6/promoted/$(OPENJDK_VERSION)/
 
-CACAO_VERSION = cff92704c4e0
-CACAO_SHA256SUM = dc768c9d097fb056ad34fc6d5a57e8fd4f3b24bf515be92acc5ee4208160eb3f
+CACAO_VERSION = 9968abd511a3
+CACAO_SHA256SUM = 3b1ce9d2205d2afba4614a194484341758ee2cb340396310ac2c00e5a2a20955
 CACAO_BASE_URL = http://icedtea.classpath.org/download/drops/cacao
 CACAO_URL = $(CACAO_BASE_URL)/$(CACAO_VERSION).tar.gz
 CACAO_SRC_ZIP = cacao-$(CACAO_VERSION).tar.gz
@@ -80,6 +80,14 @@
 	$(SHARE)/javax/swing/plaf/basic/BasicDirectoryModel.java
 endif
 
+# Workaround for old OpenJDK versions with older CORBA classes
+if !LACKS_ORBUTILSYSTEMEXCEPTION
+if LACKS_ORBUTILSYSTEMEXCEPTION_IOEXCEPTIONONCLOSE_THROWABLE
+ICEDTEA_BOOTSTRAP_CLASSES += \
+	$(abs_top_srcdir)/generated/com/sun/corba/se/impl/logging/ORBUtilSystemException.java
+endif
+endif
+
 # Flags
 MEMORY_LIMIT = -J-Xmx1024m
 IT_CFLAGS=$(CFLAGS) $(ARCHFLAG)
@@ -433,7 +441,6 @@
 if BUILD_CACAO
 ICEDTEA_PATCHES += \
 	patches/cacao/launcher.patch \
-	patches/cacao/jsig.patch \
 	patches/cacao/memory.patch
 endif
 
@@ -453,6 +460,7 @@
 	patches/sdt-dtrace-hpp.patch \
 	patches/sdt-make.patch \
 	patches/sdt-arguments.patch \
+	patches/systemtap_gc.patch
 	patches/systemtap-gcc-4.5.patch \
 	patches/systemtap-alloc-size-workaround.patch
 endif
@@ -561,6 +569,7 @@
 	JAVAC="" \
 	JAVA_HOME="" \
 	JDK_HOME="" \
+	ANT_RESPECT_JAVA_HOME="TRUE" \
 	DISTRIBUTION_ID="$(DIST_ID)" \
 	DERIVATIVE_ID="$(ICEDTEA_NAME) $(PACKAGE_VERSION)$(ICEDTEA_REV)" \
 	DEBUG_CLASSFILES="true" \
@@ -646,6 +655,7 @@
 	tapset/hotspot.stp.in \
 	tapset/hotspot_jni.stp.in \
 	tapset/jstack.stp.in \
+	tapset/hotspot_gc.stp.in \
 	scripts/jni_create_stap.c \
 	scripts/jni_desc \
 	rewriter/agpl-3.0.txt \
@@ -1513,25 +1523,27 @@
 
 stamps/icedtea-against-icedtea.stamp: stamps/icedtea.stamp \
  stamps/add-jamvm.stamp stamps/add-cacao.stamp stamps/add-zero.stamp \
- stamps/add-systemtap.stamp stamps/add-pulseaudio.stamp stamps/add-nss.stamp stamps/add-tzdata-support.stamp
+ stamps/add-systemtap.stamp stamps/add-pulseaudio.stamp stamps/add-nss.stamp stamps/add-tzdata-support.stamp \
+ stamps/add-archive.stamp
 	mkdir -p stamps
 	touch stamps/icedtea-against-icedtea.stamp
 
 clean-icedtea-against-icedtea: clean-add-jamvm clean-add-zero clean-add-cacao \
- clean-add-systemtap clean-add-pulseaudio \
- clean-add-nss clean-add-tzdata-support
+ clean-add-systemtap clean-add-pulseaudio clean-add-nss clean-add-tzdata-support \
+ clean-add-archive
 	rm -f stamps/icedtea-against-icedtea.stamp
 
 stamps/icedtea-debug-against-icedtea.stamp: stamps/icedtea-debug.stamp \
  stamps/add-jamvm-debug.stamp stamps/add-cacao-debug.stamp \
  stamps/add-zero-debug.stamp stamps/add-systemtap-debug.stamp stamps/add-pulseaudio-debug.stamp \
- stamps/add-nss-debug.stamp stamps/add-tzdata-support-debug.stamp
+ stamps/add-nss-debug.stamp stamps/add-tzdata-support-debug.stamp stamps/add-archive-debug.stamp
 	mkdir -p stamps
 	touch stamps/icedtea-debug-against-icedtea.stamp
 
 clean-icedtea-debug-against-icedtea: clean-add-zero-debug \
  clean-add-jamvm-debug clean-add-cacao-debug clean-add-systemtap-debug \
- clean-add-pulseaudio-debug clean-add-nss-debug clean-add-tzdata-support-debug
+ clean-add-pulseaudio-debug clean-add-nss-debug clean-add-tzdata-support-debug \
+ clean-add-archive-debug
 	rm -f stamps/icedtea-debug-against-icedtea.stamp
 
 stamps/add-systemtap.stamp: stamps/icedtea.stamp
@@ -1543,6 +1555,9 @@
 	    < $(abs_top_builddir)/tapset/hotspot.stp \
 	    > $(BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot.stp; \
 	  sed -e '/\/client\/libjvm.so/d' \
+	    < $(abs_top_builddir)/tapset/hotspot_gc.stp \
+	    > $(BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot_gc.stp; \
+	  sed -e '/\/client\/libjvm.so/d' \
 	    < $(abs_top_builddir)/tapset/hotspot_jni.stp \
 	    > $(BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot_jni.stp; \
 	else \
@@ -1574,6 +1589,8 @@
 	else \
 	  cp $(abs_top_builddir)/tapset/hotspot.stp \
 	    $(DEBUG_BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot.stp; \
+	  cp $(abs_top_builddir)/tapset/hotspot_gc.stp \
+	    $(DEBUG_BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot_gc.stp; \
 	  cp $(abs_top_builddir)/tapset/hotspot_jni.stp \
 	    $(DEBUG_BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot_jni.stp; \
 	fi
@@ -1760,6 +1777,32 @@
 	rm -f $(DEBUG_BUILD_OUTPUT_DIR)/j2sdk-image/jre/lib/tz.properties
 	rm -f stamps/add-tzdata-support-debug.stamp
 
+stamps/add-archive.stamp: stamps/icedtea.stamp
+if !ENABLE_JAMVM
+if !ENABLE_CACAO
+	if [ -e $(BUILD_OUTPUT_DIR)/j2sdk-image/bin/java ] ; then \
+	  $(BUILD_OUTPUT_DIR)/j2sdk-image/bin/java -Xshare:dump ; \
+	fi
+endif
+endif
+	touch stamps/add-archive.stamp
+
+clean-add-archive:
+	rm -f stamps/add-archive.stamp
+
+stamps/add-archive-debug.stamp: stamps/icedtea-debug.stamp
+if !ENABLE_JAMVM
+if !ENABLE_CACAO
+	if [ -e $(DEBUG_BUILD_OUTPUT_DIR)/j2sdk-image/bin/java ] ; then \
+	  $(DEBUG_BUILD_OUTPUT_DIR)/j2sdk-image/bin/java -Xshare:dump ; \
+	fi
+endif
+endif
+	touch stamps/add-archive-debug.stamp
+
+clean-add-archive-debug:
+	rm -f stamps/add-archive-debug.stamp
+
 # OpenJDK ecj Targets
 # ===================
 
@@ -1780,12 +1823,13 @@
 	rm -f stamps/icedtea-ecj.stamp
 
 stamps/icedtea-against-ecj.stamp: stamps/icedtea-ecj.stamp stamps/add-systemtap-ecj.stamp \
- stamps/add-pulseaudio-ecj.stamp stamps/add-nss-ecj.stamp stamps/add-tzdata-support-ecj.stamp
+ stamps/add-pulseaudio-ecj.stamp stamps/add-nss-ecj.stamp stamps/add-tzdata-support-ecj.stamp \
+ stamps/add-archive-ecj.stamp
 	mkdir -p stamps
 	touch stamps/icedtea-against-ecj.stamp
 
 clean-icedtea-against-ecj: clean-add-systemtap-ecj clean-add-pulseaudio-ecj clean-add-nss-ecj \
- clean-add-tzdata-support-ecj
+ clean-add-tzdata-support-ecj clean-add-archive-ecj
 	rm -f stamps/icedtea-against-ecj.stamp
 
 stamps/add-systemtap-ecj.stamp: stamps/icedtea-ecj.stamp
@@ -1797,11 +1841,16 @@
 	    < $(abs_top_builddir)/tapset/hotspot.stp \
 	    > $(ECJ_BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot.stp; \
 	  sed -e '/\/client\/libjvm.so/d' \
+	    < $(abs_top_builddir)/tapset/hotspot_gc.stp \
+	    > $(ECJ_BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot_gc.stp; \
+	  sed -e '/\/client\/libjvm.so/d' \
 	    < $(abs_top_builddir)/tapset/hotspot_jni.stp \
 	    > $(ECJ_BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot_jni.stp; \
 	else \
 	  cp $(abs_top_builddir)/tapset/hotspot.stp \
 	    $(ECJ_BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot.stp; \
+	  cp $(abs_top_builddir)/tapset/hotspot_gc.stp \
+	    $(ECJ_BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot_gc.stp; \
 	  cp $(abs_top_builddir)/tapset/hotspot_jni.stp \
 	    $(ECJ_BUILD_OUTPUT_DIR)/j2sdk-image/tapset/hotspot_jni.stp; \
 	fi
@@ -1899,6 +1948,19 @@
 	rm -f $(ECJ_BUILD_OUTPUT_DIR)/j2sdk-image/jre/lib/tz.properties
 	rm -f stamps/add-tzdata-support-ecj.stamp
 
+stamps/add-archive-ecj.stamp: stamps/icedtea-ecj.stamp
+if !ENABLE_JAMVM
+if !ENABLE_CACAO
+	if [ -e $(ECJ_BUILD_OUTPUT_DIR)/j2sdk-image/bin/java ] ; then \
+	  $(ECJ_BUILD_OUTPUT_DIR)/j2sdk-image/bin/java -Xshare:dump ; \
+	fi
+endif
+endif
+	touch stamps/add-archive-ecj.stamp
+
+clean-add-archive-ecj:
+	rm -f stamps/add-archive-ecj.stamp
+
 # Rebuild targets
 
 rebuild:
@@ -2124,6 +2186,8 @@
 	  --enable-jre-layout $(CACAO_CONFIGURE_ARGS); \
 	$(ARCH_PREFIX) $(MAKE) -j$(PARALLEL_JOBS) install
 	ln -s server $(abs_top_builddir)/cacao/install/jre/lib/$(INSTALL_ARCH_DIR)/client
+	touch $(abs_top_builddir)/cacao/install/jre/lib/$(INSTALL_ARCH_DIR)/server/Xusage.txt
+	ln -sf client/libjvm.so $(abs_top_builddir)/cacao/install/jre/lib/$(INSTALL_ARCH_DIR)/libjsig.so
 endif
 endif
 	mkdir -p stamps
@@ -2482,6 +2546,12 @@
 # Target Aliases
 # ===============
 
+add-archive: stamps/add-archive.stamp
+
+add-archive-debug: stamps/add-archive-debug.stamp
+
+add-archive-ecj: stamps/add-archive-ecj.stamp
+
 bootstrap-directory-ecj: stamps/bootstrap-directory-ecj.stamp
 
 bootstrap-directory: stamps/bootstrap-directory.stamp
--- a/NEWS	Wed Oct 31 11:42:49 2012 +0000
+++ b/NEWS	Wed Dec 05 14:55:23 2012 +0000
@@ -56,6 +56,14 @@
     are actually missing from the boot JDK
   - PR1114: Provide option to turn off downloading of tarballs (--disable-downloading)
   - PR1176: Synchronise CACAO rules between IcedTea6/7/8 where possible
+  - RH513605: Updating/Installing OpenJDK should recreate the shared class-data archive
+* CACAO
+  - PR1120: Unified version for icedtea6/7
+  - CA166, CA167: check-langtools fixes for icedtea6
+  - Implemented sun.misc.Perf.highResCounter
+  - CACAO now identifies by its own Mercurial revision
+  - Some memory barrier maintenance
+  - Ability to run when compiled as Thumb on armv5 (no Thumb JIT though) 
 * JamVM
   - ARMv6 armhf: Changes for Raspbian (Raspberry Pi)
   - PPC: Don't use lwsync if it isn't supported
--- a/acinclude.m4	Wed Oct 31 11:42:49 2012 +0000
+++ b/acinclude.m4	Wed Dec 05 14:55:23 2012 +0000
@@ -139,6 +139,9 @@
       JAVAC="${ECJ} -nowarn"
     fi
   fi
+
+  IT_USING_ECJ
+
   AC_SUBST(ECJ)
   AC_SUBST(JAVAC)
 ])
@@ -1857,3 +1860,16 @@
   AM_CONDITIONAL([DOWNLOADING], test x"${enable_downloading}" = "xyes")
   AC_SUBST([enable_downloading])
 ])
+
+AC_DEFUN([IT_USING_ECJ],[
+AC_CACHE_CHECK([if we are using ecj as javac], it_cv_ecj, [
+if $JAVAC -version 2>&1| grep '^Eclipse' >&AS_MESSAGE_LOG_FD ; then
+  it_cv_ecj=yes;
+else
+  it_cv_ecj=no;
+fi
+])
+USING_ECJ=$it_cv_ecj
+AC_SUBST(USING_ECJ)
+AC_PROVIDE([$0])dnl
+])
--- a/configure.ac	Wed Oct 31 11:42:49 2012 +0000
+++ b/configure.ac	Wed Dec 05 14:55:23 2012 +0000
@@ -58,12 +58,21 @@
 IT_DISABLE_JDK_TESTS
 
 IT_CHECK_FOR_METHOD([JAVAX_SWING_PLAF_BASIC_BASICDIRECTORYMODEL_ADDPROPERTYCHANGELISTENER],
-  [javax.swing.plaf.basic.BasicDirectoryModel.addPropertyChangeListener],
+  [javax.swing.plaf.basic.BasicDirectoryModel.addPropertyChangeListener(PropertyChangeListener)],
   [javax.swing.plaf.basic.BasicDirectoryModel],
   ["addPropertyChangeListener",java.beans.PropertyChangeListener.class],
   [javax.swing.plaf.basic.BasicDirectoryModel model = new javax.swing.plaf.basic.BasicDirectoryModel(new javax.swing.JFileChooser()); model.addPropertyChangeListener(model)]
 )
 
+# Workaround issue with old CORBA classes in old OpenJDK builds
+IT_CHECK_FOR_CLASS([ORBUTILSYSTEMEXCEPTION],[com.sun.corba.se.impl.logging.ORBUtilSystemException])
+IT_CHECK_FOR_METHOD([ORBUTILSYSTEMEXCEPTION_IOEXCEPTIONONCLOSE_THROWABLE],
+  [com.sun.corba.se.impl.logging.ORBUtilSystemException.ioExceptionOnClose(Throwable)],
+  [com.sun.corba.se.impl.logging.ORBUtilSystemException],
+  ["ioExceptionOnClose",java.lang.Throwable.class],
+  [new com.sun.corba.se.impl.logging.ORBUtilSystemException(null).ioExceptionOnClose(new InternalError())]
+)
+
 # Use xvfb-run if found to run gui tests (check-jdk).
 AC_CHECK_PROG(XVFB_RUN_CMD, xvfb-run, [xvfb-run -a -e xvfb-errors], [])
 AC_SUBST(XVFB_RUN_CMD)
@@ -327,6 +336,7 @@
   AC_CONFIG_FILES([tapset/hotspot.stp])
   AC_CONFIG_FILES([tapset/hotspot_jni.stp])
   AC_CONFIG_FILES([tapset/jstack.stp])
+  AC_CONFIG_FILES([tapset/hotspot_gc.stp])
 fi
 
 dnl Check for libpng headers and libraries.
--- a/javac.in	Wed Oct 31 11:42:49 2012 +0000
+++ b/javac.in	Wed Dec 05 14:55:23 2012 +0000
@@ -4,11 +4,13 @@
 use constant STRIP_ARGS => qw(-Werror -implicit:none -J-Xbootclasspath/p:);
 
 my $ECJ_WARNINGS="-nowarn";
+my $JAVAC_WARNINGS="-nowarn";
 
 my @bcoption;
 push @bcoption, '-bootclasspath', glob '@abs_top_builddir@/bootstrap/jdk1.6.0/jre/lib/rt.jar'
     unless grep {$_ eq '-bootclasspath'} @ARGV;
 my @ecj_parms = ($ECJ_WARNINGS, @bcoption);
+my @javac_parms = ($JAVAC_WARNINGS, '-Xprefer:source', '-XDignore.symbol.file=true');
 
 # Work around ecj's inability to handle duplicate command-line
 # options and unknown javac options.
@@ -49,6 +51,18 @@
     my $ecj_args = gen_ecj_opts( \@ARGV );
     exec '@abs_top_builddir@/native-ecj', @ecj_parms, @$ecj_args ;
 }
+elsif ( -e "@JAVAC@" )
+{
+    if ("@USING_ECJ@" eq "yes")
+    {
+	my $ecj_args = gen_ecj_opts( \@ARGV );
+	exec '@JAVAC@', @ecj_parms, @$ecj_args ;
+    }
+    else
+    {
+	exec '@JAVAC@', @javac_parms, @ARGV ;
+    }
+}
 elsif ( -e "@ECJ_JAR@" )
 {
     my ($vm_args, $javac_args) = split_vm_args (gen_ecj_opts( \@ARGV ));
@@ -59,6 +73,6 @@
 }
 else
 {
-    my $ecj_args = gen_ecj_opts( \@ARGV );
-    exec '@ECJ@', @ecj_parms, @$ecj_args ;
+    print STDERR "No Java compiler to run";
+    exit -1;
 }
--- a/patches/cacao/jsig.patch	Wed Oct 31 11:42:49 2012 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-diff -Nru cacao.orig/Makefile.am cacao/Makefile.am
---- cacao.orig/cacao/src/cacao/Makefile.am	2008-08-04 17:51:28.000000000 +0100
-+++ cacao/cacao/src/cacao/Makefile.am	2010-05-11 10:29:35.000000000 +0100
-@@ -96,12 +96,12 @@
- 	$(mkdir_p) $(prefix)/jre/lib/$(JAVA_ARCH)/server
- 	$(LN_S) -f $(libdir)/libjvm.so $(prefix)/jre/lib/$(JAVA_ARCH)/server
- 	$(ECHO) $(ECHO_N) > $(prefix)/jre/lib/$(JAVA_ARCH)/server/Xusage.txt
--	$(ECHO) $(ECHO_N) > $(prefix)/jre/lib/$(JAVA_ARCH)/server/libjsig.so
-+	$(ECHO) $(ECHO_N) > $(prefix)/jre/lib/$(JAVA_ARCH)/libjsig.so
- 
- uninstall-local:
- 	rm -f $(prefix)/jre/lib/$(JAVA_ARCH)/server/libjvm.so
- 	rm -f $(prefix)/jre/lib/$(JAVA_ARCH)/server/Xusage.txt
--	rm -f $(prefix)/jre/lib/$(JAVA_ARCH)/server/libjsig.so
-+	rm -f $(prefix)/jre/lib/$(JAVA_ARCH)/libjsig.so
- endif
- 
- 
--- a/patches/ecj/corba-dependencies.patch	Wed Oct 31 11:42:49 2012 +0000
+++ b/patches/ecj/corba-dependencies.patch	Wed Dec 05 14:55:23 2012 +0000
@@ -1,15 +1,16 @@
-diff -Nru openjdk.orig/corba/make/common/Rules.gmk openjdk/corba/make/common/Rules.gmk
---- openjdk-ecj.orig/corba/make/common/Rules.gmk	2012-08-15 16:52:40.749869095 +0100
-+++ openjdk-ecj/corba/make/common/Rules.gmk	2012-08-15 16:59:16.800640493 +0100
-@@ -202,9 +202,11 @@
+diff -Nru openjdk-ecj.orig/corba/make/common/Rules.gmk openjdk-ecj/corba/make/common/Rules.gmk
+--- openjdk-ecj.orig/corba/make/common/Rules.gmk	2012-10-26 19:21:47.000000000 +0100
++++ openjdk-ecj/corba/make/common/Rules.gmk	2012-11-28 00:38:06.787628798 +0000
+@@ -201,8 +201,12 @@
+ 	  $(ECHO) "# Java sources to be compiled: (listed in file $(JAVA_SOURCE_LIST))"; \
  	  $(CAT) $(JAVA_SOURCE_LIST); \
  	  $(ECHO) "# Running javac:"; \
- 	  $(ECHO) $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -bootclasspath $(ICEDTEA_RT):$(CLASSBINDIR) \
--	    -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
+-	  $(ECHO) $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
+-	  $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
++	  $(ECHO) $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) \
 +	    -sourcepath "$(SOURCEPATH):$(JDK_TOPDIR)/src/share/classes:$(JDK_TOPDIR)/src/solaris/classes" \
 +	    -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
- 	  $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -bootclasspath $(ICEDTEA_RT):$(CLASSBINDIR) \
--	    -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
++	  $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) \
 +	    -sourcepath "$(SOURCEPATH):$(JDK_TOPDIR)/src/share/classes:$(JDK_TOPDIR)/src/solaris/classes" \
 +	    -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
  	fi
--- a/patches/ecj/icedtea.patch	Wed Oct 31 11:42:49 2012 +0000
+++ b/patches/ecj/icedtea.patch	Wed Dec 05 14:55:23 2012 +0000
@@ -327,22 +327,6 @@
  
  #
  # We want to privatize JVM symbols on Solaris. This is so the user can
-diff -Nru openjdk-ecj.orig/corba/make/common/Rules.gmk openjdk-ecj/corba/make/common/Rules.gmk
---- openjdk-ecj.orig/corba/make/common/Rules.gmk	2012-01-18 14:06:25.120768497 +0000
-+++ openjdk-ecj/corba/make/common/Rules.gmk	2012-01-18 21:44:43.635816486 +0000
-@@ -201,8 +201,10 @@
- 	  $(ECHO) "# Java sources to be compiled: (listed in file $(JAVA_SOURCE_LIST))"; \
- 	  $(CAT) $(JAVA_SOURCE_LIST); \
- 	  $(ECHO) "# Running javac:"; \
--	  $(ECHO) $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
--	  $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
-+	  $(ECHO) $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -bootclasspath $(ICEDTEA_RT):$(CLASSBINDIR) \
-+	    -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
-+	  $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -bootclasspath $(ICEDTEA_RT):$(CLASSBINDIR) \
-+	    -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
- 	fi
- 	@$(java-vm-cleanup)
- 
 diff -Nru openjdk-ecj.orig/corba/make/common/shared/Defs-java.gmk openjdk-ecj/corba/make/common/shared/Defs-java.gmk
 --- openjdk-ecj.orig/corba/make/common/shared/Defs-java.gmk	2012-01-18 16:50:57.569109033 +0000
 +++ openjdk-ecj/corba/make/common/shared/Defs-java.gmk	2012-01-18 21:43:04.150185964 +0000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/systemtap_gc.patch	Wed Dec 05 14:55:23 2012 +0000
@@ -0,0 +1,369 @@
+--- openjdk.orig/hotspot/src/share/vm/compiler/oopMap.cpp	2012-06-26 09:24:22.390325184 -0400
++++ openjdk/hotspot/src/share/vm/compiler/oopMap.cpp	2012-07-06 10:12:44.981413003 -0400
+@@ -33,9 +33,13 @@
+ #include "memory/resourceArea.hpp"
+ #include "runtime/frame.inline.hpp"
+ #include "runtime/signature.hpp"
++#include "utilities/dtrace.hpp"
+ #ifdef COMPILER1
+ #include "c1/c1_Defs.hpp"
+ #endif
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL1(provider, gc__collection__delete, *uintptr_t);
++#endif /* !USDT2 */
+ 
+ // OopMapStream
+ 
+@@ -677,6 +681,9 @@
+                     " - Derived: " INTPTR_FORMAT "  Base: " INTPTR_FORMAT " (Offset: %d)",
+           derived_loc, (address)*derived_loc, (address)base, offset);
+     }
++#ifndef USDT2
++  HS_DTRACE_PROBE1(hotspot, gc__collection__delete, entry);
++#endif /* !USDT2 */
+ 
+     // Delete entry
+     delete entry;
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	2012-07-12 09:48:40.349999515 -0400
++++ openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	2012-07-19 18:38:07.560757426 -0400
+@@ -53,11 +53,18 @@
+ #include "runtime/vmThread.hpp"
+ #include "services/management.hpp"
+ #include "services/memoryService.hpp"
++#include "utilities/dtrace.hpp"
+ #include "utilities/events.hpp"
+ #include "utilities/stack.inline.hpp"
+ 
+ #include <math.h>
+ 
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__ParallelCompact__clear, *uintptr_t, *uintptr_t);
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__parallel__collect, *uintptr_t, *uintptr_t);
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__move, *uintptr_t, *uintptr_t, *uintptr_t, *uintptr_t);
++#endif /* !USDT2 */
++
+ // All sizes are in HeapWords.
+ const size_t ParallelCompactData::Log2RegionSize  = 9; // 512 words
+ const size_t ParallelCompactData::RegionSize      = (size_t)1 << Log2RegionSize;
+@@ -433,6 +439,9 @@
+ 
+ void ParallelCompactData::clear()
+ {
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__ParallelCompact__clear, &_region_data, _region_data->data_location());
++#endif /* !USDT2 */
+   memset(_region_data, 0, _region_vspace->committed_size());
+ }
+ 
+@@ -1970,6 +1979,9 @@
+          "should be in vm thread");
+ 
+   ParallelScavengeHeap* heap = gc_heap();
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__parallel__collect, heap, heap->gc_cause());
++#endif /* !USDT2 */
+   GCCause::Cause gc_cause = heap->gc_cause();
+   assert(!heap->is_gc_active(), "not reentrant");
+ 
+@@ -3376,6 +3388,9 @@
+   // past the end of the partial object entering the region (if any).
+   HeapWord* const dest_addr = sd.partial_obj_end(dp_region);
+   HeapWord* const new_top = _space_info[space_id].new_top();
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__move, &beg_addr, &end_addr, &dest_addr, &new_top);
++#endif /* !USDT2 */
+   assert(new_top >= dest_addr, "bad new_top value");
+   const size_t words = pointer_delta(new_top, dest_addr);
+ 
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp	2012-08-15 12:04:43.837439833 -0400
++++ openjdk/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp	2012-08-15 12:01:47.897745719 -0400
+@@ -45,8 +45,13 @@
+ #include "runtime/thread.hpp"
+ #include "runtime/vmThread.hpp"
+ #include "utilities/copy.hpp"
++#include "utilities/dtrace.hpp"
+ #include "utilities/events.hpp"
+ 
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__G1__begin, *uintptr_t, *uintptr_t);
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__G1__end, *uintptr_t, *uintptr_t);
++ #endif /* !USDT2 */ 
+ class HeapRegion;
+ 
+ void G1MarkSweep::invoke_at_safepoint(ReferenceProcessor* rp,
+@@ -84,6 +89,9 @@
+   // The marking doesn't preserve the marks of biased objects.
+   BiasedLocking::preserve_marks();
+ 
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__G1__begin, &sh, sh->gc_cause());
++#endif /* !USDT2 */
+   mark_sweep_phase1(marked_for_unloading, clear_all_softrefs);
+ 
+   mark_sweep_phase2();
+@@ -103,6 +111,9 @@
+   GenRemSet* rs = sh->rem_set();
+   rs->invalidate(sh->perm_gen()->used_region(), true /*whole_heap*/);
+ 
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__G1__end, &sh, sh->gc_cause());
++#endif /* !USDT2 */
+   // "free at last gc" is calculated from these.
+   // CHF: cheating for now!!!
+   //  Universe::set_heap_capacity_at_last_gc(Universe::heap()->capacity());
+--- openjdk.orig/hotspot/src/share/vm/memory/tenuredGeneration.cpp	2012-08-15 12:03:43.009543167 -0400
++++ openjdk/hotspot/src/share/vm/memory/tenuredGeneration.cpp	2012-08-15 12:14:25.414381449 -0400
+@@ -33,6 +33,12 @@
+ #include "memory/tenuredGeneration.hpp"
+ #include "oops/oop.inline.hpp"
+ #include "runtime/java.hpp"
++#include "utilities/dtrace.hpp"
++
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__tenured__begin, bool, bool, size_t, bool);
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__tenured__end, bool, bool, size_t, bool);
++#endif /* !USDT2 */
+ 
+ TenuredGeneration::TenuredGeneration(ReservedSpace rs,
+                                      size_t initial_byte_size, int level,
+@@ -307,8 +313,14 @@
+                                 size_t size,
+                                 bool   is_tlab) {
+   retire_alloc_buffers_before_full_gc();
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__tenured__begin, full, clear_all_soft_refs, size, is_tlab);
++#endif  /* !USDT2 */
+   OneContigSpaceCardGeneration::collect(full, clear_all_soft_refs,
+                                         size, is_tlab);
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__tenured__end, full, clear_all_soft_refs, size, is_tlab);
++#endif  /* !USDT2 */
+ }
+ 
+ void TenuredGeneration::update_gc_stats(int current_level,
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp	2012-08-15 12:03:43.039543116 -0400
++++ openjdk/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp	2012-08-15 12:18:57.181932342 -0400
+@@ -49,6 +49,12 @@
+ #include "utilities/copy.hpp"
+ #include "utilities/globalDefinitions.hpp"
+ #include "utilities/workgroup.hpp"
++#include "utilities/dtrace.hpp"
++
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__parnew__begin, bool, bool, size_t, bool);
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__parnew__end, bool, bool, size_t, bool);
++#endif /* !USDT2 */
+ 
+ #ifdef _MSC_VER
+ #pragma warning( push )
+@@ -878,6 +884,9 @@
+                                bool   clear_all_soft_refs,
+                                size_t size,
+                                bool   is_tlab) {
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__parnew__begin, full, clear_all_soft_refs, size, is_tlab);
++#endif  /* !USDT2 */
+   assert(full || size > 0, "otherwise we don't want to collect");
+   GenCollectedHeap* gch = GenCollectedHeap::heap();
+   assert(gch->kind() == CollectedHeap::GenCollectedHeap,
+@@ -1032,6 +1041,10 @@
+     gch->print_heap_change(gch_prev_used);
+   }
+ 
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__parnew__end, full, clear_all_soft_refs, size, is_tlab);
++#endif  /* !USDT2 */
++
+   if (PrintGCDetails && ParallelGCVerbose) {
+     TASKQUEUE_STATS_ONLY(thread_state_set.print_termination_stats());
+     TASKQUEUE_STATS_ONLY(thread_state_set.print_taskqueue_stats());
+--- openjdk.orig/hotspot/src/share/vm/memory/defNewGeneration.cpp	2012-08-15 12:03:43.010543164 -0400
++++ openjdk/hotspot/src/share/vm/memory/defNewGeneration.cpp	2012-08-15 12:21:41.076673646 -0400
+@@ -38,6 +38,7 @@
+ #include "oops/oop.inline.hpp"
+ #include "runtime/java.hpp"
+ #include "utilities/copy.hpp"
++#include "utilities/dtrace.hpp"
+ #include "utilities/stack.inline.hpp"
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "thread_linux.inline.hpp"
+@@ -51,7 +52,10 @@
+ #ifdef TARGET_OS_FAMILY_windows
+ # include "thread_windows.inline.hpp"
+ #endif
+-
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__defnew__begin, bool, bool, size_t, bool);
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__defnew__end, bool, bool, size_t, bool);
++#endif /* !USDT2 */
+ //
+ // DefNewGeneration functions.
+ 
+@@ -528,6 +532,9 @@
+                                bool   clear_all_soft_refs,
+                                size_t size,
+                                bool   is_tlab) {
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__defnew__begin, full, clear_all_soft_refs, size, is_tlab);
++#endif  /* !USDT2 */
+   assert(full || size > 0, "otherwise we don't want to collect");
+   GenCollectedHeap* gch = GenCollectedHeap::heap();
+   _next_gen = gch->next_gen(this);
+@@ -661,6 +668,10 @@
+   to()->set_concurrent_iteration_safe_limit(to()->top());
+   SpecializationStats::print();
+   update_time_of_last_gc(os::javaTimeMillis());
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__defnew__end, full, clear_all_soft_refs, size, is_tlab);
++#endif  /* !USDT2 */
++
+ }
+ 
+ class RemoveForwardPointerClosure: public ObjectClosure {
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	2012-08-15 12:03:43.044543106 -0400
++++ openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	2012-08-15 12:25:26.632316692 -0400
+@@ -55,6 +55,12 @@
+ #include "runtime/vmThread.hpp"
+ #include "services/memoryService.hpp"
+ #include "services/runtimeService.hpp"
++#include "utilities/dtrace.hpp"
++
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__contig__begin, bool, bool, size_t, bool);
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__contig__end, bool, bool, size_t, bool);
++#endif /* !USDT2 */
+ 
+ // statics
+ CMSCollector* ConcurrentMarkSweepGeneration::_collector = NULL;
+@@ -1647,7 +1653,13 @@
+                                             size_t size,
+                                             bool   tlab)
+ {
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__contig__begin, full, clear_all_soft_refs, size, tlab);
++#endif /* !USDT2 */
+   collector()->collect(full, clear_all_soft_refs, size, tlab);
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__contig__end, full, clear_all_soft_refs, size, tlab);
++#endif /* !USDT2 */
+ }
+ 
+ void CMSCollector::collect(bool   full,
+--- openjdk.orig/hotspot/src/share/vm/memory/generation.cpp	2012-08-15 12:03:43.009543167 -0400
++++ openjdk/hotspot/src/share/vm/memory/generation.cpp	2012-08-15 12:27:46.378095083 -0400
+@@ -39,8 +39,14 @@
+ #include "oops/oop.inline.hpp"
+ #include "runtime/java.hpp"
+ #include "utilities/copy.hpp"
++#include "utilities/dtrace.hpp"
+ #include "utilities/events.hpp"
+ 
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__contig__begin, bool, bool, size_t, bool);
++  HS_DTRACE_PROBE_DECL4(provider, gc__collection__contig__end, bool, bool, size_t, bool);
++#endif /* !USDT2 */
++
+ Generation::Generation(ReservedSpace rs, size_t initial_size, int level) :
+   _level(level),
+   _ref_processor(NULL) {
+@@ -470,7 +476,13 @@
+   // refs discovery is over the entire heap, not just this generation
+   ReferenceProcessorSpanMutator
+     x(ref_processor(), GenCollectedHeap::heap()->reserved_region());
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__contig__begin, full, clear_all_soft_refs, size, is_tlab);
++#endif  /* !USDT2 */
+   GenMarkSweep::invoke_at_safepoint(_level, ref_processor(), clear_all_soft_refs);
++#ifndef USDT2
++  HS_DTRACE_PROBE4(hotspot, gc__collection__contig__end, full, clear_all_soft_refs, size, is_tlab);
++#endif  /* !USDT2 */
+   SpecializationStats::print();
+ }
+ 
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp	2012-07-25 13:24:07.000000000 -0400
++++ openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp	2012-08-17 10:26:44.181117802 -0400
+@@ -51,8 +51,17 @@
+ #include "runtime/vmThread.hpp"
+ #include "runtime/vm_operations.hpp"
+ #include "services/memoryService.hpp"
++#include "utilities/dtrace.hpp"
+ #include "utilities/stack.inline.hpp"
+ 
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__PSScavenge__begin, *uintptr_t, *uintptr_t);
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__PSScavenge__end, *uintptr_t, *uintptr_t);
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__PSParallelCompact__begin, *uintptr_t, *uintptr_t);
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__PSParallelCompact__end, *uintptr_t, *uintptr_t);
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__PSMarkSweep__begin, *uintptr_t, *uintptr_t);
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__PSMarkSweep__end, *uintptr_t, *uintptr_t);
++#endif /* !USDT2 */
+ 
+ HeapWord*                  PSScavenge::_to_space_top_before_gc = NULL;
+ int                        PSScavenge::_consecutive_skipped_scavenges = 0;
+@@ -226,7 +235,13 @@
+   PSAdaptiveSizePolicy* policy = heap->size_policy();
+   IsGCActiveMark mark;
+ 
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__PSScavenge__begin, &heap, heap->gc_cause());
++#endif /* !USDT2 */
+   bool scavenge_was_done = PSScavenge::invoke_no_policy();
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__PSScavenge__end, &heap, heap->gc_cause());
++#endif /* !USDT2 */
+ 
+ PSGCAdaptivePolicyCounters* counters = heap->gc_policy_counters();
+ if (UsePerfData)
+@@ -243,9 +258,21 @@
+     const bool clear_all_softrefs = cp->should_clear_all_soft_refs();
+ 
+     if (UseParallelOldGC) {
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__PSParallelCompact__begin, &heap, heap->gc_cause());
++#endif /* !USDT2 */
+       PSParallelCompact::invoke_no_policy(clear_all_softrefs);
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__PSParallelCompact__end, &heap, heap->gc_cause());
++#endif /* !USDT2 */
+     } else {
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__PSMarkSweep__begin, &heap, heap->gc_cause());
++#endif /* !USDT2 */
+       PSMarkSweep::invoke_no_policy(clear_all_softrefs);
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__PSMarkSweep__end, &heap, heap->gc_cause());
++#endif /* !USDT2 */
+     }
+   }
+ }
+--- openjdk.orig/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp	2012-07-25 13:24:07.000000000 -0400
++++ openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp	2012-08-31 15:14:23.936576341 -0400
+@@ -40,8 +40,14 @@
+ #include "runtime/handles.inline.hpp"
+ #include "runtime/java.hpp"
+ #include "runtime/vmThread.hpp"
++#include "utilities/dtrace.hpp"
+ #include "utilities/vmError.hpp"
+ 
++#ifndef USDT2
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__parscavenge__heap__begin, *uintptr_t, *uintptr_t);
++  HS_DTRACE_PROBE_DECL2(provider, gc__collection__parscavenge__heap__end, *uintptr_t, *uintptr_t);
++#endif /* !USDT2 */
++
+ PSYoungGen*  ParallelScavengeHeap::_young_gen = NULL;
+ PSOldGen*    ParallelScavengeHeap::_old_gen = NULL;
+ PSPermGen*   ParallelScavengeHeap::_perm_gen = NULL;
+@@ -806,7 +812,13 @@
+   }
+ 
+   VM_ParallelGCSystemGC op(gc_count, full_gc_count, cause);
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__parscavenge__heap__begin, &op, cause);
++#endif /* !USDT2 */
+   VMThread::execute(&op);
++#ifndef USDT2
++  HS_DTRACE_PROBE2(hotspot, gc__collection__parscavenge__heap__end, &op, cause);
++#endif /* !USDT2 */
+ }
+ 
+ // This interface assumes that it's being called by the
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tapset/hotspot_gc.stp.in	Wed Dec 05 14:55:23 2012 +0000
@@ -0,0 +1,534 @@
+/*
+ * probe - gc_collect_contig_begin
+ * 
+ * @name: gc_collect_contig_begin
+ * @is_full: If TRUE, attempt a full collection of the generation.
+ *           Else; perform a scavenge
+ * @size: The collection should achieve a minimum region of available
+ *        memory to allow for an allocation of 'size'.
+ * @is_tlab: Is this a Thread Local Allocation Buffer?
+ *
+ * Description: This marks the start of a contiguous space generation collection.
+ * 
+ */
+
+probe hotspot.gc_collect_contig_begin = 
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__contig__begin"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__contig__begin")
+{
+
+  name = "gc_collect_contig_begin";
+  is_full = $arg2;
+  size = $arg3;
+  is_tlab = $arg4;
+  probestr = sprintf("%s(is_full='%d', size='%d', is_tlab='%d')", name, is_full, size, is_tlab);
+
+}
+
+/*
+ * probe - gc_collect_contig_end
+ * 
+ * @name: gc_collect_contig_end_
+ * @is_full: If TRUE, attempt a full collection of the generation.
+ *           Else; perform a scavenge.
+ * @size: The collection should achieve a minimum region of available
+ *        memory to allow for an allocation of 'size'.
+ * @is_tlab: Is this a Thread Local Allocation Buffer?
+ *
+ * Description: This marks the end of a contiguous space generation collection.
+ * 
+ */
+
+probe hotspot.gc_collect_contig_end = 
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__contig__end"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__contig__end")
+{
+
+  name = "gc_collect_contig_end";
+  is_full = $arg2;
+  size = $arg3;
+  is_tlab = $arg4;
+  probestr = sprintf("%s(is_full='%d', size='%d', is_tlab='%d')", name, is_full, size, is_tlab);
+
+}
+
+/*
+ * probe - gc_collect_parnew_begin
+ * 
+ * @name: gc_collect_parnew_begin
+ * @is_full: If TRUE, attempt a full collection of the generation.
+ *           Else; perform a scavenge
+ * @size: The collection should achieve a minimum region of available
+ *        memory to allow for an allocation of 'size'.
+ * @is_tlab: Is this a Thread Local Allocation Buffer?
+ *
+ * Description: This marks the beginning of a parallel collection of a new 
+ * generation.
+ * 
+ */
+
+probe hotspot.gc_collect_parnew = 
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__parnew__begin"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__parnew__begin")
+{
+
+  name = "gc_collect_parnew_begin";
+  is_full = $arg2;
+  size = $arg3;
+  is_tlab = $arg4;
+  probestr = sprintf("%s(is_full='%d', size='%d', is_tlab='%d')", name, is_full, size, is_tlab);
+
+}
+
+/*
+ * probe - gc_collect_parnew_end
+ * 
+ * @name: gc_collect_parnew_end
+ * @is_full: If TRUE, attempt a full collection of the generation.
+ *           Else; perform a scavenge
+ * @size: The collection should achieve a minimum region of available
+ *        memory to allow for an allocation of 'size'.
+ * @is_tlab: Is this a Thread Local Allocation Buffer?
+ *
+ * Description: This marks the end of a parallel collection of a new 
+ * generation.
+ * 
+ */
+
+probe hotspot.gc_collect_parnew_end = 
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__parnew__end"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__parnew__end")
+{
+
+  name = "gc_collect_parnew_end";
+  is_full = $arg2;
+  size = $arg3;
+  is_tlab = $arg4;
+  probestr = sprintf("%s(is_full='%d', size='%d', is_tlab='%d')", name, is_full, size, is_tlab);
+
+}
+
+/*
+ * probe - gc_collect_defnew_begin
+ * 
+ * @name: gc_collect_defnew_begin
+ * @is_full: If TRUE, attempt a full collection of the generation.
+ *           Else; perform a scavenge
+ * @size: The collection should achieve a minimum region of available
+ *        memory to allow for an allocation of 'size'.
+ * @is_tlab: Is this a Thread Local Allocation Buffer?
+ *
+ * Description: This marks the start of a newly defined generation
+ * collection
+ * 
+ */
+
+probe hotspot.gc_collect_defnew_begin = 
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__defnew__begin"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__defnew__begin")
+{
+
+  name = "gc_collect_defnew_begin";
+  is_full = $arg2;
+  size = $arg3;
+  is_tlab = $arg4;
+  probestr = sprintf("%s(is_full='%d', size='%d', is_tlab='%d')", name, is_full, size, is_tlab);
+
+}
+
+/*
+ * probe - gc_collect_defnew_end
+ * 
+ * @name: gc_collect_defnew_end
+ * @is_full: If TRUE, attempt a full collection of the generation.
+ *           Else; perform a scavenge
+ * @size: The collection should achieve a minimum region of available
+ *        memory to allow for an allocation of 'size'.
+ * @is_tlab: Is this a Thread Local Allocation Buffer?
+ *
+ * Description: This marks the end of a newly defined generation
+ * collection
+ * 
+ */
+
+probe hotspot.gc_collect_defnew_end = 
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__defnew__end"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__defnew__end")
+{
+
+  name = "gc_collect_defnew_end";
+  is_full = $arg2;
+  size = $arg3;
+  is_tlab = $arg4;
+  probestr = sprintf("%s(is_full='%d', size='%d', is_tlab='%d')", name, is_full, size, is_tlab);
+
+}
+
+/*
+ * probe - gc_collect_tenured_begin
+ * 
+ * @name: gc_collect_tenured_begin
+ * @is_full: If TRUE, attempt a full collection of the generation.
+ *           Else; perform a scavenge
+ * @size: The collection should achieve a minimum region of available
+ *        memory to allow for an allocation of 'size'.
+ * @is_tlab: Is this a Thread Local Allocation Buffer?
+ *
+ * Description: This is the start of a collection of a tenured generation
+ * (a generation that has survived multiple garbage collections and is 
+ * now in a 'tenured' object space.
+ * 
+ */
+
+probe hotspot.gc_collect_tenured_begin = 
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__tenured__begin"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__tenured__begin")
+{
+
+  name = "gc_collect_tenured_begin";
+  is_full = $arg2;
+  size = $arg3;
+  is_tlab = $arg4;
+  probestr = sprintf("%s(is_full='%d', size='%d', is_tlab='%d')", name, is_full, size, is_tlab);
+
+}
+
+/*
+ * probe - gc_collect_tenured_end
+ * 
+ * @name: gc_collect_tenured_end
+ * @is_full: If TRUE, attempt a full collection of the generation.
+ *           Else; perform a scavenge
+ * @size: The collection should achieve a minimum region of available
+ *        memory to allow for an allocation of 'size'.
+ * @is_tlab: Is this a Thread Local Allocation Buffer?
+ *
+ * Description: This is the end of a collection of a tenured generation
+ * (a generation that has survived multiple garbage collections and is 
+ * now in a 'tenured' object space.
+ * 
+ */
+
+probe hotspot.gc_collect_tenured_end = 
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__tenured__end"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__tenured__end")
+{
+
+  name = "gc_collect_tenured_end";
+  is_full = $arg2;
+  size = $arg3;
+  is_tlab = $arg4;
+  probestr = sprintf("%s(is_full='%d', size='%d', is_tlab='%d')", name, is_full, size, is_tlab);
+
+}
+
+/*
+ * probe - gc_collect_parallel_scavenge_heap_begin
+ * 
+ * @name: gc_collect_parallel_scavenge_heap_begin
+ * @address: Address of region being collected.
+ * @cause: Cause of the collection.
+ * 
+ * Description: This is a parallel heap scavenge beginning, the jvm process doesn't
+ * have to halt while the gc is being completed.
+ */
+
+probe hotspot.gc_collect_parallel_scavenge =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__parscavenge__heap__begin"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__parscavenge__heap__begin")
+{
+  name = "gc_collect_parallel_scavenge_heap_begin";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_parallel_scavenge_heap_end
+ * 
+ * @name: gc_collect_parallel_scavenge_heap_end
+ * @address: Address of region being collected.
+ * @cause: Cause of the collection.
+ * 
+ * Description: This is a parallel heap scavenge ending, the jvm process doesn't
+ * have to halt while the gc is being completed.
+ */
+
+probe hotspot.gc_collect_parallel_scavenge_heap_end =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__parscavenge__heap__end"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__parscavenge__heap__end")
+{
+  name = "gc_collect_parallel_scavenge_heap_end";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_parallel_collect
+ * 
+ * @name: gc_collect_parallel_collect
+ * @address: Address of object being collected.
+ * @cause: Cause of the collection.
+ *
+ * Description: This marks a parallel collection.
+ * 
+ */
+
+probe hotspot.gc_collect_parallel_collect =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__parallel__collect"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__parallel__collect")
+{
+  name = "gc_collect_parallel_collect";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_g1_begin
+ * 
+ * @name: gc_collect_g1_begin
+ * @address: Address of object being collected.
+ * @cause: Cause of the collection.
+ *
+ * Description: This marks the start of a G1 style garbage collection
+ * (Garbage-First Garbage Collector).
+ * 
+ */
+
+probe hotspot.gc_collect_g1_begin =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__G1__begin"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__G1__begin")
+{
+  name = "gc_collect_g1_begin";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_g1_end
+ * 
+ * @name: gc_collect_g1_end
+ * @address: Address of object being collected.
+ * @cause: Cause of the collection.
+ *
+ * Description: This marks then end of a  G1 style garbage collection
+ * (Garbage-First Garbage Collector).
+ * 
+ */
+
+probe hotspot.gc_collect_g1_end =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__G1__end"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__G1__end")
+{
+  name = "gc_collect_g1_end";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_delete
+ * 
+ * @name: gc_collect_delete
+ * @address: Address of object being collected.
+ * @cause: Cause of the collection.
+ *
+ * Description: A delete statement of an object.
+ * 
+ */
+
+probe hotspot.gc_collect_delete =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__delete"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__delete")
+{
+  name = "gc_collect_delete";
+  address = sprintf("0x%x", $arg1);
+  probestr = sprintf("%s(address='%s')", name, address);
+}
+
+/*
+ * probe - gc_collect_PSScavenge_begin
+ * 
+ * @name: gc_collect_PSScavenge_begin
+ * @address: Address of scavenge
+ * @cause: Cause of the collection.
+ *
+ * Description: A parallel scavenge begins.  A scavenge is a partial garbage
+ * collection which should be much more common than a full garbage collection
+ * throughout the course of the java program.
+ * 
+ */
+
+probe hotspot.gc_collect_PSScavenge_begin =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__PSScavenge__begin"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__PSScavenge__begin")
+{
+  name = "gc_collect_PSScavenge_begin";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_PSScavenge_end
+ * 
+ * @name: gc_collect_PSScavenge_end
+ * @address: Address of scavenge.
+ * @cause: Cause of the collection.
+ *
+ * Description: The end of the parallel scavenge.  The beginning and end of
+ * the scavenge is noted due to the possbility of multiple scavenges occuring
+ * at the same time.
+ * 
+ */
+
+probe hotspot.gc_collect_PSScavenge_end =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__PSScavenge__end"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__PSScavenge__end")
+{
+  name = "gc_collect_PSScavenge_end";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_PSParallelCompact_begin
+ * 
+ * @name: gc_collect_PSParallelCompact_begin
+ * @address: Address of compaction.
+ * @cause: Cause of the collection.
+ *
+ * Description: This marks the start of a parallel compaction.
+ * 
+ */
+
+probe hotspot.gc_collect_PSParallelCompact_begin =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__PSParallelCompact__begin"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__PSParallelCompact__begin")
+{
+  name = "gc_collect_PSParallelCompact_begin";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_PSParallelCompact_end
+ * 
+ * @name: gc_collect_PSParallelCompact_end
+ * @address: Address of compaction.
+ * @cause: Cause of the collection.
+ *
+ * Description: This marks the end of a  parallel compaction.
+ * 
+ */
+
+probe hotspot.gc_collect_PSParallelCompact_end =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__PSParallelCompact__end"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__PSParallelCompact__end")
+{
+  name = "gc_collect_PSParallelCompact_end";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_PSMarkSweep_begin
+ * 
+ * @name: gc_collect_PSMarkSweep_begin
+ * @address: Address of parallel mark sweep process.
+ * @cause: Cause of the collection.
+ *
+ * Description: This marks the start of a parallel mark sweep for
+ * objects that require collection.
+ * 
+ */
+
+probe hotspot.gc_collect_PSMarkSweep_begin =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__PSMarkSweep__begin"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__PSMarkSweep__begin")
+{
+  name = "gc_collect_PSMarkSweep_begin";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_PSMarkSweep_end
+ * 
+ * @name: gc_collect_PSMarkSweep_end
+ * @address: Address of parallel mark sweep process.
+ * @cause: Cause of the collection.
+ *
+ * Description: This marks the start of a parallel mark sweep for
+ * objects that require collection.
+ * 
+ */
+
+probe hotspot.gc_collect_PSMarkSweep_end =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__PSMarkSweep__end"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__PSMarkSweep__end")
+{
+  name = "gc_collect_PSMarkSweep_end";
+  address = sprintf("0x%x", $arg1);
+  cause = $arg2;
+  probestr = sprintf("%s(address='%s', cause='%d')", name, address, cause);
+}
+
+/*
+ * probe - gc_collect_move
+ * 
+ * @name: gc_collect_move
+ * @from_bottom_address: The bottom address of the object being moved.
+ * @from_top_address: The top address of the object being moved.
+ * @to_bottom_address: The bottom address of where the object is being moved to.
+ * @to_top_address: The top address of where the object is being moved to.
+ * @cause: Cause of the collection.
+ *
+ * Description: During garbage collections there are times where objects or 
+ * blocks of memory need to be moved.  This probe will detail from where 
+ * the memory is moving and where to.
+ * 
+ */
+
+probe hotspot.gc_collect_move =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__move"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__move")
+{
+  name = "gc_collect_move";
+  from_bottom_address = sprintf("0x%x", $arg1);
+  from_top_address = sprintf("0x%x", $arg2);
+  to_bottom_address = sprintf("0x%x", $arg3);
+  to_top_address = sprintf("0x%x", $arg4);
+  probestr = sprintf("%s(from_bottom_address='%s', from_top_address='%s', to_bottom_address='%s', to_top_address='%s')", name, from_bottom_address, from_top_address, to_bottom_address, to_top_address);
+
+}
+
+/*
+ * probe - gc_collect_clear
+ * 
+ * @name: gc_collect_clear
+ * @address: Address of object being collected.
+ * @cause: Cause of the collection.
+ *
+ * Description: This probe dictates the region of data that needs to be 
+ * cleared in a compaction action.
+ * 
+ */
+
+probe hotspot.gc_collect_clear =
+  process("@ABS_CLIENT_LIBJVM_SO@").mark("gc__collection__ParallelCompact__clear"),
+  process("@ABS_SERVER_LIBJVM_SO@").mark("gc__collection__ParallelCompact__clear")
+{
+  name = "gc_collect_clear";
+  region_data = sprintf("0x%x", $arg1);
+  data_location = sprintf("0x%x", $arg2);
+  probestr = sprintf("%s(region_data='%s', data_location='%s')", name, region_data, data_location);
+  
+}