[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