You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by wj...@apache.org on 2006/11/09 05:52:17 UTC
svn commit: r472771 [6/11] - in /incubator/harmony/enhanced/drlvm/trunk/vm:
gc_cc/src/ gcv4/src/ include/ include/open/ interpreter/src/
jitrino/src/jet/ jitrino/src/vm/drl/ port/src/lil/ia32/pim/
port/src/lil/pim/ vmcore/include/ vmcore/src/class_supp...
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp?view=diff&rev=472771&r1=472770&r2=472771
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp Wed Nov 8 20:52:12 2006
@@ -51,8 +51,17 @@
// TODO: Use proper MM.
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");
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Initialize.cpp
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Initialize.cpp?view=diff&rev=472771&r1=472770&r2=472771
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Initialize.cpp (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Initialize.cpp Wed Nov 8 20:52:12 2006
@@ -24,9 +24,9 @@
#include "Class.h"
#include "open/jthread.h"
+#include "open/gc.h"
#include "exceptions.h"
#include "thread_manager.h"
-#include "Verifier_stub.h"
#include "vm_strings.h"
#include "classloader.h"
#include "ini.h"
@@ -34,7 +34,7 @@
// Initializes a class.
-static void class_initialize1(Class *clss)
+void Class::initialize()
{
ASSERT_RAISE_AREA;
assert(!exn_raised());
@@ -44,74 +44,68 @@
// described in page 226, section 12.4.2 of Java Language Spec, 1996
// ISBN 0-201-63451-1
- TRACE2("class.init", "initializing class " << clss->name->bytes);
+ TRACE2("class.init", "initializing class " << m_name->bytes);
// --- step 1 ----------------------------------------------------------
assert(!hythread_is_suspend_enabled());
- jobject jlc = struct_Class_to_java_lang_Class_Handle(clss);
+ jobject jlc = struct_Class_to_java_lang_Class_Handle(this);
jthread_monitor_enter(jlc);
// --- step 2 ----------------------------------------------------------
- TRACE2("class.init", "initializing class " << clss->name->bytes << " STEP 2" );
+ TRACE2("class.init", "initializing class " << m_name->bytes << " STEP 2" );
- while(((VM_thread *)(clss->p_initializing_thread) != p_TLS_vmthread) &&
- (clss->state == ST_Initializing) ) {
- // thread_object_wait had been expecting the only unsafe reference
- // to be its parameter, so enable_gc() should be safe here -salikh
+ while(m_initializing_thread != p_TLS_vmthread && is_initializing()) {
jthread_monitor_wait(jlc);
- if (exn_raised()) {
- jthread_monitor_exit(jlc);
+ if(exn_raised()) {
+ jthread_monitor_exit(jlc);
return;
}
}
// --- step 3 ----------------------------------------------------------
-
- if ( (VM_thread *)(clss->p_initializing_thread) == p_TLS_vmthread) {
+ if(m_initializing_thread == p_TLS_vmthread) {
jthread_monitor_exit(jlc);
return;
}
// --- step 4 ----------------------------------------------------------
-
- if (clss->state == ST_Initialized) {
+ if(is_initialized()) {
jthread_monitor_exit(jlc);
return;
}
// --- step 5 ----------------------------------------------------------
-
- if (clss->state == ST_Error) {
+ if(in_error()) {
jthread_monitor_exit(jlc);
tmn_suspend_enable();
- exn_raise_by_name("java/lang/NoClassDefFoundError", clss->name->bytes);
+ exn_raise_by_name("java/lang/NoClassDefFoundError", m_name->bytes);
tmn_suspend_disable();
return;
}
// --- step 6 ----------------------------------------------------------
- TRACE2("class.init", "initializing class " << clss->name->bytes << "STEP 6" );
+ TRACE2("class.init", "initializing class " << m_name->bytes << "STEP 6" );
- assert(clss->state == ST_Prepared);
- clss->state = ST_Initializing;
- assert(clss->p_initializing_thread == 0);
- clss->p_initializing_thread = (void *)p_TLS_vmthread;
+ assert(m_state == ST_ConstraintsVerified);
+ m_state = ST_Initializing;
+ assert(m_initializing_thread == 0);
+ m_initializing_thread = p_TLS_vmthread;
jthread_monitor_exit(jlc);
// --- step 7 ------------------------------------------------------------
- if (clss->super_class) {
- class_initialize_ex(clss->super_class);
+ if(has_super_class()) {
+ class_initialize_ex(get_super_class());
- if (clss->super_class->state == ST_Error) {
+ if(get_super_class()->in_error()) {
jthread_monitor_enter(jlc);
tmn_suspend_enable();
- REPORT_FAILED_CLASS_CLASS_EXN(clss->class_loader, clss,
- class_get_error_cause(clss->super_class));
+ REPORT_FAILED_CLASS_CLASS_EXN(m_class_loader, this,
+ get_super_class()->get_error_cause());
tmn_suspend_disable();
- clss->p_initializing_thread = 0;
- clss->state = ST_Error;
+ m_initializing_thread = NULL;
+ m_state = ST_Error;
assert(!hythread_is_suspend_enabled());
jthread_monitor_notify_all(jlc);
jthread_monitor_exit(jlc);
@@ -119,63 +113,21 @@
}
}
- // --- step pre-8 ------------------------------------------------------
- // This is an extra step needed to initialize static final fields
-
- unsigned n_fields = clss->n_fields;
-
- for (unsigned i = 0; i < n_fields; i++) {
- Field *f = &clss->fields[i];
- if (f->is_static() && f->get_const_value_index()) {
- void *addr = f->get_address();
- Const_Java_Value cv = f->get_const_value();
- switch (f->get_java_type()) {
- case JAVA_TYPE_BYTE:
- case JAVA_TYPE_BOOLEAN:
- *(int8 *)addr = (int8)cv.i;
- break;
- case JAVA_TYPE_CHAR:
- case JAVA_TYPE_SHORT:
- *(int16 *)addr = (int16)cv.i;
- break;
- case JAVA_TYPE_INT:
- *(int32 *)addr = cv.i;
- break;
- case JAVA_TYPE_LONG:
- *(int64 *)addr = cv.j;
- break;
- case JAVA_TYPE_FLOAT:
- *(float *)addr = cv.f;
- break;
- case JAVA_TYPE_DOUBLE:
- *(double *)addr = cv.d;
- break;
- default:
- assert(!strcmp("Ljava/lang/String;", f->get_descriptor()->bytes));
- String *str = cv.string;
- Java_java_lang_String *jls = string_create_from_utf8(str->bytes, str->len);
- assert(jls != NULL);
- STORE_GLOBAL_REFERENCE((COMPRESSED_REFERENCE *)addr, jls);
- break;
- }
- }
- }
-
// --- step 8 ----------------------------------------------------------
- Method *meth = clss->static_initializer;
- if (meth == NULL) {
+ Method* meth = m_static_initializer;
+ if(meth == NULL) {
jthread_monitor_enter(jlc);
- clss->state = ST_Initialized;
- TRACE2("classloader", "class " << clss->name->bytes << " initialized");
- clss->p_initializing_thread = 0;
+ m_state = ST_Initialized;
+ TRACE2("classloader", "class " << m_name->bytes << " initialized");
+ m_initializing_thread = NULL;
assert(!hythread_is_suspend_enabled());
jthread_monitor_notify_all(jlc);
jthread_monitor_exit(jlc);
return;
}
- TRACE2("class.init", "initializing class " << clss->name->bytes << " STEP 8" );
+ TRACE2("class.init", "initializing class " << m_name->bytes << " STEP 8" );
jthrowable p_error_object;
assert(!hythread_is_suspend_enabled());
@@ -183,14 +135,14 @@
p_error_object = exn_get();
// --- step 9 ----------------------------------------------------------
- TRACE2("class.init", "initializing class " << clss->name->bytes << " STEP 9" );
+ TRACE2("class.init", "initializing class " << m_name->bytes << " STEP 9" );
if(!p_error_object) {
jthread_monitor_enter(jlc);
- clss->state = ST_Initialized;
- TRACE2("classloader", "class " << clss->name->bytes << " initialized");
- clss->p_initializing_thread = 0;
- assert(clss->p_error == 0);
+ m_state = ST_Initialized;
+ TRACE2("classloader", "class " << m_name->bytes << " initialized");
+ m_initializing_thread = NULL;
+ assert(m_error == NULL);
assert(!hythread_is_suspend_enabled());
jthread_monitor_notify_all(jlc);
jthread_monitor_exit(jlc);
@@ -202,10 +154,10 @@
if(p_error_object) {
assert(!hythread_is_suspend_enabled());
exn_clear();
- Class *p_error_class = p_error_object->object->vt()->clss;
- Class *jle = VM_Global_State::loader_env->java_lang_Error_Class;
+ Class* p_error_class = p_error_object->object->vt()->clss;
+ Class* jle = VM_Global_State::loader_env->java_lang_Error_Class;
while(p_error_class && p_error_class != jle) {
- p_error_class = p_error_class->super_class;
+ p_error_class = p_error_class->get_super_class();
}
assert(!hythread_is_suspend_enabled());
if((!p_error_class) || (p_error_class != jle) ) {
@@ -220,15 +172,14 @@
tmn_suspend_disable();
}
tmn_suspend_enable();
- class_set_error_cause(clss, p_error_object);
- //REPORT_FAILED_CLASS_CLASS_EXN(clss->class_loader, clss, p_error_object);
+ set_error_cause(p_error_object);
tmn_suspend_disable();
// --- step 11 ----------------------------------------------------------
assert(!hythread_is_suspend_enabled());
jthread_monitor_enter(jlc);
- clss->state = ST_Error;
- clss->p_initializing_thread = 0;
+ m_state = ST_Error;
+ m_initializing_thread = NULL;
assert(!hythread_is_suspend_enabled());
jthread_monitor_notify_all(jlc);
jthread_monitor_exit(jlc);
@@ -238,21 +189,16 @@
} //class_initialize1
-// Alexei
-// migrating to C interfaces
-#if (defined __cplusplus) && (defined PLATFORM_POSIX)
-extern "C" {
-#endif
void class_initialize_from_jni(Class *clss)
{
ASSERT_RAISE_AREA;
assert(hythread_is_suspend_enabled());
// check verifier constraints
- if(!class_verify_constraints(VM_Global_State::loader_env, clss)) {
+ if(!clss->verify_constraints(VM_Global_State::loader_env)) {
if (!exn_raised()) {
tmn_suspend_disable();
- exn_raise_object(class_get_error(clss->class_loader, clss->name->bytes));
+ exn_raise_object(class_get_error(clss->get_class_loader(), clss->get_name()->bytes));
tmn_suspend_enable();
}
return;
@@ -260,15 +206,12 @@
tmn_suspend_disable();
if (class_needs_initialization(clss)) {
- class_initialize1(clss);
+ clss->initialize();
}
tmn_suspend_enable();
} // class_initialize_from_jni
-#if (defined __cplusplus) && (defined PLATFORM_POSIX)
-}
-#endif
-// VMEXPORT
+
void class_initialize(Class *clss)
{
ASSERT_RAISE_AREA;
@@ -282,16 +225,16 @@
// check verifier constraints
tmn_suspend_enable();
- if(!class_verify_constraints(VM_Global_State::loader_env, clss)) {
+ if(!clss->verify_constraints(VM_Global_State::loader_env)) {
if (!exn_raised()) {
tmn_suspend_disable();
- exn_raise_object(class_get_error(clss->class_loader, clss->name->bytes));
+ exn_raise_object(class_get_error(clss->get_class_loader(), clss->get_name()->bytes));
}
return;
}
tmn_suspend_disable();
- if ( class_needs_initialization(clss)) {
- class_initialize1(clss);
+ if(class_needs_initialization(clss)) {
+ clss->initialize();
}
-} //class_initialize
+} // class_initialize_ex