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]

Re: [RFA] Add JDWP VM_INIT JVMTI callback


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)
 {

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