[vmkit-commits] [vmkit] r199566 - Define my first class in the AppClassLoader.

Gael Thomas gael.thomas at lip6.fr
Sat Jan 18 15:28:55 PST 2014


Author: gthomas
Date: Sat Jan 18 17:28:54 2014
New Revision: 199566

URL: http://llvm.org/viewvc/llvm-project?rev=199566&view=rev
Log:
Define my first class in the AppClassLoader.

Modified:
    vmkit/branches/mcjit/include/j3/j3.h
    vmkit/branches/mcjit/include/j3/j3class.h
    vmkit/branches/mcjit/include/j3/j3classloader.h
    vmkit/branches/mcjit/include/j3/j3meta.def
    vmkit/branches/mcjit/include/j3/j3reader.h
    vmkit/branches/mcjit/include/j3/j3thread.h
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3class.cc
    vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
    vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
    vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc
    vmkit/branches/mcjit/lib/vmkit/thread.cc

Modified: vmkit/branches/mcjit/include/j3/j3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3.h?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3.h (original)
+++ vmkit/branches/mcjit/include/j3/j3.h Sat Jan 18 17:28:54 2014
@@ -85,8 +85,8 @@ namespace j3 {
 		J3Method*        classClassInit;
 		J3Field*         classClassVMData;
 
-		J3Class*         classClassLoader;
-		J3Field*         classClassLoaderVMData;
+		J3Class*         classLoaderClass;
+		J3Field*         classLoaderClassVMData;
 
 		J3Class*         threadClass;
 		J3Field*         threadClassVMData;

Modified: vmkit/branches/mcjit/include/j3/j3class.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3class.h?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3class.h (original)
+++ vmkit/branches/mcjit/include/j3/j3class.h Sat Jan 18 17:28:54 2014
@@ -63,7 +63,7 @@ namespace j3 {
 	public:
 		J3Type(J3ClassLoader* loader, const vmkit::Name* name);
 
-		J3ObjectHandle*             javaClass(bool doPush=1);
+		J3ObjectHandle*             javaClass(bool doPush=1, J3ObjectHandle* protectionDomain=0);
 
 		virtual uint32_t            logSize() = 0;
 		uint64_t                    getSizeInBits();
@@ -206,6 +206,9 @@ namespace j3 {
 		/* GC Object */
 		J3ObjectHandle*    _staticInstance;
 
+		J3ObjectHandle*    _protectionDomain;
+		const char*        _source;
+
 		J3Attributes* readAttributes(J3Reader* reader);
 		void          readClassBytes(J3Field* hiddenFields, uint32_t nbHiddenFields);
 
@@ -220,7 +223,7 @@ namespace j3 {
 
 		J3Method*     interfaceOrMethodAt(uint16_t idx, uint16_t access, bool isInterfaceMethod);
 	public:
-		J3Class(J3ClassLoader* loader, const vmkit::Name* name, J3ClassBytes* bytes);
+		J3Class(J3ClassLoader* loader, const vmkit::Name* name, J3ClassBytes* bytes, J3ObjectHandle* protectionDomain, const char* source);
 
 		J3ObjectHandle*     clone(J3ObjectHandle* obj);
 

Modified: vmkit/branches/mcjit/include/j3/j3classloader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3classloader.h?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3classloader.h (original)
+++ vmkit/branches/mcjit/include/j3/j3classloader.h Sat Jan 18 17:28:54 2014
@@ -69,7 +69,8 @@ namespace j3 {
 		static J3ClassLoader*         nativeClassLoader(J3ObjectHandle* jloader);
 		J3ObjectHandle*               javaClassLoader(bool doPush=1);
 
-		J3Class*                      defineClass(const vmkit::Name* name, J3ClassBytes* bytes);
+		J3Class*                      defineClass(const vmkit::Name* name, J3ClassBytes* bytes, 
+																							J3ObjectHandle* protectionDomain, const char* source);
 		J3Class*                      findLoadedClass(const vmkit::Name* name);
 		virtual J3Class*              loadClass(const vmkit::Name* name);
 

Modified: vmkit/branches/mcjit/include/j3/j3meta.def
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3meta.def?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3meta.def (original)
+++ vmkit/branches/mcjit/include/j3/j3meta.def Sat Jan 18 17:28:54 2014
@@ -5,7 +5,7 @@ _x(funcJ3TypeInitialise,         "j3::J3
 _x(funcJ3LayoutStructSize,       "j3::J3Layout::structSize()")
 _x(funcJ3ClassStaticInstance,    "j3::J3Class::staticInstance()")
 _x(funcJ3ClassStringAt,          "j3::J3Class::stringAt(unsigned short, bool)")
-_x(funcJ3TypeJavaClass,          "j3::J3Type::javaClass(bool)")
+_x(funcJ3TypeJavaClass,          "j3::J3Type::javaClass(bool, j3::J3ObjectHandle*)")
 _x(funcJniEnv,                   "j3::J3::jniEnv()")
 _x(funcJ3ObjectAllocate,         "j3::J3Object::allocate(j3::J3VirtualTable*, unsigned long)")
 _x(funcJ3ObjectMonitorEnter,     "j3::J3Object::monitorEnter(j3::J3Object*)")

Modified: vmkit/branches/mcjit/include/j3/j3reader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3reader.h?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3reader.h (original)
+++ vmkit/branches/mcjit/include/j3/j3reader.h Sat Jan 18 17:28:54 2014
@@ -25,6 +25,11 @@ class J3ClassBytes : vmkit::PermanentObj
   uint32_t size;
   uint8_t  elements[1];
 
+  J3ClassBytes(uint8_t* buf, int l) {
+		memcpy(elements, buf, l);
+    size = l;
+  }
+
   J3ClassBytes(int l) {
     size = l;
   }

Modified: vmkit/branches/mcjit/include/j3/j3thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3thread.h?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3thread.h (original)
+++ vmkit/branches/mcjit/include/j3/j3thread.h Sat Jan 18 17:28:54 2014
@@ -27,6 +27,8 @@ namespace j3 {
 		J3LocalReferences          _localReferences;
 		J3ObjectHandle*            _pendingException;
 		J3ObjectHandle             _javaThread;
+
+		bool                       _interrupted;
 	public:
 		J3TrampolineArg            _trampolineArg;
 	private:
@@ -38,6 +40,9 @@ namespace j3 {
 		J3Thread(J3* vm);
 		~J3Thread();
 
+		bool               isInterrupted() { return _interrupted; }
+		void               markInterrupted() { _interrupted = 1; }
+		
 		void               assocJavaThread(J3ObjectHandle* javaThread);
 		J3ObjectHandle*    javaThread() { return &_javaThread; }
 		static J3Thread*   nativeThread(J3ObjectHandle* handle);

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sat Jan 18 17:28:54 2014
@@ -7,6 +7,7 @@
 #include "j3/j3constants.h"
 #include "j3/j3field.h"
 #include "j3/j3utf16.h"
+#include "j3/j3reader.h"
 #include "jvm.h"
 
 #include <dlfcn.h>
@@ -147,7 +148,7 @@ jobject JNICALL JVM_InitProperties(JNIEn
 																												 vm->names()->get("(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;")));
 
 #define setProp(key, val) _setProp->invokeVirtual(p, vm->utfToString(key), vm->utfToString(val));
-#define setPropEnv(key, val, def) ({ const char* tmp = getenv(val); if(!tmp) tmp = def; setProp(key, val); })
+#define setPropEnv(key, val, def) ({ const char* tmp = getenv(val); if(!tmp) tmp = def; setProp(key, tmp); })
 
 	/*
 	** <dt>java.version         <dd>Java version number
@@ -533,7 +534,13 @@ jobject JNICALL JVM_CurrentThread(JNIEnv
 
 jint JNICALL JVM_CountStackFrames(JNIEnv* env, jobject thread) { enterJVM(); leaveJVM(); NYI(); }
 void JNICALL JVM_Interrupt(JNIEnv* env, jobject thread) { enterJVM(); leaveJVM(); NYI(); }
-jboolean JNICALL JVM_IsInterrupted(JNIEnv* env, jobject thread, jboolean clearInterrupted) { enterJVM(); leaveJVM(); NYI(); }
+jboolean JNICALL JVM_IsInterrupted(JNIEnv* env, jobject thread, jboolean clearInterrupted) { 
+	jboolean res;
+	enterJVM(); 
+	res = J3Thread::nativeThread(thread)->isInterrupted();
+	leaveJVM(); 
+	return res;
+}
 
 jboolean JNICALL JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj) { 
 	jboolean res;
@@ -750,12 +757,23 @@ jclass JNICALL JVM_FindLoadedClass(JNIEn
 }
 
 /* Define a class */
-jclass JNICALL JVM_DefineClass(JNIEnv* env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd) { enterJVM(); leaveJVM(); NYI(); }
+jclass JNICALL JVM_DefineClass(JNIEnv* env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd) { 
+	return JVM_DefineClassWithSource(env, name, loader, buf, len, pd, 0);
+}
 
 /* Define a class with a source (added in JDK1.5) */
-jclass JNICALL JVM_DefineClassWithSource(JNIEnv* env, const char *name, jobject loader, 
-																									 const jbyte *buf, jsize len, jobject pd,
-																									 const char *source) { enterJVM(); leaveJVM(); NYI(); }
+jclass JNICALL JVM_DefineClassWithSource(JNIEnv* env, const char *name, jobject _loader, 
+																				 const jbyte *buf, jsize len, jobject pd,
+																				 const char *source) { 
+	jclass res;
+	enterJVM(); 
+	J3* vm = J3Thread::get()->vm();
+	J3ClassLoader* loader = _loader ? J3ClassLoader::nativeClassLoader(_loader) : vm->initialClassLoader;
+	J3ClassBytes* bytes = new(loader->allocator(), len) J3ClassBytes((uint8_t*)buf, len);
+	res = loader->defineClass(vm->names()->get(name), bytes, pd, source)->javaClass();
+	leaveJVM(); 
+	return res;
+}
 
 /*
  * Reflection support functions

Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sat Jan 18 17:28:54 2014
@@ -105,49 +105,49 @@ void J3::run() {
 #define z_field(access, cl, name, type)      cl->findField(access, names()->get(name), type)
 
 
-	nbArrayInterfaces    = 2;
-	arrayInterfaces      = (J3Type**)initialClassLoader->allocator()->allocate(2*sizeof(J3Type*));
-	arrayInterfaces[0]   = z_class("java/lang/Cloneable");
-	arrayInterfaces[1]   = z_class("java/io/Serializable");
+	nbArrayInterfaces          = 2;
+	arrayInterfaces            = (J3Type**)initialClassLoader->allocator()->allocate(2*sizeof(J3Type*));
+	arrayInterfaces[0]         = z_class("java/lang/Cloneable");
+	arrayInterfaces[1]         = z_class("java/io/Serializable");
 
-	charArrayClass           = typeCharacter->getArray();
-	objectClass              = z_class("java/lang/Object");
+	charArrayClass             = typeCharacter->getArray();
+	objectClass                = z_class("java/lang/Object");
 	objectClass->resolve();
 	
-	stringClass              = z_class("java/lang/String");
-	stringClassInit          = z_method(0, stringClass, initName, names()->get("([CZ)V"));
-	stringClassValue         = z_field(0, stringClass, "value", charArrayClass);
-
-	classClass               = z_class("java/lang/Class");
-	J3Field hf(J3Cst::ACC_PRIVATE, names()->get("** vmData **"), typeLong);
-	classClass->resolve(&hf, 1);
-	classClassInit           = z_method(0, classClass, initName, names()->get("()V"));
-	classClassVMData         = classClass->findField(0, hf.name(), hf.type());
-
-	classClassLoader         = z_class("java/lang/ClassLoader");
-	classClassLoader->resolve(&hf, 1);
-	classClassLoaderVMData   = classClassLoader->findField(0, hf.name(), hf.type());
-
-	threadClass              = z_class("java/lang/Thread");
-	threadClassRun           = z_method(0, threadClass, names()->get("run"), names()->get("()V"));
-	threadClassVMData        = z_field(0, threadClass, "eetop", typeLong);
-
-	fieldClass               = z_class("java/lang/reflect/Field");
-	fieldClassClass          = z_field(0, fieldClass, "clazz", classClass);
-	fieldClassSlot           = z_field(0, fieldClass, "slot", typeInteger);
-	fieldClassAccess         = z_field(0, fieldClass, "modifiers", typeInteger);
-	fieldClassInit           = z_method(0, fieldClass, initName, 
-																			names()->get("(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)V"));
-
-	constructorClass         = z_class("java/lang/reflect/Constructor");
-	constructorClassClass    = z_field(0, constructorClass, "clazz", classClass);
-	constructorClassSlot     = z_field(0, constructorClass, "slot", typeInteger);
-	constructorClassInit     = z_method(0, constructorClass, initName,
+	stringClass                = z_class("java/lang/String");
+	stringClassInit            = z_method(0, stringClass, initName, names()->get("([CZ)V"));
+	stringClassValue           = z_field(0, stringClass, "value", charArrayClass);
+
+	classClass                 = z_class("java/lang/Class");
+	J3Field vmData[] = { J3Field(J3Cst::ACC_PRIVATE, names()->get("** vmData **"), typeLong) };
+	classClass->resolve(vmData, 1);
+	classClassInit             = z_method(0, classClass, initName, names()->get("()V"));
+	classClassVMData           = classClass->findField(0, vmData[0].name(), vmData[0].type());
+
+	classLoaderClass           = z_class("java/lang/ClassLoader");
+	classLoaderClass->resolve(vmData, 1);
+	classLoaderClassVMData     = classLoaderClass->findField(0, vmData[0].name(), vmData[0].type());
+
+	threadClass                = z_class("java/lang/Thread");
+	threadClassRun             = z_method(0, threadClass, names()->get("run"), names()->get("()V"));
+	threadClassVMData          = z_field(0, threadClass, "eetop", typeLong);
+
+	fieldClass                 = z_class("java/lang/reflect/Field");
+	fieldClassClass            = z_field(0, fieldClass, "clazz", classClass);
+	fieldClassSlot             = z_field(0, fieldClass, "slot", typeInteger);
+	fieldClassAccess           = z_field(0, fieldClass, "modifiers", typeInteger);
+	fieldClassInit             = z_method(0, fieldClass, initName, 
+																				names()->get("(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)V"));
+
+	constructorClass           = z_class("java/lang/reflect/Constructor");
+	constructorClassClass      = z_field(0, constructorClass, "clazz", classClass);
+	constructorClassSlot       = z_field(0, constructorClass, "slot", typeInteger);
+	constructorClassInit       = z_method(0, constructorClass, initName,
 																			names()->get("(Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B)V"));
 
-	throwableClassBacktrace  = z_field(0, z_class("java/lang/Throwable"), "backtrace", objectClass);
+	throwableClassBacktrace    = z_field(0, z_class("java/lang/Throwable"), "backtrace", objectClass);
 
-	stackTraceElementClass   = z_class("java/lang/StackTraceElement");
+	stackTraceElementClass     = z_class("java/lang/StackTraceElement");
 	stackTraceElementClassInit = z_method(0, stackTraceElementClass, initName,
 																				names()->get("(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V"));
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Sat Jan 18 17:28:54 2014
@@ -49,7 +49,7 @@ void J3Type::dump() {
 	fprintf(stderr, "Type: %s", name()->cStr());
 }
 
-J3ObjectHandle* J3Type::javaClass(bool doPush) {
+J3ObjectHandle* J3Type::javaClass(bool doPush, J3ObjectHandle* protectionDomain) {
 	if(!_javaClass) {
 		lock();
 		if(!_javaClass) {
@@ -312,9 +312,11 @@ J3Field* J3Layout::localFindField(const
 /*  
  *  ------------ J3Class ------------
  */
-J3Class::J3Class(J3ClassLoader* loader, const vmkit::Name* name, J3ClassBytes* bytes) : 
+J3Class::J3Class(J3ClassLoader* loader, const vmkit::Name* name, J3ClassBytes* bytes, J3ObjectHandle* protectionDomain, const char* source) : 
 	J3Layout(loader, name), 
-	_staticLayout(loader, this, name){
+	_staticLayout(loader, this, name) {
+	_protectionDomain = protectionDomain ? loader->globalReferences()->add(protectionDomain) : 0;
+	_source = source;
 	_bytes = bytes;
 	status = LOADED;
 }

Modified: vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc Sat Jan 18 17:28:54 2014
@@ -49,12 +49,12 @@ J3ObjectHandle* J3ClassLoader::javaClass
 }
 
 J3ClassLoader* J3ClassLoader::nativeClassLoader(J3ObjectHandle* jloader) {
-	J3ClassLoader* res = (J3ClassLoader*)jloader->getLong(J3Thread::get()->vm()->classClassLoaderVMData);
+	J3ClassLoader* res = (J3ClassLoader*)jloader->getLong(J3Thread::get()->vm()->classLoaderClassVMData);
 
 	if(!res) {
 		vmkit::BumpAllocator* allocator = vmkit::BumpAllocator::create(); 
 		res = new(allocator) J3ClassLoader(jloader, allocator);
-		jloader->setLong(J3Thread::get()->vm()->classClassLoaderVMData, (uint64_t)(uintptr_t)res);
+		jloader->setLong(J3Thread::get()->vm()->classLoaderClassVMData, (uint64_t)(uintptr_t)res);
 	}
 	
 	return res;
@@ -100,11 +100,11 @@ J3Class* J3ClassLoader::findLoadedClass(
 	return res;
 }
 
-J3Class* J3ClassLoader::defineClass(const vmkit::Name* name, J3ClassBytes* bytes) {
+J3Class* J3ClassLoader::defineClass(const vmkit::Name* name, J3ClassBytes* bytes, J3ObjectHandle* protectionDomain, const char* source) {
 	pthread_mutex_lock(&_mutexClasses);
 	J3Class* res = classes[name];
 	if(!res)
-		classes[name] = res = new(allocator()) J3Class(this, name, bytes);
+		classes[name] = res = new(allocator()) J3Class(this, name, bytes, protectionDomain, source);
 	pthread_mutex_unlock(&_mutexClasses);
 	return res;
 }
@@ -258,7 +258,7 @@ J3Class* J3InitialClassLoader::loadClass
 		J3ClassBytes* bytes = new(allocator(), file->ucsize) J3ClassBytes(file->ucsize);
 		
 		if(archive->readFile(bytes, file))
-			return defineClass(name, bytes);
+			return defineClass(name, bytes, 0, 0);
 	}
 
 	return 0;

Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Sat Jan 18 17:28:54 2014
@@ -330,7 +330,11 @@ void J3CodeGen::initialiseJ3ObjectType(J
 }
 
 llvm::Value* J3CodeGen::javaClass(J3ObjectType* type, bool doPush) {
-	return builder->CreateCall2(funcJ3TypeJavaClass, typeDescriptor(type, vm->typeJ3TypePtr), builder->getInt1(doPush));
+	return builder->CreateCall3(funcJ3TypeJavaClass, 
+															typeDescriptor(type, vm->typeJ3TypePtr), 
+															builder->getInt1(doPush),
+															builder->CreateIntToPtr(llvm::ConstantInt::get(uintPtrTy, (uintptr_t)0),
+																											vm->typeJ3ObjectHandlePtr));
 }
 
 llvm::Value* J3CodeGen::handleToObject(llvm::Value* obj) {

Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc Sat Jan 18 17:28:54 2014
@@ -31,7 +31,7 @@ void J3ExceptionNode::addEntry(J3CodeGen
 
 		if(codeGen->vm->options()->debugExecute) {
 			char buf[256];
-			snprintf(buf, 256, "          catching exceptions in %s::%s", codeGen->cl->name()->cStr(), codeGen->method->name()->cStr());
+			snprintf(buf, 256, "          catching exceptions in %s::%s\n", codeGen->cl->name()->cStr(), codeGen->method->name()->cStr());
 			codeGen->builder->CreateCall2(codeGen->funcEchoDebugExecute, 
 																		codeGen->builder->getInt32(1), 
 																		codeGen->buildString(buf));
@@ -73,7 +73,7 @@ void J3ExceptionNode::close(J3CodeGen* c
 
 		if(codeGen->vm->options()->debugExecute) {
 			char buf[256];
-			snprintf(buf, 256, "          exceptions not catched in %s::%s, rethrowing", 
+			snprintf(buf, 256, "          exceptions not catched in %s::%s, rethrowing\n", 
 							 codeGen->cl->name()->cStr(), codeGen->method->name()->cStr());
 			codeGen->builder->CreateCall2(codeGen->funcEchoDebugExecute, 
 																		codeGen->builder->getInt32(1), 

Modified: vmkit/branches/mcjit/lib/vmkit/thread.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/thread.cc?rev=199566&r1=199565&r2=199566&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/thread.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/thread.cc Sat Jan 18 17:28:54 2014
@@ -13,7 +13,9 @@ void Thread::sigsegvHandler(int n, sigin
 }
 
 void* Thread::operator new(size_t n) {
-	return ThreadAllocator::allocate();
+	void* res = ThreadAllocator::allocate();
+	memset(res, 0, n);
+	return res;
 }
 
 void Thread::operator delete(void* p) {





More information about the vmkit-commits mailing list