[vmkit-commits] [vmkit] r61504 - in /vmkit/trunk: include/mvm/Threads/Thread.h lib/JnJVM/LLVMRuntime/runtime-default.ll lib/JnJVM/LLVMRuntime/runtime-single.ll lib/JnJVM/VMCore/JavaJIT.cpp lib/JnJVM/VMCore/JavaThread.cpp lib/JnJVM/VMCore/JavaThread.h lib/JnJVM/VMCore/JnjvmModule.cpp lib/JnJVM/VMCore/JnjvmModule.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Dec 30 14:00:26 PST 2008


Author: geoffray
Date: Tue Dec 30 15:59:50 2008
New Revision: 61504

URL: http://llvm.org/viewvc/llvm-project?rev=61504&view=rev
Log:
Use a JavaThread type to fetch the jni environment for native methods.


Modified:
    vmkit/trunk/include/mvm/Threads/Thread.h
    vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
    vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h

Modified: vmkit/trunk/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Thread.h?rev=61504&r1=61503&r2=61504&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Threads/Thread.h (original)
+++ vmkit/trunk/include/mvm/Threads/Thread.h Tue Dec 30 15:59:50 2008
@@ -122,10 +122,8 @@
  
 public:
 
-#ifdef ISOLATE
   /// IsolateID - The Isolate ID of the thread's VM.
   size_t IsolateID;
-#endif
 
   /// MyVM - The VM attached to this Thread.
   VirtualMachine* MyVM;

Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll?rev=61504&r1=61503&r2=61504&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Tue Dec 30 15:59:50 2008
@@ -33,6 +33,19 @@
 ;;; Field 2: The static instance
 %TaskClassMirror = type { i32, i8* }
 
+;;; Field 0: the VT of threads
+;;; Field 1: next
+;;; Field 2: prev
+;;; Field 3: IsolateID
+;;; Field 4: MyVM
+;;; Field 5: baseSP
+;;; Field 6: internalThreadID
+;;; field 7: routine
+;;; field 8: jnienv
+%JavaThread = type { %VT*, %JavaThread*, %JavaThread*, i8*, i8*, i8*, i8*, i8*,
+                     i8* }
+
+
 %Attribut = type { %UTF8*, i32, i32 }
 
 %UTF8 = type { %JavaObject, i8*, [0 x i16] }

Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll?rev=61504&r1=61503&r2=61504&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll Tue Dec 30 15:59:50 2008
@@ -11,4 +11,3 @@
                     %JavaMethod*, i16, i8*, %ArrayUInt8*, i8*, %Attribut*, 
                     i16, %JavaClass**, i16, %JavaClass*, i16, i8, i32, i32, i8*,
                     void (i8*)* }
-

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=61504&r1=61503&r2=61504&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Tue Dec 30 15:59:50 2008
@@ -230,10 +230,23 @@
   uint32 nargs = func->arg_size() + 1 + (stat ? 1 : 0); 
   std::vector<Value*> nativeArgs;
   
-  int64_t jniEnv = (int64_t)&(JavaThread::get()->getJVM()->jniEnv);
-  nativeArgs.push_back(
-    ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty, jniEnv), 
-                              module->ptrType));
+  Value* threadId = CallInst::Create(module->llvm_frameaddress,
+                                     module->constantZero, "", currentBlock);
+  threadId = new PtrToIntInst(threadId, module->pointerSizeType, "",
+                              currentBlock);
+  threadId = BinaryOperator::CreateAnd(threadId, module->constantThreadIDMask,
+                                       "", currentBlock);
+  threadId = new IntToPtrInst(threadId, module->JavaThreadType, "", currentBlock);
+
+
+  Value* geps[2] = { module->constantZero, module->constantEight };
+
+  Value* jniEnv = GetElementPtrInst::Create(threadId, geps, geps + 2, "",
+                                            currentBlock);
+ 
+  jniEnv = new BitCastInst(jniEnv, module->ptrType, "", currentBlock);
+
+  nativeArgs.push_back(jniEnv);
 
   uint32 index = 0;
   if (stat) {

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp?rev=61504&r1=61503&r2=61504&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp Tue Dec 30 15:59:50 2008
@@ -31,6 +31,7 @@
   interruptFlag = 0;
   state = StateRunning;
   pendingException = 0;
+  jniEnv = isolate->jniEnv;
 #ifdef SERVICE
   eipIndex = 0;
   replacedEIPs = new void*[100];

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h?rev=61504&r1=61503&r2=61504&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Tue Dec 30 15:59:50 2008
@@ -69,6 +69,10 @@
   ///
   static VirtualTable *VT;
 
+  /// jniEnv - The JNI environment of the thread.
+  ///
+  void* jniEnv;
+
   /// javaThread - The Java representation of this thread.
   ///
   JavaObject* javaThread;

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61504&r1=61503&r2=61504&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Tue Dec 30 15:59:50 2008
@@ -60,6 +60,7 @@
 const llvm::Type* JnjvmModule::JavaFieldType = 0;
 const llvm::Type* JnjvmModule::JavaMethodType = 0;
 const llvm::Type* JnjvmModule::AttributType = 0;
+const llvm::Type* JnjvmModule::JavaThreadType = 0;
 
 #ifdef ISOLATE_SHARING
 const llvm::Type* JnjvmModule::JnjvmType = 0;
@@ -1758,6 +1759,8 @@
     PointerType::getUnqual(module->getTypeByName("UTF8"));
   AttributType =
     PointerType::getUnqual(module->getTypeByName("Attribut"));
+  JavaThreadType =
+    PointerType::getUnqual(module->getTypeByName("JavaThread"));
 
 #ifdef WITH_TRACER
   MarkAndTraceType = module->getFunction("MarkAndTrace")->getFunctionType();

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=61504&r1=61503&r2=61504&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Tue Dec 30 15:59:50 2008
@@ -268,6 +268,7 @@
   static const llvm::Type* JavaMethodType;
   static const llvm::Type* JavaFieldType;
   static const llvm::Type* AttributType;
+  static const llvm::Type* JavaThreadType;
   
 #ifdef ISOLATE_SHARING
   static const llvm::Type* JnjvmType;





More information about the vmkit-commits mailing list