/* * Allocate the thread library function table and return it's pointer */ HY_CFUNC THREXPORT I_32 VMCALL hythread_allocate_library (struct HyThreadLibraryVersion *expectedVersion, struct HyThreadLibrary **threadLibraryFuncs) { UDATA size = hythread_getSize (expectedVersion); HyThreadLibrary *threadLib; if (0 == size) { return -1; } hythread_lib_create(&TM_LIBRARY); /* Allocate memory for the function table */ *threadLibraryFuncs = NULL; threadLib = (HyThreadLibrary*) apr_palloc(TM_POOL, sizeof(HyThreadLibrary)); if (NULL == threadLib) { return -1; } /* Null and initialize the table passed in */ memset(threadLib, 0, size); memcpy(threadLib, &MasterThreadLibraryTable, size); /* Set version numbers */ threadLib->threadVersion.majorVersionNumber = expectedVersion->majorVersionNumber; threadLib->threadVersion.minorVersionNumber = expectedVersion->minorVersionNumber; threadLib->threadVersion.capabilities = HYTHREAD_CAPABILITY_MASK; threadLib->self_handle = threadLib; *threadLibraryFuncs = threadLib; return 0; }
Global_Env::Global_Env(apr_pool_t * pool, size_t string_pool_size): mem_pool(pool), bootstrap_class_loader(NULL), system_class_loader(NULL), TI(NULL), nsoTable(NULL), portLib(NULL), dcList(NULL), assert_reg(NULL), string_pool(string_pool_size), total_loaded_class_count(0), unloaded_class_count(0), total_compilation_time(0), bootstrapping(false), ready_for_exceptions(false) { // TODO: Use proper MM. m_java_properties = new Properties(); m_vm_properties = new Properties(); bootstrap_class_loader = new BootstrapClassLoader(this); hythread_lib_create(&hythread_lib); #if defined _IPF_ || defined _EM64T_ compact_fields = true; sort_fields = true; #else // !_IPF_ compact_fields = false; sort_fields = false; #endif // !IPF_ heap_base = heap_end = managed_null = NULL; JavaLangString_String = string_pool.lookup("java/lang/String"); JavaLangStringBuffer_String = string_pool.lookup("java/lang/StringBuffer"); JavaLangObject_String = string_pool.lookup("java/lang/Object"); JavaLangClass_String = string_pool.lookup("java/lang/Class"); VoidVoidDescriptor_String = string_pool.lookup("()V"); VoidBooleanDescriptor_String = string_pool.lookup("()Z"); VoidIntegerDescriptor_String = string_pool.lookup("()I"); JavaLangThrowable_String = string_pool.lookup("java/lang/Throwable"); JavaLangNoClassDefFoundError_String = string_pool.lookup("java/lang/NoClassDefFoundError"); JavaLangArrayIndexOutOfBoundsException_String = string_pool.lookup("java/lang/ArrayIndexOutOfBoundsException"); JavaNioByteBuffer_String = string_pool.lookup("java/nio/ByteBuffer"); JavaLangIllegalArgumentException_String = string_pool.lookup("java/lang/IllegalArgumentException"); JavaLangReflectField_String = string_pool.lookup("java/lang/reflect/Field"); JavaLangReflectConstructor_String = string_pool.lookup("java/lang/reflect/Constructor"); JavaLangReflectMethod_String = string_pool.lookup("java/lang/reflect/Method"); JavaLangUnsatisfiedLinkError_String = string_pool.lookup("java/lang/UnsatisfiedLinkError"); JavaLangNullPointerException_String = string_pool.lookup("java/lang/NullPointerException"); Init_String = string_pool.lookup("<init>"); Clinit_String = string_pool.lookup("<clinit>"); FinalizeName_String = string_pool.lookup("finalize"); EnqueueName_String = string_pool.lookup("enqueue"); Clonable_String = string_pool.lookup("java/lang/Cloneable"); Serializable_String = string_pool.lookup("java/io/Serializable"); Detach_String = string_pool.lookup("detach"); DetachDescriptor_String = string_pool.lookup("(Ljava/lang/Throwable;)V"); GetUncaughtExceptionHandler_String = string_pool.lookup("getUncaughtExceptionHandler"); GetUncaughtExceptionHandlerDescriptor_String = string_pool.lookup("()Ljava/lang/Thread$UncaughtExceptionHandler;"); UncaughtException_String = string_pool.lookup("uncaughtException"); UncaughtExceptionDescriptor_String = string_pool.lookup("(Ljava/lang/Thread;Ljava/lang/Throwable;)V"); GetDefaultUncaughtExceptionHandler_String = string_pool.lookup("getDefaultUncaughtExceptionHandler"); GetDefaultUncaughtExceptionHandlerDescriptor_String = string_pool.lookup("()Ljava/lang/Thread$UncaughtExceptionHandler;"); GetName_String = string_pool.lookup("getName"); GetNameDescriptor_String = string_pool.lookup("()Ljava/lang/String;"); Remove_String = string_pool.lookup("remove"); RemoveDescriptor_String = string_pool.lookup("(Ljava/lang/Thread;)V"); LLRemove_String = string_pool.lookup("remove"); LLRemoveDescriptor_String = string_pool.lookup("(Ljava/lang/Object;)Z"); Length_String = string_pool.lookup("length"); LoadClass_String = string_pool.lookup("loadClass"); InitCause_String = string_pool.lookup("initCause"); FromStringConstructorDescriptor_String = string_pool.lookup("(Ljava/lang/String;)V"); LoadClassDescriptor_String = string_pool.lookup("(Ljava/lang/String;)Ljava/lang/Class;"); InitCauseDescriptor_String = string_pool.lookup("(Ljava/lang/Throwable;)Ljava/lang/Throwable;"); // // globals // // HT support from command line disabled. VM should automatically detect HT status at startup. is_hyperthreading_enabled = false; use_lil_stubs = true; #ifdef REFS_USE_RUNTIME_SWITCH #ifdef POINTER64 compress_references = true; #else // POINTER64 compress_references = false; #endif // POINTER64 #endif // REFS_USE_RUNTIME_SWITCH strings_are_compressed = false; // page size detection use_large_pages = false; size_t *ps = port_vmem_page_sizes(); if (ps[1] != 0 && use_large_pages) { system_page_size = ps[1]; } else { system_page_size = ps[0]; } verify_all = false; verify_strict = false; verify = true; pin_interned_strings = false; retain_invisible_annotations = false; // initialize critical sections p_jit_a_method_lock = new Lock_Manager(); p_vtable_patch_lock = new Lock_Manager(); p_handle_lock = new Lock_Manager(); p_method_call_lock = new Lock_Manager(); p_dclist_lock = new Lock_Manager(); p_suspend_lock = new Lock_Manager(); // // preloaded classes // Boolean_Class = NULL; Char_Class = NULL; Float_Class = NULL; Double_Class = NULL; Byte_Class = NULL; Short_Class = NULL; Int_Class = NULL; Long_Class = NULL; ArrayOfBoolean_Class = NULL; ArrayOfChar_Class = NULL; ArrayOfFloat_Class = NULL; ArrayOfDouble_Class = NULL; ArrayOfByte_Class = NULL; ArrayOfShort_Class = NULL; ArrayOfInt_Class = NULL; ArrayOfLong_Class = NULL; JavaLangObject_Class = NULL; JavaLangString_Class = NULL; JavaLangClass_Class = NULL; java_lang_Throwable_Class = NULL; java_lang_Error_Class = NULL; java_lang_ExceptionInInitializerError_Class = NULL; java_lang_NullPointerException_Class = NULL; java_lang_StackOverflowError_Class = NULL; java_lang_ArrayIndexOutOfBoundsException_Class = NULL; java_lang_ArrayStoreException_Class = NULL; java_lang_ArithmeticException_Class = NULL; java_lang_ClassCastException_Class = NULL; java_lang_OutOfMemoryError_Class = NULL; java_lang_InternalError_Class = NULL; java_lang_ThreadDeath_Class = NULL; java_lang_OutOfMemoryError = NULL; popFrameException = NULL; java_lang_FinalizerThread_Class = NULL; java_io_Serializable_Class = NULL; java_lang_Cloneable_Class = NULL; java_lang_Thread_Class = NULL; java_lang_ThreadGroup_Class = NULL; java_lang_reflect_Constructor_Class = NULL; java_lang_reflect_Field_Class = NULL; java_lang_reflect_Method_Class = NULL; JavaLangString_VTable = NULL; java_security_ProtectionDomain_Class = NULL; Class_domain_field_offset = 0; vm_class_offset = 0; vm_state = VM_INITIALIZING; TI = new DebugUtilsTI; NCAI = new GlobalNCAI; nsoTable = nso_init_lookup_table(&string_pool); } //Global_Env::Global_Env
void hythread_library_init(void) { hythread_lib_create(&TM_LIBRARY); }
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpres) { if (dwReason == DLL_PROCESS_ATTACH) { hythread_lib_create(&TM_LIBRARY); } return TRUE; }