From e1b871ecc12b6c2a7b62a64ffbbd0714ab8d5c56 Mon Sep 17 00:00:00 2001 From: Keith Seitz Date: Thu, 24 May 2007 20:40:47 +0000 Subject: java-interp.h (_Jv_InterpFrame::get_pc): Only deduct one when pc_ptr is non-NULL. * 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. From-SVN: r125040 --- libjava/ChangeLog | 16 ++++++++++++++++ libjava/include/java-interp.h | 4 ++-- libjava/prims.cc | 7 ++++++- libjava/testsuite/lib/libjava.exp | 8 ++++---- libjava/testsuite/libjava.jvmti/dummyagent.c | 9 +++++++++ libjava/testsuite/libjava.jvmti/jvmti-interp.exp | 21 ++++++++++++++++----- 6 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 libjava/testsuite/libjava.jvmti/dummyagent.c diff --git a/libjava/ChangeLog b/libjava/ChangeLog index f109d240..b7216a5 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,19 @@ +2007-05-24 Keith Seitz + + * 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. + 2007-05-23 Steve Ellcey * Makefile.in: Regenerate. diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h index 52a04e7..204a49f 100644 --- a/libjava/include/java-interp.h +++ b/libjava/include/java-interp.h @@ -466,9 +466,9 @@ public: if (pc_ptr == NULL) pc = 0; else - pc = *pc_ptr; + pc = *pc_ptr - 1; - return pc - 1; + return pc; } }; diff --git a/libjava/prims.cc b/libjava/prims.cc index c2ecaf1..706ab4b 100644 --- a/libjava/prims.cc +++ b/libjava/prims.cc @@ -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 @@ parse_init_args (JvVMInitArgs* vm_args) { return -1; } + + // Mark JVMTI active + JVMTI::enabled = true; } continue; @@ -1564,6 +1567,8 @@ parse_init_args (JvVMInitArgs* vm_args) return -1; } + // Mark JVMTI active + JVMTI::enabled = true; continue; } else if (vm_args->ignoreUnrecognized) diff --git a/libjava/testsuite/lib/libjava.exp b/libjava/testsuite/lib/libjava.exp index 09d4f09..c684bf6 100644 --- a/libjava/testsuite/lib/libjava.exp +++ b/libjava/testsuite/lib/libjava.exp @@ -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 gcj_invoke {program expectFile ld_library_additions} { } } -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 @@ proc exec_gij {jarfile expectFile ld_library_additions} { 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] diff --git a/libjava/testsuite/libjava.jvmti/dummyagent.c b/libjava/testsuite/libjava.jvmti/dummyagent.c new file mode 100644 index 0000000..9e704a0 --- /dev/null +++ b/libjava/testsuite/libjava.jvmti/dummyagent.c @@ -0,0 +1,9 @@ +#include + +JNIEXPORT jint JNICALL +Agent_OnLoad (JavaVM *vm, char *options, void *reserved) +{ + // nothing -- this is just a stub to get JVMTI properly + // initialized +} + diff --git a/libjava/testsuite/libjava.jvmti/jvmti-interp.exp b/libjava/testsuite/libjava.jvmti/jvmti-interp.exp index 73a0582..c99dd34 100644 --- a/libjava/testsuite/libjava.jvmti/jvmti-interp.exp +++ b/libjava/testsuite/libjava.jvmti/jvmti-interp.exp @@ -133,7 +133,8 @@ proc gij_jvmti_test_one {file} { 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 @@ proc gij_jvmti_run {} { # 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" } } -- cgit v1.1