1 /* src/native/vm/sun/jvm.c - HotSpot JVM interface functions
3 Copyright (C) 2007 R. Grafl, A. Krall, C. Kruegel,
4 C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5 E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6 J. Wenninger, Institut f. Computersprachen - TU Wien
8 This file is part of CACAO.
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2, or (at
13 your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
40 #if defined(HAVE_SYS_IOCTL_H)
41 #define BSD_COMP /* Get FIONREAD on Solaris2 */
42 #include <sys/ioctl.h>
45 #include <sys/socket.h>
50 #include "mm/memory.h"
52 #include "native/jni.h"
53 #include "native/llni.h"
54 #include "native/native.h"
56 #include "native/include/java_lang_AssertionStatusDirectives.h"
57 #include "native/include/java_lang_String.h" /* required by j.l.CL */
58 #include "native/include/java_nio_ByteBuffer.h" /* required by j.l.CL */
59 #include "native/include/java_lang_ClassLoader.h" /* required by j.l.C */
60 #include "native/include/java_lang_StackTraceElement.h"
61 #include "native/include/java_lang_Throwable.h"
62 #include "native/include/java_security_ProtectionDomain.h"
63 #include "native/include/java_lang_Integer.h"
64 #include "native/include/java_lang_Long.h"
65 #include "native/include/java_lang_Short.h"
66 #include "native/include/java_lang_Byte.h"
67 #include "native/include/java_lang_Character.h"
68 #include "native/include/java_lang_Boolean.h"
69 #include "native/include/java_lang_Float.h"
70 #include "native/include/java_lang_Double.h"
72 #if defined(ENABLE_ANNOTATIONS)
73 #include "native/include/sun_reflect_ConstantPool.h"
76 #include "native/vm/java_lang_Class.h"
77 #include "native/vm/java_lang_ClassLoader.h"
78 #include "native/vm/java_lang_Object.h"
79 #include "native/vm/java_lang_Runtime.h"
80 #include "native/vm/java_lang_Thread.h"
81 #include "native/vm/java_lang_reflect_Constructor.h"
82 #include "native/vm/java_lang_reflect_Method.h"
83 #include "native/vm/java_util_concurrent_atomic_AtomicLong.h"
84 #include "native/vm/reflect.h"
86 #include "threads/lock-common.h"
87 #include "threads/threads-common.h"
89 #include "toolbox/logging.h"
92 #include "vm/builtin.h"
93 #include "vm/exceptions.h"
94 #include "vm/global.h"
95 #include "vm/initialize.h"
96 #include "vm/primitive.h"
97 #include "vm/properties.h"
98 #include "vm/resolve.h"
99 #include "vm/signallocal.h"
100 #include "vm/stringlocal.h"
103 #include "vm/jit/stacktrace.h"
105 #include "vmcore/classcache.h"
106 #include "vmcore/options.h"
109 /* debugging macros ***********************************************************/
113 # define TRACEJVMCALLS(...) \
115 if (opt_TraceJVMCalls) { \
116 log_println(__VA_ARGS__); \
120 # define PRINTJVMWARNINGS(...)
122 /* if (opt_PrintJVMWarnings) { \ */
123 /* log_println(__VA_ARGS__); \ */
129 # define TRACEJVMCALLS(...)
130 # define PRINTJVMWARNINGS(...)
136 /* Naming convention of RE build version string: n.n.n[_uu[c]][-<identifier>]-bxx */
137 unsigned int jvm_version; /* Consists of major, minor, micro (n.n.n) */
138 /* and build number (xx) */
139 unsigned int update_version : 8; /* Update release version (uu) */
140 unsigned int special_update_version : 8; /* Special update release version (c) */
141 unsigned int reserved1 : 16;
142 unsigned int reserved2;
144 /* The following bits represents JVM supports that JDK has dependency on.
145 * JDK can use these bits to determine which JVM version
146 * and support it has to maintain runtime compatibility.
148 * When a new bit is added in a minor or update release, make sure
149 * the new bit is also added in the main/baseline.
151 unsigned int is_attachable : 1;
159 * A structure used to a capture exception table entry in a Java method.
166 } JVM_ExceptionTableEntryType;
169 int jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args)
171 if ((intptr_t) count <= 0)
174 return vsnprintf(str, count, fmt, args);
178 int jio_snprintf(char *str, size_t count, const char *fmt, ...)
184 len = jio_vsnprintf(str, count, fmt, ap);
191 int jio_fprintf(FILE* f, const char *fmt, ...)
193 log_println("jio_fprintf: IMPLEMENT ME!");
197 int jio_vfprintf(FILE* f, const char *fmt, va_list args)
199 log_println("jio_vfprintf: IMPLEMENT ME!");
203 int jio_printf(const char *fmt, ...)
205 log_println("jio_printf: IMPLEMENT ME!");
209 /* JVM_GetInterfaceVersion */
211 jint JVM_GetInterfaceVersion()
213 /* This is defined in hotspot/src/share/vm/prims/jvm.h */
215 #define JVM_INTERFACE_VERSION 4
217 return JVM_INTERFACE_VERSION;
221 /* JVM_CurrentTimeMillis */
223 jlong JVM_CurrentTimeMillis(JNIEnv *env, jclass ignored)
226 log_println("JVM_CurrentTimeMillis");
228 return (jlong) builtin_currenttimemillis();
234 jlong JVM_NanoTime(JNIEnv *env, jclass ignored)
237 log_println("JVM_NanoTime");
239 return (jlong) builtin_nanotime();
245 void JVM_ArrayCopy(JNIEnv *env, jclass ignored, jobject src, jint src_pos, jobject dst, jint dst_pos, jint length)
250 s = (java_handle_t *) src;
251 d = (java_handle_t *) dst;
254 log_println("JVM_ArrayCopy: src=%p, src_pos=%d, dst=%p, dst_pos=%d, length=%d", src, src_pos, dst, dst_pos, length);
257 (void) builtin_arraycopy(s, src_pos, d, dst_pos, length);
261 /* JVM_InitProperties */
263 jobject JVM_InitProperties(JNIEnv *env, jobject properties)
266 log_println("JVM_InitProperties: properties=%d", properties);
268 properties_system_add_all((java_handle_t *) properties);
274 void JVM_Exit(jint code)
276 log_println("JVM_Exit: IMPLEMENT ME!");
282 void JVM_Halt(jint code)
285 log_println("JVM_Halt: code=%d", code);
292 /* JVM_OnExit(void (*func)) */
294 void JVM_OnExit(void (*func)(void))
296 log_println("JVM_OnExit(void (*func): IMPLEMENT ME!");
304 TRACEJVMCALLS("JVM_GC()");
310 /* JVM_MaxObjectInspectionAge */
312 jlong JVM_MaxObjectInspectionAge(void)
314 log_println("JVM_MaxObjectInspectionAge: IMPLEMENT ME!");
318 /* JVM_TraceInstructions */
320 void JVM_TraceInstructions(jboolean on)
322 log_println("JVM_TraceInstructions: IMPLEMENT ME!");
326 /* JVM_TraceMethodCalls */
328 void JVM_TraceMethodCalls(jboolean on)
330 log_println("JVM_TraceMethodCalls: IMPLEMENT ME!");
334 /* JVM_TotalMemory */
336 jlong JVM_TotalMemory(void)
338 TRACEJVMCALLS("JVM_TotalMemory()");
340 return gc_get_heap_size();
346 jlong JVM_FreeMemory(void)
348 TRACEJVMCALLS("JVM_FreeMemory()");
350 return gc_get_free_bytes();
356 jlong JVM_MaxMemory(void)
358 TRACEJVMCALLS("JVM_MaxMemory()");
360 return gc_get_max_heap_size();
364 /* JVM_ActiveProcessorCount */
366 jint JVM_ActiveProcessorCount(void)
368 log_println("JVM_ActiveProcessorCount: IMPLEMENT ME!");
372 /* JVM_FillInStackTrace */
374 void JVM_FillInStackTrace(JNIEnv *env, jobject receiver)
376 java_lang_Throwable *o;
377 stacktracecontainer *stc;
380 log_println("JVM_FillInStackTrace: receiver=%p", receiver);
383 o = (java_lang_Throwable *) receiver;
385 stc = stacktrace_fillInStackTrace();
390 o->backtrace = (java_lang_Object *) stc;
394 /* JVM_PrintStackTrace */
396 void JVM_PrintStackTrace(JNIEnv *env, jobject receiver, jobject printable)
398 log_println("JVM_PrintStackTrace: IMPLEMENT ME!");
402 /* JVM_GetStackTraceDepth */
404 jint JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable)
406 java_lang_Throwable *o;
407 stacktracecontainer *stc;
408 stacktracebuffer *stb;
411 log_println("JVM_GetStackTraceDepth: throwable=%p", throwable);
414 o = (java_lang_Throwable *) throwable;
415 stc = (stacktracecontainer *) o->backtrace;
422 /* JVM_GetStackTraceElement */
424 jobject JVM_GetStackTraceElement(JNIEnv *env, jobject throwable, jint index)
426 java_lang_Throwable *t;
427 stacktracecontainer *stc;
428 stacktracebuffer *stb;
429 stacktrace_entry *ste;
430 java_lang_StackTraceElement *o;
431 java_lang_String *declaringclass;
432 java_lang_String *filename;
436 log_println("JVM_GetStackTraceElement: throwable=%p, index=%d", throwable, index);
439 t = (java_lang_Throwable *) throwable;
440 stc = (stacktracecontainer *) t->backtrace;
443 if ((index < 0) || (index >= stb->used)) {
444 /* XXX This should be an IndexOutOfBoundsException (check this
447 exceptions_throw_arrayindexoutofboundsexception();
451 ste = &(stb->entries[index]);
453 /* allocate a new StackTraceElement */
455 o = (java_lang_StackTraceElement *)
456 builtin_new(class_java_lang_StackTraceElement);
463 if (!(ste->method->flags & ACC_NATIVE)) {
464 if (ste->method->class->sourcefile)
465 filename = (java_lang_String *) javastring_new(ste->method->class->sourcefile);
472 /* get line number */
474 if (ste->method->flags & ACC_NATIVE)
477 linenumber = (ste->linenumber == 0) ? -1 : ste->linenumber;
479 /* get declaring class name */
482 _Jv_java_lang_Class_getName(LLNI_classinfo_wrap(ste->method->class));
484 /* fill the java.lang.StackTraceElement element */
486 o->declaringClass = declaringclass;
487 o->methodName = (java_lang_String *) javastring_new(ste->method->name);
488 o->fileName = filename;
489 o->lineNumber = linenumber;
497 jint JVM_IHashCode(JNIEnv* env, jobject handle)
500 log_println("JVM_IHashCode: jobject=%p", handle);
502 return (jint) ((ptrint) handle);
506 /* JVM_MonitorWait */
508 void JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms)
511 log_println("JVM_MonitorWait: handle=%p, ms=%ld", handle, ms);
513 _Jv_java_lang_Object_wait((java_lang_Object *) handle, ms, 0);
517 /* JVM_MonitorNotify */
519 void JVM_MonitorNotify(JNIEnv* env, jobject handle)
522 log_println("JVM_MonitorNotify: IMPLEMENT ME!");
524 _Jv_java_lang_Object_notify((java_lang_Object *) handle);
528 /* JVM_MonitorNotifyAll */
530 void JVM_MonitorNotifyAll(JNIEnv* env, jobject handle)
533 log_println("JVM_MonitorNotifyAll: handle=%p", handle);
535 _Jv_java_lang_Object_notifyAll((java_lang_Object *) handle);
541 jobject JVM_Clone(JNIEnv* env, jobject handle)
544 log_println("JVM_Clone: handle=%p", handle);
546 return (jobject) builtin_clone(env, (java_handle_t *) handle);
550 /* JVM_InitializeCompiler */
552 void JVM_InitializeCompiler (JNIEnv *env, jclass compCls)
554 log_println("JVM_InitializeCompiler : IMPLEMENT ME!");
558 /* JVM_IsSilentCompiler */
560 jboolean JVM_IsSilentCompiler(JNIEnv *env, jclass compCls)
562 log_println("JVM_IsSilentCompiler: IMPLEMENT ME!");
566 /* JVM_CompileClass */
568 jboolean JVM_CompileClass(JNIEnv *env, jclass compCls, jclass cls)
570 log_println("JVM_CompileClass: IMPLEMENT ME!");
574 /* JVM_CompileClasses */
576 jboolean JVM_CompileClasses(JNIEnv *env, jclass cls, jstring jname)
578 log_println("JVM_CompileClasses: IMPLEMENT ME!");
582 /* JVM_CompilerCommand */
584 jobject JVM_CompilerCommand(JNIEnv *env, jclass compCls, jobject arg)
586 log_println("JVM_CompilerCommand: IMPLEMENT ME!");
590 /* JVM_EnableCompiler */
592 void JVM_EnableCompiler(JNIEnv *env, jclass compCls)
594 TRACEJVMCALLS("JVM_EnableCompiler(env=%p, compCls=%p)", env, compCls);
595 PRINTJVMWARNINGS("JVM_EnableCompiler not supported");
599 /* JVM_DisableCompiler */
601 void JVM_DisableCompiler(JNIEnv *env, jclass compCls)
603 TRACEJVMCALLS("JVM_DisableCompiler(env=%p, compCls=%p)", env, compCls);
604 PRINTJVMWARNINGS("JVM_DisableCompiler not supported");
608 /* JVM_GetLastErrorString */
610 jint JVM_GetLastErrorString(char *buf, int len)
636 char *JVM_NativePath(char *path)
638 TRACEJVMCALLS("JVM_NativePath(path=%s)", path);
640 /* XXX is this correct? */
646 /* JVM_GetCallerClass */
648 jclass JVM_GetCallerClass(JNIEnv* env, int depth)
650 java_handle_objectarray_t *oa;
652 TRACEJVMCALLS("JVM_GetCallerClass(env=%p, depth=%d)", env, depth);
654 oa = stacktrace_getClassContext();
659 if (oa->header.size < depth)
662 return (jclass) oa->data[depth - 1];
667 /* JVM_FindPrimitiveClass */
669 jclass JVM_FindPrimitiveClass(JNIEnv* env, const char* s)
674 TRACEJVMCALLS("JVM_FindPrimitiveClass(env=%p, s=%s)", env, s);
677 c = primitive_class_get_by_name(u);
679 return (jclass) LLNI_classinfo_wrap(c);
683 /* JVM_ResolveClass */
685 void JVM_ResolveClass(JNIEnv* env, jclass cls)
687 TRACEJVMCALLS("JVM_ResolveClass(env=%p, cls=%p)", env, cls);
688 PRINTJVMWARNINGS("JVM_ResolveClass not implemented");
692 /* JVM_FindClassFromClassLoader */
694 jclass JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, jboolean init, jobject loader, jboolean throwError)
700 TRACEJVMCALLS("JVM_FindClassFromClassLoader: name=%s, init=%d, loader=%p, throwError=%d", name, init, loader, throwError);
702 u = utf_new_char(name);
703 cl = (classloader *) loader;
705 c = load_class_from_classloader(u, cl);
711 if (!(c->state & CLASS_INITIALIZED))
712 if (!initialize_class(c))
715 return (jclass) LLNI_classinfo_wrap(c);
719 /* JVM_FindClassFromClass */
721 jclass JVM_FindClassFromClass(JNIEnv *env, const char *name, jboolean init, jclass from)
723 log_println("JVM_FindClassFromClass: IMPLEMENT ME!");
727 /* JVM_DefineClass */
729 jclass JVM_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd)
731 log_println("JVM_DefineClass: IMPLEMENT ME!");
735 /* JVM_DefineClassWithSource */
737 jclass JVM_DefineClassWithSource(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source)
743 TRACEJVMCALLS("JVM_DefineClassWithSource(env=%p, name=%s, loader=%p, buf=%p, len=%d, pd=%p, source=%s)", env, name, loader, buf, len, pd, source);
745 u = utf_new_char(name);
746 cl = (classloader *) loader;
748 /* XXX do something with source */
750 c = class_define(u, cl, len, (const uint8_t *) buf, (java_handle_t *) pd);
752 return (jclass) LLNI_classinfo_wrap(c);
756 /* JVM_FindLoadedClass */
758 jclass JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)
764 TRACEJVMCALLS("JVM_FindLoadedClass(env=%p, loader=%p, name=%p)", env, loader, name);
766 cl = (classloader *) loader;
768 u = javastring_toutf((java_handle_t *) name, true);
769 c = classcache_lookup(cl, u);
771 return (jclass) LLNI_classinfo_wrap(c);
775 /* JVM_GetClassName */
777 jstring JVM_GetClassName(JNIEnv *env, jclass cls)
780 log_println("JVM_GetClassName: cls=%p", cls);
782 return (jstring) _Jv_java_lang_Class_getName((java_lang_Class *) cls);
786 /* JVM_GetClassInterfaces */
788 jobjectArray JVM_GetClassInterfaces(JNIEnv *env, jclass cls)
791 java_handle_objectarray_t *oa;
793 TRACEJVMCALLS("JVM_GetClassInterfaces(env=%p, cls=%p)", env, cls);
795 c = LLNI_classinfo_unwrap(cls);
797 oa = class_get_interfaces(c);
799 return (jobjectArray) oa;
803 /* JVM_GetClassLoader */
805 jobject JVM_GetClassLoader(JNIEnv *env, jclass cls)
807 TRACEJVMCALLS("JVM_GetClassLoader(env=%p, cls=%p)", env, cls);
809 return (jobject) _Jv_java_lang_Class_getClassLoader((java_lang_Class *) cls);
813 /* JVM_IsInterface */
815 jboolean JVM_IsInterface(JNIEnv *env, jclass cls)
820 log_println("JVM_IsInterface: cls=%p", cls);
823 c = LLNI_classinfo_unwrap(cls);
825 return class_is_interface(c);
829 /* JVM_GetClassSigners */
831 jobjectArray JVM_GetClassSigners(JNIEnv *env, jclass cls)
833 log_println("JVM_GetClassSigners: IMPLEMENT ME!");
837 /* JVM_SetClassSigners */
839 void JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers)
841 log_println("JVM_SetClassSigners: IMPLEMENT ME!");
845 /* JVM_GetProtectionDomain */
847 jobject JVM_GetProtectionDomain(JNIEnv *env, jclass cls)
851 TRACEJVMCALLS("JVM_GetProtectionDomain(env=%p, cls=%p)", env, cls);
853 c = LLNI_classinfo_unwrap(cls);
856 exceptions_throw_nullpointerexception();
860 /* Primitive types do not have a protection domain. */
862 if (class_is_primitive(c))
865 return (jobject) c->protectiondomain;
869 /* JVM_SetProtectionDomain */
871 void JVM_SetProtectionDomain(JNIEnv *env, jclass cls, jobject protection_domain)
873 log_println("JVM_SetProtectionDomain: IMPLEMENT ME!");
877 /* JVM_DoPrivileged */
879 jobject JVM_DoPrivileged(JNIEnv *env, jclass cls, jobject action, jobject context, jboolean wrapException)
884 java_handle_t *result;
888 log_println("JVM_DoPrivileged: action=%p, context=%p, wrapException=%d", action, context, wrapException);
891 o = (java_handle_t *) action;
894 if (action == NULL) {
895 exceptions_throw_nullpointerexception();
899 /* lookup run() method (throw no exceptions) */
901 m = class_resolveclassmethod(c, utf_run, utf_void__java_lang_Object, c,
904 if ((m == NULL) || !(m->flags & ACC_PUBLIC) || (m->flags & ACC_STATIC)) {
905 exceptions_throw_internalerror("No run method");
909 /* XXX It seems something with a privileged stack needs to be done
912 result = vm_call_method(m, o);
914 e = exceptions_get_and_clear_exception();
917 exceptions_throw_privilegedactionexception(e);
921 return (jobject) result;
925 /* JVM_GetInheritedAccessControlContext */
927 jobject JVM_GetInheritedAccessControlContext(JNIEnv *env, jclass cls)
929 log_println("JVM_GetInheritedAccessControlContext: IMPLEMENT ME!");
933 /* JVM_GetStackAccessControlContext */
935 jobject JVM_GetStackAccessControlContext(JNIEnv *env, jclass cls)
937 log_println("JVM_GetStackAccessControlContext: IMPLEMENT ME!");
941 /* JVM_IsArrayClass */
943 jboolean JVM_IsArrayClass(JNIEnv *env, jclass cls)
946 log_println("JVM_IsArrayClass: cls=%p", cls);
948 return class_is_array(LLNI_classinfo_unwrap(cls));
952 /* JVM_IsPrimitiveClass */
954 jboolean JVM_IsPrimitiveClass(JNIEnv *env, jclass cls)
958 c = LLNI_classinfo_unwrap(cls);
961 log_println("JVM_IsPrimitiveClass(cls=%p)", cls);
964 return class_is_primitive(c);
968 /* JVM_GetComponentType */
970 jclass JVM_GetComponentType(JNIEnv *env, jclass cls)
972 classinfo *component;
975 TRACEJVMCALLS("JVM_GetComponentType(env=%p, cls=%p)", env, cls);
977 c = LLNI_classinfo_unwrap(cls);
979 component = class_get_componenttype(c);
981 return (jclass) LLNI_classinfo_wrap(component);
985 /* JVM_GetClassModifiers */
987 jint JVM_GetClassModifiers(JNIEnv *env, jclass cls)
992 log_println("JVM_GetClassModifiers: cls=%p", cls);
995 c = LLNI_classinfo_unwrap(cls);
997 /* XXX is this correct? */
999 return c->flags & ACC_CLASS_REFLECT_MASK;
1003 /* JVM_GetDeclaredClasses */
1005 jobjectArray JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass)
1008 java_handle_objectarray_t *oa;
1010 TRACEJVMCALLS("JVM_GetDeclaredClasses(env=%p, ofClass=%p)", env, ofClass);
1012 c = LLNI_classinfo_unwrap(ofClass);
1014 oa = class_get_declaredclasses(c, false);
1016 return (jobjectArray) oa;
1020 /* JVM_GetDeclaringClass */
1022 jclass JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)
1027 TRACEJVMCALLS("JVM_GetDeclaringClass(env=%p, ofClass=%p)", env, ofClass);
1029 c = LLNI_classinfo_unwrap(ofClass);
1031 dc = class_get_declaringclass(c);
1033 return (jclass) LLNI_classinfo_wrap(dc);
1037 /* JVM_GetClassSignature */
1039 jstring JVM_GetClassSignature(JNIEnv *env, jclass cls)
1045 TRACEJVMCALLS("JVM_GetClassSignature(env=%p, cls=%p)", env, cls);
1047 c = (classinfo *) cls;
1049 /* Get the signature of the class. */
1051 u = class_get_signature(c);
1056 /* Convert UTF-string to a Java-string. */
1058 s = javastring_new(u);
1064 /* JVM_GetClassAnnotations */
1066 jbyteArray JVM_GetClassAnnotations(JNIEnv *env, jclass cls)
1068 classinfo *c = NULL;
1069 java_handle_bytearray_t *annotations = NULL;
1071 TRACEJVMCALLS("JVM_GetClassAnnotations: cls=%p", cls);
1074 exceptions_throw_nullpointerexception();
1078 c = LLNI_classinfo_unwrap(cls);
1080 /* get annotations: */
1081 annotations = class_get_annotations(c);
1083 return (jbyteArray)annotations;
1087 /* JVM_GetFieldAnnotations */
1089 jbyteArray JVM_GetFieldAnnotations(JNIEnv *env, jobject field)
1091 java_lang_reflect_Field *rf = (java_lang_reflect_Field*)field;
1092 java_handle_bytearray_t *ba = NULL;
1094 TRACEJVMCALLS("JVM_GetFieldAnnotations: field=%p", field);
1096 if (field == NULL) {
1097 exceptions_throw_nullpointerexception();
1101 LLNI_field_get_ref(rf, annotations, ba);
1103 return (jbyteArray)ba;
1107 /* JVM_GetMethodAnnotations */
1109 jbyteArray JVM_GetMethodAnnotations(JNIEnv *env, jobject method)
1111 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1112 java_handle_bytearray_t *ba = NULL;
1114 TRACEJVMCALLS("JVM_GetMethodAnnotations: method=%p", method);
1116 if (method == NULL) {
1117 exceptions_throw_nullpointerexception();
1121 LLNI_field_get_ref(rm, annotations, ba);
1123 return (jbyteArray)ba;
1127 /* JVM_GetMethodDefaultAnnotationValue */
1129 jbyteArray JVM_GetMethodDefaultAnnotationValue(JNIEnv *env, jobject method)
1131 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1132 java_handle_bytearray_t *ba = NULL;
1134 TRACEJVMCALLS("JVM_GetMethodDefaultAnnotationValue: method=%p", method);
1136 if (method == NULL) {
1137 exceptions_throw_nullpointerexception();
1141 LLNI_field_get_ref(rm, annotationDefault, ba);
1143 return (jbyteArray)ba;
1147 /* JVM_GetMethodParameterAnnotations */
1149 jbyteArray JVM_GetMethodParameterAnnotations(JNIEnv *env, jobject method)
1151 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1152 java_handle_bytearray_t *ba = NULL;
1154 TRACEJVMCALLS("JVM_GetMethodParameterAnnotations: method=%p", method);
1156 if (method == NULL) {
1157 exceptions_throw_nullpointerexception();
1161 LLNI_field_get_ref(rm, parameterAnnotations, ba);
1163 return (jbyteArray)ba;
1167 /* JVM_GetClassDeclaredFields */
1169 jobjectArray JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1172 log_println("JVM_GetClassDeclaredFields: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1174 return (jobjectArray) _Jv_java_lang_Class_getDeclaredFields((java_lang_Class *) ofClass, publicOnly);
1178 /* JVM_GetClassDeclaredMethods */
1180 jobjectArray JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1183 log_println("JVM_GetClassDeclaredMethods: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1185 return (jobjectArray) _Jv_java_lang_Class_getDeclaredMethods((java_lang_Class *) ofClass, publicOnly);
1189 /* JVM_GetClassDeclaredConstructors */
1191 jobjectArray JVM_GetClassDeclaredConstructors(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1194 log_println("JVM_GetClassDeclaredConstructors: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1196 return (jobjectArray) _Jv_java_lang_Class_getDeclaredConstructors((java_lang_Class *) ofClass, publicOnly);
1200 /* JVM_GetClassAccessFlags */
1202 jint JVM_GetClassAccessFlags(JNIEnv *env, jclass cls)
1207 log_println("JVM_GetClassAccessFlags: cls=%p", cls);
1210 c = LLNI_classinfo_unwrap(cls);
1212 return c->flags & ACC_CLASS_REFLECT_MASK;
1216 /* JVM_GetClassConstantPool */
1218 jobject JVM_GetClassConstantPool(JNIEnv *env, jclass cls)
1220 #if defined(ENABLE_ANNOTATIONS)
1221 sun_reflect_ConstantPool *constantPool = NULL;
1222 java_lang_Object *constantPoolOop = (java_lang_Object*)cls;
1224 TRACEJVMCALLS("JVM_GetClassConstantPool(env=%p, cls=%p)", env, cls);
1227 (sun_reflect_ConstantPool*)native_new_and_init(
1228 class_sun_reflect_ConstantPool);
1230 if (constantPool == NULL) {
1235 LLNI_field_set_ref(constantPool, constantPoolOop, constantPoolOop);
1237 return (jobject)constantPool;
1239 log_println("JVM_GetClassConstantPool(env=%p, cls=%p): not implemented in this configuration!", env, cls);
1245 /* JVM_ConstantPoolGetSize */
1247 jint JVM_ConstantPoolGetSize(JNIEnv *env, jobject unused, jobject jcpool)
1251 TRACEJVMCALLS("JVM_ConstantPoolGetSize(env=%p, unused=%p, jcpool=%p)", env, unused, jcpool);
1253 c = LLNI_classinfo_unwrap(jcpool);
1259 /* JVM_ConstantPoolGetClassAt */
1261 jclass JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1263 constant_classref *ref;
1267 TRACEJVMCALLS("JVM_ConstantPoolGetClassAt(env=%p, jcpool=%p, index=%d)", env, jcpool, index);
1269 c = LLNI_classinfo_unwrap(jcpool);
1271 ref = (constant_classref *) class_getconstant(c, index, CONSTANT_Class);
1276 result = resolve_classref_eager(ref);
1278 return (jclass) LLNI_classinfo_wrap(result);
1282 /* JVM_ConstantPoolGetClassAtIfLoaded */
1284 jclass JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1286 constant_classref *ref;
1290 TRACEJVMCALLS("JVM_ConstantPoolGetClassAtIfLoaded(env=%p, unused=%p, jcpool=%p, index=%d)", env, unused, jcpool, index);
1292 c = LLNI_classinfo_unwrap(jcpool);
1294 ref = (constant_classref *) class_getconstant(c, index, CONSTANT_Class);
1299 if (!resolve_classref(NULL, ref, resolveLazy, true, true, &result))
1302 if ((result == NULL) || !(result->state & CLASS_LOADED)) {
1306 return (jclass) LLNI_classinfo_wrap(result);
1310 /* JVM_ConstantPoolGetMethodAt */
1312 jobject JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1314 constant_FMIref *ref;
1315 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1317 TRACEJVMCALLS("JVM_ConstantPoolGetMethodAt: jcpool=%p, index=%d", jcpool, index);
1319 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Methodref);
1325 /* XXX: is that right? or do I have to use resolve_method_*? */
1326 return (jobject)reflect_method_new(ref->p.method);
1330 /* JVM_ConstantPoolGetMethodAtIfLoaded */
1332 jobject JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1334 constant_FMIref *ref;
1335 classinfo *c = NULL;
1336 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1338 TRACEJVMCALLS("JVM_ConstantPoolGetMethodAtIfLoaded: jcpool=%p, index=%d", jcpool, index);
1340 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Methodref);
1346 if (!resolve_classref(NULL, ref->p.classref, resolveLazy, true, true, &c)) {
1350 if (c == NULL || !(c->state & CLASS_LOADED)) {
1354 return (jobject)reflect_method_new(ref->p.method);
1358 /* JVM_ConstantPoolGetFieldAt */
1360 jobject JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1362 constant_FMIref *ref;
1363 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1365 TRACEJVMCALLS("JVM_ConstantPoolGetFieldAt: jcpool=%p, index=%d", jcpool, index);
1367 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Fieldref);
1373 return (jobject)reflect_field_new(ref->p.field);
1377 /* JVM_ConstantPoolGetFieldAtIfLoaded */
1379 jobject JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1381 constant_FMIref *ref;
1383 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1385 TRACEJVMCALLS("JVM_ConstantPoolGetFieldAtIfLoaded: jcpool=%p, index=%d", jcpool, index);
1387 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Fieldref);
1393 if (!resolve_classref(NULL, ref->p.classref, resolveLazy, true, true, &c)) {
1397 if (c == NULL || !(c->state & CLASS_LOADED)) {
1401 return (jobject)reflect_field_new(ref->p.field);
1405 /* JVM_ConstantPoolGetMemberRefInfoAt */
1407 jobjectArray JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1409 log_println("JVM_ConstantPoolGetMemberRefInfoAt: jcpool=%p, index=%d, IMPLEMENT ME!", jcpool, index);
1414 /* JVM_ConstantPoolGetIntAt */
1416 jint JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1418 constant_integer *ref;
1419 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1421 TRACEJVMCALLS("JVM_ConstantPoolGetIntAt: jcpool=%p, index=%d", jcpool, index);
1423 ref = (constant_integer*)class_getconstant(cls, index, CONSTANT_Integer);
1433 /* JVM_ConstantPoolGetLongAt */
1435 jlong JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1438 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1440 TRACEJVMCALLS("JVM_ConstantPoolGetLongAt: jcpool=%p, index=%d", jcpool, index);
1442 ref = (constant_long*)class_getconstant(cls, index, CONSTANT_Long);
1452 /* JVM_ConstantPoolGetFloatAt */
1454 jfloat JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1456 constant_float *ref;
1457 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1459 TRACEJVMCALLS("JVM_ConstantPoolGetFloatAt: jcpool=%p, index=%d", jcpool, index);
1461 ref = (constant_float*)class_getconstant(cls, index, CONSTANT_Float);
1471 /* JVM_ConstantPoolGetDoubleAt */
1473 jdouble JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1475 constant_double *ref;
1476 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1478 TRACEJVMCALLS("JVM_ConstantPoolGetDoubleAt: jcpool=%p, index=%d", jcpool, index);
1480 ref = (constant_double*)class_getconstant(cls, index, CONSTANT_Double);
1490 /* JVM_ConstantPoolGetStringAt */
1492 jstring JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1495 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1497 TRACEJVMCALLS("JVM_ConstantPoolGetStringAt: jcpool=%p, index=%d", jcpool, index);
1499 ref = (utf*)class_getconstant(cls, index, CONSTANT_String);
1505 /* XXX: I hope literalstring_new is the right Function. */
1506 return (jstring)literalstring_new(ref);
1510 /* JVM_ConstantPoolGetUTF8At */
1512 jstring JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1515 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1517 TRACEJVMCALLS("JVM_ConstantPoolGetUTF8At: jcpool=%p, index=%d", jcpool, index);
1519 ref = (utf*)class_getconstant(cls, index, CONSTANT_Utf8);
1525 /* XXX: I hope literalstring_new is the right Function. */
1526 return (jstring)literalstring_new(ref);
1530 /* JVM_DesiredAssertionStatus */
1532 jboolean JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls)
1534 TRACEJVMCALLS("JVM_DesiredAssertionStatus(env=%p, unused=%p, cls=%p)", env, unused, cls);
1536 /* TODO: Implement this one, but false should be OK. */
1542 /* JVM_AssertionStatusDirectives */
1544 jobject JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused)
1547 java_lang_AssertionStatusDirectives *o;
1548 java_handle_objectarray_t *classes;
1549 java_handle_objectarray_t *packages;
1552 log_println("JVM_AssertionStatusDirectives");
1554 /* XXX this is not completely implemented */
1556 c = load_class_bootstrap(utf_new_char("java/lang/AssertionStatusDirectives"));
1561 o = (java_lang_AssertionStatusDirectives *) builtin_new(c);
1566 classes = builtin_anewarray(0, class_java_lang_Object);
1568 if (classes == NULL)
1571 packages = builtin_anewarray(0, class_java_lang_Object);
1573 if (packages == NULL)
1576 /* set instance fields */
1578 o->classes = classes;
1579 o->packages = packages;
1585 /* JVM_GetClassNameUTF */
1587 const char* JVM_GetClassNameUTF(JNIEnv *env, jclass cls)
1589 log_println("JVM_GetClassNameUTF: IMPLEMENT ME!");
1593 /* JVM_GetClassCPTypes */
1595 void JVM_GetClassCPTypes(JNIEnv *env, jclass cls, unsigned char *types)
1597 log_println("JVM_GetClassCPTypes: IMPLEMENT ME!");
1601 /* JVM_GetClassCPEntriesCount */
1603 jint JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cls)
1605 log_println("JVM_GetClassCPEntriesCount: IMPLEMENT ME!");
1609 /* JVM_GetClassFieldsCount */
1611 jint JVM_GetClassFieldsCount(JNIEnv *env, jclass cls)
1613 log_println("JVM_GetClassFieldsCount: IMPLEMENT ME!");
1617 /* JVM_GetClassMethodsCount */
1619 jint JVM_GetClassMethodsCount(JNIEnv *env, jclass cls)
1621 log_println("JVM_GetClassMethodsCount: IMPLEMENT ME!");
1625 /* JVM_GetMethodIxExceptionIndexes */
1627 void JVM_GetMethodIxExceptionIndexes(JNIEnv *env, jclass cls, jint method_index, unsigned short *exceptions)
1629 log_println("JVM_GetMethodIxExceptionIndexes: IMPLEMENT ME!");
1633 /* JVM_GetMethodIxExceptionsCount */
1635 jint JVM_GetMethodIxExceptionsCount(JNIEnv *env, jclass cls, jint method_index)
1637 log_println("JVM_GetMethodIxExceptionsCount: IMPLEMENT ME!");
1641 /* JVM_GetMethodIxByteCode */
1643 void JVM_GetMethodIxByteCode(JNIEnv *env, jclass cls, jint method_index, unsigned char *code)
1645 log_println("JVM_GetMethodIxByteCode: IMPLEMENT ME!");
1649 /* JVM_GetMethodIxByteCodeLength */
1651 jint JVM_GetMethodIxByteCodeLength(JNIEnv *env, jclass cls, jint method_index)
1653 log_println("JVM_GetMethodIxByteCodeLength: IMPLEMENT ME!");
1657 /* JVM_GetMethodIxExceptionTableEntry */
1659 void JVM_GetMethodIxExceptionTableEntry(JNIEnv *env, jclass cls, jint method_index, jint entry_index, JVM_ExceptionTableEntryType *entry)
1661 log_println("JVM_GetMethodIxExceptionTableEntry: IMPLEMENT ME!");
1665 /* JVM_GetMethodIxExceptionTableLength */
1667 jint JVM_GetMethodIxExceptionTableLength(JNIEnv *env, jclass cls, int method_index)
1669 log_println("JVM_GetMethodIxExceptionTableLength: IMPLEMENT ME!");
1673 /* JVM_GetMethodIxModifiers */
1675 jint JVM_GetMethodIxModifiers(JNIEnv *env, jclass cls, int method_index)
1677 log_println("JVM_GetMethodIxModifiers: IMPLEMENT ME!");
1681 /* JVM_GetFieldIxModifiers */
1683 jint JVM_GetFieldIxModifiers(JNIEnv *env, jclass cls, int field_index)
1685 log_println("JVM_GetFieldIxModifiers: IMPLEMENT ME!");
1689 /* JVM_GetMethodIxLocalsCount */
1691 jint JVM_GetMethodIxLocalsCount(JNIEnv *env, jclass cls, int method_index)
1693 log_println("JVM_GetMethodIxLocalsCount: IMPLEMENT ME!");
1697 /* JVM_GetMethodIxArgsSize */
1699 jint JVM_GetMethodIxArgsSize(JNIEnv *env, jclass cls, int method_index)
1701 log_println("JVM_GetMethodIxArgsSize: IMPLEMENT ME!");
1705 /* JVM_GetMethodIxMaxStack */
1707 jint JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cls, int method_index)
1709 log_println("JVM_GetMethodIxMaxStack: IMPLEMENT ME!");
1713 /* JVM_IsConstructorIx */
1715 jboolean JVM_IsConstructorIx(JNIEnv *env, jclass cls, int method_index)
1717 log_println("JVM_IsConstructorIx: IMPLEMENT ME!");
1721 /* JVM_GetMethodIxNameUTF */
1723 const char* JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cls, jint method_index)
1725 log_println("JVM_GetMethodIxNameUTF: IMPLEMENT ME!");
1729 /* JVM_GetMethodIxSignatureUTF */
1731 const char* JVM_GetMethodIxSignatureUTF(JNIEnv *env, jclass cls, jint method_index)
1733 log_println("JVM_GetMethodIxSignatureUTF: IMPLEMENT ME!");
1737 /* JVM_GetCPFieldNameUTF */
1739 const char* JVM_GetCPFieldNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1741 log_println("JVM_GetCPFieldNameUTF: IMPLEMENT ME!");
1745 /* JVM_GetCPMethodNameUTF */
1747 const char* JVM_GetCPMethodNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1749 log_println("JVM_GetCPMethodNameUTF: IMPLEMENT ME!");
1753 /* JVM_GetCPMethodSignatureUTF */
1755 const char* JVM_GetCPMethodSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)
1757 log_println("JVM_GetCPMethodSignatureUTF: IMPLEMENT ME!");
1761 /* JVM_GetCPFieldSignatureUTF */
1763 const char* JVM_GetCPFieldSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)
1765 log_println("JVM_GetCPFieldSignatureUTF: IMPLEMENT ME!");
1769 /* JVM_GetCPClassNameUTF */
1771 const char* JVM_GetCPClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1773 log_println("JVM_GetCPClassNameUTF: IMPLEMENT ME!");
1777 /* JVM_GetCPFieldClassNameUTF */
1779 const char* JVM_GetCPFieldClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1781 log_println("JVM_GetCPFieldClassNameUTF: IMPLEMENT ME!");
1785 /* JVM_GetCPMethodClassNameUTF */
1787 const char* JVM_GetCPMethodClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1789 log_println("JVM_GetCPMethodClassNameUTF: IMPLEMENT ME!");
1793 /* JVM_GetCPFieldModifiers */
1795 jint JVM_GetCPFieldModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)
1797 log_println("JVM_GetCPFieldModifiers: IMPLEMENT ME!");
1801 /* JVM_GetCPMethodModifiers */
1803 jint JVM_GetCPMethodModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)
1805 log_println("JVM_GetCPMethodModifiers: IMPLEMENT ME!");
1809 /* JVM_ReleaseUTF */
1811 void JVM_ReleaseUTF(const char *utf)
1813 log_println("JVM_ReleaseUTF: IMPLEMENT ME!");
1817 /* JVM_IsSameClassPackage */
1819 jboolean JVM_IsSameClassPackage(JNIEnv *env, jclass class1, jclass class2)
1821 log_println("JVM_IsSameClassPackage: IMPLEMENT ME!");
1827 jint JVM_Open(const char *fname, jint flags, jint mode)
1832 log_println("JVM_Open: fname=%s, flags=%d, mode=%d", fname, flags, mode);
1835 result = open(fname, flags, mode);
1843 /* XXX don't know what to do here */
1844 /* return JVM_EEXIST; */
1855 jint JVM_Close(jint fd)
1858 log_println("JVM_Close: fd=%d", fd);
1866 jint JVM_Read(jint fd, char *buf, jint nbytes)
1869 log_println("JVM_Read: fd=%d, buf=%p, nbytes=%d", fd, buf, nbytes);
1871 return read(fd, buf, nbytes);
1877 jint JVM_Write(jint fd, char *buf, jint nbytes)
1880 log_println("JVM_Write: fd=%d, buf=%s, nbytes=%d", fd, buf, nbytes);
1882 return write(fd, buf, nbytes);
1888 jint JVM_Available(jint fd, jlong *pbytes)
1890 #if defined(FIONREAD)
1893 TRACEJVMCALLS("JVM_Available(fd=%d, pbytes=%p)", fd, pbytes);
1897 if (ioctl(fd, FIONREAD, &bytes) < 0)
1904 # error FIONREAD not defined
1911 jlong JVM_Lseek(jint fd, jlong offset, jint whence)
1914 log_println("JVM_Lseek: fd=%d, offset=%ld, whence=%d", fd, offset, whence);
1916 return (jlong) lseek(fd, (off_t) offset, whence);
1922 jint JVM_SetLength(jint fd, jlong length)
1924 log_println("JVM_SetLength: IMPLEMENT ME!");
1930 jint JVM_Sync(jint fd)
1932 log_println("JVM_Sync: IMPLEMENT ME!");
1936 /* JVM_StartThread */
1938 void JVM_StartThread(JNIEnv* env, jobject jthread)
1941 log_println("JVM_StartThread: jthread=%p", jthread);
1943 _Jv_java_lang_Thread_start((java_lang_Thread *) jthread, 0);
1947 /* JVM_StopThread */
1949 void JVM_StopThread(JNIEnv* env, jobject jthread, jobject throwable)
1951 log_println("JVM_StopThread: IMPLEMENT ME!");
1955 /* JVM_IsThreadAlive */
1957 jboolean JVM_IsThreadAlive(JNIEnv* env, jobject jthread)
1960 log_println("JVM_IsThreadAlive: jthread=%p", jthread);
1962 return _Jv_java_lang_Thread_isAlive((java_lang_Thread *) jthread);
1966 /* JVM_SuspendThread */
1968 void JVM_SuspendThread(JNIEnv* env, jobject jthread)
1970 log_println("JVM_SuspendThread: IMPLEMENT ME!");
1974 /* JVM_ResumeThread */
1976 void JVM_ResumeThread(JNIEnv* env, jobject jthread)
1978 log_println("JVM_ResumeThread: IMPLEMENT ME!");
1982 /* JVM_SetThreadPriority */
1984 void JVM_SetThreadPriority(JNIEnv* env, jobject jthread, jint prio)
1987 log_println("JVM_SetThreadPriority: jthread=%p, prio=%d", jthread, prio);
1989 _Jv_java_lang_Thread_setPriority((java_lang_Thread *) jthread, prio);
1995 void JVM_Yield(JNIEnv *env, jclass threadClass)
1997 TRACEJVMCALLS("JVM_Yield(env=%p, threadClass=%p)", env, threadClass);
2005 void JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis)
2008 log_println("JVM_Sleep: threadClass=%p, millis=%ld", threadClass, millis);
2010 _Jv_java_lang_Thread_sleep(millis);
2014 /* JVM_CurrentThread */
2016 jobject JVM_CurrentThread(JNIEnv* env, jclass threadClass)
2019 log_println("JVM_CurrentThread: threadClass=%p", threadClass);
2021 return (jobject) _Jv_java_lang_Thread_currentThread();
2025 /* JVM_CountStackFrames */
2027 jint JVM_CountStackFrames(JNIEnv* env, jobject jthread)
2029 log_println("JVM_CountStackFrames: IMPLEMENT ME!");
2035 void JVM_Interrupt(JNIEnv* env, jobject jthread)
2037 log_println("JVM_Interrupt: IMPLEMENT ME!");
2041 /* JVM_IsInterrupted */
2043 jboolean JVM_IsInterrupted(JNIEnv* env, jobject jthread, jboolean clear_interrupted)
2046 log_println("JVM_IsInterrupted: jthread=%p, clear_interrupted=%d", jthread, clear_interrupted);
2048 /* XXX do something with clear_interrupted */
2049 return _Jv_java_lang_Thread_isInterrupted((java_lang_Thread *) jthread);
2055 jboolean JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj)
2057 log_println("JVM_HoldsLock: IMPLEMENT ME!");
2061 /* JVM_DumpAllStacks */
2063 void JVM_DumpAllStacks(JNIEnv* env, jclass unused)
2065 log_println("JVM_DumpAllStacks: IMPLEMENT ME!");
2069 /* JVM_CurrentLoadedClass */
2071 jclass JVM_CurrentLoadedClass(JNIEnv *env)
2073 log_println("JVM_CurrentLoadedClass: IMPLEMENT ME!");
2077 /* JVM_CurrentClassLoader */
2079 jobject JVM_CurrentClassLoader(JNIEnv *env)
2081 /* XXX if a method in a class in a trusted loader is in a
2082 doPrivileged, return NULL */
2084 log_println("JVM_CurrentClassLoader: IMPLEMENT ME!");
2088 /* JVM_GetClassContext */
2090 jobjectArray JVM_GetClassContext(JNIEnv *env)
2093 log_println("JVM_GetClassContext");
2095 return (jobjectArray) stacktrace_getClassContext();
2099 /* JVM_ClassDepth */
2101 jint JVM_ClassDepth(JNIEnv *env, jstring name)
2103 log_println("JVM_ClassDepth: IMPLEMENT ME!");
2107 /* JVM_ClassLoaderDepth */
2109 jint JVM_ClassLoaderDepth(JNIEnv *env)
2111 log_println("JVM_ClassLoaderDepth: IMPLEMENT ME!");
2115 /* JVM_GetSystemPackage */
2117 jstring JVM_GetSystemPackage(JNIEnv *env, jstring name)
2119 log_println("JVM_GetSystemPackage(env=%p, name=%p)");
2120 javastring_print((java_handle_t *) name);
2127 /* JVM_GetSystemPackages */
2129 jobjectArray JVM_GetSystemPackages(JNIEnv *env)
2131 log_println("JVM_GetSystemPackages: IMPLEMENT ME!");
2135 /* JVM_AllocateNewObject */
2137 jobject JVM_AllocateNewObject(JNIEnv *env, jobject receiver, jclass currClass, jclass initClass)
2139 log_println("JVM_AllocateNewObject: IMPLEMENT ME!");
2143 /* JVM_AllocateNewArray */
2145 jobject JVM_AllocateNewArray(JNIEnv *env, jobject obj, jclass currClass, jint length)
2147 log_println("JVM_AllocateNewArray: IMPLEMENT ME!");
2151 /* JVM_LatestUserDefinedLoader */
2153 jobject JVM_LatestUserDefinedLoader(JNIEnv *env)
2155 log_println("JVM_LatestUserDefinedLoader: IMPLEMENT ME!");
2159 /* JVM_LoadClass0 */
2161 jclass JVM_LoadClass0(JNIEnv *env, jobject receiver, jclass currClass, jstring currClassName)
2163 log_println("JVM_LoadClass0: IMPLEMENT ME!");
2167 /* JVM_GetArrayLength */
2169 jint JVM_GetArrayLength(JNIEnv *env, jobject arr)
2173 TRACEJVMCALLS("JVM_GetArrayLength(arr=%p)", arr);
2175 a = (java_handle_t *) arr;
2177 return array_length_get(a);
2181 /* JVM_GetArrayElement */
2183 jobject JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index)
2188 TRACEJVMCALLS("JVM_GetArrayElement(env=%p, arr=%p, index=%d)", env, arr, index);
2190 a = (java_handle_t *) arr;
2192 /* if (!class_is_array(a->objheader.vftbl->class)) { */
2193 /* exceptions_throw_illegalargumentexception(); */
2197 o = array_element_get(a, index);
2203 /* JVM_GetPrimitiveArrayElement */
2205 jvalue JVM_GetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jint wCode)
2207 log_println("JVM_GetPrimitiveArrayElement: IMPLEMENT ME!");
2211 /* JVM_SetArrayElement */
2213 void JVM_SetArrayElement(JNIEnv *env, jobject arr, jint index, jobject val)
2216 java_handle_t *value;
2218 TRACEJVMCALLS("JVM_SetArrayElement(env=%p, arr=%p, index=%d, val=%p)", env, arr, index, val);
2220 a = (java_handle_t *) arr;
2221 value = (java_handle_t *) val;
2223 array_element_set(a, index, value);
2227 /* JVM_SetPrimitiveArrayElement */
2229 void JVM_SetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jvalue v, unsigned char vCode)
2231 log_println("JVM_SetPrimitiveArrayElement: IMPLEMENT ME!");
2237 jobject JVM_NewArray(JNIEnv *env, jclass eltClass, jint length)
2242 java_handle_objectarray_t *oa;
2244 TRACEJVMCALLS("JVM_NewArray(env=%p, eltClass=%p, length=%d)", env, eltClass, length);
2246 c = LLNI_classinfo_unwrap(eltClass);
2248 /* create primitive or object array */
2250 if (class_is_primitive(c)) {
2251 pc = primitive_arrayclass_get_by_name(c->name);
2252 a = builtin_newarray(length, pc);
2257 oa = builtin_anewarray(length, c);
2259 return (jobject) oa;
2264 /* JVM_NewMultiArray */
2266 jobject JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim)
2268 log_println("JVM_NewMultiArray: IMPLEMENT ME!");
2272 /* JVM_InitializeSocketLibrary */
2274 jint JVM_InitializeSocketLibrary()
2276 log_println("JVM_InitializeSocketLibrary: IMPLEMENT ME!");
2282 jint JVM_Socket(jint domain, jint type, jint protocol)
2284 TRACEJVMCALLS("JVM_Socket(domain=%d, type=%d, protocol=%d)", domain, type, protocol);
2286 return socket(domain, type, protocol);
2290 /* JVM_SocketClose */
2292 jint JVM_SocketClose(jint fd)
2294 TRACEJVMCALLS("JVM_SocketClose(fd=%d)", fd);
2300 /* JVM_SocketShutdown */
2302 jint JVM_SocketShutdown(jint fd, jint howto)
2304 TRACEJVMCALLS("JVM_SocketShutdown(fd=%d, howto=%d)", fd, howto);
2306 return shutdown(fd, howto);
2312 jint JVM_Recv(jint fd, char *buf, jint nBytes, jint flags)
2314 log_println("JVM_Recv: IMPLEMENT ME!");
2320 jint JVM_Send(jint fd, char *buf, jint nBytes, jint flags)
2322 log_println("JVM_Send: IMPLEMENT ME!");
2328 jint JVM_Timeout(int fd, long timeout)
2330 log_println("JVM_Timeout: IMPLEMENT ME!");
2336 jint JVM_Listen(jint fd, jint count)
2338 TRACEJVMCALLS("JVM_Listen(fd=%d, count=%d)", fd, count);
2340 return listen(fd, count);
2346 jint JVM_Connect(jint fd, struct sockaddr *him, jint len)
2348 TRACEJVMCALLS("JVM_Connect(fd=%d, him=%p, len=%d)", fd, him, len);
2350 return connect(fd, him, len);
2356 jint JVM_Bind(jint fd, struct sockaddr *him, jint len)
2358 log_println("JVM_Bind: IMPLEMENT ME!");
2364 jint JVM_Accept(jint fd, struct sockaddr *him, jint *len)
2366 TRACEJVMCALLS("JVM_Accept(fd=%d, him=%p, len=%p)", fd, him, len);
2368 return accept(fd, him, (socklen_t *) len);
2374 jint JVM_RecvFrom(jint fd, char *buf, int nBytes, int flags, struct sockaddr *from, int *fromlen)
2376 log_println("JVM_RecvFrom: IMPLEMENT ME!");
2380 /* JVM_GetSockName */
2382 jint JVM_GetSockName(jint fd, struct sockaddr *him, int *len)
2384 TRACEJVMCALLS("JVM_GetSockName(fd=%d, him=%p, len=%p)", fd, him, len);
2386 return getsockname(fd, him, (socklen_t *) len);
2392 jint JVM_SendTo(jint fd, char *buf, int len, int flags, struct sockaddr *to, int tolen)
2394 log_println("JVM_SendTo: IMPLEMENT ME!");
2398 /* JVM_SocketAvailable */
2400 jint JVM_SocketAvailable(jint fd, jint *pbytes)
2402 log_println("JVM_SocketAvailable: IMPLEMENT ME!");
2406 /* JVM_GetSockOpt */
2408 jint JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen)
2410 log_println("JVM_GetSockOpt: IMPLEMENT ME!");
2414 /* JVM_SetSockOpt */
2416 jint JVM_SetSockOpt(jint fd, int level, int optname, const char *optval, int optlen)
2418 TRACEJVMCALLS("JVM_SetSockOpt(fd=%d, level=%d, optname=%d, optval=%s, optlen=%d)", fd, level, optname, optval, optlen);
2420 return setsockopt(fd, level, optname, optval, optlen);
2424 /* JVM_GetHostName */
2426 int JVM_GetHostName(char* name, int namelen)
2428 TRACEJVMCALLS("JVM_GetHostName(name=%s, namelen=%d)", name, namelen);
2430 return gethostname(name, namelen);
2434 /* JVM_GetHostByAddr */
2436 struct hostent* JVM_GetHostByAddr(const char* name, int len, int type)
2438 log_println("JVM_GetHostByAddr: IMPLEMENT ME!");
2442 /* JVM_GetHostByName */
2444 struct hostent* JVM_GetHostByName(char* name)
2446 log_println("JVM_GetHostByName: IMPLEMENT ME!");
2450 /* JVM_GetProtoByName */
2452 struct protoent* JVM_GetProtoByName(char* name)
2454 log_println("JVM_GetProtoByName: IMPLEMENT ME!");
2458 /* JVM_LoadLibrary */
2460 void *JVM_LoadLibrary(const char *name)
2464 TRACEJVMCALLS("JVM_LoadLibrary(name=%s)", name);
2466 u = utf_new_char(name);
2468 return native_library_open(u);
2472 /* JVM_UnloadLibrary */
2474 void JVM_UnloadLibrary(void* handle)
2476 log_println("JVM_UnloadLibrary: IMPLEMENT ME!");
2480 /* JVM_FindLibraryEntry */
2482 void *JVM_FindLibraryEntry(void *handle, const char *name)
2486 TRACEJVMCALLS("JVM_FindLibraryEntry(handle=%p, name=%s)", handle, name);
2488 symbol = lt_dlsym(handle, name);
2496 jboolean JVM_IsNaN(jdouble a)
2498 log_println("JVM_IsNaN: IMPLEMENT ME!");
2502 /* JVM_IsSupportedJNIVersion */
2504 jboolean JVM_IsSupportedJNIVersion(jint version)
2506 TRACEJVMCALLS("JVM_IsSupportedJNIVersion(version=%d)", version);
2509 case JNI_VERSION_1_1:
2510 case JNI_VERSION_1_2:
2511 case JNI_VERSION_1_4:
2519 /* JVM_InternString */
2521 jstring JVM_InternString(JNIEnv *env, jstring str)
2523 TRACEJVMCALLS("JVM_InternString(env=%p, str=%p)", env, str);
2525 return (jstring) javastring_intern((java_handle_t *) str);
2529 /* JVM_RawMonitorCreate */
2531 JNIEXPORT void* JNICALL JVM_RawMonitorCreate(void)
2536 log_println("JVM_RawMonitorCreate");
2539 o = NEW(java_object_t);
2541 lock_init_object_lock(o);
2547 /* JVM_RawMonitorDestroy */
2549 JNIEXPORT void JNICALL JVM_RawMonitorDestroy(void *mon)
2552 log_println("JVM_RawMonitorDestroy: mon=%p", mon);
2554 FREE(mon, java_object_t);
2558 /* JVM_RawMonitorEnter */
2560 JNIEXPORT jint JNICALL JVM_RawMonitorEnter(void *mon)
2563 log_println("JVM_RawMonitorEnter: mon=%p", mon);
2565 (void) lock_monitor_enter((java_object_t *) mon);
2571 /* JVM_RawMonitorExit */
2573 JNIEXPORT void JNICALL JVM_RawMonitorExit(void *mon)
2576 log_println("JVM_RawMonitorExit: mon=%p", mon);
2578 (void) lock_monitor_exit((java_object_t *) mon);
2582 /* JVM_SetPrimitiveFieldValues */
2584 void JVM_SetPrimitiveFieldValues(JNIEnv *env, jclass cb, jobject obj, jlongArray fieldIDs, jcharArray typecodes, jbyteArray data)
2586 log_println("JVM_SetPrimitiveFieldValues: IMPLEMENT ME!");
2590 /* JVM_GetPrimitiveFieldValues */
2592 void JVM_GetPrimitiveFieldValues(JNIEnv *env, jclass cb, jobject obj, jlongArray fieldIDs, jcharArray typecodes, jbyteArray data)
2594 log_println("JVM_GetPrimitiveFieldValues: IMPLEMENT ME!");
2598 /* JVM_AccessVMBooleanFlag */
2600 jboolean JVM_AccessVMBooleanFlag(const char* name, jboolean* value, jboolean is_get)
2602 log_println("JVM_AccessVMBooleanFlag: IMPLEMENT ME!");
2606 /* JVM_AccessVMIntFlag */
2608 jboolean JVM_AccessVMIntFlag(const char* name, jint* value, jboolean is_get)
2610 log_println("JVM_AccessVMIntFlag: IMPLEMENT ME!");
2614 /* JVM_VMBreakPoint */
2616 void JVM_VMBreakPoint(JNIEnv *env, jobject obj)
2618 log_println("JVM_VMBreakPoint: IMPLEMENT ME!");
2622 /* JVM_GetClassFields */
2624 jobjectArray JVM_GetClassFields(JNIEnv *env, jclass cls, jint which)
2626 log_println("JVM_GetClassFields: IMPLEMENT ME!");
2630 /* JVM_GetClassMethods */
2632 jobjectArray JVM_GetClassMethods(JNIEnv *env, jclass cls, jint which)
2634 log_println("JVM_GetClassMethods: IMPLEMENT ME!");
2638 /* JVM_GetClassConstructors */
2640 jobjectArray JVM_GetClassConstructors(JNIEnv *env, jclass cls, jint which)
2642 log_println("JVM_GetClassConstructors: IMPLEMENT ME!");
2646 /* JVM_GetClassField */
2648 jobject JVM_GetClassField(JNIEnv *env, jclass cls, jstring name, jint which)
2650 log_println("JVM_GetClassField: IMPLEMENT ME!");
2654 /* JVM_GetClassMethod */
2656 jobject JVM_GetClassMethod(JNIEnv *env, jclass cls, jstring name, jobjectArray types, jint which)
2658 log_println("JVM_GetClassMethod: IMPLEMENT ME!");
2662 /* JVM_GetClassConstructor */
2664 jobject JVM_GetClassConstructor(JNIEnv *env, jclass cls, jobjectArray types, jint which)
2666 log_println("JVM_GetClassConstructor: IMPLEMENT ME!");
2670 /* JVM_NewInstance */
2672 jobject JVM_NewInstance(JNIEnv *env, jclass cls)
2674 log_println("JVM_NewInstance: IMPLEMENT ME!");
2680 jobject JVM_GetField(JNIEnv *env, jobject field, jobject obj)
2682 log_println("JVM_GetField: IMPLEMENT ME!");
2686 /* JVM_GetPrimitiveField */
2688 jvalue JVM_GetPrimitiveField(JNIEnv *env, jobject field, jobject obj, unsigned char wCode)
2690 log_println("JVM_GetPrimitiveField: IMPLEMENT ME!");
2696 void JVM_SetField(JNIEnv *env, jobject field, jobject obj, jobject val)
2698 log_println("JVM_SetField: IMPLEMENT ME!");
2702 /* JVM_SetPrimitiveField */
2704 void JVM_SetPrimitiveField(JNIEnv *env, jobject field, jobject obj, jvalue v, unsigned char vCode)
2706 log_println("JVM_SetPrimitiveField: IMPLEMENT ME!");
2710 /* JVM_InvokeMethod */
2712 jobject JVM_InvokeMethod(JNIEnv *env, jobject method, jobject obj, jobjectArray args0)
2715 log_println("JVM_InvokeMethod: method=%p, obj=%p, args0=%p", method, obj, args0);
2717 return (jobject) _Jv_java_lang_reflect_Method_invoke((java_lang_reflect_Method *) method, (java_lang_Object *) obj, (java_handle_objectarray_t *) args0);
2721 /* JVM_NewInstanceFromConstructor */
2723 jobject JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0)
2726 log_println("JVM_NewInstanceFromConstructor: c=%p, args0=%p", c, args0);
2728 return (jobject) _Jv_java_lang_reflect_Constructor_newInstance(env, (java_lang_reflect_Constructor *) c, (java_handle_objectarray_t *) args0);
2732 /* JVM_SupportsCX8 */
2734 jboolean JVM_SupportsCX8()
2737 log_println("JVM_SupportsCX8");
2739 return _Jv_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8(NULL, NULL);
2745 jboolean JVM_CX8Field(JNIEnv *env, jobject obj, jfieldID fid, jlong oldVal, jlong newVal)
2747 log_println("JVM_CX8Field: IMPLEMENT ME!");
2751 /* JVM_GetAllThreads */
2753 jobjectArray JVM_GetAllThreads(JNIEnv *env, jclass dummy)
2755 log_println("JVM_GetAllThreads: IMPLEMENT ME!");
2759 /* JVM_DumpThreads */
2761 jobjectArray JVM_DumpThreads(JNIEnv *env, jclass threadClass, jobjectArray threads)
2763 log_println("JVM_DumpThreads: IMPLEMENT ME!");
2767 /* JVM_GetManagement */
2769 void* JVM_GetManagement(jint version)
2771 log_println("JVM_GetManagement: IMPLEMENT ME!");
2775 /* JVM_InitAgentProperties */
2777 jobject JVM_InitAgentProperties(JNIEnv *env, jobject properties)
2779 log_println("JVM_InitAgentProperties: IMPLEMENT ME!");
2783 /* JVM_GetEnclosingMethodInfo */
2785 jobjectArray JVM_GetEnclosingMethodInfo(JNIEnv *env, jclass ofClass)
2787 log_println("JVM_GetEnclosingMethodInfo: IMPLEMENT ME!");
2791 /* JVM_GetThreadStateValues */
2793 jintArray JVM_GetThreadStateValues(JNIEnv* env, jint javaThreadState)
2795 java_handle_intarray_t *ia;
2797 TRACEJVMCALLS("JVM_GetThreadStateValues(env=%p, javaThreadState=%d)",
2798 env, javaThreadState);
2800 /* If new thread states are added in future JDK and VM versions,
2801 this should check if the JDK version is compatible with thread
2802 states supported by the VM. Return NULL if not compatible.
2804 This function must map the VM java_lang_Thread::ThreadStatus
2805 to the Java thread state that the JDK supports. */
2807 switch (javaThreadState) {
2808 case THREAD_STATE_NEW:
2809 ia = builtin_newarray_int(1);
2814 array_intarray_element_set(ia, 0, THREAD_STATE_NEW);
2817 case THREAD_STATE_RUNNABLE:
2818 ia = builtin_newarray_int(1);
2823 array_intarray_element_set(ia, 0, THREAD_STATE_RUNNABLE);
2826 case THREAD_STATE_BLOCKED:
2827 ia = builtin_newarray_int(1);
2832 array_intarray_element_set(ia, 0, THREAD_STATE_BLOCKED);
2835 case THREAD_STATE_WAITING:
2836 ia = builtin_newarray_int(2);
2841 array_intarray_element_set(ia, 0, THREAD_STATE_WAITING);
2842 /* XXX Implement parked stuff. */
2843 /* array_intarray_element_set(ia, 1, PARKED); */
2846 case THREAD_STATE_TIMED_WAITING:
2847 ia = builtin_newarray_int(3);
2852 /* XXX Not sure about that one. */
2853 /* array_intarray_element_set(ia, 0, SLEEPING); */
2854 array_intarray_element_set(ia, 0, THREAD_STATE_TIMED_WAITING);
2855 /* XXX Implement parked stuff. */
2856 /* array_intarray_element_set(ia, 2, PARKED); */
2859 case THREAD_STATE_TERMINATED:
2860 ia = builtin_newarray_int(1);
2865 array_intarray_element_set(ia, 0, THREAD_STATE_TERMINATED);
2869 /* Unknown state - probably incompatible JDK version */
2873 return (jintArray) ia;
2877 /* JVM_GetThreadStateNames */
2879 jobjectArray JVM_GetThreadStateNames(JNIEnv* env, jint javaThreadState, jintArray values)
2881 java_handle_intarray_t *ia;
2882 java_handle_objectarray_t *oa;
2885 TRACEJVMCALLS("JVM_GetThreadStateNames(env=%p, javaThreadState=%d, values=%p)",
2886 env, javaThreadState, values);
2888 ia = (java_handle_intarray_t *) values;
2890 /* If new thread states are added in future JDK and VM versions,
2891 this should check if the JDK version is compatible with thread
2892 states supported by the VM. Return NULL if not compatible.
2894 This function must map the VM java_lang_Thread::ThreadStatus
2895 to the Java thread state that the JDK supports. */
2897 if (values == NULL) {
2898 exceptions_throw_nullpointerexception();
2902 switch (javaThreadState) {
2903 case THREAD_STATE_NEW:
2904 assert(ia->header.size == 1 && ia->data[0] == THREAD_STATE_NEW);
2906 oa = builtin_anewarray(1, class_java_lang_String);
2911 s = javastring_new(utf_new_char("NEW"));
2916 array_objectarray_element_set(oa, 0, s);
2919 case THREAD_STATE_RUNNABLE:
2920 oa = builtin_anewarray(1, class_java_lang_String);
2925 s = javastring_new(utf_new_char("RUNNABLE"));
2930 array_objectarray_element_set(oa, 0, s);
2933 case THREAD_STATE_BLOCKED:
2934 oa = builtin_anewarray(1, class_java_lang_String);
2939 s = javastring_new(utf_new_char("BLOCKED"));
2944 array_objectarray_element_set(oa, 0, s);
2947 case THREAD_STATE_WAITING:
2948 oa = builtin_anewarray(2, class_java_lang_String);
2953 s = javastring_new(utf_new_char("WAITING.OBJECT_WAIT"));
2954 /* s = javastring_new(utf_new_char("WAITING.PARKED")); */
2959 array_objectarray_element_set(oa, 0, s);
2960 /* array_objectarray_element_set(oa, 1, s); */
2963 case THREAD_STATE_TIMED_WAITING:
2964 oa = builtin_anewarray(3, class_java_lang_String);
2969 /* s = javastring_new(utf_new_char("TIMED_WAITING.SLEEPING")); */
2970 s = javastring_new(utf_new_char("TIMED_WAITING.OBJECT_WAIT"));
2971 /* s = javastring_new(utf_new_char("TIMED_WAITING.PARKED")); */
2976 /* array_objectarray_element_set(oa, 0, s); */
2977 array_objectarray_element_set(oa, 0, s);
2978 /* array_objectarray_element_set(oa, 2, s); */
2981 case THREAD_STATE_TERMINATED:
2982 oa = builtin_anewarray(1, class_java_lang_String);
2987 s = javastring_new(utf_new_char("TERMINATED"));
2992 array_objectarray_element_set(oa, 0, s);
2996 /* Unknown state - probably incompatible JDK version */
3000 return (jobjectArray) oa;
3004 /* JVM_GetVersionInfo */
3006 void JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size)
3008 log_println("JVM_GetVersionInfo: IMPLEMENT ME!");
3012 /* OS: JVM_RegisterSignal */
3014 void *JVM_RegisterSignal(jint sig, void *handler)
3016 functionptr newHandler;
3018 TRACEJVMCALLS("JVM_RegisterSignal(sig=%d, handler=%p)", sig, handler);
3020 if (handler == (void *) 2)
3021 newHandler = (functionptr) signal_thread_handler;
3023 newHandler = (functionptr) (uintptr_t) handler;
3030 /* These signals are already used by the VM. */
3034 /* This signal is used by the VM to dump thread stacks unless
3035 ReduceSignalUsage is set, in which case the user is allowed
3036 to set his own _native_ handler for this signal; thus, in
3037 either case, we do not allow JVM_RegisterSignal to change
3047 signal_register_signal(sig, newHandler, 0);
3049 /* XXX Should return old handler. */
3055 /* OS: JVM_RaiseSignal */
3057 jboolean JVM_RaiseSignal(jint sig)
3059 log_println("JVM_RaiseSignal: IMPLEMENT ME! sig=%s", sig);
3064 /* OS: JVM_FindSignal */
3066 jint JVM_FindSignal(const char *name)
3068 TRACEJVMCALLS("JVM_FindSignal(name=%s)", name);
3070 #if defined(__LINUX__)
3071 if (strcmp(name, "HUP") == 0)
3074 if (strcmp(name, "INT") == 0)
3077 if (strcmp(name, "TERM") == 0)
3080 # error not implemented for this OS
3088 * These are local overrides for various environment variables in Emacs.
3089 * Please do not remove this and leave it at the end of the file, where
3090 * Emacs will automagically detect them.
3091 * ---------------------------------------------------------------------
3094 * indent-tabs-mode: t