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
25 $Id: jvm.c 8393 2007-08-22 01:10:09Z panzi $
42 #if defined(HAVE_SYS_IOCTL_H)
43 #define BSD_COMP /* Get FIONREAD on Solaris2 */
44 #include <sys/ioctl.h>
47 #include <sys/socket.h>
52 #include "mm/memory.h"
54 #include "native/jni.h"
55 #include "native/llni.h"
56 #include "native/native.h"
58 #include "native/include/java_lang_AssertionStatusDirectives.h"
59 #include "native/include/java_lang_String.h" /* required by j.l.CL */
60 #include "native/include/java_nio_ByteBuffer.h" /* required by j.l.CL */
61 #include "native/include/java_lang_ClassLoader.h" /* required by j.l.C */
62 #include "native/include/java_lang_StackTraceElement.h"
63 #include "native/include/java_lang_Throwable.h"
64 #include "native/include/java_security_ProtectionDomain.h"
65 #include "native/include/java_lang_Integer.h"
66 #include "native/include/java_lang_Long.h"
67 #include "native/include/java_lang_Short.h"
68 #include "native/include/java_lang_Byte.h"
69 #include "native/include/java_lang_Character.h"
70 #include "native/include/java_lang_Boolean.h"
71 #include "native/include/java_lang_Float.h"
72 #include "native/include/java_lang_Double.h"
74 #if defined(ENABLE_ANNOTATIONS)
75 #include "native/include/sun_reflect_ConstantPool.h"
78 #include "native/vm/java_lang_Class.h"
79 #include "native/vm/java_lang_ClassLoader.h"
80 #include "native/vm/java_lang_Object.h"
81 #include "native/vm/java_lang_Runtime.h"
82 #include "native/vm/java_lang_Thread.h"
83 #include "native/vm/java_lang_reflect_Constructor.h"
84 #include "native/vm/java_lang_reflect_Method.h"
85 #include "native/vm/java_util_concurrent_atomic_AtomicLong.h"
86 #include "native/vm/reflect.h"
88 #include "threads/lock-common.h"
89 #include "threads/threads-common.h"
91 #include "toolbox/logging.h"
94 #include "vm/builtin.h"
95 #include "vm/exceptions.h"
96 #include "vm/global.h"
97 #include "vm/initialize.h"
98 #include "vm/primitive.h"
99 #include "vm/properties.h"
100 #include "vm/resolve.h"
101 #include "vm/signallocal.h"
102 #include "vm/stringlocal.h"
105 #include "vm/jit/stacktrace.h"
107 #include "vmcore/classcache.h"
108 #include "vmcore/options.h"
111 /* debugging macros ***********************************************************/
115 # define TRACEJVMCALLS(...) \
117 if (opt_TraceJVMCalls) { \
118 log_println(__VA_ARGS__); \
122 # define PRINTJVMWARNINGS(...)
124 /* if (opt_PrintJVMWarnings) { \ */
125 /* log_println(__VA_ARGS__); \ */
131 # define TRACEJVMCALLS(...)
132 # define PRINTJVMWARNINGS(...)
138 /* Naming convention of RE build version string: n.n.n[_uu[c]][-<identifier>]-bxx */
139 unsigned int jvm_version; /* Consists of major, minor, micro (n.n.n) */
140 /* and build number (xx) */
141 unsigned int update_version : 8; /* Update release version (uu) */
142 unsigned int special_update_version : 8; /* Special update release version (c) */
143 unsigned int reserved1 : 16;
144 unsigned int reserved2;
146 /* The following bits represents JVM supports that JDK has dependency on.
147 * JDK can use these bits to determine which JVM version
148 * and support it has to maintain runtime compatibility.
150 * When a new bit is added in a minor or update release, make sure
151 * the new bit is also added in the main/baseline.
153 unsigned int is_attachable : 1;
161 * A structure used to a capture exception table entry in a Java method.
168 } JVM_ExceptionTableEntryType;
171 int jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args)
173 if ((intptr_t) count <= 0)
176 return vsnprintf(str, count, fmt, args);
180 int jio_snprintf(char *str, size_t count, const char *fmt, ...)
186 len = jio_vsnprintf(str, count, fmt, ap);
193 int jio_fprintf(FILE* f, const char *fmt, ...)
195 log_println("jio_fprintf: IMPLEMENT ME!");
199 int jio_vfprintf(FILE* f, const char *fmt, va_list args)
201 log_println("jio_vfprintf: IMPLEMENT ME!");
205 int jio_printf(const char *fmt, ...)
207 log_println("jio_printf: IMPLEMENT ME!");
211 /* JVM_GetInterfaceVersion */
213 jint JVM_GetInterfaceVersion()
215 /* This is defined in hotspot/src/share/vm/prims/jvm.h */
217 #define JVM_INTERFACE_VERSION 4
219 return JVM_INTERFACE_VERSION;
223 /* JVM_CurrentTimeMillis */
225 jlong JVM_CurrentTimeMillis(JNIEnv *env, jclass ignored)
228 log_println("JVM_CurrentTimeMillis");
230 return (jlong) builtin_currenttimemillis();
236 jlong JVM_NanoTime(JNIEnv *env, jclass ignored)
239 log_println("JVM_NanoTime");
241 return (jlong) builtin_nanotime();
247 void JVM_ArrayCopy(JNIEnv *env, jclass ignored, jobject src, jint src_pos, jobject dst, jint dst_pos, jint length)
252 s = (java_handle_t *) src;
253 d = (java_handle_t *) dst;
256 log_println("JVM_ArrayCopy: src=%p, src_pos=%d, dst=%p, dst_pos=%d, length=%d", src, src_pos, dst, dst_pos, length);
259 (void) builtin_arraycopy(s, src_pos, d, dst_pos, length);
263 /* JVM_InitProperties */
265 jobject JVM_InitProperties(JNIEnv *env, jobject properties)
268 log_println("JVM_InitProperties: properties=%d", properties);
270 properties_system_add_all((java_handle_t *) properties);
276 void JVM_Exit(jint code)
278 log_println("JVM_Exit: IMPLEMENT ME!");
284 void JVM_Halt(jint code)
287 log_println("JVM_Halt: code=%d", code);
294 /* JVM_OnExit(void (*func)) */
296 void JVM_OnExit(void (*func)(void))
298 log_println("JVM_OnExit(void (*func): IMPLEMENT ME!");
306 TRACEJVMCALLS("JVM_GC()");
312 /* JVM_MaxObjectInspectionAge */
314 jlong JVM_MaxObjectInspectionAge(void)
316 log_println("JVM_MaxObjectInspectionAge: IMPLEMENT ME!");
320 /* JVM_TraceInstructions */
322 void JVM_TraceInstructions(jboolean on)
324 log_println("JVM_TraceInstructions: IMPLEMENT ME!");
328 /* JVM_TraceMethodCalls */
330 void JVM_TraceMethodCalls(jboolean on)
332 log_println("JVM_TraceMethodCalls: IMPLEMENT ME!");
336 /* JVM_TotalMemory */
338 jlong JVM_TotalMemory(void)
340 TRACEJVMCALLS("JVM_TotalMemory()");
342 return gc_get_heap_size();
348 jlong JVM_FreeMemory(void)
350 TRACEJVMCALLS("JVM_FreeMemory()");
352 return gc_get_free_bytes();
358 jlong JVM_MaxMemory(void)
360 TRACEJVMCALLS("JVM_MaxMemory()");
362 return gc_get_max_heap_size();
366 /* JVM_ActiveProcessorCount */
368 jint JVM_ActiveProcessorCount(void)
370 log_println("JVM_ActiveProcessorCount: IMPLEMENT ME!");
374 /* JVM_FillInStackTrace */
376 void JVM_FillInStackTrace(JNIEnv *env, jobject receiver)
378 java_lang_Throwable *o;
379 stacktracecontainer *stc;
382 log_println("JVM_FillInStackTrace: receiver=%p", receiver);
385 o = (java_lang_Throwable *) receiver;
387 stc = stacktrace_fillInStackTrace();
392 o->backtrace = (java_lang_Object *) stc;
396 /* JVM_PrintStackTrace */
398 void JVM_PrintStackTrace(JNIEnv *env, jobject receiver, jobject printable)
400 log_println("JVM_PrintStackTrace: IMPLEMENT ME!");
404 /* JVM_GetStackTraceDepth */
406 jint JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable)
408 java_lang_Throwable *o;
409 stacktracecontainer *stc;
410 stacktracebuffer *stb;
413 log_println("JVM_GetStackTraceDepth: throwable=%p", throwable);
416 o = (java_lang_Throwable *) throwable;
417 stc = (stacktracecontainer *) o->backtrace;
424 /* JVM_GetStackTraceElement */
426 jobject JVM_GetStackTraceElement(JNIEnv *env, jobject throwable, jint index)
428 java_lang_Throwable *t;
429 stacktracecontainer *stc;
430 stacktracebuffer *stb;
431 stacktrace_entry *ste;
432 java_lang_StackTraceElement *o;
433 java_lang_String *declaringclass;
434 java_lang_String *filename;
438 log_println("JVM_GetStackTraceElement: throwable=%p, index=%d", throwable, index);
441 t = (java_lang_Throwable *) throwable;
442 stc = (stacktracecontainer *) t->backtrace;
445 if ((index < 0) || (index >= stb->used)) {
446 /* XXX This should be an IndexOutOfBoundsException (check this
449 exceptions_throw_arrayindexoutofboundsexception();
453 ste = &(stb->entries[index]);
455 /* allocate a new StackTraceElement */
457 o = (java_lang_StackTraceElement *)
458 builtin_new(class_java_lang_StackTraceElement);
465 if (!(ste->method->flags & ACC_NATIVE)) {
466 if (ste->method->class->sourcefile)
467 filename = (java_lang_String *) javastring_new(ste->method->class->sourcefile);
474 /* get line number */
476 if (ste->method->flags & ACC_NATIVE)
479 linenumber = (ste->linenumber == 0) ? -1 : ste->linenumber;
481 /* get declaring class name */
484 _Jv_java_lang_Class_getName(LLNI_classinfo_wrap(ste->method->class));
486 /* fill the java.lang.StackTraceElement element */
488 o->declaringClass = declaringclass;
489 o->methodName = (java_lang_String *) javastring_new(ste->method->name);
490 o->fileName = filename;
491 o->lineNumber = linenumber;
499 jint JVM_IHashCode(JNIEnv* env, jobject handle)
502 log_println("JVM_IHashCode: jobject=%p", handle);
504 return (jint) ((ptrint) handle);
508 /* JVM_MonitorWait */
510 void JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms)
513 log_println("JVM_MonitorWait: handle=%p, ms=%ld", handle, ms);
515 _Jv_java_lang_Object_wait((java_lang_Object *) handle, ms, 0);
519 /* JVM_MonitorNotify */
521 void JVM_MonitorNotify(JNIEnv* env, jobject handle)
524 log_println("JVM_MonitorNotify: IMPLEMENT ME!");
526 _Jv_java_lang_Object_notify((java_lang_Object *) handle);
530 /* JVM_MonitorNotifyAll */
532 void JVM_MonitorNotifyAll(JNIEnv* env, jobject handle)
535 log_println("JVM_MonitorNotifyAll: handle=%p", handle);
537 _Jv_java_lang_Object_notifyAll((java_lang_Object *) handle);
543 jobject JVM_Clone(JNIEnv* env, jobject handle)
546 log_println("JVM_Clone: handle=%p", handle);
548 return (jobject) builtin_clone(env, (java_handle_t *) handle);
552 /* JVM_InitializeCompiler */
554 void JVM_InitializeCompiler (JNIEnv *env, jclass compCls)
556 log_println("JVM_InitializeCompiler : IMPLEMENT ME!");
560 /* JVM_IsSilentCompiler */
562 jboolean JVM_IsSilentCompiler(JNIEnv *env, jclass compCls)
564 log_println("JVM_IsSilentCompiler: IMPLEMENT ME!");
568 /* JVM_CompileClass */
570 jboolean JVM_CompileClass(JNIEnv *env, jclass compCls, jclass cls)
572 log_println("JVM_CompileClass: IMPLEMENT ME!");
576 /* JVM_CompileClasses */
578 jboolean JVM_CompileClasses(JNIEnv *env, jclass cls, jstring jname)
580 log_println("JVM_CompileClasses: IMPLEMENT ME!");
584 /* JVM_CompilerCommand */
586 jobject JVM_CompilerCommand(JNIEnv *env, jclass compCls, jobject arg)
588 log_println("JVM_CompilerCommand: IMPLEMENT ME!");
592 /* JVM_EnableCompiler */
594 void JVM_EnableCompiler(JNIEnv *env, jclass compCls)
596 TRACEJVMCALLS("JVM_EnableCompiler(env=%p, compCls=%p)", env, compCls);
597 PRINTJVMWARNINGS("JVM_EnableCompiler not supported");
601 /* JVM_DisableCompiler */
603 void JVM_DisableCompiler(JNIEnv *env, jclass compCls)
605 TRACEJVMCALLS("JVM_DisableCompiler(env=%p, compCls=%p)", env, compCls);
606 PRINTJVMWARNINGS("JVM_DisableCompiler not supported");
610 /* JVM_GetLastErrorString */
612 jint JVM_GetLastErrorString(char *buf, int len)
638 char *JVM_NativePath(char *path)
640 TRACEJVMCALLS("JVM_NativePath(path=%s)", path);
642 /* XXX is this correct? */
648 /* JVM_GetCallerClass */
650 jclass JVM_GetCallerClass(JNIEnv* env, int depth)
652 java_handle_objectarray_t *oa;
654 TRACEJVMCALLS("JVM_GetCallerClass(env=%p, depth=%d)", env, depth);
656 oa = stacktrace_getClassContext();
661 if (oa->header.size < depth)
664 return (jclass) oa->data[depth - 1];
669 /* JVM_FindPrimitiveClass */
671 jclass JVM_FindPrimitiveClass(JNIEnv* env, const char* s)
676 TRACEJVMCALLS("JVM_FindPrimitiveClass(env=%p, s=%s)", env, s);
679 c = primitive_class_get_by_name(u);
681 return (jclass) LLNI_classinfo_wrap(c);
685 /* JVM_ResolveClass */
687 void JVM_ResolveClass(JNIEnv* env, jclass cls)
689 TRACEJVMCALLS("JVM_ResolveClass(env=%p, cls=%p)", env, cls);
690 PRINTJVMWARNINGS("JVM_ResolveClass not implemented");
694 /* JVM_FindClassFromClassLoader */
696 jclass JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, jboolean init, jobject loader, jboolean throwError)
702 TRACEJVMCALLS("JVM_FindClassFromClassLoader: name=%s, init=%d, loader=%p, throwError=%d", name, init, loader, throwError);
704 u = utf_new_char(name);
705 cl = (classloader *) loader;
707 c = load_class_from_classloader(u, cl);
713 if (!(c->state & CLASS_INITIALIZED))
714 if (!initialize_class(c))
717 return (jclass) LLNI_classinfo_wrap(c);
721 /* JVM_FindClassFromClass */
723 jclass JVM_FindClassFromClass(JNIEnv *env, const char *name, jboolean init, jclass from)
725 log_println("JVM_FindClassFromClass: IMPLEMENT ME!");
729 /* JVM_DefineClass */
731 jclass JVM_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd)
733 log_println("JVM_DefineClass: IMPLEMENT ME!");
737 /* JVM_DefineClassWithSource */
739 jclass JVM_DefineClassWithSource(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source)
745 TRACEJVMCALLS("JVM_DefineClassWithSource(env=%p, name=%s, loader=%p, buf=%p, len=%d, pd=%p, source=%s)", env, name, loader, buf, len, pd, source);
747 u = utf_new_char(name);
748 cl = (classloader *) loader;
750 /* XXX do something with source */
752 c = class_define(u, cl, len, (const uint8_t *) buf, (java_handle_t *) pd);
754 return (jclass) LLNI_classinfo_wrap(c);
758 /* JVM_FindLoadedClass */
760 jclass JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)
766 TRACEJVMCALLS("JVM_FindLoadedClass(env=%p, loader=%p, name=%p)", env, loader, name);
768 cl = (classloader *) loader;
770 u = javastring_toutf((java_handle_t *) name, true);
771 c = classcache_lookup(cl, u);
773 return (jclass) LLNI_classinfo_wrap(c);
777 /* JVM_GetClassName */
779 jstring JVM_GetClassName(JNIEnv *env, jclass cls)
782 log_println("JVM_GetClassName: cls=%p", cls);
784 return (jstring) _Jv_java_lang_Class_getName((java_lang_Class *) cls);
788 /* JVM_GetClassInterfaces */
790 jobjectArray JVM_GetClassInterfaces(JNIEnv *env, jclass cls)
793 java_handle_objectarray_t *oa;
795 TRACEJVMCALLS("JVM_GetClassInterfaces(env=%p, cls=%p)", env, cls);
797 c = LLNI_classinfo_unwrap(cls);
799 oa = class_get_interfaces(c);
801 return (jobjectArray) oa;
805 /* JVM_GetClassLoader */
807 jobject JVM_GetClassLoader(JNIEnv *env, jclass cls)
809 TRACEJVMCALLS("JVM_GetClassLoader(env=%p, cls=%p)", env, cls);
811 return (jobject) _Jv_java_lang_Class_getClassLoader((java_lang_Class *) cls);
815 /* JVM_IsInterface */
817 jboolean JVM_IsInterface(JNIEnv *env, jclass cls)
822 log_println("JVM_IsInterface: cls=%p", cls);
825 c = LLNI_classinfo_unwrap(cls);
827 return class_is_interface(c);
831 /* JVM_GetClassSigners */
833 jobjectArray JVM_GetClassSigners(JNIEnv *env, jclass cls)
835 log_println("JVM_GetClassSigners: IMPLEMENT ME!");
839 /* JVM_SetClassSigners */
841 void JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers)
843 log_println("JVM_SetClassSigners: IMPLEMENT ME!");
847 /* JVM_GetProtectionDomain */
849 jobject JVM_GetProtectionDomain(JNIEnv *env, jclass cls)
853 TRACEJVMCALLS("JVM_GetProtectionDomain(env=%p, cls=%p)", env, cls);
855 c = LLNI_classinfo_unwrap(cls);
858 exceptions_throw_nullpointerexception();
862 /* Primitive types do not have a protection domain. */
864 if (class_is_primitive(c))
867 return (jobject) c->protectiondomain;
871 /* JVM_SetProtectionDomain */
873 void JVM_SetProtectionDomain(JNIEnv *env, jclass cls, jobject protection_domain)
875 log_println("JVM_SetProtectionDomain: IMPLEMENT ME!");
879 /* JVM_DoPrivileged */
881 jobject JVM_DoPrivileged(JNIEnv *env, jclass cls, jobject action, jobject context, jboolean wrapException)
886 java_handle_t *result;
890 log_println("JVM_DoPrivileged: action=%p, context=%p, wrapException=%d", action, context, wrapException);
893 o = (java_handle_t *) action;
896 if (action == NULL) {
897 exceptions_throw_nullpointerexception();
901 /* lookup run() method (throw no exceptions) */
903 m = class_resolveclassmethod(c, utf_run, utf_void__java_lang_Object, c,
906 if ((m == NULL) || !(m->flags & ACC_PUBLIC) || (m->flags & ACC_STATIC)) {
907 exceptions_throw_internalerror("No run method");
911 /* XXX It seems something with a privileged stack needs to be done
914 result = vm_call_method(m, o);
916 e = exceptions_get_and_clear_exception();
919 exceptions_throw_privilegedactionexception(e);
923 return (jobject) result;
927 /* JVM_GetInheritedAccessControlContext */
929 jobject JVM_GetInheritedAccessControlContext(JNIEnv *env, jclass cls)
931 log_println("JVM_GetInheritedAccessControlContext: IMPLEMENT ME!");
935 /* JVM_GetStackAccessControlContext */
937 jobject JVM_GetStackAccessControlContext(JNIEnv *env, jclass cls)
939 log_println("JVM_GetStackAccessControlContext: IMPLEMENT ME!");
943 /* JVM_IsArrayClass */
945 jboolean JVM_IsArrayClass(JNIEnv *env, jclass cls)
948 log_println("JVM_IsArrayClass: cls=%p", cls);
950 return class_is_array(LLNI_classinfo_unwrap(cls));
954 /* JVM_IsPrimitiveClass */
956 jboolean JVM_IsPrimitiveClass(JNIEnv *env, jclass cls)
960 c = LLNI_classinfo_unwrap(cls);
963 log_println("JVM_IsPrimitiveClass(cls=%p)", cls);
966 return class_is_primitive(c);
970 /* JVM_GetComponentType */
972 jclass JVM_GetComponentType(JNIEnv *env, jclass cls)
974 classinfo *component;
977 TRACEJVMCALLS("JVM_GetComponentType(env=%p, cls=%p)", env, cls);
979 c = LLNI_classinfo_unwrap(cls);
981 component = class_get_componenttype(c);
983 return (jclass) LLNI_classinfo_wrap(component);
987 /* JVM_GetClassModifiers */
989 jint JVM_GetClassModifiers(JNIEnv *env, jclass cls)
994 log_println("JVM_GetClassModifiers: cls=%p", cls);
997 c = LLNI_classinfo_unwrap(cls);
999 /* XXX is this correct? */
1001 return c->flags & ACC_CLASS_REFLECT_MASK;
1005 /* JVM_GetDeclaredClasses */
1007 jobjectArray JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass)
1010 java_handle_objectarray_t *oa;
1012 TRACEJVMCALLS("JVM_GetDeclaredClasses(env=%p, ofClass=%p)", env, ofClass);
1014 c = LLNI_classinfo_unwrap(ofClass);
1016 oa = class_get_declaredclasses(c, false);
1018 return (jobjectArray) oa;
1022 /* JVM_GetDeclaringClass */
1024 jclass JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)
1029 TRACEJVMCALLS("JVM_GetDeclaringClass(env=%p, ofClass=%p)", env, ofClass);
1031 c = LLNI_classinfo_unwrap(ofClass);
1033 dc = class_get_declaringclass(c);
1035 return (jclass) LLNI_classinfo_wrap(dc);
1039 /* JVM_GetClassSignature */
1041 jstring JVM_GetClassSignature(JNIEnv *env, jclass cls)
1047 TRACEJVMCALLS("JVM_GetClassSignature(env=%p, cls=%p)", env, cls);
1049 c = (classinfo *) cls;
1051 /* Get the signature of the class. */
1053 u = class_get_signature(c);
1058 /* Convert UTF-string to a Java-string. */
1060 s = javastring_new(u);
1066 /* JVM_GetClassAnnotations */
1068 jbyteArray JVM_GetClassAnnotations(JNIEnv *env, jclass cls)
1070 #if defined(ENABLE_ANNOTATIONS)
1071 classinfo *c = LLNI_classinfo_unwrap(cls);
1072 java_handle_bytearray_t *annotations = NULL;
1074 TRACEJVMCALLS("JVM_GetClassAnnotations: cls=%p", cls);
1077 exceptions_throw_nullpointerexception();
1081 /* Return null for arrays and primitives: */
1082 if(class_is_primitive(c) || class_is_array(c))
1087 if(c->annotations != NULL)
1089 uint32_t size = c->annotations->size;
1090 annotations = builtin_newarray_byte(size);
1092 if(annotations != NULL)
1094 MCOPY(annotations->data, c->annotations->data, uint8_t, size);
1098 return (jbyteArray)annotations;
1100 log_println("JVM_GetClassAnnotations: cls=%p, not implemented in this configuration!", cls);
1106 /* JVM_GetFieldAnnotations */
1108 jbyteArray JVM_GetFieldAnnotations(JNIEnv *env, jobject field)
1110 java_lang_reflect_Field *rf = (java_lang_reflect_Field*)field;
1111 java_handle_bytearray_t *ba = NULL;
1113 TRACEJVMCALLS("JVM_GetFieldAnnotations: field=%p", field);
1115 if (field == NULL) {
1116 exceptions_throw_nullpointerexception();
1120 LLNI_field_get_ref(rf, annotations, ba);
1122 return (jbyteArray)ba;
1126 /* JVM_GetMethodAnnotations */
1128 jbyteArray JVM_GetMethodAnnotations(JNIEnv *env, jobject method)
1130 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1131 java_handle_bytearray_t *ba = NULL;
1133 TRACEJVMCALLS("JVM_GetMethodAnnotations: method=%p", method);
1135 if (method == NULL) {
1136 exceptions_throw_nullpointerexception();
1140 LLNI_field_get_ref(rm, annotations, ba);
1142 return (jbyteArray)ba;
1146 /* JVM_GetMethodDefaultAnnotationValue */
1148 jbyteArray JVM_GetMethodDefaultAnnotationValue(JNIEnv *env, jobject method)
1150 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1151 java_handle_bytearray_t *ba = NULL;
1153 TRACEJVMCALLS("JVM_GetMethodDefaultAnnotationValue: method=%p", method);
1155 if (method == NULL) {
1156 exceptions_throw_nullpointerexception();
1160 LLNI_field_get_ref(rm, annotationDefault, ba);
1162 return (jbyteArray)ba;
1166 /* JVM_GetMethodParameterAnnotations */
1168 jbyteArray JVM_GetMethodParameterAnnotations(JNIEnv *env, jobject method)
1170 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1171 java_handle_bytearray_t *ba = NULL;
1173 TRACEJVMCALLS("JVM_GetMethodParameterAnnotations: method=%p", method);
1175 if (method == NULL) {
1176 exceptions_throw_nullpointerexception();
1180 LLNI_field_get_ref(rm, parameterAnnotations, ba);
1182 return (jbyteArray)ba;
1186 /* JVM_GetClassDeclaredFields */
1188 jobjectArray JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1191 log_println("JVM_GetClassDeclaredFields: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1193 return (jobjectArray) _Jv_java_lang_Class_getDeclaredFields((java_lang_Class *) ofClass, publicOnly);
1197 /* JVM_GetClassDeclaredMethods */
1199 jobjectArray JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1202 log_println("JVM_GetClassDeclaredMethods: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1204 return (jobjectArray) _Jv_java_lang_Class_getDeclaredMethods((java_lang_Class *) ofClass, publicOnly);
1208 /* JVM_GetClassDeclaredConstructors */
1210 jobjectArray JVM_GetClassDeclaredConstructors(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1213 log_println("JVM_GetClassDeclaredConstructors: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1215 return (jobjectArray) _Jv_java_lang_Class_getDeclaredConstructors((java_lang_Class *) ofClass, publicOnly);
1219 /* JVM_GetClassAccessFlags */
1221 jint JVM_GetClassAccessFlags(JNIEnv *env, jclass cls)
1226 log_println("JVM_GetClassAccessFlags: cls=%p", cls);
1229 c = LLNI_classinfo_unwrap(cls);
1231 return c->flags & ACC_CLASS_REFLECT_MASK;
1235 /* JVM_GetClassConstantPool */
1237 jobject JVM_GetClassConstantPool(JNIEnv *env, jclass cls)
1239 #if defined(ENABLE_ANNOTATIONS)
1240 sun_reflect_ConstantPool *constantPool = NULL;
1241 java_lang_Object *constantPoolOop = (java_lang_Object*)cls;
1243 TRACEJVMCALLS("JVM_GetClassConstantPool(env=%p, cls=%p)", env, cls);
1246 (sun_reflect_ConstantPool*)native_new_and_init(
1247 class_sun_reflect_ConstantPool);
1249 if (constantPool == NULL) {
1254 LLNI_field_set_ref(constantPool, constantPoolOop, constantPoolOop);
1256 return (jobject)constantPool;
1258 log_println("JVM_GetClassConstantPool(env=%p, cls=%p): not implemented in this configuration!", env, cls);
1264 /* JVM_ConstantPoolGetSize */
1266 jint JVM_ConstantPoolGetSize(JNIEnv *env, jobject unused, jobject jcpool)
1270 TRACEJVMCALLS("JVM_ConstantPoolGetSize(env=%p, unused=%p, jcpool=%p)", env, unused, jcpool);
1272 c = LLNI_classinfo_unwrap(jcpool);
1278 /* JVM_ConstantPoolGetClassAt */
1280 jclass JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1282 constant_classref *ref;
1286 TRACEJVMCALLS("JVM_ConstantPoolGetClassAt(env=%p, jcpool=%p, index=%d)", env, jcpool, index);
1288 c = LLNI_classinfo_unwrap(jcpool);
1290 ref = (constant_classref *) class_getconstant(c, index, CONSTANT_Class);
1295 result = resolve_classref_eager(ref);
1297 return (jclass) LLNI_classinfo_wrap(result);
1301 /* JVM_ConstantPoolGetClassAtIfLoaded */
1303 jclass JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1305 constant_classref *ref;
1309 TRACEJVMCALLS("JVM_ConstantPoolGetClassAtIfLoaded(env=%p, unused=%p, jcpool=%p, index=%d)", env, unused, jcpool, index);
1311 c = LLNI_classinfo_unwrap(jcpool);
1313 ref = (constant_classref *) class_getconstant(c, index, CONSTANT_Class);
1318 if (!resolve_classref(NULL, ref, resolveLazy, true, true, &result))
1321 if ((result == NULL) || !(result->state & CLASS_LOADED)) {
1325 return (jclass) LLNI_classinfo_wrap(result);
1329 /* JVM_ConstantPoolGetMethodAt */
1331 jobject JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1333 constant_FMIref *ref;
1334 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1336 TRACEJVMCALLS("JVM_ConstantPoolGetMethodAt: jcpool=%p, index=%d", jcpool, index);
1338 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Methodref);
1344 /* XXX: is that right? or do I have to use resolve_method_*? */
1345 return (jobject)reflect_method_new(ref->p.method);
1349 /* JVM_ConstantPoolGetMethodAtIfLoaded */
1351 jobject JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1353 constant_FMIref *ref;
1354 classinfo *c = NULL;
1355 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1357 TRACEJVMCALLS("JVM_ConstantPoolGetMethodAtIfLoaded: jcpool=%p, index=%d", jcpool, index);
1359 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Methodref);
1365 if (!resolve_classref(NULL, ref->p.classref, resolveLazy, true, true, &c)) {
1369 if (c == NULL || !(c->state & CLASS_LOADED)) {
1373 return (jobject)reflect_method_new(ref->p.method);
1377 /* JVM_ConstantPoolGetFieldAt */
1379 jobject JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1381 constant_FMIref *ref;
1382 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1384 TRACEJVMCALLS("JVM_ConstantPoolGetFieldAt: jcpool=%p, index=%d", jcpool, index);
1386 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Fieldref);
1392 return (jobject)reflect_field_new(ref->p.field);
1396 /* JVM_ConstantPoolGetFieldAtIfLoaded */
1398 jobject JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1400 constant_FMIref *ref;
1402 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1404 TRACEJVMCALLS("JVM_ConstantPoolGetFieldAtIfLoaded: jcpool=%p, index=%d", jcpool, index);
1406 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Fieldref);
1412 if (!resolve_classref(NULL, ref->p.classref, resolveLazy, true, true, &c)) {
1416 if (c == NULL || !(c->state & CLASS_LOADED)) {
1420 return (jobject)reflect_field_new(ref->p.field);
1424 /* JVM_ConstantPoolGetMemberRefInfoAt */
1426 jobjectArray JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1428 log_println("JVM_ConstantPoolGetMemberRefInfoAt: jcpool=%p, index=%d, IMPLEMENT ME!", jcpool, index);
1433 /* JVM_ConstantPoolGetIntAt */
1435 jint JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1437 constant_integer *ref;
1438 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1440 TRACEJVMCALLS("JVM_ConstantPoolGetIntAt: jcpool=%p, index=%d", jcpool, index);
1442 ref = (constant_integer*)class_getconstant(cls, index, CONSTANT_Integer);
1452 /* JVM_ConstantPoolGetLongAt */
1454 jlong JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1457 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1459 TRACEJVMCALLS("JVM_ConstantPoolGetLongAt: jcpool=%p, index=%d", jcpool, index);
1461 ref = (constant_long*)class_getconstant(cls, index, CONSTANT_Long);
1471 /* JVM_ConstantPoolGetFloatAt */
1473 jfloat JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1475 constant_float *ref;
1476 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1478 TRACEJVMCALLS("JVM_ConstantPoolGetFloatAt: jcpool=%p, index=%d", jcpool, index);
1480 ref = (constant_float*)class_getconstant(cls, index, CONSTANT_Float);
1490 /* JVM_ConstantPoolGetDoubleAt */
1492 jdouble JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1494 constant_double *ref;
1495 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1497 TRACEJVMCALLS("JVM_ConstantPoolGetDoubleAt: jcpool=%p, index=%d", jcpool, index);
1499 ref = (constant_double*)class_getconstant(cls, index, CONSTANT_Double);
1509 /* JVM_ConstantPoolGetStringAt */
1511 jstring JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1514 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1516 TRACEJVMCALLS("JVM_ConstantPoolGetStringAt: jcpool=%p, index=%d", jcpool, index);
1518 ref = (utf*)class_getconstant(cls, index, CONSTANT_String);
1524 /* XXX: I hope literalstring_new is the right Function. */
1525 return (jstring)literalstring_new(ref);
1529 /* JVM_ConstantPoolGetUTF8At */
1531 jstring JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1534 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1536 TRACEJVMCALLS("JVM_ConstantPoolGetUTF8At: jcpool=%p, index=%d", jcpool, index);
1538 ref = (utf*)class_getconstant(cls, index, CONSTANT_Utf8);
1544 /* XXX: I hope literalstring_new is the right Function. */
1545 return (jstring)literalstring_new(ref);
1549 /* JVM_DesiredAssertionStatus */
1551 jboolean JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls)
1553 TRACEJVMCALLS("JVM_DesiredAssertionStatus(env=%p, unused=%p, cls=%p)", env, unused, cls);
1555 /* TODO: Implement this one, but false should be OK. */
1561 /* JVM_AssertionStatusDirectives */
1563 jobject JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused)
1566 java_lang_AssertionStatusDirectives *o;
1567 java_handle_objectarray_t *classes;
1568 java_handle_objectarray_t *packages;
1571 log_println("JVM_AssertionStatusDirectives");
1573 /* XXX this is not completely implemented */
1575 c = load_class_bootstrap(utf_new_char("java/lang/AssertionStatusDirectives"));
1580 o = (java_lang_AssertionStatusDirectives *) builtin_new(c);
1585 classes = builtin_anewarray(0, class_java_lang_Object);
1587 if (classes == NULL)
1590 packages = builtin_anewarray(0, class_java_lang_Object);
1592 if (packages == NULL)
1595 /* set instance fields */
1597 o->classes = classes;
1598 o->packages = packages;
1604 /* JVM_GetClassNameUTF */
1606 const char* JVM_GetClassNameUTF(JNIEnv *env, jclass cls)
1608 log_println("JVM_GetClassNameUTF: IMPLEMENT ME!");
1612 /* JVM_GetClassCPTypes */
1614 void JVM_GetClassCPTypes(JNIEnv *env, jclass cls, unsigned char *types)
1616 log_println("JVM_GetClassCPTypes: IMPLEMENT ME!");
1620 /* JVM_GetClassCPEntriesCount */
1622 jint JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cls)
1624 log_println("JVM_GetClassCPEntriesCount: IMPLEMENT ME!");
1628 /* JVM_GetClassFieldsCount */
1630 jint JVM_GetClassFieldsCount(JNIEnv *env, jclass cls)
1632 log_println("JVM_GetClassFieldsCount: IMPLEMENT ME!");
1636 /* JVM_GetClassMethodsCount */
1638 jint JVM_GetClassMethodsCount(JNIEnv *env, jclass cls)
1640 log_println("JVM_GetClassMethodsCount: IMPLEMENT ME!");
1644 /* JVM_GetMethodIxExceptionIndexes */
1646 void JVM_GetMethodIxExceptionIndexes(JNIEnv *env, jclass cls, jint method_index, unsigned short *exceptions)
1648 log_println("JVM_GetMethodIxExceptionIndexes: IMPLEMENT ME!");
1652 /* JVM_GetMethodIxExceptionsCount */
1654 jint JVM_GetMethodIxExceptionsCount(JNIEnv *env, jclass cls, jint method_index)
1656 log_println("JVM_GetMethodIxExceptionsCount: IMPLEMENT ME!");
1660 /* JVM_GetMethodIxByteCode */
1662 void JVM_GetMethodIxByteCode(JNIEnv *env, jclass cls, jint method_index, unsigned char *code)
1664 log_println("JVM_GetMethodIxByteCode: IMPLEMENT ME!");
1668 /* JVM_GetMethodIxByteCodeLength */
1670 jint JVM_GetMethodIxByteCodeLength(JNIEnv *env, jclass cls, jint method_index)
1672 log_println("JVM_GetMethodIxByteCodeLength: IMPLEMENT ME!");
1676 /* JVM_GetMethodIxExceptionTableEntry */
1678 void JVM_GetMethodIxExceptionTableEntry(JNIEnv *env, jclass cls, jint method_index, jint entry_index, JVM_ExceptionTableEntryType *entry)
1680 log_println("JVM_GetMethodIxExceptionTableEntry: IMPLEMENT ME!");
1684 /* JVM_GetMethodIxExceptionTableLength */
1686 jint JVM_GetMethodIxExceptionTableLength(JNIEnv *env, jclass cls, int method_index)
1688 log_println("JVM_GetMethodIxExceptionTableLength: IMPLEMENT ME!");
1692 /* JVM_GetMethodIxModifiers */
1694 jint JVM_GetMethodIxModifiers(JNIEnv *env, jclass cls, int method_index)
1696 log_println("JVM_GetMethodIxModifiers: IMPLEMENT ME!");
1700 /* JVM_GetFieldIxModifiers */
1702 jint JVM_GetFieldIxModifiers(JNIEnv *env, jclass cls, int field_index)
1704 log_println("JVM_GetFieldIxModifiers: IMPLEMENT ME!");
1708 /* JVM_GetMethodIxLocalsCount */
1710 jint JVM_GetMethodIxLocalsCount(JNIEnv *env, jclass cls, int method_index)
1712 log_println("JVM_GetMethodIxLocalsCount: IMPLEMENT ME!");
1716 /* JVM_GetMethodIxArgsSize */
1718 jint JVM_GetMethodIxArgsSize(JNIEnv *env, jclass cls, int method_index)
1720 log_println("JVM_GetMethodIxArgsSize: IMPLEMENT ME!");
1724 /* JVM_GetMethodIxMaxStack */
1726 jint JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cls, int method_index)
1728 log_println("JVM_GetMethodIxMaxStack: IMPLEMENT ME!");
1732 /* JVM_IsConstructorIx */
1734 jboolean JVM_IsConstructorIx(JNIEnv *env, jclass cls, int method_index)
1736 log_println("JVM_IsConstructorIx: IMPLEMENT ME!");
1740 /* JVM_GetMethodIxNameUTF */
1742 const char* JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cls, jint method_index)
1744 log_println("JVM_GetMethodIxNameUTF: IMPLEMENT ME!");
1748 /* JVM_GetMethodIxSignatureUTF */
1750 const char* JVM_GetMethodIxSignatureUTF(JNIEnv *env, jclass cls, jint method_index)
1752 log_println("JVM_GetMethodIxSignatureUTF: IMPLEMENT ME!");
1756 /* JVM_GetCPFieldNameUTF */
1758 const char* JVM_GetCPFieldNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1760 log_println("JVM_GetCPFieldNameUTF: IMPLEMENT ME!");
1764 /* JVM_GetCPMethodNameUTF */
1766 const char* JVM_GetCPMethodNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1768 log_println("JVM_GetCPMethodNameUTF: IMPLEMENT ME!");
1772 /* JVM_GetCPMethodSignatureUTF */
1774 const char* JVM_GetCPMethodSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)
1776 log_println("JVM_GetCPMethodSignatureUTF: IMPLEMENT ME!");
1780 /* JVM_GetCPFieldSignatureUTF */
1782 const char* JVM_GetCPFieldSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)
1784 log_println("JVM_GetCPFieldSignatureUTF: IMPLEMENT ME!");
1788 /* JVM_GetCPClassNameUTF */
1790 const char* JVM_GetCPClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1792 log_println("JVM_GetCPClassNameUTF: IMPLEMENT ME!");
1796 /* JVM_GetCPFieldClassNameUTF */
1798 const char* JVM_GetCPFieldClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1800 log_println("JVM_GetCPFieldClassNameUTF: IMPLEMENT ME!");
1804 /* JVM_GetCPMethodClassNameUTF */
1806 const char* JVM_GetCPMethodClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1808 log_println("JVM_GetCPMethodClassNameUTF: IMPLEMENT ME!");
1812 /* JVM_GetCPFieldModifiers */
1814 jint JVM_GetCPFieldModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)
1816 log_println("JVM_GetCPFieldModifiers: IMPLEMENT ME!");
1820 /* JVM_GetCPMethodModifiers */
1822 jint JVM_GetCPMethodModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)
1824 log_println("JVM_GetCPMethodModifiers: IMPLEMENT ME!");
1828 /* JVM_ReleaseUTF */
1830 void JVM_ReleaseUTF(const char *utf)
1832 log_println("JVM_ReleaseUTF: IMPLEMENT ME!");
1836 /* JVM_IsSameClassPackage */
1838 jboolean JVM_IsSameClassPackage(JNIEnv *env, jclass class1, jclass class2)
1840 log_println("JVM_IsSameClassPackage: IMPLEMENT ME!");
1846 jint JVM_Open(const char *fname, jint flags, jint mode)
1851 log_println("JVM_Open: fname=%s, flags=%d, mode=%d", fname, flags, mode);
1854 result = open(fname, flags, mode);
1862 /* XXX don't know what to do here */
1863 /* return JVM_EEXIST; */
1874 jint JVM_Close(jint fd)
1877 log_println("JVM_Close: fd=%d", fd);
1885 jint JVM_Read(jint fd, char *buf, jint nbytes)
1888 log_println("JVM_Read: fd=%d, buf=%p, nbytes=%d", fd, buf, nbytes);
1890 return read(fd, buf, nbytes);
1896 jint JVM_Write(jint fd, char *buf, jint nbytes)
1899 log_println("JVM_Write: fd=%d, buf=%s, nbytes=%d", fd, buf, nbytes);
1901 return write(fd, buf, nbytes);
1907 jint JVM_Available(jint fd, jlong *pbytes)
1909 #if defined(FIONREAD)
1912 TRACEJVMCALLS("JVM_Available(fd=%d, pbytes=%p)", fd, pbytes);
1916 if (ioctl(fd, FIONREAD, &bytes) < 0)
1923 # error FIONREAD not defined
1930 jlong JVM_Lseek(jint fd, jlong offset, jint whence)
1933 log_println("JVM_Lseek: fd=%d, offset=%ld, whence=%d", fd, offset, whence);
1935 return (jlong) lseek(fd, (off_t) offset, whence);
1941 jint JVM_SetLength(jint fd, jlong length)
1943 log_println("JVM_SetLength: IMPLEMENT ME!");
1949 jint JVM_Sync(jint fd)
1951 log_println("JVM_Sync: IMPLEMENT ME!");
1955 /* JVM_StartThread */
1957 void JVM_StartThread(JNIEnv* env, jobject jthread)
1960 log_println("JVM_StartThread: jthread=%p", jthread);
1962 _Jv_java_lang_Thread_start((java_lang_Thread *) jthread, 0);
1966 /* JVM_StopThread */
1968 void JVM_StopThread(JNIEnv* env, jobject jthread, jobject throwable)
1970 log_println("JVM_StopThread: IMPLEMENT ME!");
1974 /* JVM_IsThreadAlive */
1976 jboolean JVM_IsThreadAlive(JNIEnv* env, jobject jthread)
1979 log_println("JVM_IsThreadAlive: jthread=%p", jthread);
1981 return _Jv_java_lang_Thread_isAlive((java_lang_Thread *) jthread);
1985 /* JVM_SuspendThread */
1987 void JVM_SuspendThread(JNIEnv* env, jobject jthread)
1989 log_println("JVM_SuspendThread: IMPLEMENT ME!");
1993 /* JVM_ResumeThread */
1995 void JVM_ResumeThread(JNIEnv* env, jobject jthread)
1997 log_println("JVM_ResumeThread: IMPLEMENT ME!");
2001 /* JVM_SetThreadPriority */
2003 void JVM_SetThreadPriority(JNIEnv* env, jobject jthread, jint prio)
2006 log_println("JVM_SetThreadPriority: jthread=%p, prio=%d", jthread, prio);
2008 _Jv_java_lang_Thread_setPriority((java_lang_Thread *) jthread, prio);
2014 void JVM_Yield(JNIEnv *env, jclass threadClass)
2016 TRACEJVMCALLS("JVM_Yield(env=%p, threadClass=%p)", env, threadClass);
2024 void JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis)
2027 log_println("JVM_Sleep: threadClass=%p, millis=%ld", threadClass, millis);
2029 _Jv_java_lang_Thread_sleep(millis);
2033 /* JVM_CurrentThread */
2035 jobject JVM_CurrentThread(JNIEnv* env, jclass threadClass)
2038 log_println("JVM_CurrentThread: threadClass=%p", threadClass);
2040 return (jobject) _Jv_java_lang_Thread_currentThread();
2044 /* JVM_CountStackFrames */
2046 jint JVM_CountStackFrames(JNIEnv* env, jobject jthread)
2048 log_println("JVM_CountStackFrames: IMPLEMENT ME!");
2054 void JVM_Interrupt(JNIEnv* env, jobject jthread)
2056 log_println("JVM_Interrupt: IMPLEMENT ME!");
2060 /* JVM_IsInterrupted */
2062 jboolean JVM_IsInterrupted(JNIEnv* env, jobject jthread, jboolean clear_interrupted)
2065 log_println("JVM_IsInterrupted: jthread=%p, clear_interrupted=%d", jthread, clear_interrupted);
2067 /* XXX do something with clear_interrupted */
2068 return _Jv_java_lang_Thread_isInterrupted((java_lang_Thread *) jthread);
2074 jboolean JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj)
2076 log_println("JVM_HoldsLock: IMPLEMENT ME!");
2080 /* JVM_DumpAllStacks */
2082 void JVM_DumpAllStacks(JNIEnv* env, jclass unused)
2084 log_println("JVM_DumpAllStacks: IMPLEMENT ME!");
2088 /* JVM_CurrentLoadedClass */
2090 jclass JVM_CurrentLoadedClass(JNIEnv *env)
2092 log_println("JVM_CurrentLoadedClass: IMPLEMENT ME!");
2096 /* JVM_CurrentClassLoader */
2098 jobject JVM_CurrentClassLoader(JNIEnv *env)
2100 /* XXX if a method in a class in a trusted loader is in a
2101 doPrivileged, return NULL */
2103 log_println("JVM_CurrentClassLoader: IMPLEMENT ME!");
2107 /* JVM_GetClassContext */
2109 jobjectArray JVM_GetClassContext(JNIEnv *env)
2112 log_println("JVM_GetClassContext");
2114 return (jobjectArray) stacktrace_getClassContext();
2118 /* JVM_ClassDepth */
2120 jint JVM_ClassDepth(JNIEnv *env, jstring name)
2122 log_println("JVM_ClassDepth: IMPLEMENT ME!");
2126 /* JVM_ClassLoaderDepth */
2128 jint JVM_ClassLoaderDepth(JNIEnv *env)
2130 log_println("JVM_ClassLoaderDepth: IMPLEMENT ME!");
2134 /* JVM_GetSystemPackage */
2136 jstring JVM_GetSystemPackage(JNIEnv *env, jstring name)
2138 log_println("JVM_GetSystemPackage(env=%p, name=%p)");
2139 javastring_print((java_handle_t *) name);
2146 /* JVM_GetSystemPackages */
2148 jobjectArray JVM_GetSystemPackages(JNIEnv *env)
2150 log_println("JVM_GetSystemPackages: IMPLEMENT ME!");
2154 /* JVM_AllocateNewObject */
2156 jobject JVM_AllocateNewObject(JNIEnv *env, jobject receiver, jclass currClass, jclass initClass)
2158 log_println("JVM_AllocateNewObject: IMPLEMENT ME!");
2162 /* JVM_AllocateNewArray */
2164 jobject JVM_AllocateNewArray(JNIEnv *env, jobject obj, jclass currClass, jint length)
2166 log_println("JVM_AllocateNewArray: IMPLEMENT ME!");
2170 /* JVM_LatestUserDefinedLoader */
2172 jobject JVM_LatestUserDefinedLoader(JNIEnv *env)
2174 log_println("JVM_LatestUserDefinedLoader: IMPLEMENT ME!");
2178 /* JVM_LoadClass0 */
2180 jclass JVM_LoadClass0(JNIEnv *env, jobject receiver, jclass currClass, jstring currClassName)
2182 log_println("JVM_LoadClass0: IMPLEMENT ME!");
2186 /* JVM_GetArrayLength */
2188 jint JVM_GetArrayLength(JNIEnv *env, jobject arr)
2192 TRACEJVMCALLS("JVM_GetArrayLength(arr=%p)", arr);
2194 a = (java_handle_t *) arr;
2196 return array_length_get(a);
2200 /* JVM_GetArrayElement */
2202 jobject JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index)
2207 TRACEJVMCALLS("JVM_GetArrayElement(env=%p, arr=%p, index=%d)", env, arr, index);
2209 a = (java_handle_t *) arr;
2211 /* if (!class_is_array(a->objheader.vftbl->class)) { */
2212 /* exceptions_throw_illegalargumentexception(); */
2216 o = array_element_get(a, index);
2222 /* JVM_GetPrimitiveArrayElement */
2224 jvalue JVM_GetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jint wCode)
2226 log_println("JVM_GetPrimitiveArrayElement: IMPLEMENT ME!");
2230 /* JVM_SetArrayElement */
2232 void JVM_SetArrayElement(JNIEnv *env, jobject arr, jint index, jobject val)
2235 java_handle_t *value;
2237 TRACEJVMCALLS("JVM_SetArrayElement(env=%p, arr=%p, index=%d, val=%p)", env, arr, index, val);
2239 a = (java_handle_t *) arr;
2240 value = (java_handle_t *) val;
2242 array_element_set(a, index, value);
2246 /* JVM_SetPrimitiveArrayElement */
2248 void JVM_SetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jvalue v, unsigned char vCode)
2250 log_println("JVM_SetPrimitiveArrayElement: IMPLEMENT ME!");
2256 jobject JVM_NewArray(JNIEnv *env, jclass eltClass, jint length)
2261 java_handle_objectarray_t *oa;
2263 TRACEJVMCALLS("JVM_NewArray(env=%p, eltClass=%p, length=%d)", env, eltClass, length);
2265 c = LLNI_classinfo_unwrap(eltClass);
2267 /* create primitive or object array */
2269 if (class_is_primitive(c)) {
2270 pc = primitive_arrayclass_get_by_name(c->name);
2271 a = builtin_newarray(length, pc);
2276 oa = builtin_anewarray(length, c);
2278 return (jobject) oa;
2283 /* JVM_NewMultiArray */
2285 jobject JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim)
2287 log_println("JVM_NewMultiArray: IMPLEMENT ME!");
2291 /* JVM_InitializeSocketLibrary */
2293 jint JVM_InitializeSocketLibrary()
2295 log_println("JVM_InitializeSocketLibrary: IMPLEMENT ME!");
2301 jint JVM_Socket(jint domain, jint type, jint protocol)
2303 TRACEJVMCALLS("JVM_Socket(domain=%d, type=%d, protocol=%d)", domain, type, protocol);
2305 return socket(domain, type, protocol);
2309 /* JVM_SocketClose */
2311 jint JVM_SocketClose(jint fd)
2313 TRACEJVMCALLS("JVM_SocketClose(fd=%d)", fd);
2319 /* JVM_SocketShutdown */
2321 jint JVM_SocketShutdown(jint fd, jint howto)
2323 TRACEJVMCALLS("JVM_SocketShutdown(fd=%d, howto=%d)", fd, howto);
2325 return shutdown(fd, howto);
2331 jint JVM_Recv(jint fd, char *buf, jint nBytes, jint flags)
2333 log_println("JVM_Recv: IMPLEMENT ME!");
2339 jint JVM_Send(jint fd, char *buf, jint nBytes, jint flags)
2341 log_println("JVM_Send: IMPLEMENT ME!");
2347 jint JVM_Timeout(int fd, long timeout)
2349 log_println("JVM_Timeout: IMPLEMENT ME!");
2355 jint JVM_Listen(jint fd, jint count)
2357 TRACEJVMCALLS("JVM_Listen(fd=%d, count=%d)", fd, count);
2359 return listen(fd, count);
2365 jint JVM_Connect(jint fd, struct sockaddr *him, jint len)
2367 TRACEJVMCALLS("JVM_Connect(fd=%d, him=%p, len=%d)", fd, him, len);
2369 return connect(fd, him, len);
2375 jint JVM_Bind(jint fd, struct sockaddr *him, jint len)
2377 log_println("JVM_Bind: IMPLEMENT ME!");
2383 jint JVM_Accept(jint fd, struct sockaddr *him, jint *len)
2385 TRACEJVMCALLS("JVM_Accept(fd=%d, him=%p, len=%p)", fd, him, len);
2387 return accept(fd, him, (socklen_t *) len);
2393 jint JVM_RecvFrom(jint fd, char *buf, int nBytes, int flags, struct sockaddr *from, int *fromlen)
2395 log_println("JVM_RecvFrom: IMPLEMENT ME!");
2399 /* JVM_GetSockName */
2401 jint JVM_GetSockName(jint fd, struct sockaddr *him, int *len)
2403 TRACEJVMCALLS("JVM_GetSockName(fd=%d, him=%p, len=%p)", fd, him, len);
2405 return getsockname(fd, him, (socklen_t *) len);
2411 jint JVM_SendTo(jint fd, char *buf, int len, int flags, struct sockaddr *to, int tolen)
2413 log_println("JVM_SendTo: IMPLEMENT ME!");
2417 /* JVM_SocketAvailable */
2419 jint JVM_SocketAvailable(jint fd, jint *pbytes)
2421 log_println("JVM_SocketAvailable: IMPLEMENT ME!");
2425 /* JVM_GetSockOpt */
2427 jint JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen)
2429 log_println("JVM_GetSockOpt: IMPLEMENT ME!");
2433 /* JVM_SetSockOpt */
2435 jint JVM_SetSockOpt(jint fd, int level, int optname, const char *optval, int optlen)
2437 TRACEJVMCALLS("JVM_SetSockOpt(fd=%d, level=%d, optname=%d, optval=%s, optlen=%d)", fd, level, optname, optval, optlen);
2439 return setsockopt(fd, level, optname, optval, optlen);
2443 /* JVM_GetHostName */
2445 int JVM_GetHostName(char* name, int namelen)
2447 TRACEJVMCALLS("JVM_GetHostName(name=%s, namelen=%d)", name, namelen);
2449 return gethostname(name, namelen);
2453 /* JVM_GetHostByAddr */
2455 struct hostent* JVM_GetHostByAddr(const char* name, int len, int type)
2457 log_println("JVM_GetHostByAddr: IMPLEMENT ME!");
2461 /* JVM_GetHostByName */
2463 struct hostent* JVM_GetHostByName(char* name)
2465 log_println("JVM_GetHostByName: IMPLEMENT ME!");
2469 /* JVM_GetProtoByName */
2471 struct protoent* JVM_GetProtoByName(char* name)
2473 log_println("JVM_GetProtoByName: IMPLEMENT ME!");
2477 /* JVM_LoadLibrary */
2479 void *JVM_LoadLibrary(const char *name)
2483 TRACEJVMCALLS("JVM_LoadLibrary(name=%s)", name);
2485 u = utf_new_char(name);
2487 return native_library_open(u);
2491 /* JVM_UnloadLibrary */
2493 void JVM_UnloadLibrary(void* handle)
2495 log_println("JVM_UnloadLibrary: IMPLEMENT ME!");
2499 /* JVM_FindLibraryEntry */
2501 void *JVM_FindLibraryEntry(void *handle, const char *name)
2505 TRACEJVMCALLS("JVM_FindLibraryEntry(handle=%p, name=%s)", handle, name);
2507 symbol = lt_dlsym(handle, name);
2515 jboolean JVM_IsNaN(jdouble a)
2517 log_println("JVM_IsNaN: IMPLEMENT ME!");
2521 /* JVM_IsSupportedJNIVersion */
2523 jboolean JVM_IsSupportedJNIVersion(jint version)
2525 TRACEJVMCALLS("JVM_IsSupportedJNIVersion(version=%d)", version);
2528 case JNI_VERSION_1_1:
2529 case JNI_VERSION_1_2:
2530 case JNI_VERSION_1_4:
2538 /* JVM_InternString */
2540 jstring JVM_InternString(JNIEnv *env, jstring str)
2542 TRACEJVMCALLS("JVM_InternString(env=%p, str=%p)", env, str);
2544 return (jstring) javastring_intern((java_handle_t *) str);
2548 /* JVM_RawMonitorCreate */
2550 JNIEXPORT void* JNICALL JVM_RawMonitorCreate(void)
2555 log_println("JVM_RawMonitorCreate");
2558 o = NEW(java_object_t);
2560 lock_init_object_lock(o);
2566 /* JVM_RawMonitorDestroy */
2568 JNIEXPORT void JNICALL JVM_RawMonitorDestroy(void *mon)
2571 log_println("JVM_RawMonitorDestroy: mon=%p", mon);
2573 FREE(mon, java_object_t);
2577 /* JVM_RawMonitorEnter */
2579 JNIEXPORT jint JNICALL JVM_RawMonitorEnter(void *mon)
2582 log_println("JVM_RawMonitorEnter: mon=%p", mon);
2584 (void) lock_monitor_enter((java_object_t *) mon);
2590 /* JVM_RawMonitorExit */
2592 JNIEXPORT void JNICALL JVM_RawMonitorExit(void *mon)
2595 log_println("JVM_RawMonitorExit: mon=%p", mon);
2597 (void) lock_monitor_exit((java_object_t *) mon);
2601 /* JVM_SetPrimitiveFieldValues */
2603 void JVM_SetPrimitiveFieldValues(JNIEnv *env, jclass cb, jobject obj, jlongArray fieldIDs, jcharArray typecodes, jbyteArray data)
2605 log_println("JVM_SetPrimitiveFieldValues: IMPLEMENT ME!");
2609 /* JVM_GetPrimitiveFieldValues */
2611 void JVM_GetPrimitiveFieldValues(JNIEnv *env, jclass cb, jobject obj, jlongArray fieldIDs, jcharArray typecodes, jbyteArray data)
2613 log_println("JVM_GetPrimitiveFieldValues: IMPLEMENT ME!");
2617 /* JVM_AccessVMBooleanFlag */
2619 jboolean JVM_AccessVMBooleanFlag(const char* name, jboolean* value, jboolean is_get)
2621 log_println("JVM_AccessVMBooleanFlag: IMPLEMENT ME!");
2625 /* JVM_AccessVMIntFlag */
2627 jboolean JVM_AccessVMIntFlag(const char* name, jint* value, jboolean is_get)
2629 log_println("JVM_AccessVMIntFlag: IMPLEMENT ME!");
2633 /* JVM_VMBreakPoint */
2635 void JVM_VMBreakPoint(JNIEnv *env, jobject obj)
2637 log_println("JVM_VMBreakPoint: IMPLEMENT ME!");
2641 /* JVM_GetClassFields */
2643 jobjectArray JVM_GetClassFields(JNIEnv *env, jclass cls, jint which)
2645 log_println("JVM_GetClassFields: IMPLEMENT ME!");
2649 /* JVM_GetClassMethods */
2651 jobjectArray JVM_GetClassMethods(JNIEnv *env, jclass cls, jint which)
2653 log_println("JVM_GetClassMethods: IMPLEMENT ME!");
2657 /* JVM_GetClassConstructors */
2659 jobjectArray JVM_GetClassConstructors(JNIEnv *env, jclass cls, jint which)
2661 log_println("JVM_GetClassConstructors: IMPLEMENT ME!");
2665 /* JVM_GetClassField */
2667 jobject JVM_GetClassField(JNIEnv *env, jclass cls, jstring name, jint which)
2669 log_println("JVM_GetClassField: IMPLEMENT ME!");
2673 /* JVM_GetClassMethod */
2675 jobject JVM_GetClassMethod(JNIEnv *env, jclass cls, jstring name, jobjectArray types, jint which)
2677 log_println("JVM_GetClassMethod: IMPLEMENT ME!");
2681 /* JVM_GetClassConstructor */
2683 jobject JVM_GetClassConstructor(JNIEnv *env, jclass cls, jobjectArray types, jint which)
2685 log_println("JVM_GetClassConstructor: IMPLEMENT ME!");
2689 /* JVM_NewInstance */
2691 jobject JVM_NewInstance(JNIEnv *env, jclass cls)
2693 log_println("JVM_NewInstance: IMPLEMENT ME!");
2699 jobject JVM_GetField(JNIEnv *env, jobject field, jobject obj)
2701 log_println("JVM_GetField: IMPLEMENT ME!");
2705 /* JVM_GetPrimitiveField */
2707 jvalue JVM_GetPrimitiveField(JNIEnv *env, jobject field, jobject obj, unsigned char wCode)
2709 log_println("JVM_GetPrimitiveField: IMPLEMENT ME!");
2715 void JVM_SetField(JNIEnv *env, jobject field, jobject obj, jobject val)
2717 log_println("JVM_SetField: IMPLEMENT ME!");
2721 /* JVM_SetPrimitiveField */
2723 void JVM_SetPrimitiveField(JNIEnv *env, jobject field, jobject obj, jvalue v, unsigned char vCode)
2725 log_println("JVM_SetPrimitiveField: IMPLEMENT ME!");
2729 /* JVM_InvokeMethod */
2731 jobject JVM_InvokeMethod(JNIEnv *env, jobject method, jobject obj, jobjectArray args0)
2734 log_println("JVM_InvokeMethod: method=%p, obj=%p, args0=%p", method, obj, args0);
2736 return (jobject) _Jv_java_lang_reflect_Method_invoke((java_lang_reflect_Method *) method, (java_lang_Object *) obj, (java_handle_objectarray_t *) args0);
2740 /* JVM_NewInstanceFromConstructor */
2742 jobject JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0)
2745 log_println("JVM_NewInstanceFromConstructor: c=%p, args0=%p", c, args0);
2747 return (jobject) _Jv_java_lang_reflect_Constructor_newInstance(env, (java_lang_reflect_Constructor *) c, (java_handle_objectarray_t *) args0);
2751 /* JVM_SupportsCX8 */
2753 jboolean JVM_SupportsCX8()
2756 log_println("JVM_SupportsCX8");
2758 return _Jv_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8(NULL, NULL);
2764 jboolean JVM_CX8Field(JNIEnv *env, jobject obj, jfieldID fid, jlong oldVal, jlong newVal)
2766 log_println("JVM_CX8Field: IMPLEMENT ME!");
2770 /* JVM_GetAllThreads */
2772 jobjectArray JVM_GetAllThreads(JNIEnv *env, jclass dummy)
2774 log_println("JVM_GetAllThreads: IMPLEMENT ME!");
2778 /* JVM_DumpThreads */
2780 jobjectArray JVM_DumpThreads(JNIEnv *env, jclass threadClass, jobjectArray threads)
2782 log_println("JVM_DumpThreads: IMPLEMENT ME!");
2786 /* JVM_GetManagement */
2788 void* JVM_GetManagement(jint version)
2790 log_println("JVM_GetManagement: IMPLEMENT ME!");
2794 /* JVM_InitAgentProperties */
2796 jobject JVM_InitAgentProperties(JNIEnv *env, jobject properties)
2798 log_println("JVM_InitAgentProperties: IMPLEMENT ME!");
2802 /* JVM_GetEnclosingMethodInfo */
2804 jobjectArray JVM_GetEnclosingMethodInfo(JNIEnv *env, jclass ofClass)
2806 log_println("JVM_GetEnclosingMethodInfo: IMPLEMENT ME!");
2810 /* JVM_GetThreadStateValues */
2812 jintArray JVM_GetThreadStateValues(JNIEnv* env, jint javaThreadState)
2814 java_handle_intarray_t *ia;
2816 TRACEJVMCALLS("JVM_GetThreadStateValues(env=%p, javaThreadState=%d)",
2817 env, javaThreadState);
2819 /* If new thread states are added in future JDK and VM versions,
2820 this should check if the JDK version is compatible with thread
2821 states supported by the VM. Return NULL if not compatible.
2823 This function must map the VM java_lang_Thread::ThreadStatus
2824 to the Java thread state that the JDK supports. */
2826 switch (javaThreadState) {
2827 case THREAD_STATE_NEW:
2828 ia = builtin_newarray_int(1);
2833 array_intarray_element_set(ia, 0, THREAD_STATE_NEW);
2836 case THREAD_STATE_RUNNABLE:
2837 ia = builtin_newarray_int(1);
2842 array_intarray_element_set(ia, 0, THREAD_STATE_RUNNABLE);
2845 case THREAD_STATE_BLOCKED:
2846 ia = builtin_newarray_int(1);
2851 array_intarray_element_set(ia, 0, THREAD_STATE_BLOCKED);
2854 case THREAD_STATE_WAITING:
2855 ia = builtin_newarray_int(2);
2860 array_intarray_element_set(ia, 0, THREAD_STATE_WAITING);
2861 /* XXX Implement parked stuff. */
2862 /* array_intarray_element_set(ia, 1, PARKED); */
2865 case THREAD_STATE_TIMED_WAITING:
2866 ia = builtin_newarray_int(3);
2871 /* XXX Not sure about that one. */
2872 /* array_intarray_element_set(ia, 0, SLEEPING); */
2873 array_intarray_element_set(ia, 0, THREAD_STATE_TIMED_WAITING);
2874 /* XXX Implement parked stuff. */
2875 /* array_intarray_element_set(ia, 2, PARKED); */
2878 case THREAD_STATE_TERMINATED:
2879 ia = builtin_newarray_int(1);
2884 array_intarray_element_set(ia, 0, THREAD_STATE_TERMINATED);
2888 /* Unknown state - probably incompatible JDK version */
2892 return (jintArray) ia;
2896 /* JVM_GetThreadStateNames */
2898 jobjectArray JVM_GetThreadStateNames(JNIEnv* env, jint javaThreadState, jintArray values)
2900 java_handle_intarray_t *ia;
2901 java_handle_objectarray_t *oa;
2904 TRACEJVMCALLS("JVM_GetThreadStateNames(env=%p, javaThreadState=%d, values=%p)",
2905 env, javaThreadState, values);
2907 ia = (java_handle_intarray_t *) values;
2909 /* If new thread states are added in future JDK and VM versions,
2910 this should check if the JDK version is compatible with thread
2911 states supported by the VM. Return NULL if not compatible.
2913 This function must map the VM java_lang_Thread::ThreadStatus
2914 to the Java thread state that the JDK supports. */
2916 if (values == NULL) {
2917 exceptions_throw_nullpointerexception();
2921 switch (javaThreadState) {
2922 case THREAD_STATE_NEW:
2923 assert(ia->header.size == 1 && ia->data[0] == THREAD_STATE_NEW);
2925 oa = builtin_anewarray(1, class_java_lang_String);
2930 s = javastring_new(utf_new_char("NEW"));
2935 array_objectarray_element_set(oa, 0, s);
2938 case THREAD_STATE_RUNNABLE:
2939 oa = builtin_anewarray(1, class_java_lang_String);
2944 s = javastring_new(utf_new_char("RUNNABLE"));
2949 array_objectarray_element_set(oa, 0, s);
2952 case THREAD_STATE_BLOCKED:
2953 oa = builtin_anewarray(1, class_java_lang_String);
2958 s = javastring_new(utf_new_char("BLOCKED"));
2963 array_objectarray_element_set(oa, 0, s);
2966 case THREAD_STATE_WAITING:
2967 oa = builtin_anewarray(2, class_java_lang_String);
2972 s = javastring_new(utf_new_char("WAITING.OBJECT_WAIT"));
2973 /* s = javastring_new(utf_new_char("WAITING.PARKED")); */
2978 array_objectarray_element_set(oa, 0, s);
2979 /* array_objectarray_element_set(oa, 1, s); */
2982 case THREAD_STATE_TIMED_WAITING:
2983 oa = builtin_anewarray(3, class_java_lang_String);
2988 /* s = javastring_new(utf_new_char("TIMED_WAITING.SLEEPING")); */
2989 s = javastring_new(utf_new_char("TIMED_WAITING.OBJECT_WAIT"));
2990 /* s = javastring_new(utf_new_char("TIMED_WAITING.PARKED")); */
2995 /* array_objectarray_element_set(oa, 0, s); */
2996 array_objectarray_element_set(oa, 0, s);
2997 /* array_objectarray_element_set(oa, 2, s); */
3000 case THREAD_STATE_TERMINATED:
3001 oa = builtin_anewarray(1, class_java_lang_String);
3006 s = javastring_new(utf_new_char("TERMINATED"));
3011 array_objectarray_element_set(oa, 0, s);
3015 /* Unknown state - probably incompatible JDK version */
3019 return (jobjectArray) oa;
3023 /* JVM_GetVersionInfo */
3025 void JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size)
3027 log_println("JVM_GetVersionInfo: IMPLEMENT ME!");
3031 /* OS: JVM_RegisterSignal */
3033 void *JVM_RegisterSignal(jint sig, void *handler)
3035 functionptr newHandler;
3037 TRACEJVMCALLS("JVM_RegisterSignal(sig=%d, handler=%p)", sig, handler);
3039 if (handler == (void *) 2)
3040 newHandler = (functionptr) signal_thread_handler;
3042 newHandler = (functionptr) (uintptr_t) handler;
3049 /* These signals are already used by the VM. */
3053 /* This signal is used by the VM to dump thread stacks unless
3054 ReduceSignalUsage is set, in which case the user is allowed
3055 to set his own _native_ handler for this signal; thus, in
3056 either case, we do not allow JVM_RegisterSignal to change
3066 signal_register_signal(sig, newHandler, 0);
3068 /* XXX Should return old handler. */
3074 /* OS: JVM_RaiseSignal */
3076 jboolean JVM_RaiseSignal(jint sig)
3078 log_println("JVM_RaiseSignal: IMPLEMENT ME! sig=%s", sig);
3083 /* OS: JVM_FindSignal */
3085 jint JVM_FindSignal(const char *name)
3087 TRACEJVMCALLS("JVM_FindSignal(name=%s)", name);
3089 #if defined(__LINUX__)
3090 if (strcmp(name, "HUP") == 0)
3093 if (strcmp(name, "INT") == 0)
3096 if (strcmp(name, "TERM") == 0)
3099 # error not implemented for this OS
3107 * These are local overrides for various environment variables in Emacs.
3108 * Please do not remove this and leave it at the end of the file, where
3109 * Emacs will automagically detect them.
3110 * ---------------------------------------------------------------------
3113 * indent-tabs-mode: t