Index: working_vm/vm/vmcore/src/jit/jit_runtime_support.cpp =================================================================== --- working_vm/vm/vmcore/src/jit/jit_runtime_support.cpp (revision 618248) +++ working_vm/vm/vmcore/src/jit/jit_runtime_support.cpp (working copy) @@ -2170,9 +2170,9 @@ ASSERT_THROW_AREA; Global_Env* env = VM_Global_State::loader_env; - if (obj == NULL) { + if (obj == (ManagedObject*)VM_Global_State::loader_env->managed_null) { exn_throw_by_class(env->java_lang_NullPointerException_Class); - return NULL; + return obj; } Method* m = NULL; @@ -2222,9 +2222,9 @@ ASSERT_THROW_AREA; Global_Env* env = VM_Global_State::loader_env; - if (obj == NULL) { + if (obj == (ManagedObject*)VM_Global_State::loader_env->managed_null) { exn_throw_by_class(env->java_lang_NullPointerException_Class); - return NULL; + return obj; } Method* m = NULL; @@ -2356,7 +2356,7 @@ ///OPCODE_CHECKCAST static void *rth_checkcast_withresolve(Class_Handle klass, unsigned cp_idx, ManagedObject* obj) { - if (obj==NULL) { + if (obj == (ManagedObject*)VM_Global_State::loader_env->managed_null) { return obj; } Index: working_vm/vm/vmcore/src/class_support/Resolve.cpp =================================================================== --- working_vm/vm/vmcore/src/class_support/Resolve.cpp (revision 618248) +++ working_vm/vm/vmcore/src/class_support/Resolve.cpp (working copy) @@ -969,6 +969,7 @@ } //resolve_class Boolean class_is_cp_entry_resolved(Compile_Handle ch, Class_Handle clazz, unsigned cp_index) { +#if 0 ConstantPool& cp = clazz->get_constant_pool(); Boolean res = cp.is_entry_resolved(cp_index); if (!res) { @@ -1003,6 +1004,8 @@ } } return res; +#endif + return false; } Index: working_vm/vm/vmcore/src/init/vm_init.cpp =================================================================== --- working_vm/vm/vmcore/src/init/vm_init.cpp (revision 618248) +++ working_vm/vm/vmcore/src/init/vm_init.cpp (working copy) @@ -462,6 +462,15 @@ vm_env->java_lang_ThreadDeath_Class = preload_class(vm_env, "java/lang/ThreadDeath"); + // String must be initialized before strings from intern pool are + // used. But for initializing l.j.String we need to have exception + // classes loaded, because the first call to compilations + // initializes all of the JIT helpers that hardcode class handles + // inside of the helpers. + hythread_suspend_disable(); + class_initialize(vm_env->JavaLangString_Class); + hythread_suspend_enable(); + vm_env->java_lang_Cloneable_Class = preload_class(vm_env, vm_env->Clonable_String); vm_env->java_lang_Thread_Class = @@ -866,10 +875,9 @@ // Precompile InternalError. class_alloc_new_object_and_run_default_constructor(vm_env->java_lang_InternalError_Class); - //String must be initialized before strings from intern pool are used - class_initialize(vm_env->JavaLangString_Class); - - + // j.l.Class needs to be initialized for loading magics helper + // class + class_initialize(vm_env->JavaLangClass_Class); hythread_suspend_enable(); Method * m;