/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This file is part of SableVM. * * See the file "LICENSE" for Copyright information and the * * terms and conditions for copying, distribution and * * modification of SableVM. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ---------------------------------------------------------------------- ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: exitInternal * Signature: (I)V */ JNIEXPORT void JNICALL Java_java_lang_Runtime_exitInternal (JNIEnv *_env, jobject this, jint status) { /* this one is simple! */ exit (status); } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_runFinalization ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: runFinalization * Signature: ()V */ JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalization (JNIEnv *_env, jobject this) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); _svmf_resuming_java (env); /* todo */ _svmf_stopping_java (env); } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_gc ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: gc * Signature: ()V */ JNIEXPORT void JNICALL Java_java_lang_Runtime_gc (JNIEnv *_env, jobject this) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); _svmf_resuming_java (env); #ifdef _SABLEVM_NO_GC /* do nothing ;-) */ #elif defined (_SABLEVM_COPY_GC) { _svmt_JavaVM *vm = env->vm; jint status = JNI_OK; _svmm_mutex_lock (vm->global_mutex); _svmf_halt_if_requested (env); status = _svmf_copy_gc_no_exception (env, 0); _svmm_mutex_unlock (); if (status != JNI_OK) { _svmm_fatal_error ("impossible control flow"); } } #else #error todo #endif _svmf_stopping_java (env); } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_traceInstructions ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: traceInstructions * Signature: (Z)V */ JNIEXPORT void JNICALL Java_java_lang_Runtime_traceInstructions (JNIEnv *_env, jobject this, jboolean on) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); _svmf_resuming_java (env); #if !defined(NDEBUG) env->vm->verbose_instructions = on; #endif _svmf_stopping_java (env); } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_traceMethodCalls ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: traceMethodCalls * Signature: (Z)V */ JNIEXPORT void JNICALL Java_java_lang_Runtime_traceMethodCalls (JNIEnv *_env, jobject this, jboolean on) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); _svmf_resuming_java (env); #if !defined(NDEBUG) env->vm->verbose_methods = on; #endif _svmf_stopping_java (env); } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_nativeLoad ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: nativeLoad * Signature: (Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_java_lang_Runtime_nativeLoad (JNIEnv *_env, jobject this, jstring _filename) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); _svmt_JavaVM *vm = env->vm; jint result = 0; _svmf_resuming_java (env); { char *filename; _svmt_class_loader_info *class_loader_info = _svmf_get_current_class_loader (env); _svmt_native_library *native_library = class_loader_info->native_library_list; lt_dlhandle handle; jboolean monitor_acquired = JNI_FALSE; if (_svmf_enter_object_monitor (env, *(vm->class_loading.boot_loader.classes.virtualmachine-> class_instance)) != JNI_OK) { goto end; } monitor_acquired = JNI_TRUE; if (_svmm_galloc_utf_chars (env, _filename, filename) != JNI_OK) { goto end; } handle = lt_dlopen (filename); if (handle == NULL) { _svmm_gfree_utf_chars (filename); goto end; } while (native_library != NULL) { if (native_library->handle == handle) { result = 1; _svmm_gfree_utf_chars (filename); goto end; } native_library = native_library->next; } /* Call JNI_OnLoad */ { JNIEXPORT jint (JNICALL *JNI_OnLoad) (JavaVM *, void *); JNI_OnLoad = (JNIEXPORT jint (JNICALL *)(JavaVM *, void *)) lt_dlsym (handle, "JNI_OnLoad"); if (JNI_OnLoad != NULL) { jint version = JNI_OnLoad (_svmf_cast_JavaVM (vm), NULL); if (version != JNI_VERSION_1_2) { lt_dlclose (handle); goto end; } } } if (_svmm_cl_zalloc_native_library (env, class_loader_info, *(class_loader_info->native_library_list_tail)) != JNI_OK) { _svmm_gfree_utf_chars (filename); goto end; } (*(class_loader_info->native_library_list_tail))->name = filename; (*(class_loader_info->native_library_list_tail))->handle = handle; class_loader_info->native_library_list_tail = &(*(class_loader_info->native_library_list_tail))->next; result = 1; end: if (monitor_acquired) { monitor_acquired = JNI_FALSE; if (_svmf_exit_object_monitor (env, *(vm->class_loading.boot_loader.classes.virtualmachine-> class_instance)) != JNI_OK) { goto end; } } } _svmf_stopping_java (env); return result; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getBootstrapLibraryPath ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getBootstrapLibraryPath * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_lang_Runtime_getBootstrapLibraryPath (JNIEnv *_env, jclass class) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jstring string; _svmf_resuming_java (env); { _svmt_JavaVM *vm = env->vm; const char *value = vm->class_loading.boot_loader.boot_library_path; /* as we do nothing else after, we can safely ignore the return value (any exception being also set in the environment) */ string = _svmf_get_jni_frame_native_local (env); _svmf_get_string (env, value, string); } _svmf_stopping_java (env); return string; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getSableVMVersion ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getSableVMVersion * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_lang_Runtime_getSableVMVersion (JNIEnv *_env, jclass class) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jstring string; _svmf_resuming_java (env); { /* as we do nothing else after, we can safely ignore the return value (any exception being also set in the environment) */ string = _svmf_get_jni_frame_native_local (env); _svmf_get_string (env, _SABLEVM_PACKAGE_VERSION, string); } _svmf_stopping_java (env); return string; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getFileSeparator ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getFileSeparator * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_lang_Runtime_getFileSeparator (JNIEnv *_env, jclass class) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jstring string; _svmf_resuming_java (env); { /* as we do nothing else after, we can safely ignore the return value (any exception being also set in the environment) */ string = _svmf_get_jni_frame_native_local (env); _svmf_get_string (env, "/", string); } _svmf_stopping_java (env); return string; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getPathSeparator ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getPathSeparator * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_lang_Runtime_getPathSeparator (JNIEnv *_env, jclass class) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jstring string; _svmf_resuming_java (env); { /* as we do nothing else after, we can safely ignore the return value (any exception being also set in the environment) */ string = _svmf_get_jni_frame_native_local (env); _svmf_get_string (env, ":", string); } _svmf_stopping_java (env); return string; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getLineSeparator ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getLineSeparator * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_lang_Runtime_getLineSeparator (JNIEnv *_env, jclass class) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jstring string; _svmf_resuming_java (env); { /* as we do nothing else after, we can safely ignore the return value (any exception being also set in the environment) */ string = _svmf_get_jni_frame_native_local (env); _svmf_get_string (env, "\n", string); } _svmf_stopping_java (env); return string; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getUserName ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getUserName * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_lang_Runtime_getUserName (JNIEnv *_env, jclass class) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jstring string; _svmf_resuming_java (env); { const char *value = getenv ("USER"); if (value == NULL) { value = ""; } /* as we do nothing else after, we can safely ignore the return value (any exception being also set in the environment) */ string = _svmf_get_jni_frame_native_local (env); _svmf_get_string (env, value, string); } _svmf_stopping_java (env); return string; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getUserHome ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getUserHome * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_lang_Runtime_getUserHome (JNIEnv *_env, jclass class) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jstring string; _svmf_resuming_java (env); { const char *value = getenv ("HOME"); if (value == NULL) { value = ""; } /* as we do nothing else after, we can safely ignore the return value (any exception being also set in the environment) */ string = _svmf_get_jni_frame_native_local (env); _svmf_get_string (env, value, string); } _svmf_stopping_java (env); return string; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getWorkDir ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getWorkDir * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_lang_Runtime_getWorkDir (JNIEnv *_env, jclass class) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jstring string; _svmf_resuming_java (env); { _svmt_JavaVM *vm = env->vm; const char *value = vm->boot_working_directory; if (value == NULL) { value = ""; } /* as we do nothing else after, we can safely ignore the return value (any exception being also set in the environment) */ string = _svmf_get_jni_frame_native_local (env); _svmf_get_string (env, value, string); } _svmf_stopping_java (env); return string; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getPropertyCount ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getPropertyCount * Signature: ()I */ JNIEXPORT jint JNICALL Java_java_lang_Runtime_getPropertyCount (JNIEnv *_env, jclass class) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jint count; _svmf_resuming_java (env); { _svmt_JavaVM *vm = env->vm; count = vm->class_loading.boot_loader.system_properties.count; } _svmf_stopping_java (env); return count; } /* ---------------------------------------------------------------------- Java_java_lang_Runtime_getProperty ---------------------------------------------------------------------- */ /* * Class: java_lang_Runtime * Method: getProperty * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_lang_Runtime_getProperty (JNIEnv *_env, jclass class, jint index) { _svmt_JNIEnv *env = _svmf_cast_svmt_JNIEnv (_env); jstring string; _svmf_resuming_java (env); { _svmt_JavaVM *vm = env->vm; /* as we do nothing else after, we can safely ignore the return value (any exception being also set in the environment) */ string = _svmf_get_jni_frame_native_local (env); _svmf_get_string (env, vm->class_loading.boot_loader.system_properties. properties[index], string); } _svmf_stopping_java (env); return string; }