This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Re: [RFA] Add JDWP VM_INIT JVMTI callback
- From: Marco Trudel <mtrudel at gmx dot ch>
- To: Keith Seitz <keiths at redhat dot com>
- Cc: Java Patch List <java-patches at gcc dot gnu dot org>
- Date: Fri, 19 Jan 2007 01:00:39 +0100
- Subject: Re: [RFA] Add JDWP VM_INIT JVMTI callback
- References: <45AC7341.40004@redhat.com>
Keith Seitz wrote:
Hi,
This patch adds a JVMTI VM_INIT callback to be used by the JDWP code.
Currently this function simply sends the JDWP VM_INIT event
notification, but later it will do install additional JVMTI callbacks
for all the various JDWP event notifications.
Comments/questions/concerns?
This breaks at least cross-compilation for host=Linux target=minGW:
/home/Marco/Desktop/compile-lin-win/gcc-build/./gcc/xgcc -shared-libgcc
-B/home/Marco/Desktop/compile-lin-win/gcc-build/./gcc -nostdinc++
-L/home/Marco/Desktop/compile-lin-win/gcc-build/i686-pc-mingw32/libstdc++-v3/src
-L/home/Marco/Desktop/compile-lin-win/gcc-build/i686-pc-mingw32/libstdc++-v3/src/.libs
-L/home/Marco/Desktop/compile-lin-win/gcc-build/i686-pc-mingw32/winsup/mingw
-L/home/Marco/Desktop/compile-lin-win/gcc-build/i686-pc-mingw32/winsup/w32api/lib
-isystem /usr/local/src/gcc/winsup/mingw/include -isystem
/usr/local/src/gcc/winsup/w32api/include
-B/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/i686-pc-mingw32/bin/
-B/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/i686-pc-mingw32/lib/
-isystem
/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/i686-pc-mingw32/include
-isystem
/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/i686-pc-mingw32/sys-include
-DHAVE_CONFIG_H -I. -I/usr/local/src/gcc/libjava -I./include -I./gcj
-I/usr/local/src/gcc/libjava -Iinclude
-I/usr/local/src/gcc/libjava/include
-I/usr/local/src/gcc/libjava/classpath/include -Iclasspath/include
-I/usr/local/src/gcc/libjava/classpath/native/fdlibm
-I/usr/local/src/gcc/libjava/../boehm-gc/include -I../boehm-gc/include
-I/usr/local/src/gcc/libjava/libltdl
-I/usr/local/src/gcc/libjava/libltdl
-I/usr/local/src/gcc/libjava/.././libjava/../gcc
-I/usr/local/src/gcc/libjava/../zlib
-I/usr/local/src/gcc/libjava/../libffi/include -I../libffi/include
-fno-rtti -fnon-call-exceptions -mthreads -fdollars-in-identifiers
-Wswitch-enum -D_FILE_OFFSET_BITS=64 -ffloat-store -fomit-frame-pointer
-fno-omit-frame-pointer -Wextra -Wall -D_GNU_SOURCE
-DPREFIX=\"/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win\"
-DTOOLEXECLIBDIR=\"/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/i686-pc-mingw32/lib\"
-DJAVA_HOME=\"/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win\"
-DBOOT_CLASS_PATH=\"/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/share/java/libgcj-4.3.0.jar\"
-DJAVA_EXT_DIRS=\"/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/share/java/ext\"
-DGCJ_ENDORSED_DIRS=\"/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/share/java/gcj-endorsed\"
-DGCJ_VERSIONED_LIBDIR=\"/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/lib/gcj-4.3.0\"
-DPATH_SEPARATOR=\":\"
-DLIBGCJ_DEFAULT_DATABASE=\"/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/lib/gcj-4.3.0/classmap.db\"
-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL=\"gcj-4.3.0/classmap.db\" -g -O2
--sysroot=/home/Marco/Desktop/compile-lin-win/gcc-XYZXYZ-win/sys-root
-MT gnu/classpath/jdwp/natVMVirtualMachine.lo -MD -MP -MF
gnu/classpath/jdwp/.deps/natVMVirtualMachine.Tpo -c
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc -o
gnu/classpath/jdwp/natVMVirtualMachine.o
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc: In
static member function 'static void
gnu::classpath::jdwp::VMVirtualMachine::initialize()':
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:55:
warning: dereferencing type-punned pointer will break strict-aliasing rules
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:59:
error: invalid conversion from 'void (*)(jvmtiEnv*, JNIEnv*,
java::lang::Object*)' to 'void (*)(jvmtiEnv*, JNIEnv*, java::lang::Object*)'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc: At
global scope:
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:278:
warning: unused parameter 'kind'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:295:
warning: unused parameter 'klass'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:301:
warning: unused parameter 'klass'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:307:
warning: unused parameter 'klass'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:307:
warning: unused parameter 'id'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:315:
warning: unused parameter 'thread'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:315:
warning: unused parameter 'start'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:315:
warning: unused parameter 'length'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:322:
warning: unused parameter 'thread'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:322:
warning: unused parameter 'bb'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:328:
warning: unused parameter 'thread'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:334:
warning: unused parameter 'thread'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:340:
warning: unused parameter 'cl'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:351:
warning: unused parameter 'obj'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:351:
warning: unused parameter 'thread'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:351:
warning: unused parameter 'clazz'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:351:
warning: unused parameter 'method'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:351:
warning: unused parameter 'values'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:351:
warning: unused parameter 'nonVirtual'
/usr/local/src/gcc/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc:357:
warning: unused parameter 'clazz'
make[3]: *** [gnu/classpath/jdwp/natVMVirtualMachine.lo] Error 1
make[3]: Leaving directory
`/home/Marco/Desktop/compile-lin-win/gcc-build/i686-pc-mingw32/libjava'
Attached my proposed patch to fix it. Once again a forgotten "JNICALL".
Please guys, remember the JNICALLs! They're not necessary for Linux but
at least minGW needs them...
Changelog:
* gnu/classpath/jdwp/natVMVirtualMachine.cc
(jdwpVMInitCB): Added forgotten "JNICALL"
Marco
Keith
ChangeLog
2007-01-15 Keith Seitz <keiths@redhat.com>
* gnu/classpath/jdwp/natVMVirtualMachine.cc (DEFINE_CALLBACK):
New macro.
(ENABLE_EVENT): New macro.
(initialize): Define and enable JVMTI VM_INIT callback.
(jdwpVMInitCB): New function.
------------------------------------------------------------------------
Index: gnu/classpath/jdwp/natVMVirtualMachine.cc
===================================================================
--- gnu/classpath/jdwp/natVMVirtualMachine.cc (revision 120805)
+++ gnu/classpath/jdwp/natVMVirtualMachine.cc (working copy)
@@ -24,10 +24,12 @@
#include <java/util/Hashtable.h>
#include <java/util/Iterator.h>
+#include <gnu/classpath/jdwp/Jdwp.h>
#include <gnu/classpath/jdwp/VMFrame.h>
#include <gnu/classpath/jdwp/VMMethod.h>
#include <gnu/classpath/jdwp/VMVirtualMachine.h>
#include <gnu/classpath/jdwp/event/EventRequest.h>
+#include <gnu/classpath/jdwp/event/VmInitEvent.h>
#include <gnu/classpath/jdwp/exception/JdwpInternalErrorException.h>
#include <gnu/classpath/jdwp/util/MethodResult.h>
@@ -35,6 +37,13 @@
using namespace gnu::classpath::jdwp::event;
using namespace gnu::classpath::jdwp::util;
+// Forward declarations
+static void jdwpVMInitCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread);
+
+#define DEFINE_CALLBACK(Cb,Event) Cb.Event = jdwp ## Event ## CB
+#define ENABLE_EVENT(Event,Thread) \
+ _jdwp_jvmtiEnv->SetEventNotificationMode (JVMTI_ENABLE, \
+ JVMTI_EVENT_ ## Event, Thread)
// JVMTI environment
static jvmtiEnv *_jdwp_jvmtiEnv;
@@ -44,6 +53,12 @@
_jdwp_suspend_counts = new ::java::util::Hashtable ();
JavaVM *vm = _Jv_GetJavaVM ();
vm->GetEnv (reinterpret_cast<void **> (&_jdwp_jvmtiEnv), JVMTI_VERSION_1_0);
+
+ // Wait for VM_INIT to do more initialization
+ jvmtiEventCallbacks callbacks;
+ DEFINE_CALLBACK (callbacks, VMInit);
+ _jdwp_jvmtiEnv->SetEventCallbacks (&callbacks, sizeof (callbacks));
+ ENABLE_EVENT (VM_INIT, NULL);
}
void
@@ -343,3 +358,13 @@
{
return NULL;
}
+
+static void
+jdwpVMInitCB (MAYBE_UNUSED jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
+ jthread thread)
+{
+ // Send JDWP VMInit
+ using namespace gnu::classpath::jdwp::event;
+ Thread *init_thread = reinterpret_cast<Thread *> (thread);
+ gnu::classpath::jdwp::Jdwp::notify (new VmInitEvent (init_thread));
+}
Index: gnu/classpath/jdwp/natVMVirtualMachine.cc
===================================================================
--- gnu/classpath/jdwp/natVMVirtualMachine.cc (revision 120933)
+++ gnu/classpath/jdwp/natVMVirtualMachine.cc (working copy)
@@ -38,7 +38,7 @@
using namespace gnu::classpath::jdwp::util;
// Forward declarations
-static void jdwpVMInitCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread);
+static void JNICALL jdwpVMInitCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread);
#define DEFINE_CALLBACK(Cb,Event) Cb.Event = jdwp ## Event ## CB
#define ENABLE_EVENT(Event,Thread) \
@@ -359,7 +359,7 @@
return NULL;
}
-static void
+static void JNICALL
jdwpVMInitCB (MAYBE_UNUSED jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
jthread thread)
{