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 8290 2007-08-11 10:25:40Z twisti $
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/native.h"
57 #include "native/include/java_lang_AssertionStatusDirectives.h"
58 #include "native/include/java_lang_String.h" /* required by j.l.CL */
59 #include "native/include/java_nio_ByteBuffer.h" /* required by j.l.CL */
60 #include "native/include/java_lang_ClassLoader.h" /* required by j.l.C */
61 #include "native/include/java_lang_StackTraceElement.h"
62 #include "native/include/java_lang_Throwable.h"
63 #include "native/include/java_security_ProtectionDomain.h"
64 #include "native/include/java_lang_Integer.h"
65 #include "native/include/java_lang_Long.h"
66 #include "native/include/java_lang_Short.h"
67 #include "native/include/java_lang_Byte.h"
68 #include "native/include/java_lang_Character.h"
69 #include "native/include/java_lang_Boolean.h"
70 #include "native/include/java_lang_Float.h"
71 #include "native/include/java_lang_Double.h"
73 #if defined(ENABLE_ANNOTATIONS)
74 #include "native/include/sun_reflect_ConstantPool.h"
77 #include "native/vm/java_lang_Class.h"
78 #include "native/vm/java_lang_ClassLoader.h"
79 #include "native/vm/java_lang_Object.h"
80 #include "native/vm/java_lang_Runtime.h"
81 #include "native/vm/java_lang_String.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"
90 #include "toolbox/logging.h"
92 #include "vm/builtin.h"
93 #include "vm/exceptions.h"
94 #include "vm/initialize.h"
95 #include "vm/primitive.h"
96 #include "vm/properties.h"
97 #include "vm/resolve.h"
98 #include "vm/stringlocal.h"
101 #include "vm/jit/stacktrace.h"
103 #include "vmcore/classcache.h"
104 #include "vmcore/options.h"
107 /* debugging macro ************************************************************/
110 # define TRACEJVMCALLS(...) \
112 if (opt_TraceJVMCalls) { \
113 log_println(__VA_ARGS__); \
117 # define TRACEJVMCALLS(...)
122 /* Naming convention of RE build version string: n.n.n[_uu[c]][-<identifier>]-bxx */
123 unsigned int jvm_version; /* Consists of major, minor, micro (n.n.n) */
124 /* and build number (xx) */
125 unsigned int update_version : 8; /* Update release version (uu) */
126 unsigned int special_update_version : 8; /* Special update release version (c) */
127 unsigned int reserved1 : 16;
128 unsigned int reserved2;
130 /* The following bits represents JVM supports that JDK has dependency on.
131 * JDK can use these bits to determine which JVM version
132 * and support it has to maintain runtime compatibility.
134 * When a new bit is added in a minor or update release, make sure
135 * the new bit is also added in the main/baseline.
137 unsigned int is_attachable : 1;
145 * A structure used to a capture exception table entry in a Java method.
152 } JVM_ExceptionTableEntryType;
155 int jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args)
157 if ((intptr_t) count <= 0)
160 return vsnprintf(str, count, fmt, args);
164 int jio_snprintf(char *str, size_t count, const char *fmt, ...)
170 len = jio_vsnprintf(str, count, fmt, ap);
177 int jio_fprintf(FILE* f, const char *fmt, ...)
179 log_println("jio_fprintf: IMPLEMENT ME!");
183 int jio_vfprintf(FILE* f, const char *fmt, va_list args)
185 log_println("jio_vfprintf: IMPLEMENT ME!");
189 int jio_printf(const char *fmt, ...)
191 log_println("jio_printf: IMPLEMENT ME!");
195 /* JVM_GetInterfaceVersion */
197 jint JVM_GetInterfaceVersion()
199 /* This is defined in hotspot/src/share/vm/prims/jvm.h */
201 #define JVM_INTERFACE_VERSION 4
203 return JVM_INTERFACE_VERSION;
207 /* JVM_CurrentTimeMillis */
209 jlong JVM_CurrentTimeMillis(JNIEnv *env, jclass ignored)
212 log_println("JVM_CurrentTimeMillis");
214 return (jlong) builtin_currenttimemillis();
220 jlong JVM_NanoTime(JNIEnv *env, jclass ignored)
223 log_println("JVM_NanoTime");
225 return (jlong) builtin_nanotime();
231 void JVM_ArrayCopy(JNIEnv *env, jclass ignored, jobject src, jint src_pos, jobject dst, jint dst_pos, jint length)
236 s = (java_arrayheader *) src;
237 d = (java_arrayheader *) dst;
240 log_println("JVM_ArrayCopy: src=%p, src_pos=%d, dst=%p, dst_pos=%d, length=%d", src, src_pos, dst, dst_pos, length);
243 (void) builtin_arraycopy(s, src_pos, d, dst_pos, length);
247 /* JVM_InitProperties */
249 jobject JVM_InitProperties(JNIEnv *env, jobject properties)
252 log_println("JVM_InitProperties: properties=%d", properties);
254 properties_system_add_all((java_objectheader *) properties);
260 void JVM_Exit(jint code)
262 log_println("JVM_Exit: IMPLEMENT ME!");
268 void JVM_Halt(jint code)
271 log_println("JVM_Halt: code=%d", code);
278 /* JVM_OnExit(void (*func)) */
280 void JVM_OnExit(void (*func)(void))
282 log_println("JVM_OnExit(void (*func): IMPLEMENT ME!");
290 TRACEJVMCALLS("JVM_GC()");
296 /* JVM_MaxObjectInspectionAge */
298 jlong JVM_MaxObjectInspectionAge(void)
300 log_println("JVM_MaxObjectInspectionAge: IMPLEMENT ME!");
304 /* JVM_TraceInstructions */
306 void JVM_TraceInstructions(jboolean on)
308 log_println("JVM_TraceInstructions: IMPLEMENT ME!");
312 /* JVM_TraceMethodCalls */
314 void JVM_TraceMethodCalls(jboolean on)
316 log_println("JVM_TraceMethodCalls: IMPLEMENT ME!");
320 /* JVM_TotalMemory */
322 jlong JVM_TotalMemory(void)
324 TRACEJVMCALLS("JVM_TotalMemory()");
326 return gc_get_heap_size();
332 jlong JVM_FreeMemory(void)
334 TRACEJVMCALLS("JVM_FreeMemory()");
336 return gc_get_free_bytes();
342 jlong JVM_MaxMemory(void)
344 log_println("JVM_MaxMemory: IMPLEMENT ME!");
348 /* JVM_ActiveProcessorCount */
350 jint JVM_ActiveProcessorCount(void)
352 log_println("JVM_ActiveProcessorCount: IMPLEMENT ME!");
356 /* JVM_FillInStackTrace */
358 void JVM_FillInStackTrace(JNIEnv *env, jobject receiver)
360 java_lang_Throwable *o;
361 stacktracecontainer *stc;
364 log_println("JVM_FillInStackTrace: receiver=%p", receiver);
367 o = (java_lang_Throwable *) receiver;
369 stc = stacktrace_fillInStackTrace();
374 o->backtrace = (java_lang_Object *) stc;
378 /* JVM_PrintStackTrace */
380 void JVM_PrintStackTrace(JNIEnv *env, jobject receiver, jobject printable)
382 log_println("JVM_PrintStackTrace: IMPLEMENT ME!");
386 /* JVM_GetStackTraceDepth */
388 jint JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable)
390 java_lang_Throwable *o;
391 stacktracecontainer *stc;
392 stacktracebuffer *stb;
395 log_println("JVM_GetStackTraceDepth: throwable=%p", throwable);
398 o = (java_lang_Throwable *) throwable;
399 stc = (stacktracecontainer *) o->backtrace;
406 /* JVM_GetStackTraceElement */
408 jobject JVM_GetStackTraceElement(JNIEnv *env, jobject throwable, jint index)
410 java_lang_Throwable *t;
411 stacktracecontainer *stc;
412 stacktracebuffer *stb;
413 stacktrace_entry *ste;
414 java_lang_StackTraceElement *o;
415 java_lang_String *declaringclass;
416 java_lang_String *filename;
420 log_println("JVM_GetStackTraceElement: throwable=%p, index=%d", throwable, index);
423 t = (java_lang_Throwable *) throwable;
424 stc = (stacktracecontainer *) t->backtrace;
427 if ((index < 0) || (index >= stb->used)) {
428 /* XXX This should be an IndexOutOfBoundsException (check this
431 exceptions_throw_arrayindexoutofboundsexception();
435 ste = &(stb->entries[index]);
437 /* allocate a new StackTraceElement */
439 o = (java_lang_StackTraceElement *)
440 builtin_new(class_java_lang_StackTraceElement);
447 if (!(ste->method->flags & ACC_NATIVE)) {
448 if (ste->method->class->sourcefile)
449 filename = (java_lang_String *) javastring_new(ste->method->class->sourcefile);
456 /* get line number */
458 if (ste->method->flags & ACC_NATIVE)
461 linenumber = (ste->linenumber == 0) ? -1 : ste->linenumber;
463 /* get declaring class name */
466 _Jv_java_lang_Class_getName((java_lang_Class *) ste->method->class);
468 /* fill the java.lang.StackTraceElement element */
470 o->declaringClass = declaringclass;
471 o->methodName = (java_lang_String *) javastring_new(ste->method->name);
472 o->fileName = filename;
473 o->lineNumber = linenumber;
481 jint JVM_IHashCode(JNIEnv* env, jobject handle)
484 log_println("JVM_IHashCode: jobject=%p", handle);
486 return (jint) ((ptrint) handle);
490 /* JVM_MonitorWait */
492 void JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms)
495 log_println("JVM_MonitorWait: handle=%p, ms=%ld", handle, ms);
497 _Jv_java_lang_Object_wait((java_lang_Object *) handle, ms, 0);
501 /* JVM_MonitorNotify */
503 void JVM_MonitorNotify(JNIEnv* env, jobject handle)
506 log_println("JVM_MonitorNotify: IMPLEMENT ME!");
508 _Jv_java_lang_Object_notify((java_lang_Object *) handle);
512 /* JVM_MonitorNotifyAll */
514 void JVM_MonitorNotifyAll(JNIEnv* env, jobject handle)
517 log_println("JVM_MonitorNotifyAll: handle=%p", handle);
519 _Jv_java_lang_Object_notifyAll((java_lang_Object *) handle);
525 jobject JVM_Clone(JNIEnv* env, jobject handle)
528 log_println("JVM_Clone: handle=%p", handle);
530 return (jobject) builtin_clone(env, (java_objectheader *) handle);
534 /* JVM_InitializeCompiler */
536 void JVM_InitializeCompiler (JNIEnv *env, jclass compCls)
538 log_println("JVM_InitializeCompiler : IMPLEMENT ME!");
542 /* JVM_IsSilentCompiler */
544 jboolean JVM_IsSilentCompiler(JNIEnv *env, jclass compCls)
546 log_println("JVM_IsSilentCompiler: IMPLEMENT ME!");
550 /* JVM_CompileClass */
552 jboolean JVM_CompileClass(JNIEnv *env, jclass compCls, jclass cls)
554 log_println("JVM_CompileClass: IMPLEMENT ME!");
558 /* JVM_CompileClasses */
560 jboolean JVM_CompileClasses(JNIEnv *env, jclass cls, jstring jname)
562 log_println("JVM_CompileClasses: IMPLEMENT ME!");
566 /* JVM_CompilerCommand */
568 jobject JVM_CompilerCommand(JNIEnv *env, jclass compCls, jobject arg)
570 log_println("JVM_CompilerCommand: IMPLEMENT ME!");
574 /* JVM_EnableCompiler */
576 void JVM_EnableCompiler(JNIEnv *env, jclass compCls)
578 log_println("JVM_EnableCompiler: IMPLEMENT ME!");
582 /* JVM_DisableCompiler */
584 void JVM_DisableCompiler(JNIEnv *env, jclass compCls)
586 log_println("JVM_DisableCompiler: IMPLEMENT ME!");
590 /* JVM_GetLastErrorString */
592 jint JVM_GetLastErrorString(char *buf, int len)
618 char* JVM_NativePath(char* path)
621 log_println("JVM_NativePath: path=%s", path);
623 /* XXX is this correct? */
629 /* JVM_GetCallerClass */
631 jclass JVM_GetCallerClass(JNIEnv* env, int depth)
633 java_objectarray *oa;
636 log_println("JVM_GetCallerClass: depth=%d", depth);
639 oa = stacktrace_getClassContext();
644 if (oa->header.size < depth)
647 return (jclass) oa->data[depth - 1];
652 /* JVM_FindPrimitiveClass */
654 jclass JVM_FindPrimitiveClass(JNIEnv* env, const char* utf)
657 log_println("JVM_FindPrimitiveClass: utf=%s", utf);
659 return (jclass) primitive_class_get_by_name(utf_new_char(utf));
663 /* JVM_ResolveClass */
665 void JVM_ResolveClass(JNIEnv* env, jclass cls)
667 log_println("JVM_ResolveClass: IMPLEMENT ME!");
671 /* JVM_FindClassFromClassLoader */
673 jclass JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, jboolean init, jobject loader, jboolean throwError)
678 log_println("JVM_FindClassFromClassLoader: name=%s, init=%d, loader=%p, throwError=%d", name, init, loader, throwError);
681 c = load_class_from_classloader(utf_new_char(name), (java_objectheader *) loader);
687 if (!(c->state & CLASS_INITIALIZED))
688 if (!initialize_class(c))
695 /* JVM_FindClassFromClass */
697 jclass JVM_FindClassFromClass(JNIEnv *env, const char *name, jboolean init, jclass from)
699 log_println("JVM_FindClassFromClass: IMPLEMENT ME!");
703 /* JVM_DefineClass */
705 jclass JVM_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd)
707 log_println("JVM_DefineClass: IMPLEMENT ME!");
711 /* JVM_DefineClassWithSource */
713 jclass JVM_DefineClassWithSource(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source)
716 log_println("JVM_DefineClassWithSource: name=%s, loader=%p, buf=%p, len=%d, pd=%p, source=%s", name, loader, buf, len, pd, source);
718 /* XXX do something with pd and source */
720 return (jclass) class_define(utf_new_char(name), (java_objectheader *) loader, len, (u1 *) buf);
725 /* JVM_FindLoadedClass */
727 jclass JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)
733 cl = (classloader *) loader;
736 log_println("JVM_FindLoadedClass(loader=%p, name=%p)", loader, name);
739 u = javastring_toutf((java_objectheader *) name, true);
740 c = classcache_lookup(cl, u);
746 /* JVM_GetClassName */
748 jstring JVM_GetClassName(JNIEnv *env, jclass cls)
751 log_println("JVM_GetClassName: cls=%p", cls);
753 return (jstring) _Jv_java_lang_Class_getName((java_lang_Class *) cls);
757 /* JVM_GetClassInterfaces */
759 jobjectArray JVM_GetClassInterfaces(JNIEnv *env, jclass cls)
762 log_println("JVM_GetClassInterfaces: cls=%p", cls);
764 return (jobjectArray) _Jv_java_lang_Class_getInterfaces((java_lang_Class *) cls);
768 /* JVM_GetClassLoader */
770 jobject JVM_GetClassLoader(JNIEnv *env, jclass cls)
773 log_println("JVM_GetClassLoader: cls=%p", cls);
775 return (jobject) _Jv_java_lang_Class_getClassLoader((java_lang_Class *) cls);
779 /* JVM_IsInterface */
781 jboolean JVM_IsInterface(JNIEnv *env, jclass cls)
786 log_println("JVM_IsInterface: cls=%p", cls);
789 c = (classinfo *) cls;
791 return class_is_interface(c);
795 /* JVM_GetClassSigners */
797 jobjectArray JVM_GetClassSigners(JNIEnv *env, jclass cls)
799 log_println("JVM_GetClassSigners: IMPLEMENT ME!");
803 /* JVM_SetClassSigners */
805 void JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers)
807 log_println("JVM_SetClassSigners: IMPLEMENT ME!");
811 /* JVM_GetProtectionDomain */
813 jobject JVM_GetProtectionDomain(JNIEnv *env, jclass cls)
818 log_println("JVM_GetProtectionDomain: cls=%p");
821 c = (classinfo *) cls;
824 exceptions_throw_nullpointerexception();
828 /* Primitive types do not have a protection domain. */
830 if (class_is_primitive(c))
835 /* JVM_SetProtectionDomain */
837 void JVM_SetProtectionDomain(JNIEnv *env, jclass cls, jobject protection_domain)
839 log_println("JVM_SetProtectionDomain: IMPLEMENT ME!");
843 /* JVM_DoPrivileged */
845 jobject JVM_DoPrivileged(JNIEnv *env, jclass cls, jobject action, jobject context, jboolean wrapException)
847 java_objectheader *o;
850 java_objectheader *result;
851 java_objectheader *e;
854 log_println("JVM_DoPrivileged: action=%p, context=%p, wrapException=%d", action, context, wrapException);
857 o = (java_objectheader *) action;
860 if (action == NULL) {
861 exceptions_throw_nullpointerexception();
865 /* lookup run() method (throw no exceptions) */
867 m = class_resolveclassmethod(c, utf_run, utf_void__java_lang_Object, c,
870 if ((m == NULL) || !(m->flags & ACC_PUBLIC) || (m->flags & ACC_STATIC)) {
871 exceptions_throw_internalerror("No run method");
875 /* XXX It seems something with a privileged stack needs to be done
878 result = vm_call_method(m, o);
880 e = exceptions_get_and_clear_exception();
883 exceptions_throw_privilegedactionexception(e);
887 return (jobject) result;
891 /* JVM_GetInheritedAccessControlContext */
893 jobject JVM_GetInheritedAccessControlContext(JNIEnv *env, jclass cls)
895 log_println("JVM_GetInheritedAccessControlContext: IMPLEMENT ME!");
899 /* JVM_GetStackAccessControlContext */
901 jobject JVM_GetStackAccessControlContext(JNIEnv *env, jclass cls)
903 log_println("JVM_GetStackAccessControlContext: IMPLEMENT ME!");
907 /* JVM_IsArrayClass */
909 jboolean JVM_IsArrayClass(JNIEnv *env, jclass cls)
912 log_println("JVM_IsArrayClass: cls=%p", cls);
914 return class_is_array((classinfo *) cls);
918 /* JVM_IsPrimitiveClass */
920 jboolean JVM_IsPrimitiveClass(JNIEnv *env, jclass cls)
924 c = (classinfo *) cls;
927 log_println("JVM_IsPrimitiveClass(cls=%p)", cls);
930 return class_is_primitive(c);
934 /* JVM_GetComponentType */
936 jclass JVM_GetComponentType(JNIEnv *env, jclass cls)
939 log_println("JVM_GetComponentType: cls=%p", cls);
941 return (jclass) _Jv_java_lang_Class_getComponentType((java_lang_Class *) cls);
945 /* JVM_GetClassModifiers */
947 jint JVM_GetClassModifiers(JNIEnv *env, jclass cls)
952 log_println("JVM_GetClassModifiers: cls=%p", cls);
955 c = (classinfo *) cls;
957 /* XXX is this correct? */
959 return c->flags & ACC_CLASS_REFLECT_MASK;
963 /* JVM_GetDeclaredClasses */
965 jobjectArray JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass)
967 java_lang_Class *c = (java_lang_Class*)ofClass;
969 TRACEJVMCALLS("JVM_GetDeclaredClasses: ofClass=%p", ofClass);
972 exceptions_throw_nullpointerexception();
976 return (jobjectArray)_Jv_java_lang_Class_getDeclaredClasses(c, false);
980 /* JVM_GetDeclaringClass */
982 jclass JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)
984 classinfo *c = (classinfo*)ofClass;
986 TRACEJVMCALLS("JVM_GetDeclaringClass: ofClass=%p", ofClass);
989 exceptions_throw_nullpointerexception();
993 return (jclass)class_get_declaringclass(c);
997 /* JVM_GetClassSignature */
999 jstring JVM_GetClassSignature(JNIEnv *env, jclass cls)
1001 log_println("JVM_GetClassSignature: IMPLEMENT ME!");
1005 /* JVM_GetClassAnnotations */
1007 jbyteArray JVM_GetClassAnnotations(JNIEnv *env, jclass cls)
1009 #if defined(ENABLE_ANNOTATIONS)
1010 classinfo *c = (classinfo*)cls;
1011 java_bytearray *annotations = NULL;
1013 TRACEJVMCALLS("JVM_GetClassAnnotations: cls=%p", cls);
1016 exceptions_throw_nullpointerexception();
1020 /* Return null for arrays and primitives: */
1021 if(class_is_primitive(c) || class_is_array(c))
1026 if(c->annotations != NULL)
1028 uint32_t size = c->annotations->size;
1029 annotations = builtin_newarray_byte(size);
1031 if(annotations != NULL)
1033 MCOPY(annotations->data, c->annotations->data, uint8_t, size);
1037 return (jbyteArray)annotations;
1039 log_println("JVM_GetClassAnnotations: cls=%p, not implemented in this configuration!", cls);
1045 /* JVM_GetFieldAnnotations */
1047 jbyteArray JVM_GetFieldAnnotations(JNIEnv *env, jobject field)
1049 java_lang_reflect_Field *rf = (java_lang_reflect_Field*)field;
1051 TRACEJVMCALLS("JVM_GetFieldAnnotations: field=%p", field);
1053 if (field == NULL) {
1054 exceptions_throw_nullpointerexception();
1058 return (jbyteArray)rf->annotations;
1062 /* JVM_GetMethodAnnotations */
1064 jbyteArray JVM_GetMethodAnnotations(JNIEnv *env, jobject method)
1066 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1068 TRACEJVMCALLS("JVM_GetMethodAnnotations: method=%p", method);
1070 if (method == NULL) {
1071 exceptions_throw_nullpointerexception();
1075 return (jbyteArray)rm->annotations;
1079 /* JVM_GetMethodDefaultAnnotationValue */
1081 jbyteArray JVM_GetMethodDefaultAnnotationValue(JNIEnv *env, jobject method)
1083 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1085 TRACEJVMCALLS("JVM_GetMethodDefaultAnnotationValue: method=%p", method);
1087 if (method == NULL) {
1088 exceptions_throw_nullpointerexception();
1092 return (jbyteArray)rm->annotationDefault;
1096 /* JVM_GetMethodParameterAnnotations */
1098 jbyteArray JVM_GetMethodParameterAnnotations(JNIEnv *env, jobject method)
1100 java_lang_reflect_Method *rm = (java_lang_reflect_Method*)method;
1102 TRACEJVMCALLS("JVM_GetMethodParameterAnnotations: method=%p", method);
1104 if (method == NULL) {
1105 exceptions_throw_nullpointerexception();
1109 return (jbyteArray)rm->parameterAnnotations;
1113 /* JVM_GetClassDeclaredFields */
1115 jobjectArray JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1118 log_println("JVM_GetClassDeclaredFields: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1120 return (jobjectArray) _Jv_java_lang_Class_getDeclaredFields((java_lang_Class *) ofClass, publicOnly);
1124 /* JVM_GetClassDeclaredMethods */
1126 jobjectArray JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1129 log_println("JVM_GetClassDeclaredMethods: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1131 return (jobjectArray) _Jv_java_lang_Class_getDeclaredMethods((java_lang_Class *) ofClass, publicOnly);
1135 /* JVM_GetClassDeclaredConstructors */
1137 jobjectArray JVM_GetClassDeclaredConstructors(JNIEnv *env, jclass ofClass, jboolean publicOnly)
1140 log_println("JVM_GetClassDeclaredConstructors: ofClass=%p, publicOnly=%d", ofClass, publicOnly);
1142 return (jobjectArray) _Jv_java_lang_Class_getDeclaredConstructors((java_lang_Class *) ofClass, publicOnly);
1146 /* JVM_GetClassAccessFlags */
1148 jint JVM_GetClassAccessFlags(JNIEnv *env, jclass cls)
1153 log_println("JVM_GetClassAccessFlags: cls=%p", cls);
1156 c = (classinfo *) cls;
1158 return c->flags & ACC_CLASS_REFLECT_MASK;
1162 /* JVM_GetClassConstantPool */
1164 jobject JVM_GetClassConstantPool(JNIEnv *env, jclass cls)
1166 #if defined(ENABLE_ANNOTATIONS)
1167 sun_reflect_ConstantPool *constantPool = NULL;
1169 TRACEJVMCALLS("JVM_GetClassConstantPool: cls=%p", cls);
1171 assert(cls != NULL);
1174 (sun_reflect_ConstantPool*)native_new_and_init(
1175 class_sun_reflect_ConstantPool);
1177 if (constantPool == NULL) {
1182 constantPool->constantPoolOop = (java_lang_Object*)cls;
1183 return (jobject)constantPool;
1185 log_println("JVM_GetClassConstantPool: cls=%p, not implemented in this configuration!", cls);
1191 /* JVM_ConstantPoolGetSize */
1193 jint JVM_ConstantPoolGetSize(JNIEnv *env, jobject unused, jobject jcpool)
1195 classinfo *cls = (classinfo*)jcpool;
1196 TRACEJVMCALLS("JVM_ConstantPoolGetSize: jcpool=%p", jcpool);
1197 return cls->cpcount;
1201 /* JVM_ConstantPoolGetClassAt */
1203 jclass JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1205 constant_classref *ref;
1206 classinfo *cls = (classinfo*)jcpool;
1208 TRACEJVMCALLS("JVM_ConstantPoolGetClassAt: jcpool=%p, index=%d", jcpool, index);
1210 ref = (constant_classref*)class_getconstant(cls, index, CONSTANT_Class);
1216 return (jclass)resolve_classref_eager(ref);
1220 /* JVM_ConstantPoolGetClassAtIfLoaded */
1222 jclass JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1224 constant_classref *ref;
1225 classinfo *c = NULL;
1226 classinfo *cls = (classinfo*)jcpool;
1228 TRACEJVMCALLS("JVM_ConstantPoolGetClassAtIfLoaded: jcpool=%p, index=%d", jcpool, index);
1230 ref = (constant_classref*)class_getconstant(cls, index, CONSTANT_Class);
1236 if (!resolve_classref(NULL,ref,resolveLazy,true,true,&c)) {
1240 if (c == NULL || !(c->state & CLASS_LOADED)) {
1248 /* JVM_ConstantPoolGetMethodAt */
1250 jobject JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1252 constant_FMIref *ref;
1253 classinfo *cls = (classinfo*)jcpool;
1255 TRACEJVMCALLS("JVM_ConstantPoolGetMethodAt: jcpool=%p, index=%d", jcpool, index);
1257 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Methodref);
1263 /* XXX: is that right? or do I have to use resolve_method_*? */
1264 return (jobject)reflect_method_new(ref->p.method);
1268 /* JVM_ConstantPoolGetMethodAtIfLoaded */
1270 jobject JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1272 constant_FMIref *ref;
1273 classinfo *c = NULL;
1274 classinfo *cls = (classinfo*)jcpool;
1276 TRACEJVMCALLS("JVM_ConstantPoolGetMethodAtIfLoaded: jcpool=%p, index=%d", jcpool, index);
1278 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Methodref);
1284 if (!resolve_classref(NULL,ref->p.classref,resolveLazy,true,true,&c)) {
1288 if (c == NULL || !(c->state & CLASS_LOADED)) {
1292 return (jobject)reflect_method_new(ref->p.method);
1296 /* JVM_ConstantPoolGetFieldAt */
1298 jobject JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1300 constant_FMIref *ref;
1301 classinfo *cls = (classinfo*)jcpool;
1303 TRACEJVMCALLS("JVM_ConstantPoolGetFieldAt: jcpool=%p, index=%d", jcpool, index);
1305 ref = (constant_FMIref*)class_getconstant(cls, index, CONSTANT_Fieldref);
1311 return (jobject)reflect_field_new(ref->p.field);
1315 /* JVM_ConstantPoolGetFieldAtIfLoaded */
1317 jobject JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1319 constant_FMIref *ref;
1321 classinfo *cls = (classinfo*)jcpool;
1323 TRACEJVMCALLS("JVM_ConstantPoolGetFieldAtIfLoaded: jcpool=%p, index=%d", jcpool, index);
1325 ref = (constant_FMIref*)class_getconstant(
1326 (classinfo*)cls, index, CONSTANT_Fieldref);
1332 if (!resolve_classref(NULL,ref->p.classref,resolveLazy,true,true,&c)) {
1336 if (c == NULL || !(c->state & CLASS_LOADED)) {
1340 return (jobject)reflect_field_new(ref->p.field);
1344 /* JVM_ConstantPoolGetMemberRefInfoAt */
1346 jobjectArray JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1348 log_println("JVM_ConstantPoolGetMemberRefInfoAt: jcpool=%p, index=%d, IMPLEMENT ME!", jcpool, index);
1353 /* JVM_ConstantPoolGetIntAt */
1355 jint JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1357 constant_integer *ref;
1358 classinfo *cls = (classinfo*)jcpool;
1360 TRACEJVMCALLS("JVM_ConstantPoolGetIntAt: jcpool=%p, index=%d", jcpool, index);
1362 ref = (constant_integer*)class_getconstant(cls, index, CONSTANT_Integer);
1372 /* JVM_ConstantPoolGetLongAt */
1374 jlong JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1377 classinfo *cls = (classinfo*)jcpool;
1379 TRACEJVMCALLS("JVM_ConstantPoolGetLongAt: jcpool=%p, index=%d", jcpool, index);
1381 ref = (constant_long*)class_getconstant(cls, index, CONSTANT_Long);
1391 /* JVM_ConstantPoolGetFloatAt */
1393 jfloat JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1395 constant_float *ref;
1396 classinfo *cls = (classinfo*)jcpool;
1398 TRACEJVMCALLS("JVM_ConstantPoolGetFloatAt: jcpool=%p, index=%d", jcpool, index);
1400 ref = (constant_float*)class_getconstant(cls, index, CONSTANT_Float);
1410 /* JVM_ConstantPoolGetDoubleAt */
1412 jdouble JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1414 constant_double *ref;
1415 classinfo *cls = (classinfo*)jcpool;
1417 TRACEJVMCALLS("JVM_ConstantPoolGetDoubleAt: jcpool=%p, index=%d", jcpool, index);
1419 ref = (constant_double*)class_getconstant(cls, index, CONSTANT_Double);
1429 /* JVM_ConstantPoolGetStringAt */
1431 jstring JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1434 classinfo *cls = (classinfo*)jcpool;
1436 TRACEJVMCALLS("JVM_ConstantPoolGetStringAt: jcpool=%p, index=%d", jcpool, index);
1438 ref = (utf*)class_getconstant(cls, index, CONSTANT_String);
1444 /* XXX: I hope literalstring_new is the right Function. */
1445 return (java_lang_String*)literalstring_new(ref);
1449 /* JVM_ConstantPoolGetUTF8At */
1451 jstring JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject unused, jobject jcpool, jint index)
1454 classinfo *cls = (classinfo*)jcpool;
1456 TRACEJVMCALLS("JVM_ConstantPoolGetUTF8At: jcpool=%p, index=%d", jcpool, index);
1458 ref = (utf*)class_getconstant(cls, index, CONSTANT_Utf8);
1464 /* XXX: I hope literalstring_new is the right Function. */
1465 return (java_lang_String*)literalstring_new(ref);
1469 /* JVM_DesiredAssertionStatus */
1471 jboolean JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls)
1473 log_println("JVM_DesiredAssertionStatus: cls=%p, IMPLEMENT ME!", cls);
1479 /* JVM_AssertionStatusDirectives */
1481 jobject JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused)
1484 java_lang_AssertionStatusDirectives *o;
1485 java_objectarray *classes;
1486 java_objectarray *packages;
1489 log_println("JVM_AssertionStatusDirectives");
1491 /* XXX this is not completely implemented */
1493 c = load_class_bootstrap(utf_new_char("java/lang/AssertionStatusDirectives"));
1498 o = (java_lang_AssertionStatusDirectives *) builtin_new(c);
1503 classes = builtin_anewarray(0, class_java_lang_Object);
1505 if (classes == NULL)
1508 packages = builtin_anewarray(0, class_java_lang_Object);
1510 if (packages == NULL)
1513 /* set instance fields */
1515 o->classes = classes;
1516 o->packages = packages;
1522 /* JVM_GetClassNameUTF */
1524 const char* JVM_GetClassNameUTF(JNIEnv *env, jclass cls)
1526 log_println("JVM_GetClassNameUTF: IMPLEMENT ME!");
1530 /* JVM_GetClassCPTypes */
1532 void JVM_GetClassCPTypes(JNIEnv *env, jclass cls, unsigned char *types)
1534 log_println("JVM_GetClassCPTypes: IMPLEMENT ME!");
1538 /* JVM_GetClassCPEntriesCount */
1540 jint JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cls)
1542 log_println("JVM_GetClassCPEntriesCount: IMPLEMENT ME!");
1546 /* JVM_GetClassFieldsCount */
1548 jint JVM_GetClassFieldsCount(JNIEnv *env, jclass cls)
1550 log_println("JVM_GetClassFieldsCount: IMPLEMENT ME!");
1554 /* JVM_GetClassMethodsCount */
1556 jint JVM_GetClassMethodsCount(JNIEnv *env, jclass cls)
1558 log_println("JVM_GetClassMethodsCount: IMPLEMENT ME!");
1562 /* JVM_GetMethodIxExceptionIndexes */
1564 void JVM_GetMethodIxExceptionIndexes(JNIEnv *env, jclass cls, jint method_index, unsigned short *exceptions)
1566 log_println("JVM_GetMethodIxExceptionIndexes: IMPLEMENT ME!");
1570 /* JVM_GetMethodIxExceptionsCount */
1572 jint JVM_GetMethodIxExceptionsCount(JNIEnv *env, jclass cls, jint method_index)
1574 log_println("JVM_GetMethodIxExceptionsCount: IMPLEMENT ME!");
1578 /* JVM_GetMethodIxByteCode */
1580 void JVM_GetMethodIxByteCode(JNIEnv *env, jclass cls, jint method_index, unsigned char *code)
1582 log_println("JVM_GetMethodIxByteCode: IMPLEMENT ME!");
1586 /* JVM_GetMethodIxByteCodeLength */
1588 jint JVM_GetMethodIxByteCodeLength(JNIEnv *env, jclass cls, jint method_index)
1590 log_println("JVM_GetMethodIxByteCodeLength: IMPLEMENT ME!");
1594 /* JVM_GetMethodIxExceptionTableEntry */
1596 void JVM_GetMethodIxExceptionTableEntry(JNIEnv *env, jclass cls, jint method_index, jint entry_index, JVM_ExceptionTableEntryType *entry)
1598 log_println("JVM_GetMethodIxExceptionTableEntry: IMPLEMENT ME!");
1602 /* JVM_GetMethodIxExceptionTableLength */
1604 jint JVM_GetMethodIxExceptionTableLength(JNIEnv *env, jclass cls, int method_index)
1606 log_println("JVM_GetMethodIxExceptionTableLength: IMPLEMENT ME!");
1610 /* JVM_GetMethodIxModifiers */
1612 jint JVM_GetMethodIxModifiers(JNIEnv *env, jclass cls, int method_index)
1614 log_println("JVM_GetMethodIxModifiers: IMPLEMENT ME!");
1618 /* JVM_GetFieldIxModifiers */
1620 jint JVM_GetFieldIxModifiers(JNIEnv *env, jclass cls, int field_index)
1622 log_println("JVM_GetFieldIxModifiers: IMPLEMENT ME!");
1626 /* JVM_GetMethodIxLocalsCount */
1628 jint JVM_GetMethodIxLocalsCount(JNIEnv *env, jclass cls, int method_index)
1630 log_println("JVM_GetMethodIxLocalsCount: IMPLEMENT ME!");
1634 /* JVM_GetMethodIxArgsSize */
1636 jint JVM_GetMethodIxArgsSize(JNIEnv *env, jclass cls, int method_index)
1638 log_println("JVM_GetMethodIxArgsSize: IMPLEMENT ME!");
1642 /* JVM_GetMethodIxMaxStack */
1644 jint JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cls, int method_index)
1646 log_println("JVM_GetMethodIxMaxStack: IMPLEMENT ME!");
1650 /* JVM_IsConstructorIx */
1652 jboolean JVM_IsConstructorIx(JNIEnv *env, jclass cls, int method_index)
1654 log_println("JVM_IsConstructorIx: IMPLEMENT ME!");
1658 /* JVM_GetMethodIxNameUTF */
1660 const char* JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cls, jint method_index)
1662 log_println("JVM_GetMethodIxNameUTF: IMPLEMENT ME!");
1666 /* JVM_GetMethodIxSignatureUTF */
1668 const char* JVM_GetMethodIxSignatureUTF(JNIEnv *env, jclass cls, jint method_index)
1670 log_println("JVM_GetMethodIxSignatureUTF: IMPLEMENT ME!");
1674 /* JVM_GetCPFieldNameUTF */
1676 const char* JVM_GetCPFieldNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1678 log_println("JVM_GetCPFieldNameUTF: IMPLEMENT ME!");
1682 /* JVM_GetCPMethodNameUTF */
1684 const char* JVM_GetCPMethodNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1686 log_println("JVM_GetCPMethodNameUTF: IMPLEMENT ME!");
1690 /* JVM_GetCPMethodSignatureUTF */
1692 const char* JVM_GetCPMethodSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)
1694 log_println("JVM_GetCPMethodSignatureUTF: IMPLEMENT ME!");
1698 /* JVM_GetCPFieldSignatureUTF */
1700 const char* JVM_GetCPFieldSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)
1702 log_println("JVM_GetCPFieldSignatureUTF: IMPLEMENT ME!");
1706 /* JVM_GetCPClassNameUTF */
1708 const char* JVM_GetCPClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1710 log_println("JVM_GetCPClassNameUTF: IMPLEMENT ME!");
1714 /* JVM_GetCPFieldClassNameUTF */
1716 const char* JVM_GetCPFieldClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1718 log_println("JVM_GetCPFieldClassNameUTF: IMPLEMENT ME!");
1722 /* JVM_GetCPMethodClassNameUTF */
1724 const char* JVM_GetCPMethodClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)
1726 log_println("JVM_GetCPMethodClassNameUTF: IMPLEMENT ME!");
1730 /* JVM_GetCPFieldModifiers */
1732 jint JVM_GetCPFieldModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)
1734 log_println("JVM_GetCPFieldModifiers: IMPLEMENT ME!");
1738 /* JVM_GetCPMethodModifiers */
1740 jint JVM_GetCPMethodModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)
1742 log_println("JVM_GetCPMethodModifiers: IMPLEMENT ME!");
1746 /* JVM_ReleaseUTF */
1748 void JVM_ReleaseUTF(const char *utf)
1750 log_println("JVM_ReleaseUTF: IMPLEMENT ME!");
1754 /* JVM_IsSameClassPackage */
1756 jboolean JVM_IsSameClassPackage(JNIEnv *env, jclass class1, jclass class2)
1758 log_println("JVM_IsSameClassPackage: IMPLEMENT ME!");
1764 jint JVM_Open(const char *fname, jint flags, jint mode)
1769 log_println("JVM_Open: fname=%s, flags=%d, mode=%d", fname, flags, mode);
1772 result = open(fname, flags, mode);
1780 /* XXX don't know what to do here */
1781 /* return JVM_EEXIST; */
1792 jint JVM_Close(jint fd)
1795 log_println("JVM_Close: fd=%d", fd);
1803 jint JVM_Read(jint fd, char *buf, jint nbytes)
1806 log_println("JVM_Read: fd=%d, buf=%p, nbytes=%d", fd, buf, nbytes);
1808 return read(fd, buf, nbytes);
1814 jint JVM_Write(jint fd, char *buf, jint nbytes)
1817 log_println("JVM_Write: fd=%d, buf=%s, nbytes=%d", fd, buf, nbytes);
1819 return write(fd, buf, nbytes);
1825 jint JVM_Available(jint fd, jlong *pbytes)
1827 TRACEJVMCALLS("JVM_Available(fd=%d, pbytes=%p)", fd, pbytes);
1829 #if defined(FIONREAD)
1830 if (ioctl(fd, FIONREAD, pbytes) < 0)
1834 #elif defined(HAVE_FSTAT)
1835 struct stat statBuffer;
1841 if ((fstat(fd, &statBuffer) == 0) && S_ISREG (statBuffer.st_mode)) {
1842 n = lseek (fd, 0, SEEK_CUR);
1845 *pbytes = statBuffer.st_size - n;
1857 #elif defined(HAVE_SELECT)
1858 fd_set filedescriptset;
1864 FD_ZERO(&filedescriptset);
1865 FD_SET(fd, &filedescriptset);
1866 memset(&tv, 0, sizeof(tv));
1868 switch (select(fd+1, &filedescriptset, NULL, NULL, &tv))
1875 result = CPNATIVE_OK;
1879 result = CPNATIVE_OK;
1892 jlong JVM_Lseek(jint fd, jlong offset, jint whence)
1895 log_println("JVM_Lseek: fd=%d, offset=%ld, whence=%d", fd, offset, whence);
1897 return (jlong) lseek(fd, (off_t) offset, whence);
1903 jint JVM_SetLength(jint fd, jlong length)
1905 log_println("JVM_SetLength: IMPLEMENT ME!");
1911 jint JVM_Sync(jint fd)
1913 log_println("JVM_Sync: IMPLEMENT ME!");
1917 /* JVM_StartThread */
1919 void JVM_StartThread(JNIEnv* env, jobject jthread)
1922 log_println("JVM_StartThread: jthread=%p", jthread);
1924 _Jv_java_lang_Thread_start((java_lang_Thread *) jthread, 0);
1928 /* JVM_StopThread */
1930 void JVM_StopThread(JNIEnv* env, jobject jthread, jobject throwable)
1932 log_println("JVM_StopThread: IMPLEMENT ME!");
1936 /* JVM_IsThreadAlive */
1938 jboolean JVM_IsThreadAlive(JNIEnv* env, jobject jthread)
1941 log_println("JVM_IsThreadAlive: jthread=%p", jthread);
1943 return _Jv_java_lang_Thread_isAlive((java_lang_Thread *) jthread);
1947 /* JVM_SuspendThread */
1949 void JVM_SuspendThread(JNIEnv* env, jobject jthread)
1951 log_println("JVM_SuspendThread: IMPLEMENT ME!");
1955 /* JVM_ResumeThread */
1957 void JVM_ResumeThread(JNIEnv* env, jobject jthread)
1959 log_println("JVM_ResumeThread: IMPLEMENT ME!");
1963 /* JVM_SetThreadPriority */
1965 void JVM_SetThreadPriority(JNIEnv* env, jobject jthread, jint prio)
1968 log_println("JVM_SetThreadPriority: jthread=%p, prio=%d", jthread, prio);
1970 _Jv_java_lang_Thread_setPriority((java_lang_Thread *) jthread, prio);
1976 void JVM_Yield(JNIEnv *env, jclass threadClass)
1978 log_println("JVM_Yield: IMPLEMENT ME!");
1984 void JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis)
1987 log_println("JVM_Sleep: threadClass=%p, millis=%ld", threadClass, millis);
1989 _Jv_java_lang_Thread_sleep(millis);
1993 /* JVM_CurrentThread */
1995 jobject JVM_CurrentThread(JNIEnv* env, jclass threadClass)
1998 log_println("JVM_CurrentThread: threadClass=%p", threadClass);
2000 return (jobject) _Jv_java_lang_Thread_currentThread();
2004 /* JVM_CountStackFrames */
2006 jint JVM_CountStackFrames(JNIEnv* env, jobject jthread)
2008 log_println("JVM_CountStackFrames: IMPLEMENT ME!");
2014 void JVM_Interrupt(JNIEnv* env, jobject jthread)
2016 log_println("JVM_Interrupt: IMPLEMENT ME!");
2020 /* JVM_IsInterrupted */
2022 jboolean JVM_IsInterrupted(JNIEnv* env, jobject jthread, jboolean clear_interrupted)
2025 log_println("JVM_IsInterrupted: jthread=%p, clear_interrupted=%d", jthread, clear_interrupted);
2027 /* XXX do something with clear_interrupted */
2028 return _Jv_java_lang_Thread_isInterrupted((java_lang_Thread *) jthread);
2034 jboolean JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj)
2036 log_println("JVM_HoldsLock: IMPLEMENT ME!");
2040 /* JVM_DumpAllStacks */
2042 void JVM_DumpAllStacks(JNIEnv* env, jclass unused)
2044 log_println("JVM_DumpAllStacks: IMPLEMENT ME!");
2048 /* JVM_CurrentLoadedClass */
2050 jclass JVM_CurrentLoadedClass(JNIEnv *env)
2052 log_println("JVM_CurrentLoadedClass: IMPLEMENT ME!");
2056 /* JVM_CurrentClassLoader */
2058 jobject JVM_CurrentClassLoader(JNIEnv *env)
2060 log_println("JVM_CurrentClassLoader: IMPLEMENT ME!");
2064 /* JVM_GetClassContext */
2066 jobjectArray JVM_GetClassContext(JNIEnv *env)
2069 log_println("JVM_GetClassContext");
2071 return (jobjectArray) stacktrace_getClassContext();
2075 /* JVM_ClassDepth */
2077 jint JVM_ClassDepth(JNIEnv *env, jstring name)
2079 log_println("JVM_ClassDepth: IMPLEMENT ME!");
2083 /* JVM_ClassLoaderDepth */
2085 jint JVM_ClassLoaderDepth(JNIEnv *env)
2087 log_println("JVM_ClassLoaderDepth: IMPLEMENT ME!");
2091 /* JVM_GetSystemPackage */
2093 jstring JVM_GetSystemPackage(JNIEnv *env, jstring name)
2095 log_println("JVM_GetSystemPackage: IMPLEMENT ME!");
2099 /* JVM_GetSystemPackages */
2101 jobjectArray JVM_GetSystemPackages(JNIEnv *env)
2103 log_println("JVM_GetSystemPackages: IMPLEMENT ME!");
2107 /* JVM_AllocateNewObject */
2109 jobject JVM_AllocateNewObject(JNIEnv *env, jobject receiver, jclass currClass, jclass initClass)
2111 log_println("JVM_AllocateNewObject: IMPLEMENT ME!");
2115 /* JVM_AllocateNewArray */
2117 jobject JVM_AllocateNewArray(JNIEnv *env, jobject obj, jclass currClass, jint length)
2119 log_println("JVM_AllocateNewArray: IMPLEMENT ME!");
2123 /* JVM_LatestUserDefinedLoader */
2125 jobject JVM_LatestUserDefinedLoader(JNIEnv *env)
2127 log_println("JVM_LatestUserDefinedLoader: IMPLEMENT ME!");
2131 /* JVM_LoadClass0 */
2133 jclass JVM_LoadClass0(JNIEnv *env, jobject receiver, jclass currClass, jstring currClassName)
2135 log_println("JVM_LoadClass0: IMPLEMENT ME!");
2139 /* JVM_GetArrayLength */
2141 jint JVM_GetArrayLength(JNIEnv *env, jobject arr)
2143 java_arrayheader *a;
2145 TRACEJVMCALLS("JVM_GetArrayLength(arr=%p)", arr);
2147 a = (java_arrayheader *) arr;
2150 exceptions_throw_nullpointerexception();
2154 if (!class_is_array(a->objheader.vftbl->class)) {
2155 /* exceptions_throw_illegalargumentexception("Argument is not an array"); */
2156 exceptions_throw_illegalargumentexception();
2164 /* JVM_GetArrayElement */
2166 jobject JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index)
2168 /* log_println("JVM_GetArrayElement: IMPLEMENT ME!"); */
2170 java_arrayheader *a;
2171 java_objectheader *o = NULL;
2173 TRACEJVMCALLS("JVM_GetArrayElement: arr=%p, index=%d", arr, index);
2175 a = (java_arrayheader *) arr;
2178 exceptions_throw_nullpointerexception();
2182 if (!class_is_array(a->objheader.vftbl->class)) {
2183 exceptions_throw_illegalargumentexception();
2187 if (index < 0 || index > a->size ) {
2188 exceptions_new_arrayindexoutofboundsexception(index);
2192 switch (a->objheader.vftbl->arraydesc->arraytype) {
2194 o = builtin_new(class_java_lang_Integer);
2196 ((java_lang_Integer*)o)->value = ((java_intarray*)a)->data[index];
2198 case ARRAYTYPE_LONG:
2199 o = builtin_new(class_java_lang_Long);
2201 ((java_lang_Long*)o)->value = ((java_longarray*)a)->data[index];
2203 case ARRAYTYPE_FLOAT:
2204 o = builtin_new(class_java_lang_Float);
2206 ((java_lang_Float*)o)->value = ((java_floatarray*)a)->data[index];
2208 case ARRAYTYPE_DOUBLE:
2209 o = builtin_new(class_java_lang_Double);
2211 ((java_lang_Double*)o)->value = ((java_doublearray*)a)->data[index];
2213 case ARRAYTYPE_BYTE:
2214 o = builtin_new(class_java_lang_Byte);
2216 ((java_lang_Byte*)o)->value = ((java_bytearray*)a)->data[index];
2218 case ARRAYTYPE_CHAR:
2219 o = builtin_new(class_java_lang_Character);
2221 ((java_lang_Character*)o)->value = ((java_chararray*)a)->data[index];
2223 case ARRAYTYPE_SHORT:
2224 o = builtin_new(class_java_lang_Short);
2226 ((java_lang_Short*)o)->value = ((java_shortarray*)a)->data[index];
2228 case ARRAYTYPE_BOOLEAN:
2229 o = builtin_new(class_java_lang_Boolean);
2231 ((java_lang_Boolean*)o)->value = ((java_booleanarray*)a)->data[index];
2233 case ARRAYTYPE_OBJECT:
2234 o = ((java_objectarray*)a)->data[index];
2242 /* JVM_GetPrimitiveArrayElement */
2244 jvalue JVM_GetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jint wCode)
2246 log_println("JVM_GetPrimitiveArrayElement: IMPLEMENT ME!");
2250 /* JVM_SetArrayElement */
2252 void JVM_SetArrayElement(JNIEnv *env, jobject arr, jint index, jobject val)
2254 log_println("JVM_SetArrayElement: IMPLEMENT ME!");
2258 /* JVM_SetPrimitiveArrayElement */
2260 void JVM_SetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jvalue v, unsigned char vCode)
2262 log_println("JVM_SetPrimitiveArrayElement: IMPLEMENT ME!");
2268 jobject JVM_NewArray(JNIEnv *env, jclass eltClass, jint length)
2272 java_arrayheader *a;
2273 java_objectarray *oa;
2275 TRACEJVMCALLS("JVM_NewArray(env=%p, eltClass=%p, length=%d)", env, eltClass, length);
2277 c = (classinfo *) eltClass;
2279 /* create primitive or object array */
2281 if (class_is_primitive(c)) {
2282 pc = primitive_arrayclass_get_by_name(c->name);
2283 a = builtin_newarray(length, pc);
2288 oa = builtin_anewarray(length, c);
2290 return (jobject) oa;
2295 /* JVM_NewMultiArray */
2297 jobject JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim)
2299 log_println("JVM_NewMultiArray: IMPLEMENT ME!");
2303 /* JVM_InitializeSocketLibrary */
2305 jint JVM_InitializeSocketLibrary()
2307 log_println("JVM_InitializeSocketLibrary: IMPLEMENT ME!");
2313 jint JVM_Socket(jint domain, jint type, jint protocol)
2316 log_println("JVM_Socket: domain=%d, type=%d, protocol=%d", domain, type, protocol);
2318 return socket(domain, type, protocol);
2322 /* JVM_SocketClose */
2324 jint JVM_SocketClose(jint fd)
2327 log_println("JVM_SocketClose: fd=%d", fd);
2333 /* JVM_SocketShutdown */
2335 jint JVM_SocketShutdown(jint fd, jint howto)
2338 log_println("JVM_SocketShutdown: fd=%d, howto=%d", fd, howto);
2340 return shutdown(fd, howto);
2346 jint JVM_Recv(jint fd, char *buf, jint nBytes, jint flags)
2348 log_println("JVM_Recv: IMPLEMENT ME!");
2354 jint JVM_Send(jint fd, char *buf, jint nBytes, jint flags)
2356 log_println("JVM_Send: IMPLEMENT ME!");
2362 jint JVM_Timeout(int fd, long timeout)
2364 log_println("JVM_Timeout: IMPLEMENT ME!");
2370 jint JVM_Listen(jint fd, jint count)
2373 log_println("JVM_Listen: fd=%d, count=%d", fd, count);
2375 return listen(fd, count);
2381 jint JVM_Connect(jint fd, struct sockaddr *him, jint len)
2384 log_println("JVM_Connect: fd=%d, him=%p, len=%d", fd, him, len);
2386 return connect(fd, him, len);
2392 jint JVM_Bind(jint fd, struct sockaddr *him, jint len)
2394 log_println("JVM_Bind: IMPLEMENT ME!");
2400 jint JVM_Accept(jint fd, struct sockaddr *him, jint *len)
2403 log_println("JVM_Accept: fd=%d, him=%p, len=%p", fd, him, len);
2405 return accept(fd, him, (socklen_t *) len);
2411 jint JVM_RecvFrom(jint fd, char *buf, int nBytes, int flags, struct sockaddr *from, int *fromlen)
2413 log_println("JVM_RecvFrom: IMPLEMENT ME!");
2417 /* JVM_GetSockName */
2419 jint JVM_GetSockName(jint fd, struct sockaddr *him, int *len)
2422 log_println("JVM_GetSockName: fd=%d, him=%p, len=%p", fd, him, len);
2424 return getsockname(fd, him, (socklen_t *) len);
2430 jint JVM_SendTo(jint fd, char *buf, int len, int flags, struct sockaddr *to, int tolen)
2432 log_println("JVM_SendTo: IMPLEMENT ME!");
2436 /* JVM_SocketAvailable */
2438 jint JVM_SocketAvailable(jint fd, jint *pbytes)
2440 log_println("JVM_SocketAvailable: IMPLEMENT ME!");
2444 /* JVM_GetSockOpt */
2446 jint JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen)
2448 log_println("JVM_GetSockOpt: IMPLEMENT ME!");
2452 /* JVM_SetSockOpt */
2454 jint JVM_SetSockOpt(jint fd, int level, int optname, const char *optval, int optlen)
2457 log_println("JVM_SetSockOpt: fd=%d, level=%d, optname=%d, optval=%s, optlen=%d", fd, level, optname, optval, optlen);
2459 return setsockopt(fd, level, optname, optval, optlen);
2463 /* JVM_GetHostName */
2465 int JVM_GetHostName(char* name, int namelen)
2468 log_println("JVM_GetHostName: name=%s, namelen=%d", name, namelen);
2470 return gethostname(name, namelen);
2474 /* JVM_GetHostByAddr */
2476 struct hostent* JVM_GetHostByAddr(const char* name, int len, int type)
2478 log_println("JVM_GetHostByAddr: IMPLEMENT ME!");
2482 /* JVM_GetHostByName */
2484 struct hostent* JVM_GetHostByName(char* name)
2486 log_println("JVM_GetHostByName: IMPLEMENT ME!");
2490 /* JVM_GetProtoByName */
2492 struct protoent* JVM_GetProtoByName(char* name)
2494 log_println("JVM_GetProtoByName: IMPLEMENT ME!");
2498 /* JVM_LoadLibrary */
2500 void* JVM_LoadLibrary(const char* name)
2503 log_println("JVM_LoadLibrary: name=%s", name);
2505 return native_library_open(utf_new_char(name));
2509 /* JVM_UnloadLibrary */
2511 void JVM_UnloadLibrary(void* handle)
2513 log_println("JVM_UnloadLibrary: IMPLEMENT ME!");
2517 /* JVM_FindLibraryEntry */
2519 void* JVM_FindLibraryEntry(void* handle, const char* name)
2524 log_println("JVM_FindLibraryEntry: handle=%p, name=%s", handle, name);
2527 symbol = lt_dlsym(handle, name);
2535 jboolean JVM_IsNaN(jdouble a)
2537 log_println("JVM_IsNaN: IMPLEMENT ME!");
2541 /* JVM_IsSupportedJNIVersion */
2543 jboolean JVM_IsSupportedJNIVersion(jint version)
2546 log_println("JVM_IsSupportedJNIVersion: version=%d", version);
2549 case JNI_VERSION_1_1:
2550 case JNI_VERSION_1_2:
2551 case JNI_VERSION_1_4:
2559 /* JVM_InternString */
2561 jstring JVM_InternString(JNIEnv *env, jstring str)
2564 log_println("JVM_InternString: str=%p", str);
2566 return (jstring) _Jv_java_lang_String_intern((java_lang_String *) str);
2570 /* JVM_RawMonitorCreate */
2572 JNIEXPORT void* JNICALL JVM_RawMonitorCreate(void)
2574 java_objectheader *o;
2577 log_println("JVM_RawMonitorCreate");
2580 o = NEW(java_objectheader);
2582 lock_init_object_lock(o);
2588 /* JVM_RawMonitorDestroy */
2590 JNIEXPORT void JNICALL JVM_RawMonitorDestroy(void *mon)
2593 log_println("JVM_RawMonitorDestroy: mon=%p", mon);
2595 FREE(mon, java_objectheader);
2599 /* JVM_RawMonitorEnter */
2601 JNIEXPORT jint JNICALL JVM_RawMonitorEnter(void *mon)
2604 log_println("JVM_RawMonitorEnter: mon=%p", mon);
2606 (void) lock_monitor_enter((java_objectheader *) mon);
2612 /* JVM_RawMonitorExit */
2614 JNIEXPORT void JNICALL JVM_RawMonitorExit(void *mon)
2617 log_println("JVM_RawMonitorExit: mon=%p", mon);
2619 (void) lock_monitor_exit((java_objectheader *) mon);
2623 /* JVM_SetPrimitiveFieldValues */
2625 void JVM_SetPrimitiveFieldValues(JNIEnv *env, jclass cb, jobject obj, jlongArray fieldIDs, jcharArray typecodes, jbyteArray data)
2627 log_println("JVM_SetPrimitiveFieldValues: IMPLEMENT ME!");
2631 /* JVM_GetPrimitiveFieldValues */
2633 void JVM_GetPrimitiveFieldValues(JNIEnv *env, jclass cb, jobject obj, jlongArray fieldIDs, jcharArray typecodes, jbyteArray data)
2635 log_println("JVM_GetPrimitiveFieldValues: IMPLEMENT ME!");
2639 /* JVM_AccessVMBooleanFlag */
2641 jboolean JVM_AccessVMBooleanFlag(const char* name, jboolean* value, jboolean is_get)
2643 log_println("JVM_AccessVMBooleanFlag: IMPLEMENT ME!");
2647 /* JVM_AccessVMIntFlag */
2649 jboolean JVM_AccessVMIntFlag(const char* name, jint* value, jboolean is_get)
2651 log_println("JVM_AccessVMIntFlag: IMPLEMENT ME!");
2655 /* JVM_VMBreakPoint */
2657 void JVM_VMBreakPoint(JNIEnv *env, jobject obj)
2659 log_println("JVM_VMBreakPoint: IMPLEMENT ME!");
2663 /* JVM_GetClassFields */
2665 jobjectArray JVM_GetClassFields(JNIEnv *env, jclass cls, jint which)
2667 log_println("JVM_GetClassFields: IMPLEMENT ME!");
2671 /* JVM_GetClassMethods */
2673 jobjectArray JVM_GetClassMethods(JNIEnv *env, jclass cls, jint which)
2675 log_println("JVM_GetClassMethods: IMPLEMENT ME!");
2679 /* JVM_GetClassConstructors */
2681 jobjectArray JVM_GetClassConstructors(JNIEnv *env, jclass cls, jint which)
2683 log_println("JVM_GetClassConstructors: IMPLEMENT ME!");
2687 /* JVM_GetClassField */
2689 jobject JVM_GetClassField(JNIEnv *env, jclass cls, jstring name, jint which)
2691 log_println("JVM_GetClassField: IMPLEMENT ME!");
2695 /* JVM_GetClassMethod */
2697 jobject JVM_GetClassMethod(JNIEnv *env, jclass cls, jstring name, jobjectArray types, jint which)
2699 log_println("JVM_GetClassMethod: IMPLEMENT ME!");
2703 /* JVM_GetClassConstructor */
2705 jobject JVM_GetClassConstructor(JNIEnv *env, jclass cls, jobjectArray types, jint which)
2707 log_println("JVM_GetClassConstructor: IMPLEMENT ME!");
2711 /* JVM_NewInstance */
2713 jobject JVM_NewInstance(JNIEnv *env, jclass cls)
2715 log_println("JVM_NewInstance: IMPLEMENT ME!");
2721 jobject JVM_GetField(JNIEnv *env, jobject field, jobject obj)
2723 log_println("JVM_GetField: IMPLEMENT ME!");
2727 /* JVM_GetPrimitiveField */
2729 jvalue JVM_GetPrimitiveField(JNIEnv *env, jobject field, jobject obj, unsigned char wCode)
2731 log_println("JVM_GetPrimitiveField: IMPLEMENT ME!");
2737 void JVM_SetField(JNIEnv *env, jobject field, jobject obj, jobject val)
2739 log_println("JVM_SetField: IMPLEMENT ME!");
2743 /* JVM_SetPrimitiveField */
2745 void JVM_SetPrimitiveField(JNIEnv *env, jobject field, jobject obj, jvalue v, unsigned char vCode)
2747 log_println("JVM_SetPrimitiveField: IMPLEMENT ME!");
2751 /* JVM_InvokeMethod */
2753 jobject JVM_InvokeMethod(JNIEnv *env, jobject method, jobject obj, jobjectArray args0)
2756 log_println("JVM_InvokeMethod: method=%p, obj=%p, args0=%p", method, obj, args0);
2758 return (jobject) _Jv_java_lang_reflect_Method_invoke((java_lang_reflect_Method *) method, (java_lang_Object *) obj, (java_objectarray *) args0);
2762 /* JVM_NewInstanceFromConstructor */
2764 jobject JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0)
2767 log_println("JVM_NewInstanceFromConstructor: c=%p, args0=%p", c, args0);
2769 return (jobject) _Jv_java_lang_reflect_Constructor_newInstance(env, (java_lang_reflect_Constructor *) c, (java_objectarray *) args0);
2773 /* JVM_SupportsCX8 */
2775 jboolean JVM_SupportsCX8()
2778 log_println("JVM_SupportsCX8");
2780 return _Jv_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8(NULL, NULL);
2786 jboolean JVM_CX8Field(JNIEnv *env, jobject obj, jfieldID fid, jlong oldVal, jlong newVal)
2788 log_println("JVM_CX8Field: IMPLEMENT ME!");
2792 /* JVM_GetAllThreads */
2794 jobjectArray JVM_GetAllThreads(JNIEnv *env, jclass dummy)
2796 log_println("JVM_GetAllThreads: IMPLEMENT ME!");
2800 /* JVM_DumpThreads */
2802 jobjectArray JVM_DumpThreads(JNIEnv *env, jclass threadClass, jobjectArray threads)
2804 log_println("JVM_DumpThreads: IMPLEMENT ME!");
2808 /* JVM_GetManagement */
2810 void* JVM_GetManagement(jint version)
2812 log_println("JVM_GetManagement: IMPLEMENT ME!");
2816 /* JVM_InitAgentProperties */
2818 jobject JVM_InitAgentProperties(JNIEnv *env, jobject properties)
2820 log_println("JVM_InitAgentProperties: IMPLEMENT ME!");
2824 /* JVM_GetEnclosingMethodInfo */
2826 jobjectArray JVM_GetEnclosingMethodInfo(JNIEnv *env, jclass ofClass)
2828 log_println("JVM_GetEnclosingMethodInfo: IMPLEMENT ME!");
2832 /* JVM_GetThreadStateValues */
2834 jintArray JVM_GetThreadStateValues(JNIEnv* env, jint javaThreadState)
2836 log_println("JVM_GetThreadStateValues: IMPLEMENT ME!");
2840 /* JVM_GetThreadStateValues */
2842 jobjectArray JVM_GetThreadStateNames(JNIEnv* env, jint javaThreadState, jintArray values)
2844 log_println("JVM_GetThreadStateValues: IMPLEMENT ME!");
2848 /* JVM_GetVersionInfo */
2850 void JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size)
2852 log_println("JVM_GetVersionInfo: IMPLEMENT ME!");
2856 /* OS: JVM_RegisterSignal */
2858 void* JVM_RegisterSignal(jint sig, void* handler)
2860 log_println("JVM_RegisterSignal: sig=%d, handler=%p, IMPLEMENT ME!", sig, handler);
2865 /* OS: JVM_RaiseSignal */
2867 jboolean JVM_RaiseSignal(jint sig)
2869 log_println("JVM_RaiseSignal: sig=%s", sig);
2874 /* OS: JVM_FindSignal */
2876 jint JVM_FindSignal(const char *name)
2878 log_println("JVM_FindSignal: name=%s", name);
2884 * These are local overrides for various environment variables in Emacs.
2885 * Please do not remove this and leave it at the end of the file, where
2886 * Emacs will automagically detect them.
2887 * ---------------------------------------------------------------------
2890 * indent-tabs-mode: t