Esempio n. 1
0
/*
 * 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;
}
Esempio n. 2
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
Esempio n. 3
0
void hythread_library_init(void) {
    hythread_lib_create(&TM_LIBRARY);
}
Esempio n. 4
0
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpres) {
  if (dwReason == DLL_PROCESS_ATTACH) {
     hythread_lib_create(&TM_LIBRARY);
   }
   return TRUE;
}