This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[RFA] Fix JVMTI interpreted tests
- From: Keith Seitz <keiths at redhat dot com>
- To: Java Patch List <java-patches at gcc dot gnu dot org>
- Date: Wed, 23 May 2007 14:53:57 -0700
- Subject: [RFA] Fix JVMTI interpreted tests
Hi,
This patch addresses problems with the interpreted JVMTI testsuite that
have crept in over the past few months. The most notable problems show
up in the getstacktrace test, which times out during the test run.
There are a bunch of bugs that caused this, and I believe this resolves
them all.
QCC?
Keith
ChangeLog
2007-05-23 Keith Seitz <keiths@redhat.com>
* include/java-interp.h (_Jv_InterpFrame::get_pc): Only deduct
one when pc_ptr is non-NULL.
* prims.cc (parse_init_args): Enable JVMTI with agentlib
and agentpath options.
* testsuite/lib/libjava.exp (exec_gij): Add new addl_flags
parameter.
* testsuite/libjava.jvmti/jvmti-interp.exp (gij_jvmti_test_one):
Pass '-agentlib:dummyagent' when executing gij.
(gij_jvmti_run): Build dummy JVMTI agent before running tests,
and remove it when finished.
* testsuite/libjava.jvmti/dummyagent.c: New file.
Index: include/java-interp.h
===================================================================
--- include/java-interp.h (revision 124809)
+++ include/java-interp.h (working copy)
@@ -466,9 +466,9 @@
if (pc_ptr == NULL)
pc = 0;
else
- pc = *pc_ptr;
+ pc = *pc_ptr - 1;
- return pc - 1;
+ return pc;
}
};
Index: prims.cc
===================================================================
--- prims.cc (revision 124809)
+++ prims.cc (working copy)
@@ -1,6 +1,6 @@
// prims.cc - Code for core of runtime environment.
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation
This file is part of libgcj.
@@ -1522,6 +1522,9 @@
{
return -1;
}
+
+ // Mark JVMTI active
+ JVMTI::enabled = true;
}
continue;
@@ -1564,6 +1567,8 @@
return -1;
}
+ // Mark JVMTI active
+ JVMTI::enabled = true;
continue;
}
else if (vm_args->ignoreUnrecognized)
Index: testsuite/lib/libjava.exp
===================================================================
--- testsuite/lib/libjava.exp (revision 124809)
+++ testsuite/lib/libjava.exp (working copy)
@@ -1,4 +1,4 @@
-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006 Free Software Foundation
+# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007 Free Software Foundation
proc load_gcc_lib { filename } {
global srcdir
@@ -494,7 +494,7 @@
}
}
-proc exec_gij {jarfile expectFile ld_library_additions} {
+proc exec_gij {jarfile expectFile {ld_library_additions {}} {addl_flags {}}} {
global env
global libjava_ld_library_path
global ld_library_path
@@ -512,9 +512,9 @@
set gij [libjava_find_gij]
set classname [file rootname [file tail $jarfile]]
- puts "LD_LIBRARY_PATH=. $gij -cp $jarfile $classname"
+ puts "LD_LIBRARY_PATH=. $gij -cp $jarfile $addl_flags $classname"
- set result [libjava_load $gij "-cp $jarfile $classname"]
+ set result [libjava_load $gij "-cp $jarfile $addl_flags $classname"]
set status [lindex $result 0]
set output [lindex $result 1]
Index: testsuite/libjava.jvmti/jvmti-interp.exp
===================================================================
--- testsuite/libjava.jvmti/jvmti-interp.exp (revision 124809)
+++ testsuite/libjava.jvmti/jvmti-interp.exp (working copy)
@@ -133,7 +133,8 @@
libjava_arguments
set jarfile [file join [file dirname $file] $main.jar]
- if {! [exec_gij $jarfile [file rootname $file].out {}]} {
+ set gij_flags {-agentlib:dummyagent}
+ if {! [exec_gij $jarfile [file rootname $file].out {} $gij_flags]} {
return 0
}
@@ -151,14 +152,24 @@
# For now we only test JVMTI on native builds.
if {$build_triplet == $host_triplet} {
- catch { lsort [glob -nocomplain ${srcdir}/${subdir}/interp/*.jar] \
- } srcfiles
+ # Build our dummy JVMTI agent library
+ if {![gcj_jni_compile_c_to_so [file join $srcdir $subdir dummyagent.c]]} {
+ fail "compiling dummy JVMTI agent"
+ } else {
+ pass "compiling dummy JVMTI agent"
+
+ catch {lsort [glob -nocomplain ${srcdir}/${subdir}/interp/*.jar]} \
+ srcfiles
+
foreach x $srcfiles {
- gij_jvmti_test_one $x
+ gij_jvmti_test_one $x
}
+
+ gcj_cleanup libdummyagent.so
+ }
} else {
- verbose "JVMTI tests not run in cross-compilation environment"
+ verbose "JVMTI tests not run in cross-compilation environment"
}
}
Index: testsuite/libjava.jvmti/dummyagent.c
===================================================================
--- testsuite/libjava.jvmti/dummyagent.c (revision 0)
+++ testsuite/libjava.jvmti/dummyagent.c (revision 0)
@@ -0,0 +1,9 @@
+#include <jvmti.h>
+
+JNIEXPORT jint JNICALL
+Agent_OnLoad (JavaVM *vm, char *options, void *reserved)
+{
+ // nothing -- this is just a stub to get JVMTI properly
+ // initialized
+}
+