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 = loader_hashtable_classloader_add((java_handle_t *) 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 = loader_hashtable_classloader_add((java_handle_t *) 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 = loader_hashtable_classloader_add((java_handle_t *) 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)
810 TRACEJVMCALLS("JVM_GetClassLoader(env=%p, cls=%p)", env, cls);
812 c = LLNI_classinfo_unwrap(cls);
813 cl = class_get_classloader(c);
819 /* JVM_IsInterface */
821 jboolean JVM_IsInterface(JNIEnv *env, jclass cls)
826 log_println("JVM_IsInterface: cls=%p", cls);
829 c = LLNI_classinfo_unwrap(cls);
831 return class_is_interface(c);
835 /* JVM_GetClassSigners */
837 jobjectArray JVM_GetClassSigners(JNIEnv *env, jclass cls)
839 log_println("JVM_GetClassSigners: IMPLEMENT ME!");
843 /* JVM_SetClassSigners */
845 void JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers)
847 log_println("JVM_SetClassSigners: IMPLEMENT ME!");
851 /* JVM_GetProtectionDomain */
853 jobject JVM_GetProtectionDomain(JNIEnv *env, jclass cls)
857 TRACEJVMCALLS("JVM_GetProtectionDomain(env=%p, cls=%p)", env, cls);
859 c = LLNI_classinfo_unwrap(cls);
862 exceptions_throw_nullpointerexception();
866 /* Primitive types do not have a protection domain. */
868 if (class_is_primitive(c))
871 return (jobject) c->protectiondomain;
875 /* JVM_SetProtectionDomain */
877 void JVM_SetProtectionDomain(JNIEnv *env, jclass cls, jobject protection_domain)
879 log_println("JVM_SetProtectionDomain: IMPLEMENT ME!");
883 /* JVM_DoPrivileged */
885 jobject JVM_DoPrivileged(JNIEnv *env, jclass cls, jobject action, jobject context, jboolean wrapException)
890 java_handle_t *result;
894 log_println("JVM_DoPrivileged: action=%p, context=%p, wrapException=%d", action, context, wrapException);
897 o = (java_handle_t *) action;
900 if (action == NULL) {
901 exceptions_throw_nullpointerexception();
905 /* lookup run() method (throw no exceptions) */
907 m = class_resolveclassmethod(c, utf_run, utf_void__java_lang_Object, c,
910 if ((m == NULL) || !(m->flags & ACC_PUBLIC) || (m->flags & ACC_STATIC)) {
911 exceptions_throw_internalerror("No run method");
915 /* XXX It seems something with a privileged stack needs to be done
918 result = vm_call_method(m, o);
920 e = exceptions_get_and_clear_exception();
923 exceptions_throw_privilegedactionexception(e);
927 return (jobject) result;
931 /* JVM_GetInheritedAccessControlContext */
933 jobject JVM_GetInheritedAccessControlContext(JNIEnv *env, jclass cls)
935 log_println("JVM_GetInheritedAccessControlContext: IMPLEMENT ME!");
939 /* JVM_GetStackAccessControlContext */
941 jobject JVM_GetStackAccessControlContext(JNIEnv *env, jclass cls)
943 log_println("JVM_GetStackAccessControlContext: IMPLEMENT ME!");
947 /* JVM_IsArrayClass */
949 jboolean JVM_IsArrayClass(JNIEnv *env, jclass cls)
952 log_println("JVM_IsArrayClass: cls=%p", cls);
954 return class_is_array(LLNI_classinfo_unwrap(cls));
958 /* JVM_IsPrimitiveClass */
960 jboolean JVM_IsPrimitiveClass(JNIEnv *env, jclass cls)
964 c = LLNI_classinfo_unwrap(cls);
967 log_println("JVM_IsPrimitiveClass(cls=%p)", cls);
970 return class_is_primitive(c);
974 /* JVM_GetComponentType */
976 jclass JVM_GetComponentType(JNIEnv *env, jclass cls)
978 classinfo *component;
981 TRACEJVMCALLS("JVM_GetComponentType(env=%p, cls=%p)", env, cls);
983 c = LLNI_classinfo_unwrap(cls);
985 component = class_get_componenttype(c);
987 return (jclass) LLNI_classinfo_wrap(component);
991 /* JVM_GetClassModifiers */
993 jint JVM_GetClassModifiers(JNIEnv *env, jclass cls)
998 log_println("JVM_GetClassModifiers: cls=%p", cls);
1001 c = LLNI_classinfo_unwrap(cls);
1003 /* XXX is this correct? */
1005 return c->flags & ACC_CLASS_REFLECT_MASK;
1009 /* JVM_GetDeclaredClasses */
1011 jobjectArray JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass)
1014 java_handle_objectarray_t *oa;
1016 TRACEJVMCALLS("JVM_GetDeclaredClasses(env=%p, ofClass=%p)", env, ofClass);
1018 c = LLNI_classinfo_unwrap(ofClass);
1020 oa = class_get_declaredclasses(c, false);
1022 return (jobjectArray) oa;
1026 /* JVM_GetDeclaringClass */
1028 jclass JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)
1033 TRACEJVMCALLS("JVM_GetDeclaringClass(env=%p, ofClass=%p)", env, ofClass);
1035 c = LLNI_classinfo_unwrap(ofClass);
1037 dc = class_get_declaringclass(c);
1039 return (jclass) LLNI_classinfo_wrap(dc);
1043 /* JVM_GetClassSignature */
1045 jstring JVM_GetClassSignature(JNIEnv *env, jclass cls)
1051 TRACEJVMCALLS("JVM_GetClassSignature(env=%p, cls=%p)", env, cls);
1053 c = (classinfo *) cls;
1055 /* Get the signature of the class. */
1057 u = class_get_signature(c);
1062 /* Convert UTF-string to a Java-string. */
1064 s = javastring_new(u);
1070 /* JVM_GetClassAnnotations */
1072 jbyteArray JVM_GetClassAnnotations(JNIEnv *env, jclass cls)
1074 classinfo *c = NULL;
1075 java_handle_bytearray_t *annotations = NULL;
1077 TRACEJVMCALLS("JVM_GetClassAnnotations: cls=%p", cls);
1080 exceptions_throw_nullpointerexception();
1084 c = LLNI_classinfo_unwrap(cls);
1086 /* get annotations: */
1087 annotations = class_get_annotations(c);
1089 return (jbyteArray)annotations;
1093 /* JVM_GetFieldAnnotations */
1095 jbyteArray JVM_GetFieldAnnotations(JNIEnv *env, jobject field)
1097 java_lang_reflect_Field *rf = (java_lang_reflect_Field*)field;
1098 java_handle_bytearray_t *ba = NULL;
1100 TRACEJVMCALLS("JVM_GetFieldAnnotations: field=%p", field);
1102 if (field == NULL) {
1103 exceptions_throw_nullpointerexception();
1107 LLNI_field_get_ref(rf, annotations, ba);
1109 return (jbyteArray)ba;
1113 /* JVM_GetMethodAnnotations */
1115 jbyteArray JVM_GetMethodAnnotations(JNIEnv *env, jobject method)
1117 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1118 java_handle_bytearray_t *ba = NULL;
1120 TRACEJVMCALLS("JVM_GetMethodAnnotations: method=%p", method);
1122 if (method == NULL) {
1123 exceptions_throw_nullpointerexception();
1127 LLNI_field_get_ref(rm, annotations, ba);
1129 return (jbyteArray)ba;
1133 /* JVM_GetMethodDefaultAnnotationValue */
1135 jbyteArray JVM_GetMethodDefaultAnnotationValue(JNIEnv *env, jobject method)
1137 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1138 java_handle_bytearray_t *ba = NULL;
1140 TRACEJVMCALLS("JVM_GetMethodDefaultAnnotationValue: method=%p", method);
1142 if (method == NULL) {
1143 exceptions_throw_nullpointerexception();
1147 LLNI_field_get_ref(rm, annotationDefault, ba);
1149 return (jbyteArray)ba;
1153 /* JVM_GetMethodParameterAnnotations */
1155 jbyteArray JVM_GetMethodParameterAnnotations(JNIEnv *env, jobject method)
1157 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1158 java_handle_bytearray_t *ba = NULL;
1160 TRACEJVMCALLS("JVM_GetMethodParameterAnnotations: method=%p", method);
1162 if (method == NULL) {
1163 exceptions_throw_nullpointerexception();
1167 LLNI_field_get_ref(rm, parameterAnnotations, ba);
1169 return (jbyteArray)ba;
1173 /* JVM_GetClassDeclaredFields */
1175 jobjectArray JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1178 log_println("JVM_GetClassDeclaredFields: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1180 return (jobjectArray) _Jv_java_lang_Class_getDeclaredFields((java_lang_Class *) ofClass, publicOnly);
1184 /* JVM_GetClassDeclaredMethods */
1186 jobjectArray JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1189 log_println("JVM_GetClassDeclaredMethods: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1191 return (jobjectArray) _Jv_java_lang_Class_getDeclaredMethods((java_lang_Class *) ofClass, publicOnly);
1195 /* JVM_GetClassDeclaredConstructors */
1197 jobjectArray JVM_GetClassDeclaredConstructors(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1200 log_println("JVM_GetClassDeclaredConstructors: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1202 return (jobjectArray) _Jv_java_lang_Class_getDeclaredConstructors((java_lang_Class *) ofClass, publicOnly);
1206 /* JVM_GetClassAccessFlags */
1208 jint JVM_GetClassAccessFlags(JNIEnv *env, jclass cls)
1213 log_println("JVM_GetClassAccessFlags: cls=%p", cls);
1216 c = LLNI_classinfo_unwrap(cls);
1218 return c->flags & ACC_CLASS_REFLECT_MASK;
1222 /* JVM_GetClassConstantPool */
1224 jobject JVM_GetClassConstantPool(JNIEnv *env, jclass cls)
1226 #if defined(ENABLE_ANNOTATIONS)
1227 sun_reflect_ConstantPool *constantPool = NULL;
1228 java_lang_Object *constantPoolOop = (java_lang_Object*)cls;
1230 TRACEJVMCALLS("JVM_GetClassConstantPool(env=%p, cls=%p)", env, cls);
1233 (sun_reflect_ConstantPool*)native_new_and_init(
1234 class_sun_reflect_ConstantPool);
1236 if (constantPool == NULL) {
1241 LLNI_field_set_ref(constantPool, constantPoolOop, constantPoolOop);
1243 return (jobject)constantPool;
1245 log_println("JVM_GetClassConstantPool(env=%p, cls=%p): not implemented in this configuration!", env, cls);
1251 /* JVM_ConstantPoolGetSize */
1253 jint JVM_ConstantPoolGetSize(JNIEnv *env, jobject unused, jobject jcpool)
1257 TRACEJVMCALLS("JVM_ConstantPoolGetSize(env=%p, unused=%p, jcpool=%p)", env, unused, jcpool);
1259 c = LLNI_classinfo_unwrap(jcpool);
1265 /* JVM_ConstantPoolGetClassAt */
1267 jclass JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1269 constant_classref *ref;
1273 TRACEJVMCALLS("JVM_ConstantPoolGetClassAt(env=%p, jcpool=%p, index=%d)", env, jcpool, index);
1275 c = LLNI_classinfo_unwrap(jcpool);
1277 ref = (constant_classref *) class_getconstant(c, index, CONSTANT_Class);
1282 result = resolve_classref_eager(ref);
1284 return (jclass) LLNI_classinfo_wrap(result);
1288 /* JVM_ConstantPoolGetClassAtIfLoaded */
1290 jclass JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1292 constant_classref *ref;
1296 TRACEJVMCALLS("JVM_ConstantPoolGetClassAtIfLoaded(env=%p, unused=%p, jcpool=%p, index=%d)", env, unused, jcpool, index);
1298 c = LLNI_classinfo_unwrap(jcpool);
1300 ref = (constant_classref *) class_getconstant(c, index, CONSTANT_Class);
1305 if (!resolve_classref(NULL, ref, resolveLazy, true, true, &result))
1308 if ((result == NULL) || !(result->state & CLASS_LOADED)) {
1312 return (jclass) LLNI_classinfo_wrap(result);
1316 /* JVM_ConstantPoolGetMethodAt */
1318 jobject JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1320 constant_FMIref *ref;
1321 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1323 TRACEJVMCALLS("JVM_ConstantPoolGetMethodAt: jcpool=%p, index=%d", jcpool, index);
1325 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Methodref);
1331 /* XXX: is that right? or do I have to use resolve_method_*? */
1332 return (jobject)reflect_method_new(ref->p.method);
1336 /* JVM_ConstantPoolGetMethodAtIfLoaded */
1338 jobject JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1340 constant_FMIref *ref;
1341 classinfo *c = NULL;
1342 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1344 TRACEJVMCALLS("JVM_ConstantPoolGetMethodAtIfLoaded: jcpool=%p, index=%d", jcpool, index);
1346 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Methodref);
1352 if (!resolve_classref(NULL, ref->p.classref, resolveLazy, true, true, &c)) {
1356 if (c == NULL || !(c->state & CLASS_LOADED)) {
1360 return (jobject)reflect_method_new(ref->p.method);
1364 /* JVM_ConstantPoolGetFieldAt */
1366 jobject JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1368 constant_FMIref *ref;
1369 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1371 TRACEJVMCALLS("JVM_ConstantPoolGetFieldAt: jcpool=%p, index=%d", jcpool, index);
1373 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Fieldref);
1379 return (jobject)reflect_field_new(ref->p.field);
1383 /* JVM_ConstantPoolGetFieldAtIfLoaded */
1385 jobject JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1387 constant_FMIref *ref;
1389 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1391 TRACEJVMCALLS("JVM_ConstantPoolGetFieldAtIfLoaded: jcpool=%p, index=%d", jcpool, index);
1393 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Fieldref);
1399 if (!resolve_classref(NULL, ref->p.classref, resolveLazy, true, true, &c)) {
1403 if (c == NULL || !(c->state & CLASS_LOADED)) {
1407 return (jobject)reflect_field_new(ref->p.field);
1411 /* JVM_ConstantPoolGetMemberRefInfoAt */
1413 jobjectArray JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1415 log_println("JVM_ConstantPoolGetMemberRefInfoAt: jcpool=%p, index=%d, IMPLEMENT ME!", jcpool, index);
1420 /* JVM_ConstantPoolGetIntAt */
1422 jint JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1424 constant_integer *ref;
1425 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1427 TRACEJVMCALLS("JVM_ConstantPoolGetIntAt: jcpool=%p, index=%d", jcpool, index);
1429 ref = (constant_integer*)class_getconstant(cls, index, CONSTANT_Integer);
1439 /* JVM_ConstantPoolGetLongAt */
1441 jlong JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1444 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1446 TRACEJVMCALLS("JVM_ConstantPoolGetLongAt: jcpool=%p, index=%d", jcpool, index);
1448 ref = (constant_long*)class_getconstant(cls, index, CONSTANT_Long);
1458 /* JVM_ConstantPoolGetFloatAt */
1460 jfloat JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1462 constant_float *ref;
1463 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1465 TRACEJVMCALLS("JVM_ConstantPoolGetFloatAt: jcpool=%p, index=%d", jcpool, index);
1467 ref = (constant_float*)class_getconstant(cls, index, CONSTANT_Float);
1477 /* JVM_ConstantPoolGetDoubleAt */
1479 jdouble JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1481 constant_double *ref;
1482 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1484 TRACEJVMCALLS("JVM_ConstantPoolGetDoubleAt: jcpool=%p, index=%d", jcpool, index);
1486 ref = (constant_double*)class_getconstant(cls, index, CONSTANT_Double);
1496 /* JVM_ConstantPoolGetStringAt */
1498 jstring JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1501 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1503 TRACEJVMCALLS("JVM_ConstantPoolGetStringAt: jcpool=%p, index=%d", jcpool, index);
1505 ref = (utf*)class_getconstant(cls, index, CONSTANT_String);
1511 /* XXX: I hope literalstring_new is the right Function. */
1512 return (jstring)literalstring_new(ref);
1516 /* JVM_ConstantPoolGetUTF8At */
1518 jstring JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1521 classinfo *cls = LLNI_classinfo_unwrap(jcpool);
1523 TRACEJVMCALLS("JVM_ConstantPoolGetUTF8At: jcpool=%p, index=%d", jcpool, index);
1525 ref = (utf*)class_getconstant(cls, index, CONSTANT_Utf8);
1531 /* XXX: I hope literalstring_new is the right Function. */
1532 return (jstring)literalstring_new(ref);
1536 /* JVM_DesiredAssertionStatus */
1538 jboolean JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls)
1540 TRACEJVMCALLS("JVM_DesiredAssertionStatus(env=%p, unused=%p, cls=%p)", env, unused, cls);
1542 /* TODO: Implement this one, but false should be OK. */
1548 /* JVM_AssertionStatusDirectives */
1550 jobject JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused)
1553 java_lang_AssertionStatusDirectives *o;
1554 java_handle_objectarray_t *classes;
1555 java_handle_objectarray_t *packages;
1558 log_println("JVM_AssertionStatusDirectives");
1560 /* XXX this is not completely implemented */
1562 c = load_class_bootstrap(utf_new_char("java/lang/AssertionStatusDirectives"));
1567 o = (java_lang_AssertionStatusDirectives *) builtin_new(c);
1572 classes = builtin_anewarray(0, class_java_lang_Object);
1574 if (classes == NULL)
1577 packages = builtin_anewarray(0, class_java_lang_Object);
1579 if (packages == NULL)
1582 /* set instance fields */
1584 o->classes = classes;
1585 o->packages = packages;
1591 /* JVM_GetClassNameUTF */
1593 const char* JVM_GetClassNameUTF(JNIEnv *env, jclass cls)
1595 log_println("JVM_GetClassNameUTF: IMPLEMENT ME!");
1599 /* JVM_GetClassCPTypes */
1601 void JVM_GetClassCPTypes(JNIEnv *env, jclass cls, unsigned char *types)
1603 log_println("JVM_GetClassCPTypes: IMPLEMENT ME!");
1607 /* JVM_GetClassCPEntriesCount */
1609 jint JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cls)
1611 log_println("JVM_GetClassCPEntriesCount: IMPLEMENT ME!");
1615 /* JVM_GetClassFieldsCount */
1617 jint JVM_GetClassFieldsCount(JNIEnv *env, jclass cls)
1619 log_println("JVM_GetClassFieldsCount: IMPLEMENT ME!");
1623 /* JVM_GetClassMethodsCount */
1625 jint JVM_GetClassMethodsCount(JNIEnv *env, jclass cls)
1627 log_println("JVM_GetClassMethodsCount: IMPLEMENT ME!");
1631 /* JVM_GetMethodIxExceptionIndexes */
1633 void JVM_GetMethodIxExceptionIndexes(JNIEnv *env, jclass cls, jint method_index, unsigned short *exceptions)
1635 log_println("JVM_GetMethodIxExceptionIndexes: IMPLEMENT ME!");
1639 /* JVM_GetMethodIxExceptionsCount */
1641 jint JVM_GetMethodIxExceptionsCount(JNIEnv *env, jclass cls, jint method_index)
1643 log_println("JVM_GetMethodIxExceptionsCount: IMPLEMENT ME!");
1647 /* JVM_GetMethodIxByteCode */
1649 void JVM_GetMethodIxByteCode(JNIEnv *env, jclass cls, jint method_index, unsigned char *code)
1651 log_println("JVM_GetMethodIxByteCode: IMPLEMENT ME!");
1655 /* JVM_GetMethodIxByteCodeLength */
1657 jint JVM_GetMethodIxByteCodeLength(JNIEnv *env, jclass cls, jint method_index)
1659 log_println("JVM_GetMethodIxByteCodeLength: IMPLEMENT ME!");
1663 /* JVM_GetMethodIxExceptionTableEntry */
1665 void JVM_GetMethodIxExceptionTableEntry(JNIEnv *env, jclass cls, jint method_index, jint entry_index, JVM_ExceptionTableEntryType *entry)
1667 log_println("JVM_GetMethodIxExceptionTableEntry: IMPLEMENT ME!");
1671 /* JVM_GetMethodIxExceptionTableLength */
1673 jint JVM_GetMethodIxExceptionTableLength(JNIEnv *env, jclass cls, int method_index)
1675 log_println("JVM_GetMethodIxExceptionTableLength: IMPLEMENT ME!");
1679 /* JVM_GetMethodIxModifiers */
1681 jint JVM_GetMethodIxModifiers(JNIEnv *env, jclass cls, int method_index)
1683 log_println("JVM_GetMethodIxModifiers: IMPLEMENT ME!");
1687 /* JVM_GetFieldIxModifiers */
1689 jint JVM_GetFieldIxModifiers(JNIEnv *env, jclass cls, int field_index)
1691 log_println("JVM_GetFieldIxModifiers: IMPLEMENT ME!");
1695 /* JVM_GetMethodIxLocalsCount */
1697 jint JVM_GetMethodIxLocalsCount(JNIEnv *env, jclass cls, int method_index)
1699 log_println("JVM_GetMethodIxLocalsCount: IMPLEMENT ME!");
1703 /* JVM_GetMethodIxArgsSize */
1705 jint JVM_GetMethodIxArgsSize(JNIEnv *env, jclass cls, int method_index)
1707 log_println("JVM_GetMethodIxArgsSize: IMPLEMENT ME!");
1711 /* JVM_GetMethodIxMaxStack */
1713 jint JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cls, int method_index)
1715 log_println("JVM_GetMethodIxMaxStack: IMPLEMENT ME!");
1719 /* JVM_IsConstructorIx */
1721 jboolean JVM_IsConstructorIx(JNIEnv *env, jclass cls, int method_index)
1723 log_println("JVM_IsConstructorIx: IMPLEMENT ME!");
1727 /* JVM_GetMethodIxNameUTF */
1729 const char* JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cls, jint method_index)
1731 log_println("JVM_GetMethodIxNameUTF: IMPLEMENT ME!");
1735 /* JVM_GetMethodIxSignatureUTF */
1737 const char* JVM_GetMethodIxSignatureUTF(JNIEnv *env, jclass cls, jint method_index)
1739 log_println("JVM_GetMethodIxSignatureUTF: IMPLEMENT ME!");
1743 /* JVM_GetCPFieldNameUTF */
1745 const char* JVM_GetCPFieldNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1747 log_println("JVM_GetCPFieldNameUTF: IMPLEMENT ME!");
1751 /* JVM_GetCPMethodNameUTF */
1753 const char* JVM_GetCPMethodNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1755 log_println("JVM_GetCPMethodNameUTF: IMPLEMENT ME!");
1759 /* JVM_GetCPMethodSignatureUTF */
1761 const char* JVM_GetCPMethodSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)
1763 log_println("JVM_GetCPMethodSignatureUTF: IMPLEMENT ME!");
1767 /* JVM_GetCPFieldSignatureUTF */
1769 const char* JVM_GetCPFieldSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)
1771 log_println("JVM_GetCPFieldSignatureUTF: IMPLEMENT ME!");
1775 /* JVM_GetCPClassNameUTF */
1777 const char* JVM_GetCPClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1779 log_println("JVM_GetCPClassNameUTF: IMPLEMENT ME!");
1783 /* JVM_GetCPFieldClassNameUTF */
1785 const char* JVM_GetCPFieldClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1787 log_println("JVM_GetCPFieldClassNameUTF: IMPLEMENT ME!");
1791 /* JVM_GetCPMethodClassNameUTF */
1793 const char* JVM_GetCPMethodClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1795 log_println("JVM_GetCPMethodClassNameUTF: IMPLEMENT ME!");
1799 /* JVM_GetCPFieldModifiers */
1801 jint JVM_GetCPFieldModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)
1803 log_println("JVM_GetCPFieldModifiers: IMPLEMENT ME!");
1807 /* JVM_GetCPMethodModifiers */
1809 jint JVM_GetCPMethodModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)
1811 log_println("JVM_GetCPMethodModifiers: IMPLEMENT ME!");
1815 /* JVM_ReleaseUTF */
1817 void JVM_ReleaseUTF(const char *utf)
1819 log_println("JVM_ReleaseUTF: IMPLEMENT ME!");
1823 /* JVM_IsSameClassPackage */
1825 jboolean JVM_IsSameClassPackage(JNIEnv *env, jclass class1, jclass class2)
1827 log_println("JVM_IsSameClassPackage: IMPLEMENT ME!");
1833 jint JVM_Open(const char *fname, jint flags, jint mode)
1838 log_println("JVM_Open: fname=%s, flags=%d, mode=%d", fname, flags, mode);
1841 result = open(fname, flags, mode);
1849 /* XXX don't know what to do here */
1850 /* return JVM_EEXIST; */
1861 jint JVM_Close(jint fd)
1864 log_println("JVM_Close: fd=%d", fd);
1872 jint JVM_Read(jint fd, char *buf, jint nbytes)
1875 log_println("JVM_Read: fd=%d, buf=%p, nbytes=%d", fd, buf, nbytes);
1877 return read(fd, buf, nbytes);
1883 jint JVM_Write(jint fd, char *buf, jint nbytes)
1886 log_println("JVM_Write: fd=%d, buf=%s, nbytes=%d", fd, buf, nbytes);
1888 return write(fd, buf, nbytes);
1894 jint JVM_Available(jint fd, jlong *pbytes)
1896 #if defined(FIONREAD)
1899 TRACEJVMCALLS("JVM_Available(fd=%d, pbytes=%p)", fd, pbytes);
1903 if (ioctl(fd, FIONREAD, &bytes) < 0)
1910 # error FIONREAD not defined
1917 jlong JVM_Lseek(jint fd, jlong offset, jint whence)
1920 log_println("JVM_Lseek: fd=%d, offset=%ld, whence=%d", fd, offset, whence);
1922 return (jlong) lseek(fd, (off_t) offset, whence);
1928 jint JVM_SetLength(jint fd, jlong length)
1930 log_println("JVM_SetLength: IMPLEMENT ME!");
1936 jint JVM_Sync(jint fd)
1938 log_println("JVM_Sync: IMPLEMENT ME!");
1942 /* JVM_StartThread */
1944 void JVM_StartThread(JNIEnv* env, jobject jthread)
1947 log_println("JVM_StartThread: jthread=%p", jthread);
1949 _Jv_java_lang_Thread_start((java_lang_Thread *) jthread, 0);
1953 /* JVM_StopThread */
1955 void JVM_StopThread(JNIEnv* env, jobject jthread, jobject throwable)
1957 log_println("JVM_StopThread: IMPLEMENT ME!");
1961 /* JVM_IsThreadAlive */
1963 jboolean JVM_IsThreadAlive(JNIEnv* env, jobject jthread)
1966 log_println("JVM_IsThreadAlive: jthread=%p", jthread);
1968 return _Jv_java_lang_Thread_isAlive((java_lang_Thread *) jthread);
1972 /* JVM_SuspendThread */
1974 void JVM_SuspendThread(JNIEnv* env, jobject jthread)
1976 log_println("JVM_SuspendThread: IMPLEMENT ME!");
1980 /* JVM_ResumeThread */
1982 void JVM_ResumeThread(JNIEnv* env, jobject jthread)
1984 log_println("JVM_ResumeThread: IMPLEMENT ME!");
1988 /* JVM_SetThreadPriority */
1990 void JVM_SetThreadPriority(JNIEnv* env, jobject jthread, jint prio)
1993 log_println("JVM_SetThreadPriority: jthread=%p, prio=%d", jthread, prio);
1995 _Jv_java_lang_Thread_setPriority((java_lang_Thread *) jthread, prio);
2001 void JVM_Yield(JNIEnv *env, jclass threadClass)
2003 TRACEJVMCALLS("JVM_Yield(env=%p, threadClass=%p)", env, threadClass);
2011 void JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis)
2014 log_println("JVM_Sleep: threadClass=%p, millis=%ld", threadClass, millis);
2016 _Jv_java_lang_Thread_sleep(millis);
2020 /* JVM_CurrentThread */
2022 jobject JVM_CurrentThread(JNIEnv* env, jclass threadClass)
2025 log_println("JVM_CurrentThread: threadClass=%p", threadClass);
2027 return (jobject) _Jv_java_lang_Thread_currentThread();
2031 /* JVM_CountStackFrames */
2033 jint JVM_CountStackFrames(JNIEnv* env, jobject jthread)
2035 log_println("JVM_CountStackFrames: IMPLEMENT ME!");
2041 void JVM_Interrupt(JNIEnv* env, jobject jthread)
2043 log_println("JVM_Interrupt: IMPLEMENT ME!");
2047 /* JVM_IsInterrupted */
2049 jboolean JVM_IsInterrupted(JNIEnv* env, jobject jthread, jboolean clear_interrupted)
2052 log_println("JVM_IsInterrupted: jthread=%p, clear_interrupted=%d", jthread, clear_interrupted);
2054 /* XXX do something with clear_interrupted */
2055 return _Jv_java_lang_Thread_isInterrupted((java_lang_Thread *) jthread);
2061 jboolean JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj)
2063 log_println("JVM_HoldsLock: IMPLEMENT ME!");
2067 /* JVM_DumpAllStacks */
2069 void JVM_DumpAllStacks(JNIEnv* env, jclass unused)
2071 log_println("JVM_DumpAllStacks: IMPLEMENT ME!");
2075 /* JVM_CurrentLoadedClass */
2077 jclass JVM_CurrentLoadedClass(JNIEnv *env)
2079 log_println("JVM_CurrentLoadedClass: IMPLEMENT ME!");
2083 /* JVM_CurrentClassLoader */
2085 jobject JVM_CurrentClassLoader(JNIEnv *env)
2087 /* XXX if a method in a class in a trusted loader is in a
2088 doPrivileged, return NULL */
2090 log_println("JVM_CurrentClassLoader: IMPLEMENT ME!");
2094 /* JVM_GetClassContext */
2096 jobjectArray JVM_GetClassContext(JNIEnv *env)
2099 log_println("JVM_GetClassContext");
2101 return (jobjectArray) stacktrace_getClassContext();
2105 /* JVM_ClassDepth */
2107 jint JVM_ClassDepth(JNIEnv *env, jstring name)
2109 log_println("JVM_ClassDepth: IMPLEMENT ME!");
2113 /* JVM_ClassLoaderDepth */
2115 jint JVM_ClassLoaderDepth(JNIEnv *env)
2117 log_println("JVM_ClassLoaderDepth: IMPLEMENT ME!");
2121 /* JVM_GetSystemPackage */
2123 jstring JVM_GetSystemPackage(JNIEnv *env, jstring name)
2125 log_println("JVM_GetSystemPackage(env=%p, name=%p)");
2126 javastring_print((java_handle_t *) name);
2133 /* JVM_GetSystemPackages */
2135 jobjectArray JVM_GetSystemPackages(JNIEnv *env)
2137 log_println("JVM_GetSystemPackages: IMPLEMENT ME!");
2141 /* JVM_AllocateNewObject */
2143 jobject JVM_AllocateNewObject(JNIEnv *env, jobject receiver, jclass currClass, jclass initClass)
2145 log_println("JVM_AllocateNewObject: IMPLEMENT ME!");
2149 /* JVM_AllocateNewArray */
2151 jobject JVM_AllocateNewArray(JNIEnv *env, jobject obj, jclass currClass, jint length)
2153 log_println("JVM_AllocateNewArray: IMPLEMENT ME!");
2157 /* JVM_LatestUserDefinedLoader */
2159 jobject JVM_LatestUserDefinedLoader(JNIEnv *env)
2161 log_println("JVM_LatestUserDefinedLoader: IMPLEMENT ME!");
2165 /* JVM_LoadClass0 */
2167 jclass JVM_LoadClass0(JNIEnv *env, jobject receiver, jclass currClass, jstring currClassName)
2169 log_println("JVM_LoadClass0: IMPLEMENT ME!");
2173 /* JVM_GetArrayLength */
2175 jint JVM_GetArrayLength(JNIEnv *env, jobject arr)
2179 TRACEJVMCALLS("JVM_GetArrayLength(arr=%p)", arr);
2181 a = (java_handle_t *) arr;
2183 return array_length_get(a);
2187 /* JVM_GetArrayElement */
2189 jobject JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index)
2194 TRACEJVMCALLS("JVM_GetArrayElement(env=%p, arr=%p, index=%d)", env, arr, index);
2196 a = (java_handle_t *) arr;
2198 /* if (!class_is_array(a->objheader.vftbl->class)) { */
2199 /* exceptions_throw_illegalargumentexception(); */
2203 o = array_element_get(a, index);
2209 /* JVM_GetPrimitiveArrayElement */
2211 jvalue JVM_GetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jint wCode)
2213 log_println("JVM_GetPrimitiveArrayElement: IMPLEMENT ME!");
2217 /* JVM_SetArrayElement */
2219 void JVM_SetArrayElement(JNIEnv *env, jobject arr, jint index, jobject val)
2222 java_handle_t *value;
2224 TRACEJVMCALLS("JVM_SetArrayElement(env=%p, arr=%p, index=%d, val=%p)", env, arr, index, val);
2226 a = (java_handle_t *) arr;
2227 value = (java_handle_t *) val;
2229 array_element_set(a, index, value);
2233 /* JVM_SetPrimitiveArrayElement */
2235 void JVM_SetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jvalue v, unsigned char vCode)
2237 log_println("JVM_SetPrimitiveArrayElement: IMPLEMENT ME!");
2243 jobject JVM_NewArray(JNIEnv *env, jclass eltClass, jint length)
2248 java_handle_objectarray_t *oa;
2250 TRACEJVMCALLS("JVM_NewArray(env=%p, eltClass=%p, length=%d)", env, eltClass, length);
2252 if (eltClass == NULL) {
2253 exceptions_throw_nullpointerexception();
2257 /* NegativeArraySizeException is checked in builtin_newarray. */
2259 c = LLNI_classinfo_unwrap(eltClass);
2261 /* create primitive or object array */
2263 if (class_is_primitive(c)) {
2264 pc = primitive_arrayclass_get_by_name(c->name);
2265 a = builtin_newarray(length, pc);
2270 oa = builtin_anewarray(length, c);
2272 return (jobject) oa;
2277 /* JVM_NewMultiArray */
2279 jobject JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim)
2282 java_handle_intarray_t *ia;
2288 java_handle_objectarray_t *a;
2290 TRACEJVMCALLS("JVM_NewMultiArray(env=%p, eltClass=%p, dim=%p)", env, eltClass, dim);
2292 if (eltClass == NULL) {
2293 exceptions_throw_nullpointerexception();
2297 /* NegativeArraySizeException is checked in builtin_newarray. */
2299 c = LLNI_classinfo_unwrap(eltClass);
2301 /* XXX This is just a quick hack to get it working. */
2303 ia = (java_handle_intarray_t *) dim;
2305 length = array_length_get(ia);
2307 dims = MNEW(long, length);
2309 for (i = 0; i < length; i++) {
2310 value = LLNI_array_direct(ia, i);
2311 dims[i] = (long) value;
2314 /* Create an array-class if necessary. */
2316 if (class_is_primitive(c))
2317 ac = primitive_arrayclass_get_by_name(c->name);
2319 ac = class_array_of(c, true);
2324 a = builtin_multianewarray(length, ac, dims);
2330 /* JVM_InitializeSocketLibrary */
2332 jint JVM_InitializeSocketLibrary()
2334 log_println("JVM_InitializeSocketLibrary: IMPLEMENT ME!");
2340 jint JVM_Socket(jint domain, jint type, jint protocol)
2342 TRACEJVMCALLS("JVM_Socket(domain=%d, type=%d, protocol=%d)", domain, type, protocol);
2344 return socket(domain, type, protocol);
2348 /* JVM_SocketClose */
2350 jint JVM_SocketClose(jint fd)
2352 TRACEJVMCALLS("JVM_SocketClose(fd=%d)", fd);
2358 /* JVM_SocketShutdown */
2360 jint JVM_SocketShutdown(jint fd, jint howto)
2362 TRACEJVMCALLS("JVM_SocketShutdown(fd=%d, howto=%d)", fd, howto);
2364 return shutdown(fd, howto);
2370 jint JVM_Recv(jint fd, char *buf, jint nBytes, jint flags)
2372 log_println("JVM_Recv: IMPLEMENT ME!");
2378 jint JVM_Send(jint fd, char *buf, jint nBytes, jint flags)
2380 log_println("JVM_Send: IMPLEMENT ME!");
2386 jint JVM_Timeout(int fd, long timeout)
2388 log_println("JVM_Timeout: IMPLEMENT ME!");
2394 jint JVM_Listen(jint fd, jint count)
2396 TRACEJVMCALLS("JVM_Listen(fd=%d, count=%d)", fd, count);
2398 return listen(fd, count);
2404 jint JVM_Connect(jint fd, struct sockaddr *him, jint len)
2406 TRACEJVMCALLS("JVM_Connect(fd=%d, him=%p, len=%d)", fd, him, len);
2408 return connect(fd, him, len);
2414 jint JVM_Bind(jint fd, struct sockaddr *him, jint len)
2416 log_println("JVM_Bind: IMPLEMENT ME!");
2422 jint JVM_Accept(jint fd, struct sockaddr *him, jint *len)
2424 TRACEJVMCALLS("JVM_Accept(fd=%d, him=%p, len=%p)", fd, him, len);
2426 return accept(fd, him, (socklen_t *) len);
2432 jint JVM_RecvFrom(jint fd, char *buf, int nBytes, int flags, struct sockaddr *from, int *fromlen)
2434 log_println("JVM_RecvFrom: IMPLEMENT ME!");
2438 /* JVM_GetSockName */
2440 jint JVM_GetSockName(jint fd, struct sockaddr *him, int *len)
2442 TRACEJVMCALLS("JVM_GetSockName(fd=%d, him=%p, len=%p)", fd, him, len);
2444 return getsockname(fd, him, (socklen_t *) len);
2450 jint JVM_SendTo(jint fd, char *buf, int len, int flags, struct sockaddr *to, int tolen)
2452 log_println("JVM_SendTo: IMPLEMENT ME!");
2456 /* JVM_SocketAvailable */
2458 jint JVM_SocketAvailable(jint fd, jint *pbytes)
2460 log_println("JVM_SocketAvailable: IMPLEMENT ME!");
2464 /* JVM_GetSockOpt */
2466 jint JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen)
2468 log_println("JVM_GetSockOpt: IMPLEMENT ME!");
2472 /* JVM_SetSockOpt */
2474 jint JVM_SetSockOpt(jint fd, int level, int optname, const char *optval, int optlen)
2476 TRACEJVMCALLS("JVM_SetSockOpt(fd=%d, level=%d, optname=%d, optval=%s, optlen=%d)", fd, level, optname, optval, optlen);
2478 return setsockopt(fd, level, optname, optval, optlen);
2482 /* JVM_GetHostName */
2484 int JVM_GetHostName(char* name, int namelen)
2486 TRACEJVMCALLS("JVM_GetHostName(name=%s, namelen=%d)", name, namelen);
2488 return gethostname(name, namelen);
2492 /* JVM_GetHostByAddr */
2494 struct hostent* JVM_GetHostByAddr(const char* name, int len, int type)
2496 log_println("JVM_GetHostByAddr: IMPLEMENT ME!");
2500 /* JVM_GetHostByName */
2502 struct hostent* JVM_GetHostByName(char* name)
2504 log_println("JVM_GetHostByName: IMPLEMENT ME!");
2508 /* JVM_GetProtoByName */
2510 struct protoent* JVM_GetProtoByName(char* name)
2512 log_println("JVM_GetProtoByName: IMPLEMENT ME!");
2516 /* JVM_LoadLibrary */
2518 void *JVM_LoadLibrary(const char *name)
2522 TRACEJVMCALLS("JVM_LoadLibrary(name=%s)", name);
2524 u = utf_new_char(name);
2526 return native_library_open(u);
2530 /* JVM_UnloadLibrary */
2532 void JVM_UnloadLibrary(void* handle)
2534 log_println("JVM_UnloadLibrary: IMPLEMENT ME!");
2538 /* JVM_FindLibraryEntry */
2540 void *JVM_FindLibraryEntry(void *handle, const char *name)
2544 TRACEJVMCALLS("JVM_FindLibraryEntry(handle=%p, name=%s)", handle, name);
2546 symbol = lt_dlsym(handle, name);
2554 jboolean JVM_IsNaN(jdouble a)
2556 log_println("JVM_IsNaN: IMPLEMENT ME!");
2560 /* JVM_IsSupportedJNIVersion */
2562 jboolean JVM_IsSupportedJNIVersion(jint version)
2564 TRACEJVMCALLS("JVM_IsSupportedJNIVersion(version=%d)", version);
2567 case JNI_VERSION_1_1:
2568 case JNI_VERSION_1_2:
2569 case JNI_VERSION_1_4:
2570 case JNI_VERSION_1_6:
2578 /* JVM_InternString */
2580 jstring JVM_InternString(JNIEnv *env, jstring str)
2582 TRACEJVMCALLS("JVM_InternString(env=%p, str=%p)", env, str);
2584 return (jstring) javastring_intern((java_handle_t *) str);
2588 /* JVM_RawMonitorCreate */
2590 JNIEXPORT void* JNICALL JVM_RawMonitorCreate(void)
2595 log_println("JVM_RawMonitorCreate");
2598 o = NEW(java_object_t);
2600 lock_init_object_lock(o);
2606 /* JVM_RawMonitorDestroy */
2608 JNIEXPORT void JNICALL JVM_RawMonitorDestroy(void *mon)
2611 log_println("JVM_RawMonitorDestroy: mon=%p", mon);
2613 FREE(mon, java_object_t);
2617 /* JVM_RawMonitorEnter */
2619 JNIEXPORT jint JNICALL JVM_RawMonitorEnter(void *mon)
2622 log_println("JVM_RawMonitorEnter: mon=%p", mon);
2624 (void) lock_monitor_enter((java_object_t *) mon);
2630 /* JVM_RawMonitorExit */
2632 JNIEXPORT void JNICALL JVM_RawMonitorExit(void *mon)
2635 log_println("JVM_RawMonitorExit: mon=%p", mon);
2637 (void) lock_monitor_exit((java_object_t *) mon);
2641 /* JVM_SetPrimitiveFieldValues */
2643 void JVM_SetPrimitiveFieldValues(JNIEnv *env, jclass cb, jobject obj, jlongArray fieldIDs, jcharArray typecodes, jbyteArray data)
2645 log_println("JVM_SetPrimitiveFieldValues: IMPLEMENT ME!");
2649 /* JVM_GetPrimitiveFieldValues */
2651 void JVM_GetPrimitiveFieldValues(JNIEnv *env, jclass cb, jobject obj, jlongArray fieldIDs, jcharArray typecodes, jbyteArray data)
2653 log_println("JVM_GetPrimitiveFieldValues: IMPLEMENT ME!");
2657 /* JVM_AccessVMBooleanFlag */
2659 jboolean JVM_AccessVMBooleanFlag(const char* name, jboolean* value, jboolean is_get)
2661 log_println("JVM_AccessVMBooleanFlag: IMPLEMENT ME!");
2665 /* JVM_AccessVMIntFlag */
2667 jboolean JVM_AccessVMIntFlag(const char* name, jint* value, jboolean is_get)
2669 log_println("JVM_AccessVMIntFlag: IMPLEMENT ME!");
2673 /* JVM_VMBreakPoint */
2675 void JVM_VMBreakPoint(JNIEnv *env, jobject obj)
2677 log_println("JVM_VMBreakPoint: IMPLEMENT ME!");
2681 /* JVM_GetClassFields */
2683 jobjectArray JVM_GetClassFields(JNIEnv *env, jclass cls, jint which)
2685 log_println("JVM_GetClassFields: IMPLEMENT ME!");
2689 /* JVM_GetClassMethods */
2691 jobjectArray JVM_GetClassMethods(JNIEnv *env, jclass cls, jint which)
2693 log_println("JVM_GetClassMethods: IMPLEMENT ME!");
2697 /* JVM_GetClassConstructors */
2699 jobjectArray JVM_GetClassConstructors(JNIEnv *env, jclass cls, jint which)
2701 log_println("JVM_GetClassConstructors: IMPLEMENT ME!");
2705 /* JVM_GetClassField */
2707 jobject JVM_GetClassField(JNIEnv *env, jclass cls, jstring name, jint which)
2709 log_println("JVM_GetClassField: IMPLEMENT ME!");
2713 /* JVM_GetClassMethod */
2715 jobject JVM_GetClassMethod(JNIEnv *env, jclass cls, jstring name, jobjectArray types, jint which)
2717 log_println("JVM_GetClassMethod: IMPLEMENT ME!");
2721 /* JVM_GetClassConstructor */
2723 jobject JVM_GetClassConstructor(JNIEnv *env, jclass cls, jobjectArray types, jint which)
2725 log_println("JVM_GetClassConstructor: IMPLEMENT ME!");
2729 /* JVM_NewInstance */
2731 jobject JVM_NewInstance(JNIEnv *env, jclass cls)
2733 log_println("JVM_NewInstance: IMPLEMENT ME!");
2739 jobject JVM_GetField(JNIEnv *env, jobject field, jobject obj)
2741 log_println("JVM_GetField: IMPLEMENT ME!");
2745 /* JVM_GetPrimitiveField */
2747 jvalue JVM_GetPrimitiveField(JNIEnv *env, jobject field, jobject obj, unsigned char wCode)
2749 log_println("JVM_GetPrimitiveField: IMPLEMENT ME!");
2755 void JVM_SetField(JNIEnv *env, jobject field, jobject obj, jobject val)
2757 log_println("JVM_SetField: IMPLEMENT ME!");
2761 /* JVM_SetPrimitiveField */
2763 void JVM_SetPrimitiveField(JNIEnv *env, jobject field, jobject obj, jvalue v, unsigned char vCode)
2765 log_println("JVM_SetPrimitiveField: IMPLEMENT ME!");
2769 /* JVM_InvokeMethod */
2771 jobject JVM_InvokeMethod(JNIEnv *env, jobject method, jobject obj, jobjectArray args0)
2774 log_println("JVM_InvokeMethod: method=%p, obj=%p, args0=%p", method, obj, args0);
2776 return (jobject) _Jv_java_lang_reflect_Method_invoke((java_lang_reflect_Method *) method, (java_lang_Object *) obj, (java_handle_objectarray_t *) args0);
2780 /* JVM_NewInstanceFromConstructor */
2782 jobject JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0)
2785 log_println("JVM_NewInstanceFromConstructor: c=%p, args0=%p", c, args0);
2787 return (jobject) _Jv_java_lang_reflect_Constructor_newInstance(env, (java_lang_reflect_Constructor *) c, (java_handle_objectarray_t *) args0);
2791 /* JVM_SupportsCX8 */
2793 jboolean JVM_SupportsCX8()
2796 log_println("JVM_SupportsCX8");
2798 return _Jv_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8(NULL, NULL);
2804 jboolean JVM_CX8Field(JNIEnv *env, jobject obj, jfieldID fid, jlong oldVal, jlong newVal)
2806 log_println("JVM_CX8Field: IMPLEMENT ME!");
2810 /* JVM_GetAllThreads */
2812 jobjectArray JVM_GetAllThreads(JNIEnv *env, jclass dummy)
2814 log_println("JVM_GetAllThreads: IMPLEMENT ME!");
2818 /* JVM_DumpThreads */
2820 jobjectArray JVM_DumpThreads(JNIEnv *env, jclass threadClass, jobjectArray threads)
2822 log_println("JVM_DumpThreads: IMPLEMENT ME!");
2826 /* JVM_GetManagement */
2828 void* JVM_GetManagement(jint version)
2830 log_println("JVM_GetManagement: IMPLEMENT ME!");
2834 /* JVM_InitAgentProperties */
2836 jobject JVM_InitAgentProperties(JNIEnv *env, jobject properties)
2838 log_println("JVM_InitAgentProperties: IMPLEMENT ME!");
2842 /* JVM_GetEnclosingMethodInfo */
2844 jobjectArray JVM_GetEnclosingMethodInfo(JNIEnv *env, jclass ofClass)
2846 log_println("JVM_GetEnclosingMethodInfo: IMPLEMENT ME!");
2850 /* JVM_GetThreadStateValues */
2852 jintArray JVM_GetThreadStateValues(JNIEnv* env, jint javaThreadState)
2854 java_handle_intarray_t *ia;
2856 TRACEJVMCALLS("JVM_GetThreadStateValues(env=%p, javaThreadState=%d)",
2857 env, javaThreadState);
2859 /* If new thread states are added in future JDK and VM versions,
2860 this should check if the JDK version is compatible with thread
2861 states supported by the VM. Return NULL if not compatible.
2863 This function must map the VM java_lang_Thread::ThreadStatus
2864 to the Java thread state that the JDK supports. */
2866 switch (javaThreadState) {
2867 case THREAD_STATE_NEW:
2868 ia = builtin_newarray_int(1);
2873 array_intarray_element_set(ia, 0, THREAD_STATE_NEW);
2876 case THREAD_STATE_RUNNABLE:
2877 ia = builtin_newarray_int(1);
2882 array_intarray_element_set(ia, 0, THREAD_STATE_RUNNABLE);
2885 case THREAD_STATE_BLOCKED:
2886 ia = builtin_newarray_int(1);
2891 array_intarray_element_set(ia, 0, THREAD_STATE_BLOCKED);
2894 case THREAD_STATE_WAITING:
2895 ia = builtin_newarray_int(2);
2900 array_intarray_element_set(ia, 0, THREAD_STATE_WAITING);
2901 /* XXX Implement parked stuff. */
2902 /* array_intarray_element_set(ia, 1, PARKED); */
2905 case THREAD_STATE_TIMED_WAITING:
2906 ia = builtin_newarray_int(3);
2911 /* XXX Not sure about that one. */
2912 /* array_intarray_element_set(ia, 0, SLEEPING); */
2913 array_intarray_element_set(ia, 0, THREAD_STATE_TIMED_WAITING);
2914 /* XXX Implement parked stuff. */
2915 /* array_intarray_element_set(ia, 2, PARKED); */
2918 case THREAD_STATE_TERMINATED:
2919 ia = builtin_newarray_int(1);
2924 array_intarray_element_set(ia, 0, THREAD_STATE_TERMINATED);
2928 /* Unknown state - probably incompatible JDK version */
2932 return (jintArray) ia;
2936 /* JVM_GetThreadStateNames */
2938 jobjectArray JVM_GetThreadStateNames(JNIEnv* env, jint javaThreadState, jintArray values)
2940 java_handle_intarray_t *ia;
2941 java_handle_objectarray_t *oa;
2944 TRACEJVMCALLS("JVM_GetThreadStateNames(env=%p, javaThreadState=%d, values=%p)",
2945 env, javaThreadState, values);
2947 ia = (java_handle_intarray_t *) values;
2949 /* If new thread states are added in future JDK and VM versions,
2950 this should check if the JDK version is compatible with thread
2951 states supported by the VM. Return NULL if not compatible.
2953 This function must map the VM java_lang_Thread::ThreadStatus
2954 to the Java thread state that the JDK supports. */
2956 if (values == NULL) {
2957 exceptions_throw_nullpointerexception();
2961 switch (javaThreadState) {
2962 case THREAD_STATE_NEW:
2963 assert(ia->header.size == 1 && ia->data[0] == THREAD_STATE_NEW);
2965 oa = builtin_anewarray(1, class_java_lang_String);
2970 s = javastring_new(utf_new_char("NEW"));
2975 array_objectarray_element_set(oa, 0, s);
2978 case THREAD_STATE_RUNNABLE:
2979 oa = builtin_anewarray(1, class_java_lang_String);
2984 s = javastring_new(utf_new_char("RUNNABLE"));
2989 array_objectarray_element_set(oa, 0, s);
2992 case THREAD_STATE_BLOCKED:
2993 oa = builtin_anewarray(1, class_java_lang_String);
2998 s = javastring_new(utf_new_char("BLOCKED"));
3003 array_objectarray_element_set(oa, 0, s);
3006 case THREAD_STATE_WAITING:
3007 oa = builtin_anewarray(2, class_java_lang_String);
3012 s = javastring_new(utf_new_char("WAITING.OBJECT_WAIT"));
3013 /* s = javastring_new(utf_new_char("WAITING.PARKED")); */
3018 array_objectarray_element_set(oa, 0, s);
3019 /* array_objectarray_element_set(oa, 1, s); */
3022 case THREAD_STATE_TIMED_WAITING:
3023 oa = builtin_anewarray(3, class_java_lang_String);
3028 /* s = javastring_new(utf_new_char("TIMED_WAITING.SLEEPING")); */
3029 s = javastring_new(utf_new_char("TIMED_WAITING.OBJECT_WAIT"));
3030 /* s = javastring_new(utf_new_char("TIMED_WAITING.PARKED")); */
3035 /* array_objectarray_element_set(oa, 0, s); */
3036 array_objectarray_element_set(oa, 0, s);
3037 /* array_objectarray_element_set(oa, 2, s); */
3040 case THREAD_STATE_TERMINATED:
3041 oa = builtin_anewarray(1, class_java_lang_String);
3046 s = javastring_new(utf_new_char("TERMINATED"));
3051 array_objectarray_element_set(oa, 0, s);
3055 /* Unknown state - probably incompatible JDK version */
3059 return (jobjectArray) oa;
3063 /* JVM_GetVersionInfo */
3065 void JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size)
3067 log_println("JVM_GetVersionInfo: IMPLEMENT ME!");
3071 /* OS: JVM_RegisterSignal */
3073 void *JVM_RegisterSignal(jint sig, void *handler)
3075 functionptr newHandler;
3077 TRACEJVMCALLS("JVM_RegisterSignal(sig=%d, handler=%p)", sig, handler);
3079 if (handler == (void *) 2)
3080 newHandler = (functionptr) signal_thread_handler;
3082 newHandler = (functionptr) (uintptr_t) handler;
3089 /* These signals are already used by the VM. */
3093 /* This signal is used by the VM to dump thread stacks unless
3094 ReduceSignalUsage is set, in which case the user is allowed
3095 to set his own _native_ handler for this signal; thus, in
3096 either case, we do not allow JVM_RegisterSignal to change
3106 signal_register_signal(sig, newHandler, 0);
3108 /* XXX Should return old handler. */
3114 /* OS: JVM_RaiseSignal */
3116 jboolean JVM_RaiseSignal(jint sig)
3118 log_println("JVM_RaiseSignal: IMPLEMENT ME! sig=%s", sig);
3123 /* OS: JVM_FindSignal */
3125 jint JVM_FindSignal(const char *name)
3127 TRACEJVMCALLS("JVM_FindSignal(name=%s)", name);
3129 #if defined(__LINUX__)
3130 if (strcmp(name, "HUP") == 0)
3133 if (strcmp(name, "INT") == 0)
3136 if (strcmp(name, "TERM") == 0)
3139 # error not implemented for this OS
3147 * These are local overrides for various environment variables in Emacs.
3148 * Please do not remove this and leave it at the end of the file, where
3149 * Emacs will automagically detect them.
3150 * ---------------------------------------------------------------------
3153 * indent-tabs-mode: t