This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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
+}
+

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]