[vmkit-commits] [vmkit] r180346 - Fixed a bug in precompiler that caused segmentation fault in 64 bits.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:01:27 PDT 2013


Author: peter.senna
Date: Thu Apr 25 11:59:57 2013
New Revision: 180346

URL: http://llvm.org/viewvc/llvm-project?rev=180346&view=rev
Log:
Fixed a bug in precompiler that caused segmentation fault in 64 bits.
(cherry picked from commit dd29cbfbff6e1d8d00fb4e345d2ddb976932ad95)

Modified:
    vmkit/trunk/include/vmkit/JIT.h
    vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
    vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp
    vmkit/trunk/lib/vmkit/Compiler/JIT.cpp

Modified: vmkit/trunk/include/vmkit/JIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/JIT.h?rev=180346&r1=180345&r2=180346&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/JIT.h (original)
+++ vmkit/trunk/include/vmkit/JIT.h Thu Apr 25 11:59:57 2013
@@ -166,6 +166,7 @@ public:
   llvm::PointerType* ptrPtrType;
   llvm::Type* arrayPtrType;
   llvm::Type* pointerSizeType;
+  llvm::Type* UTF8SizeType;
 };
 
 

Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180346&r1=180345&r2=180346&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 11:59:57 2013
@@ -1477,7 +1477,7 @@ Constant* JavaAOTCompiler::CreateConstan
 Constant* JavaAOTCompiler::CreateConstantFromUTF8(const UTF8* val) {
   std::vector<Type*> Elemts;
   ArrayType* ATy = ArrayType::get(Type::getInt16Ty(getLLVMContext()), val->size);
-  Elemts.push_back(JavaIntrinsics.pointerSizeType);
+  Elemts.push_back(JavaIntrinsics.UTF8SizeType);
 
   Elemts.push_back(ATy);
 
@@ -1485,7 +1485,7 @@ Constant* JavaAOTCompiler::CreateConstan
                                           Elemts);
 
   std::vector<Constant*> Cts;
-  Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, val->size));
+  Cts.push_back(ConstantInt::get(JavaIntrinsics.UTF8SizeType, val->size));
 
   ArrayRef<uint16_t> Vals(val->elements, val->size);
   Cts.push_back(ConstantDataArray::get(getLLVMContext(), Vals));

Modified: vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp?rev=180346&r1=180345&r2=180346&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp Thu Apr 25 11:59:57 2013
@@ -508,10 +508,10 @@ JavaField* JavaConstantPool::lookupField
       // don't throw if no field, the exception will be thrown just in time  
       if (field) {
         if (!stat) {
-          ctpRes[index] = (void*)field->ptrOffset;
+          ctpRes[index] = (void*)(uintptr_t)field->ptrOffset;
         } else if (lookup->isReady()) {
           void* S = field->classDef->getStaticInstance();
-          ctpRes[index] = (void*)((uint64)S + field->ptrOffset);
+          ctpRes[index] = (void*)(uintptr_t)((uint64)S + field->ptrOffset);
         }
       }
       return field;

Modified: vmkit/trunk/lib/vmkit/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/JIT.cpp?rev=180346&r1=180345&r2=180346&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/vmkit/Compiler/JIT.cpp Thu Apr 25 11:59:57 2013
@@ -268,6 +268,8 @@ void BaseIntrinsics::init(llvm::Module*
   pointerSizeType = module->getPointerSize() == Module::Pointer32 ?
     Type::getInt32Ty(Context) : Type::getInt64Ty(Context);
 
+  UTF8SizeType = Type::getInt32Ty(Context);
+
   // Constant declaration
   constantLongMinusOne = ConstantInt::get(Type::getInt64Ty(Context), (uint64_t)-1);
   constantLongZero = ConstantInt::get(Type::getInt64Ty(Context), 0);





More information about the vmkit-commits mailing list