[vmkit-commits] [vmkit] r69966 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaUpcalls.cpp JavaUpcalls.h Jnjvm.cpp Jnjvm.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri Apr 24 04:31:36 PDT 2009
Author: geoffray
Date: Fri Apr 24 06:30:54 2009
New Revision: 69966
URL: http://llvm.org/viewvc/llvm-project?rev=69966&view=rev
Log:
Factorize code for thread initialization.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=69966&r1=69965&r2=69966&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Fri Apr 24 06:30:54 2009
@@ -207,38 +207,43 @@
#endif
-void Classpath::createInitialThread(Jnjvm* vm, JavaObject* th) {
- JnjvmClassLoader* JCL = vm->bootstrapLoader;
- JCL->loadName(newVMThread->getName(), true, true);
- newVMThread->initialiseClass(vm);
+void Classpath::CreateJavaThread(Jnjvm* vm, JavaThread* myth,
+ const char* thName, JavaObject* Group) {
+ JavaObject* th = newThread->doNew(vm);
+ myth->javaThread = th;
JavaObject* vmth = newVMThread->doNew(vm);
- name->setObjectField(th, (JavaObject*)vm->asciizToStr("main"));
+
+ name->setObjectField(th, (JavaObject*)vm->asciizToStr(thName));
priority->setInt32Field(th, (uint32)1);
daemon->setInt8Field(th, (uint32)0);
vmThread->setObjectField(th, vmth);
assocThread->setObjectField(vmth, th);
running->setInt8Field(vmth, (uint32)1);
+ vmdataVMThread->setObjectField(vmth, (JavaObject*)myth);
- JCL->loadName(threadGroup->getName(), true, true);
- threadGroup->initialiseClass(vm);
- void* Stat = threadGroup->getStaticInstance();
- JavaObject* RG = rootGroup->getObjectField(Stat);
- group->setObjectField(th, RG);
- groupAddThread->invokeIntSpecial(vm, threadGroup, RG, th);
+ group->setObjectField(th, Group);
+ groupAddThread->invokeIntSpecial(vm, threadGroup, Group, th);
+
+ finaliseCreateInitialThread->invokeIntStatic(vm, inheritableThreadLocal, th);
}
-void Classpath::mapInitialThread(Jnjvm* vm) {
- JnjvmClassLoader* JCL = vm->bootstrapLoader;
- JCL->loadName(newThread->getName(), true, true);
+void Classpath::InitializeThreading(Jnjvm* vm) {
+ // Resolve and initialize classes first.
+ newThread->resolveClass();
newThread->initialiseClass(vm);
- JavaObject* th = newThread->doNew(vm);
- createInitialThread(vm, th);
- JavaThread* myth = JavaThread::get();
- myth->javaThread = th;
- JavaObject* vmth = vmThread->getObjectField(th);
- vmdataVMThread->setObjectField(vmth, (JavaObject*)myth);
- finaliseCreateInitialThread->invokeIntStatic(vm, inheritableThreadLocal, th);
+
+ newVMThread->resolveClass();
+ newVMThread->initialiseClass(vm);
+
+ threadGroup->resolveClass();
+ threadGroup->initialiseClass(vm);
+
+ // Create the main thread
+ void* Stat = threadGroup->getStaticInstance();
+ JavaObject* RG = rootGroup->getObjectField(Stat);
+ assert(vm->getBootstrapThread() && "VM did not set its bootstrap thread");
+ CreateJavaThread(vm, vm->getBootstrapThread(), "main", RG);
}
extern "C" JavaString* nativeInternString(JavaString* obj) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h?rev=69966&r1=69965&r2=69966&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h Fri Apr 24 06:30:54 2009
@@ -213,8 +213,6 @@
ISOLATE_STATIC JavaMethod* ErrorWithExcpExceptionInInitializerError;
ISOLATE_STATIC JavaMethod* ErrorWithExcpInvocationTargetException;
- ISOLATE_STATIC void createInitialThread(Jnjvm* vm, JavaObject* th);
- ISOLATE_STATIC void mapInitialThread(Jnjvm* vm);
ISOLATE_STATIC UserClassArray* ArrayOfByte;
@@ -241,6 +239,13 @@
ISOLATE_STATIC JavaField* methodClass;
ISOLATE_STATIC JavaField* fieldClass;
ISOLATE_STATIC JavaField* constructorClass;
+
+private:
+ ISOLATE_STATIC void CreateJavaThread(Jnjvm* vm, JavaThread* myth,
+ const char* name, JavaObject* Group);
+
+public:
+ ISOLATE_STATIC void InitializeThreading(Jnjvm* vm);
};
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=69966&r1=69965&r2=69966&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Fri Apr 24 06:30:54 2009
@@ -786,10 +786,6 @@
return appClassLoader;
}
-void Jnjvm::mapInitialThread() {
- upcalls->mapInitialThread(this);
-}
-
void Jnjvm::loadBootstrap() {
JnjvmClassLoader* loader = bootstrapLoader;
@@ -851,7 +847,7 @@
#endif
// The initialization code of the classes initialized below may require
// to get the Java thread, so we create the Java thread object first.
- mapInitialThread();
+ upcalls->InitializeThreading(this);
LOAD_CLASS(upcalls->newStackTraceElement);
LOAD_CLASS(upcalls->newVMThrowable);
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=69966&r1=69965&r2=69966&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Fri Apr 24 06:30:54 2009
@@ -137,11 +137,6 @@
///
JnjvmClassLoader* loadAppClassLoader();
- /// mapInitialThread - Maps the initial native thread to a java/lang/Thread
- /// object.
- ///
- void mapInitialThread();
-
/// loadBootstrap - Bootstraps the JVM, getting the class loader, initializing
/// bootstrap classes (e.g. java/lang/Class, java/lang/*Exception) and
/// mapping the initial thread.
@@ -307,6 +302,10 @@
/// setBootstrapThread - Set the bootstrap thread of this VM.
///
void setBootstrapThread(JavaThread* th) { bootstrapThread = th; }
+
+ /// getBootstrapThread - Get the bootstrap thread of this VM.
+ ///
+ JavaThread* getBootstrapThread() const { return bootstrapThread; }
/// ~Jnjvm - Destroy the JVM.
///
More information about the vmkit-commits
mailing list