From 94f473ee2c02f0e21e3c328169424bbfd491e893 Mon Sep 17 00:00:00 2001 From: Keith Seitz Date: Thu, 20 Jul 2006 19:30:30 +0000 Subject: [PATCH] jvm.h (_Jv_GetJVMTIEnv): Declare. * include/jvm.h (_Jv_GetJVMTIEnv): Declare. * jni.cc (_Jv_JNI_GetEnv): Handle JVMTI requests. * jvmti.cc: New file. * Makefile.am (libgcj_la_SOURCES): Add jvmti.cc. * Makefile.in: Regenerate. From-SVN: r115629 --- libjava/ChangeLog | 8 ++ libjava/Makefile.am | 2 +- libjava/Makefile.in | 19 ++--- libjava/include/jvm.h | 4 + libjava/jni.cc | 8 ++ libjava/jvmti.cc | 184 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 215 insertions(+), 10 deletions(-) create mode 100644 libjava/jvmti.cc diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 1b3be0d41179..0fe6a78abc34 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,11 @@ +2006-07-20 Keith Seitz + + * include/jvm.h (_Jv_GetJVMTIEnv): Declare. + * jni.cc (_Jv_JNI_GetEnv): Handle JVMTI requests. + * jvmti.cc: New file. + * Makefile.am (libgcj_la_SOURCES): Add jvmti.cc. + * Makefile.in: Regenerate. + 2006-07-20 David Daney * configure.host: Enable the interpreter for mipsel-* and mips-*. diff --git a/libjava/Makefile.am b/libjava/Makefile.am index 05be0fd4c996..52c8ed022888 100644 --- a/libjava/Makefile.am +++ b/libjava/Makefile.am @@ -177,7 +177,7 @@ libgij_la_LIBADD = -L$(here)/.libs libgcj.la libgij_la_LDFLAGS = -rpath $(toolexeclibdir) \ -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC) -libgcj_la_SOURCES = prims.cc jni.cc exception.cc stacktrace.cc \ +libgcj_la_SOURCES = prims.cc jni.cc jvmti.cc exception.cc stacktrace.cc \ link.cc defineclass.cc interpret.cc verify.cc \ java/lang/Class.java java/lang/Object.java \ $(nat_source_files) diff --git a/libjava/Makefile.in b/libjava/Makefile.in index 6b11b39a623a..02ad5b7828e3 100644 --- a/libjava/Makefile.in +++ b/libjava/Makefile.in @@ -249,7 +249,7 @@ am__DEPENDENCIES_2 = gnu-CORBA.lo gnu-java-awt-peer-gtk.lo \ am__DEPENDENCIES_3 = $(patsubst classpath/resource/%,%,$(addsuffix \ .lo,$(property_files))) am__DEPENDENCIES_4 = -am__libgcj_la_SOURCES_DIST = prims.cc jni.cc exception.cc \ +am__libgcj_la_SOURCES_DIST = prims.cc jni.cc jvmti.cc exception.cc \ stacktrace.cc link.cc defineclass.cc interpret.cc verify.cc \ java/lang/Class.java java/lang/Object.java \ gnu/classpath/natSystemProperties.cc gnu/gcj/natCore.cc \ @@ -340,8 +340,8 @@ am__objects_2 = gnu/classpath/natSystemProperties.lo \ @USING_POSIX_THREADS_TRUE@am__objects_8 = posix-threads.lo @USING_WIN32_THREADS_TRUE@am__objects_9 = win32-threads.lo @USING_NO_THREADS_TRUE@am__objects_10 = no-threads.lo -am_libgcj_la_OBJECTS = prims.lo jni.lo exception.lo stacktrace.lo \ - link.lo defineclass.lo interpret.lo verify.lo \ +am_libgcj_la_OBJECTS = prims.lo jni.lo jvmti.lo exception.lo \ + stacktrace.lo link.lo defineclass.lo interpret.lo verify.lo \ java/lang/Class.lo java/lang/Object.lo $(am__objects_2) \ $(am__objects_3) $(am__objects_4) $(am__objects_5) \ $(am__objects_6) $(am__objects_7) $(am__objects_8) \ @@ -756,12 +756,12 @@ libgij_la_LIBADD = -L$(here)/.libs libgcj.la libgij_la_LDFLAGS = -rpath $(toolexeclibdir) \ -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC) -libgcj_la_SOURCES = prims.cc jni.cc exception.cc stacktrace.cc link.cc \ - defineclass.cc interpret.cc verify.cc java/lang/Class.java \ - java/lang/Object.java $(nat_source_files) $(am__append_5) \ - $(am__append_6) $(am__append_7) $(am__append_8) \ - $(am__append_9) $(am__append_10) $(am__append_11) \ - $(am__append_12) +libgcj_la_SOURCES = prims.cc jni.cc jvmti.cc exception.cc \ + stacktrace.cc link.cc defineclass.cc interpret.cc verify.cc \ + java/lang/Class.java java/lang/Object.java $(nat_source_files) \ + $(am__append_5) $(am__append_6) $(am__append_7) \ + $(am__append_8) $(am__append_9) $(am__append_10) \ + $(am__append_11) $(am__append_12) nat_files = $(nat_source_files:.cc=.lo) xlib_nat_files = $(xlib_nat_source_files:.cc=.lo) @@ -7950,6 +7950,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interpret.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jni-libjvm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jni.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jvmti.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/no-threads.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nogc.Plo@am__quote@ diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h index d99443cf335e..8a970c0c8576 100644 --- a/libjava/include/jvm.h +++ b/libjava/include/jvm.h @@ -573,6 +573,10 @@ void _Jv_FreeJNIEnv (_Jv_JNIEnv *); struct _Jv_JavaVM; _Jv_JavaVM *_Jv_GetJavaVM (); +/* Get the JVMTI environment */ +struct _Jv_JVMTIEnv; +_Jv_JVMTIEnv *_Jv_GetJVMTIEnv (void); + // Some verification functions from defineclass.cc. bool _Jv_VerifyFieldSignature (_Jv_Utf8Const*sig); bool _Jv_VerifyMethodSignature (_Jv_Utf8Const*sig); diff --git a/libjava/jni.cc b/libjava/jni.cc index 67ba8fa49418..f7d73e553854 100644 --- a/libjava/jni.cc +++ b/libjava/jni.cc @@ -22,6 +22,7 @@ details. */ #ifdef ENABLE_JVMPI #include #endif +#include #include #include @@ -2495,6 +2496,13 @@ _Jv_JNI_GetEnv (JavaVM *, void **penv, jint version) } #endif + // Handle JVMTI requests + if (version == JVMTI_VERSION_1_0) + { + *penv = (void *) _Jv_GetJVMTIEnv (); + return 0; + } + // FIXME: do we really want to support 1.1? if (version != JNI_VERSION_1_4 && version != JNI_VERSION_1_2 && version != JNI_VERSION_1_1) diff --git a/libjava/jvmti.cc b/libjava/jvmti.cc new file mode 100644 index 000000000000..8bebef8c219f --- /dev/null +++ b/libjava/jvmti.cc @@ -0,0 +1,184 @@ +// jvmti.cc - JVMTI implementation + +/* Copyright (C) 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#include +#include + +#define RESERVED NULL +#define UNIMPLEMENTED NULL + +struct _Jv_jvmtiEnv _Jv_JVMTI_Interface = +{ + RESERVED, // reserved1 + UNIMPLEMENTED, // SetEventNotification + RESERVED, // reserved3 + UNIMPLEMENTED, // GetAllThreads + UNIMPLEMENTED, // SuspendThread + UNIMPLEMENTED, // ResumeThread + UNIMPLEMENTED, // StopThread + UNIMPLEMENTED, // InterruptThread + UNIMPLEMENTED, // GetThreadInfo + UNIMPLEMENTED, // GetOwnedMonitorInfo + UNIMPLEMENTED, // GetCurrentContendedMonitor + UNIMPLEMENTED, // RunAgentThread + UNIMPLEMENTED, // GetTopThreadGroups + UNIMPLEMENTED, // GetThreadGroupInfo + UNIMPLEMENTED, // GetThreadGroupChildren + UNIMPLEMENTED, // GetFrameCount + UNIMPLEMENTED, // GetThreadState + RESERVED, // reserved18 + UNIMPLEMENTED, // GetFrameLocation + UNIMPLEMENTED, // NotifyPopFrame + UNIMPLEMENTED, // GetLocalObject + UNIMPLEMENTED, // GetLocalInt + UNIMPLEMENTED, // GetLocalLong + UNIMPLEMENTED, // GetLocalFloat + UNIMPLEMENTED, // GetLocalDouble + UNIMPLEMENTED, // SetLocalObject + UNIMPLEMENTED, // SetLocalInt + UNIMPLEMENTED, // SetLocalLong + UNIMPLEMENTED, // SetLocalFloat + UNIMPLEMENTED, // SetLocalDouble + UNIMPLEMENTED, // CreateRawMonitor + UNIMPLEMENTED, // DestroyRawMonitor + UNIMPLEMENTED, // RawMonitorEnter + UNIMPLEMENTED, // RawMonitorExit + UNIMPLEMENTED, // RawMonitorWait + UNIMPLEMENTED, // RawMonitorNotify + UNIMPLEMENTED, // RawMonitorNotifyAll + UNIMPLEMENTED, // SetBreakpoint + UNIMPLEMENTED, // CleareBreakpoint + RESERVED, // reserved40 + UNIMPLEMENTED, // SetFieldAccessWatch + UNIMPLEMENTED, // ClearFieldAccessWatch + UNIMPLEMENTED, // SetFieldModificationWatch + UNIMPLEMENTED, // ClearFieldModificationWatch + RESERVED, // reserved45 + UNIMPLEMENTED, // Allocate + UNIMPLEMENTED, // Deallocate + UNIMPLEMENTED, // GetClassSignature + UNIMPLEMENTED, // GetClassStatus + UNIMPLEMENTED, // GetSourceFileName + UNIMPLEMENTED, // GetClassModifiers + UNIMPLEMENTED, // GetClassMethods + UNIMPLEMENTED, // GetClassFields + UNIMPLEMENTED, // GetImplementedInterfaces + UNIMPLEMENTED, // IsInterface + UNIMPLEMENTED, // IsArrayClass + UNIMPLEMENTED, // GetClassLoader + UNIMPLEMENTED, // GetObjectHashCode + UNIMPLEMENTED, // GetObjectMonitorUsage + UNIMPLEMENTED, // GetFieldName + UNIMPLEMENTED, // GetFieldDeclaringClass + UNIMPLEMENTED, // GetFieldModifiers + UNIMPLEMENTED, // IsFieldSynthetic + UNIMPLEMENTED, // GetMethodName + UNIMPLEMENTED, // GetMethodDeclaringClass + UNIMPLEMENTED, // GetMethodModiifers + RESERVED, // reserved67 + UNIMPLEMENTED, // GetMaxLocals + UNIMPLEMENTED, // GetArgumentsSize + UNIMPLEMENTED, // GetLineNumberTable + UNIMPLEMENTED, // GetMethodLocation + UNIMPLEMENTED, // GetLocalVariableTable + RESERVED, // reserved73 + RESERVED, // reserved74 + UNIMPLEMENTED, // GetBytecodes + UNIMPLEMENTED, // IsMethodNative + UNIMPLEMENTED, // IsMethodSynthetic + UNIMPLEMENTED, // GetLoadedClasses + UNIMPLEMENTED, // GetClassLoaderClasses + UNIMPLEMENTED, // PopFrame + RESERVED, // reserved81 + RESERVED, // reserved82 + RESERVED, // reserved83 + RESERVED, // reserved84 + RESERVED, // reserved85 + RESERVED, // reserved86 + UNIMPLEMENTED, // RedefineClasses + UNIMPLEMENTED, // GetVersionNumber + UNIMPLEMENTED, // GetCapabilities + UNIMPLEMENTED, // GetSourceDebugExtension + UNIMPLEMENTED, // IsMethodObsolete + UNIMPLEMENTED, // SuspendThreadList + UNIMPLEMENTED, // ResumeThreadList + RESERVED, // reserved94 + RESERVED, // reserved95 + RESERVED, // reserved96 + RESERVED, // reserved97 + RESERVED, // reserved98 + RESERVED, // reserved99 + UNIMPLEMENTED, // GetAllStackTraces + UNIMPLEMENTED, // GetThreadListStackTraces + UNIMPLEMENTED, // GetThreadLocalStorage + UNIMPLEMENTED, // SetThreadLocalStorage + UNIMPLEMENTED, // GetStackTrace + RESERVED, // reserved105 + UNIMPLEMENTED, // GetTag + UNIMPLEMENTED, // SetTag + UNIMPLEMENTED, // ForceGarbageCollection + UNIMPLEMENTED, // IterateOverObjectsReachable + UNIMPLEMENTED, // IterateOverReachableObjects + UNIMPLEMENTED, // IterateOverHeap + UNIMPLEMENTED, // IterateOverInstanceOfClass + RESERVED, // reserved113 + UNIMPLEMENTED, // GetObjectsWithTags + RESERVED, // reserved115 + RESERVED, // reserved116 + RESERVED, // reserved117 + RESERVED, // reserved118 + RESERVED, // reserved119 + UNIMPLEMENTED, // SetJNIFunctionTable + UNIMPLEMENTED, // GetJNIFunctionTable + UNIMPLEMENTED, // SetEventCallbacks + UNIMPLEMENTED, // GenerateEvents + UNIMPLEMENTED, // GetExtensionFunctions + UNIMPLEMENTED, // GetExtensionEvents + UNIMPLEMENTED, // SetExtensionEventCallback + UNIMPLEMENTED, // DisposeEnvironment + UNIMPLEMENTED, // GetErrorName + UNIMPLEMENTED, // GetJLocationFormat + UNIMPLEMENTED, // GetSystemProperties + UNIMPLEMENTED, // GetSystemProperty + UNIMPLEMENTED, // SetSystemProperty + UNIMPLEMENTED, // GetPhase + UNIMPLEMENTED, // GetCurrentThreadCpuTimerInfo + UNIMPLEMENTED, // GetCurrentThreadCpuTime + UNIMPLEMENTED, // GetThreadCpuTimerInfo + UNIMPLEMENTED, // GetThreadCpuTime + UNIMPLEMENTED, // GetTimerInfo + UNIMPLEMENTED, // GetTime + UNIMPLEMENTED, // GetPotentialCapabilities + RESERVED, // reserved141 + UNIMPLEMENTED, // AddCapabilities + UNIMPLEMENTED, // RelinquishCapabilities + UNIMPLEMENTED, // GetAvailableProcessors + RESERVED, // reserved145 + RESERVED, // reserved146 + UNIMPLEMENTED, // GetEnvironmentLocalStorage + UNIMPLEMENTED, // SetEnvironmentLocalStorage + UNIMPLEMENTED, // AddToBootstrapClassLoaderSearch + UNIMPLEMENTED, // SetVerboseFlag + RESERVED, // reserved151 + RESERVED, // reserved152 + RESERVED, // reserved153 + UNIMPLEMENTED // GetObjectSize +}; + +_Jv_JVMTIEnv * +_Jv_GetJVMTIEnv (void) +{ + _Jv_JVMTIEnv *env + = (_Jv_JVMTIEnv *) _Jv_MallocUnchecked (sizeof (_Jv_JVMTIEnv)); + env->p = &_Jv_JVMTI_Interface; + return env; +}