[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