[llvm-commits] [vmkit] r49536 - in /vmkit/trunk: ./ include/mvm/ include/mvm/GC/ include/mvm/Threads/ lib/JnJVM/ lib/JnJVM/Classpath/ lib/JnJVM/VMCore/ lib/Mvm/ lib/Mvm/Allocator/ lib/Mvm/CommonThread/ lib/Mvm/GCMmap2/ lib/N3/ lib/N3/VMCore/
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri Apr 11 09:20:49 PDT 2008
Author: geoffray
Date: Fri Apr 11 11:20:48 2008
New Revision: 49536
URL: http://llvm.org/viewvc/llvm-project?rev=49536&view=rev
Log:
vmkit can now use boehmgc
Modified:
vmkit/trunk/NEWS
vmkit/trunk/configure.ac
vmkit/trunk/include/mvm/GC/GC.h
vmkit/trunk/include/mvm/Method.h
vmkit/trunk/include/mvm/Object.h
vmkit/trunk/include/mvm/PrintBuffer.h
vmkit/trunk/include/mvm/Threads/Cond.h
vmkit/trunk/include/mvm/Threads/Key.h
vmkit/trunk/include/mvm/Threads/Locks.h
vmkit/trunk/include/mvm/Threads/Thread.h
vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp
vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp
vmkit/trunk/lib/JnJVM/Classpath/Makefile.am
vmkit/trunk/lib/JnJVM/Main.cpp
vmkit/trunk/lib/JnJVM/Makefile.am
vmkit/trunk/lib/JnJVM/VMCore/JavaBacktrace.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h
vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
vmkit/trunk/lib/JnJVM/VMCore/Makefile.am
vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
vmkit/trunk/lib/Mvm/Allocator/Makefile.am
vmkit/trunk/lib/Mvm/CommandLine.cpp
vmkit/trunk/lib/Mvm/CommonThread/Makefile.am
vmkit/trunk/lib/Mvm/GCMmap2/Makefile.am
vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h
vmkit/trunk/lib/Mvm/Main.cpp
vmkit/trunk/lib/Mvm/Makefile.am
vmkit/trunk/lib/Mvm/MvmMemoryManager.cpp
vmkit/trunk/lib/Mvm/Object.cpp
vmkit/trunk/lib/Mvm/Sigsegv.cpp
vmkit/trunk/lib/Mvm/VTOffset.cpp
vmkit/trunk/lib/N3/Main.cpp
vmkit/trunk/lib/N3/Makefile.am
vmkit/trunk/lib/N3/VMCore/Assembly.cpp
vmkit/trunk/lib/N3/VMCore/Assembly.h
vmkit/trunk/lib/N3/VMCore/BackTrace.cpp
vmkit/trunk/lib/N3/VMCore/CLIJit.cpp
vmkit/trunk/lib/N3/VMCore/CLIJit.h
vmkit/trunk/lib/N3/VMCore/LockedMap.h
vmkit/trunk/lib/N3/VMCore/Makefile.am
vmkit/trunk/lib/N3/VMCore/N3.cpp
vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
vmkit/trunk/lib/N3/VMCore/N3ModuleProvider.cpp
vmkit/trunk/lib/N3/VMCore/PNetLib.cpp
vmkit/trunk/lib/N3/VMCore/VMClass.h
vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp
Modified: vmkit/trunk/NEWS
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/NEWS?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/NEWS (original)
+++ vmkit/trunk/NEWS Fri Apr 11 11:20:48 2008
@@ -1,3 +1,6 @@
+(April 11, 2008)
+* Interface with boehm-gc
+
(March 21, 2008)
* VMKit goes public!
Modified: vmkit/trunk/configure.ac
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/configure.ac?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/configure.ac (original)
+++ vmkit/trunk/configure.ac Fri Apr 11 11:20:48 2008
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script
-AC_INIT([micro-vm],[0.0.1])
+AC_INIT([vmkit],[0.0.1])
AC_PREREQ([2.59])
AC_CONFIG_SRCDIR([lib/Mvm/Main.cpp])
@@ -28,17 +28,6 @@
esac
AM_CONDITIONAL(IS_LINUX, [test x$is_linux = xtrue])
-echo $host
-dnl **************************************************************************
-dnl Check system name
-dnl **************************************************************************
-case $host in
- *linux*) dlsyms_name='dlsyms';;
- *darwin*) dlsyms_name='dlsyms';;
- *) dlsyms_name='dlsyms-unknow';;
-esac
-AC_SUBST([dlsyms_name])
-
dnl **************************************************************************
dnl Initialize automake with a package version
dnl **************************************************************************
@@ -148,13 +137,13 @@
dnl **************************************************************************
dnl VVM thread type
dnl **************************************************************************
-AC_ARG_WITH(vvm-thread-type,
- [AS_HELP_STRING(--with-vvm-thread-type=something,
- [VVM Thread type ('common' or 'no')])],
- [vvmthreadtype=$withval],[vvmthreadtype=common]
+AC_ARG_WITH(thread,
+ [AS_HELP_STRING(--with-thread=something,
+ [Thread type ('common' or 'no')])],
+ [thread=$withval],[thread=common]
)
-AS_IF([test "x$vvmthreadtype" != "xno"],
+AS_IF([test "x$thread" != "xno"],
[AC_CHECK_HEADER([pthread.h],,
[AC_MSG_WARN(phtread include NOT found)])
AC_CHECK_LIB(pthread, pthread_create, [],
@@ -162,13 +151,13 @@
]
)
-AM_CONDITIONAL([HAVE_PTHREAD], [test "x$vvmthreadtype" != "xno"])
-if test "x$vvmthreadtype" = xcommon; then
+AM_CONDITIONAL([HAVE_PTHREAD], [test "x$thread" != "xno"])
+if test "x$thread" = xcommon; then
AC_DEFINE([HAVE_PTHREAD], [1], [Using pthread library])
fi
-AC_SUBST([vvmthreadtype])
-GCTHREAD_SUBDIRS="$GCTHREAD_SUBDIRS $vvmthreadtype-thread"
+GCTHREAD_LIBS="$PWD/lib/Mvm/CommonThread/libuvm_common_thread.a"
+AC_SUBST([GCTHREAD_LIBS])
dnl **************************************************************************
@@ -186,28 +175,41 @@
dnl **************************************************************************
dnl VVM GC type
dnl **************************************************************************
-AC_ARG_WITH(vvm-gc-type,
- [AS_HELP_STRING(--with-vvm-gc-type=something,
- [VVM GC type ('mmap2' or 'boehm')])],
- [[vvmgctype=$withval]],
+AC_ARG_WITH(gc,
+ [AS_HELP_STRING(--with-gc=something,
+ [GC type ('mmap2' or 'boehm')])],
+ [[gc=$withval]],
[[ echo Using mmap2 as vvm gc type.
- vvmgctype=mmap2
+ gc=mmap2
]]
)
-AC_SUBST([vvmgctype])
-GCTHREAD_SUBDIRS="$GCTHREAD_SUBDIRS gc-$vvmgctype"
-AC_SUBST([GCTHREAD_SUBDIRS])
-
-GC_DEFINE=""
-GC_LIBS=""
dnl TODO find the libgc.a
-if test "x$vvmgctype" = "xboehm"; then
- GC_DEFINE="-DGC_BOEHM"
- GC_LIBS="/usr/lib/libgc.a"
+if test "x$gc" = "xboehm"; then
+ AC_CHECK_LIB(gccpp, GC_malloc, [], \
+ [AC_MSG_ERROR([You need to install the boehm-gc package (gccpp).])]
+ )
+ AC_CHECK_HEADER([gc/gc.h], [], \
+ AC_MSG_ERROR([You need to install the boehm-gc devel package (gc/gc.h).])
+ )
+ GC_LIBS="-lgccpp -gc"
+ CFLAGS="$CFLAGS -I$PWD/lib/Mvm/BoehmGC -DGC_THREADS"
+ CXXFLAGS="$CXXFLAGS -I$PWD/lib/Mvm/BoehmGC -DGC_THREADS"
+ AC_DEFINE([USE_GC_BOEHM], [1], [Using the boehm gc])
+ case $target_os in
+ *linux*)
+ CFLAGS="-DGC_LINUX_THREADS"
+ CXXFLAGS="$CXXFLAGS -DGC_LINUX_THREADS"
+ ;;
+ esac
+else
+ GC_LIBS="$PWD/lib/Mvm/GCMmap2/libuvm_gc_mmap2.a \
+ $PWD/lib/Mvm/Allocator/libuvm_alloc.a"
+ CFLAGS="$CFLAGS -I$PWD/lib/Mvm/GCMmap2 -DWITH_TRACER"
+ CXXFLAGS="$CXXFLAGS -I$PWD/lib/Mvm/GCMmap2 -DWITH_TRACER"
+ AC_DEFINE([USE_GC_MMAP2], [1], [Using the gcmmap2])
fi
-AC_SUBST([GC_DEFINE])
AC_SUBST([GC_LIBS])
dnl **************************************************************************
@@ -248,8 +250,8 @@
echo Using ${gnuclasspathinstallationprefix} as GNU CLASSPATH installation prefix;
classpathglibj=${gnuclasspathinstallationprefix}/share/classpath/glibj.zip;
classpathlibs=${gnuclasspathinstallationprefix}/lib/classpath/;
- CFLAGS=$CFLAGS -I$gnuclasspathinstallationprefix/include
- CXXFLAGS=$CXXFLAGS -I$gnuclasspathinstallationprefix/include
+ CFLAGS="$CFLAGS -I$gnuclasspathinstallationprefix/include"
+ CXXFLAGS="$CXXFLAGS -I$gnuclasspathinstallationprefix/include"
else
echo Using ${gnuclasspathlocalprefix} as GNU CLASSPATH local prefix;
classpathglibj=${gnuclasspathlocalprefix}/lib/;
Modified: vmkit/trunk/include/mvm/GC/GC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/GC/GC.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/GC/GC.h (original)
+++ vmkit/trunk/include/mvm/GC/GC.h Fri Apr 11 11:20:48 2008
@@ -15,63 +15,19 @@
typedef void (*gc_lock_recovery_fct_t)(int, int, int, int, int, int, int, int);
-class gc;
-
typedef void VirtualTable;
-#define gc_new(Class) __gc_new(Class::VT) Class
-class gc {
+class gcRoot {
public:
- virtual ~gc() {}
+ virtual ~gcRoot() {}
virtual void destroyer(size_t) {}
virtual void tracer(size_t) {}
-
- void markAndTrace() const;
- size_t objectSize() const;
- void * operator new(size_t sz, VirtualTable *VT);
- void * operator new(size_t sz);
- void operator delete(void *);
- void * realloc(size_t n);
-
};
class gc_header {
public:
VirtualTable *_XXX_vt;
- inline gc *_2gc() { return (gc *)this; }
-};
-
-class Collector {
-public:
-
- typedef void (*markerFn)(void);
-
- static void initialise(markerFn mark, void *base_sp);
- static void destroy();
-
- static void die_if_sigsegv_occured_during_collection(void *addr);
- static int isStable(gc_lock_recovery_fct_t, int, int, int, int,
- int, int, int, int);
- static unsigned int enable(unsigned int n);
- static void gcStats(size_t &no, size_t &nbb);
- static void maybeCollect();
- static void collect(void);
- static void inject_my_thread(void *sp);
- static void remove_my_thread();
- static Collector* allocate();
-
- static gc *begOf(const void *o);
- static int byteOffset(void *o);
- inline static bool isObject(const void *o) { return begOf((void*)o); }
- static void applyFunc(void (*func)(gc *o, void *data), void *data);
- static void registerMemoryError(void (*func)(unsigned int));
- static int getMaxMemory(void);
- static int getFreeMemory(void);
- static int getTotalMemory(void);
- static void setMaxMemory(size_t);
- static void setMinMemory(size_t);
+ inline gcRoot *_2gc() { return (gcRoot *)this; }
};
-#define __gc_new new
-
#endif
Modified: vmkit/trunk/include/mvm/Method.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Method.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Method.h (original)
+++ vmkit/trunk/include/mvm/Method.h Fri Apr 11 11:20:48 2008
@@ -43,19 +43,18 @@
public:
inline Code() {}
static VirtualTable* VT;
- static void *allocate(size_t _nbb, void* metaInfo);
+ Method* meth;
inline Method *method(Method *m, size_t nbb) {
- return
- (Method *)gcset((gc **)((uintptr_t)this + nbb), m);
+ return (meth = m);
}
inline Method *method(size_t nbb) {
- return ((Method **)((uintptr_t)this + nbb))[0];
+ return meth;
}
- inline Method *method(Method *m) { return method(m, objectSize()); }
- inline Method *method() { return method(objectSize()); }
+ inline Method *method(Method *m) { return meth = m; }
+ inline Method *method() { return meth; }
virtual void print(PrintBuffer *buf) const;
virtual void tracer(size_t sz);
@@ -65,19 +64,18 @@
public:
inline ExceptionTable() {}
static VirtualTable* VT;
+ void* framePtr;
inline void *frameRegister(void *m, size_t nbb) {
- return
- (void *)gcset((gc **)((uintptr_t)this + nbb),
- (Object*)m);
+ return (framePtr = m);
}
inline void *frameRegister(size_t nbb) {
- return ((void **)((uintptr_t)this + nbb))[0];
+ return framePtr;
}
- inline void *frameRegister(void *m) { return frameRegister(m, objectSize()); }
- inline void *frameRegister() { return frameRegister(objectSize()); }
+ inline void *frameRegister(void *m) { return (framePtr = m); }
+ inline void *frameRegister() { return framePtr; }
virtual void destroyer(size_t sz);
};
Modified: vmkit/trunk/include/mvm/Object.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Object.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Object.h (original)
+++ vmkit/trunk/include/mvm/Object.h Fri Apr 11 11:20:48 2008
@@ -13,7 +13,7 @@
#include <assert.h>
#include "types.h"
-#include "mvm/GC/GC.h"
+#include "MvmGC.h"
namespace mvm {
Modified: vmkit/trunk/include/mvm/PrintBuffer.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/PrintBuffer.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/PrintBuffer.h (original)
+++ vmkit/trunk/include/mvm/PrintBuffer.h Fri Apr 11 11:20:48 2008
@@ -23,22 +23,22 @@
static VirtualTable* VT;
- inline char *cString() { return (char *)(this + 1); }
+ inline char *cString() { return (char *)(this + 1); }
inline static NativeString *readString(char *cStr) {
- size_t nbb = strlen(cStr);
- NativeString * res = alloc(nbb + 1);
- memcpy(res->cString(), cStr, nbb + 1);
- return res;
- }
-
- static inline NativeString *alloc(size_t len) {
- return (NativeString *)gc::operator new(len, VT);
- }
-
- inline NativeString *realloc(size_t len) {
- return (NativeString *)gc::realloc(len);
- }
+ size_t nbb = strlen(cStr);
+ NativeString * res = alloc(nbb + 1);
+ memcpy(res->cString(), cStr, nbb + 1);
+ return res;
+ }
+
+ static inline NativeString *alloc(size_t len) {
+ return (NativeString *)gc::operator new(len, VT);
+ }
+
+ inline NativeString *realloc(size_t len) {
+ return (NativeString *)gc::realloc(len);
+ }
inline void setAt(int pos, char c) {
cString()[pos] = c;
@@ -70,16 +70,16 @@
PrintBuffer* pbf = gc_new(PrintBuffer)();
pbf->capacity= 32;
pbf->writePosition= 0;
- pbf->contents(NativeString::alloc(pbf->capacity));
+ pbf->contents(NativeString::alloc(pbf->capacity));
return pbf;
}
inline PrintBuffer *write(const char *string) {
size_t len= strlen(string);
if ((writePosition + len + 1) >= capacity) {
- while ((writePosition + len + 1) >= capacity)
- capacity*= 4;
- contents(contents()->realloc(capacity));
+ while ((writePosition + len + 1) >= capacity)
+ capacity*= 4;
+ contents(contents()->realloc(capacity));
}
strcpy(contents()->cString() + writePosition, string);
writePosition+= len;
@@ -120,19 +120,19 @@
inline PrintBuffer *writeBytes(unsigned char *bytes, size_t len) {
write("[");
for (size_t idx= 0; idx < len; ++idx) {
- if (idx > 0)
- write(" ");
- char buf[32];
- sprintf(buf, "%d", bytes[idx]);
- write(buf);
+ if (idx > 0)
+ write(" ");
+ char buf[32];
+ sprintf(buf, "%d", bytes[idx]);
+ write(buf);
}
write("]");
return this;
}
- PrintBuffer *writeObj(const Object *);
+ PrintBuffer *writeObj(const Object *);
- NativeString *getContents();
+ NativeString *getContents();
static PrintBuffer *write_static(PrintBuffer*, char *);
Modified: vmkit/trunk/include/mvm/Threads/Cond.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Cond.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Threads/Cond.h (original)
+++ vmkit/trunk/include/mvm/Threads/Cond.h Fri Apr 11 11:20:48 2008
@@ -14,7 +14,6 @@
#include "config.h"
#endif
-#include "mvm/GC/GC.h"
#include "mvm/Threads/Locks.h"
#include <cstdlib>
Modified: vmkit/trunk/include/mvm/Threads/Key.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Key.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Threads/Key.h (original)
+++ vmkit/trunk/include/mvm/Threads/Key.h Fri Apr 11 11:20:48 2008
@@ -14,7 +14,7 @@
#include "config.h"
#endif
-#include "mvm/GC/GC.h"
+#include <pthread.h>
namespace mvm {
Modified: vmkit/trunk/include/mvm/Threads/Locks.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Threads/Locks.h (original)
+++ vmkit/trunk/include/mvm/Threads/Locks.h Fri Apr 11 11:20:48 2008
@@ -14,63 +14,60 @@
#include "config.h"
#endif
-#include "mvm/GC/GC.h"
-
namespace mvm {
class SpinLock {
- unsigned int value;
+ unsigned int value;
public:
- static VirtualTable *VT;
- SpinLock() { value = 0; }
-
- void slock();
- void sunlock() {
- value = 0;
- }
+ SpinLock() { value = 0; }
+
+ void slock();
+ void sunlock() {
+ value = 0;
+ }
};
class Lock : public SpinLock {
protected:
- void (*xlock)(Lock *);
- void (*xunlock)(Lock *);
- int (*xtrylock)(Lock *);
+ void (*xlock)(Lock *);
+ void (*xunlock)(Lock *);
+ int (*xtrylock)(Lock *);
- int _owner;
+ int _owner;
public:
- inline Lock() { _owner = 0; }
- inline int owner() { return _owner; }
- inline void owner(int o) { _owner = o; }
-
- void lock() {
- xlock(this);
- }
-
- void unlock() {
- xunlock(this);
- }
-
- int trylock() {
- int res = xtrylock(this);
- return res;
- }
-
- static Lock *allocNormal();
- static Lock *allocRecursive();
- static void destroy(Lock *);
+ inline Lock() { _owner = 0; }
+ inline int owner() { return _owner; }
+ inline void owner(int o) { _owner = o; }
+
+ void lock() {
+ xlock(this);
+ }
+
+ void unlock() {
+ xunlock(this);
+ }
+
+ int trylock() {
+ int res = xtrylock(this);
+ return res;
+ }
- static bool selfOwner(Lock *);
- static int getOwner(Lock *);
+ static Lock *allocNormal();
+ static Lock *allocRecursive();
+ static void destroy(Lock *);
+
+ static bool selfOwner(Lock *);
+ static int getOwner(Lock *);
};
class LockNormal : public Lock {
- static void my_lock(Lock *);
- static void my_unlock(Lock *);
- static int my_trylock(Lock *);
+ static void my_lock(Lock *);
+ static void my_unlock(Lock *);
+ static int my_trylock(Lock *);
public:
- LockNormal() {
+ LockNormal() {
xlock = my_lock; xunlock = my_unlock; xtrylock = my_trylock;
}
@@ -78,15 +75,15 @@
xlock = my_lock; xunlock = my_unlock; xtrylock = my_trylock;
}
};
-
+
class LockRecursive : public Lock {
- int n;
+ int n;
- static void my_lock(Lock *);
- static void my_unlock(Lock *);
- static int my_trylock(Lock *);
+ static void my_lock(Lock *);
+ static void my_unlock(Lock *);
+ static int my_trylock(Lock *);
public:
- LockRecursive() {
+ LockRecursive() {
xlock = my_lock; xunlock = my_unlock; xtrylock = my_trylock; n = 0;
}
Modified: vmkit/trunk/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Thread.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Threads/Thread.h (original)
+++ vmkit/trunk/include/mvm/Threads/Thread.h Fri Apr 11 11:20:48 2008
@@ -10,8 +10,10 @@
#ifndef MVM_THREAD_H
#define MVM_THREAD_H
+#include "MvmGC.h"
#include "mvm/Threads/Key.h"
+
class Collector;
namespace mvm {
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp Fri Apr 11 11:20:48 2008
@@ -10,7 +10,7 @@
#include <dlfcn.h>
#include <string.h>
-#include "mvm/GC/GC.h"
+#include "MvmGC.h"
#include "llvm/Type.h"
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp Fri Apr 11 11:20:48 2008
@@ -49,7 +49,7 @@
Collector::inject_my_thread(&argc);
JavaObject* vmThread = arg->vmThread;
JavaThread* intern = arg->intern;
- delete arg;
+ free(arg);
mvm::Thread::threadKey->set(intern);
CommonClass* vmthClass = vmThread->classOf;
JavaObject* thread = (JavaObject*)((*ClasspathThread::assocThread)(vmThread).PointerVal);
Modified: vmkit/trunk/lib/JnJVM/Classpath/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/Makefile.am?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/Makefile.am (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/Makefile.am Fri Apr 11 11:20:48 2008
@@ -1,11 +1,5 @@
lib_LTLIBRARIES = libClasspath.la
-THREADDIR=../../Mvm/CommonThread
-ALLOCDIR=../../Mvm/Allocator
-GCDIR=../../Mvm/GCMmap2
-INCLUDEDIRS=-I at srcdir@/$(THREADDIR) -I at srcdir@/$(ALLOCDIR) -I at srcdir@/$(GCDIR)\
- -I../VMCore
-
PREFIX=@prefix@
libClasspath_la_SOURCES = \
@@ -17,4 +11,4 @@
ClasspathVMThrowable.h ClasspathVMThrowable.cpp ClasspathMethod.h ClasspathMethod.cpp \
ClasspathVMField.h ClasspathVMField.cpp ClasspathVMStackWalker.cpp ClasspathVMStackWalker.h
-libClasspath_la_CXXFLAGS =$(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -O2 -g -Werror
+libClasspath_la_CXXFLAGS =-I../VMCore -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -O2 -g -Werror
Modified: vmkit/trunk/lib/JnJVM/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Main.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Main.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Main.cpp Fri Apr 11 11:20:48 2008
@@ -7,9 +7,10 @@
//
//===----------------------------------------------------------------------===//
+#include "MvmGC.h"
#include "mvm/JIT.h"
#include "mvm/Object.h"
-#include "mvm/GC/GC.h"
+#include "mvm/Threads/Thread.h"
#include "llvm/Support/ManagedStatic.h"
@@ -25,6 +26,7 @@
jit::initialise();
Object::initialise();
+ Thread::initialise();
Collector::initialise(Object::markAndTraceRoots, &base);
boot();
start_app(argc, argv);
Modified: vmkit/trunk/lib/JnJVM/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Makefile.am?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Makefile.am (original)
+++ vmkit/trunk/lib/JnJVM/Makefile.am Fri Apr 11 11:20:48 2008
@@ -4,21 +4,9 @@
bin_PROGRAMS = main
#lib_LTLIBRARIES = libjnjvm.la
-THREADDIR=../Mvm/CommonThread
-ALLOCDIR=../Mvm/Allocator
-GCDIR=../Mvm/GCMmap2
-INCLUDEDIRS=-I at srcdir@/$(THREADDIR) -I at srcdir@/$(ALLOCDIR) -I at srcdir@/$(GCDIR)
-
-LIBTHREAD=$(THREADDIR)/libuvm_ at vvmthreadtype@_thread.a
-LIBALLOC=$(ALLOCDIR)/libuvm_alloc.a
-LIBGC=$(GCDIR)/libuvm_gc_ at vvmgctype@.a @GC_LIBS@
-LIBSUVM=$(LIBGC) $(LIBALLOC) $(LIBTHREAD)
-
main_SOURCES = ../Mvm/Object.cpp ../Mvm/Sigsegv.cpp Main.cpp ../Mvm/MvmMemoryManager.cpp ../Mvm/JIT.cpp ../Mvm/EscapeAnalysis.cpp
-
-
-main_CXXFLAGS = $(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2
-main_LDADD = VMCore/.libs/libJnJVM.a Classpath/.libs/libClasspath.a $(LIBSUVM) @LLVMDYLIB@
+main_CXXFLAGS = -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2
+main_LDADD = VMCore/.libs/libJnJVM.a Classpath/.libs/libClasspath.a @GC_LIBS@ @GCTHREAD_LIBS@ @LLVMDYLIB@
main_LDFLAGS = @rdynamic@
#libjnjvm.la:
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaBacktrace.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaBacktrace.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaBacktrace.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaBacktrace.cpp Fri Apr 11 11:20:48 2008
@@ -73,8 +73,9 @@
extern "C" JavaMethod* ip_to_meth(int* begIp) {
if (begIp) {
+ unsigned char* val = (unsigned char*)begIp + sizeof(mvm::Code);
const llvm::GlobalValue * glob =
- mvm::jit::executionEngine->getGlobalValueAtAddress(begIp + 1);
+ mvm::jit::executionEngine->getGlobalValueAtAddress(val);
if (glob) {
if (llvm::isa<llvm::Function>(glob)) {
mvm::Code* c = (mvm::Code*)begIp;
@@ -121,8 +122,9 @@
int * ip = debug_frame_ip(fp);
int *begIp = (int*)Collector::begOf(ip);
if (begIp) {
+ unsigned char* val = (unsigned char*)begIp + sizeof(mvm::Code);
const llvm::GlobalValue * glob =
- mvm::jit::executionEngine->getGlobalValueAtAddress(begIp + 1);
+ mvm::jit::executionEngine->getGlobalValueAtAddress(val);
if (glob) {
if (llvm::isa<llvm::Function>(glob)) {
printf("; 0x%p in %s\n", ip,
@@ -148,8 +150,9 @@
while (n < real_size) {
int *begIp = (int*)Collector::begOf(ips[n++]);
if (begIp) {
+ unsigned char* val = (unsigned char*)begIp + sizeof(mvm::Code);
const llvm::GlobalValue * glob =
- mvm::jit::executionEngine->getGlobalValueAtAddress(begIp + 1);
+ mvm::jit::executionEngine->getGlobalValueAtAddress(val);
if (glob) {
if (llvm::isa<llvm::Function>(glob)) {
mvm::Code* c = (mvm::Code*)begIp;
@@ -158,7 +161,8 @@
if (meth)
printf("; 0x%p in %s\n", ips[n - 1], meth->printString());
else
- printf("; 0x%p in %s\n", ips[n - 1], ((llvm::Function*)glob)->getNameStr().c_str());
+ printf("; 0x%p in %s\n", ips[n - 1],
+ ((llvm::Function*)glob)->getNameStr().c_str());
} else JavaThread::get()->isolate->unknownError("in global variable?");
} else printf("; 0x%p in stub\n", ips[n - 1]);
} else {
@@ -184,8 +188,9 @@
while (n < real_size) {
int *begIp = (int*)Collector::begOf(ips[n++]);
if (begIp) {
+ unsigned char* val = (unsigned char*)begIp + sizeof(mvm::Code);
const llvm::GlobalValue * glob =
- mvm::jit::executionEngine->getGlobalValueAtAddress(begIp + 1);
+ mvm::jit::executionEngine->getGlobalValueAtAddress(val);
if (glob) {
if (llvm::isa<llvm::Function>(glob)) {
mvm::Code* c = (mvm::Code*)begIp;
@@ -210,8 +215,9 @@
while (n < real_size) {
int *begIp = (int*)Collector::begOf(ips[n++]);
if (begIp) {
+ unsigned char* val = (unsigned char*)begIp + sizeof(mvm::Code);
const llvm::GlobalValue * glob =
- mvm::jit::executionEngine->getGlobalValueAtAddress(begIp + 1);
+ mvm::jit::executionEngine->getGlobalValueAtAddress(val);
if (glob) {
if (llvm::isa<llvm::Function>(glob)) {
mvm::Code* c = (mvm::Code*)begIp;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Fri Apr 11 11:20:48 2008
@@ -16,8 +16,6 @@
#include "mvm/JIT.h"
-#include "mvm/GC/GC.h"
-
#include "types.h"
#include "JavaArray.h"
@@ -67,7 +65,8 @@
}
// TODO: Optimize
-Attribut* Attribut::lookup(const std::vector<Attribut*>* vec,
+Attribut* Attribut::lookup(const std::vector<Attribut*,
+ gc_allocator<Attribut*> >* vec,
const UTF8* key ) {
for (uint32 i = 0; i < vec->size(); i++) {
@@ -227,7 +226,7 @@
// We can compile it, since if we're here, it's for a good reason
void* val = mvm::jit::executionEngine->getPointerToGlobal(methPtr);
if (Collector::isObject(val)) {
- mvm::Code* temp = (mvm::Code*)((unsigned*)val - 1);
+ mvm::Code* temp = (mvm::Code*)((unsigned*)val - 2);
temp->method()->definition(this);
}
code = (mvm::Code*)val;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Fri Apr 11 11:20:48 2008
@@ -57,7 +57,7 @@
unsigned int nbb;
void derive(const UTF8* name, unsigned int length, const Reader* reader);
- static Attribut* lookup(const std::vector<Attribut*> * vec,
+ static Attribut* lookup(const std::vector<Attribut*, gc_allocator<Attribut*> > * vec,
const UTF8* key);
Reader* toReader(Jnjvm *vm, ArrayUInt8* array, Attribut* attr);
@@ -176,7 +176,7 @@
mvm::Code* codeVirtualTracer;
mvm::Code* codeStaticTracer;
JavaCtpInfo* ctpInfo;
- std::vector<Attribut*> attributs;
+ std::vector<Attribut*, gc_allocator<Attribut*> > attributs;
std::vector<Class*> innerClasses;
Class* outerClass;
uint32 innerAccess;
@@ -241,8 +241,8 @@
llvm::Function* methPtr;
unsigned int access;
Signdef* signature;
- std::vector<Attribut*> attributs;
- std::vector<Enveloppe*> caches;
+ std::vector<Attribut*, gc_allocator<Attribut*> > attributs;
+ std::vector<Enveloppe*, gc_allocator<Enveloppe*> > caches;
Class* classDef;
const UTF8* name;
const UTF8* type;
@@ -318,7 +318,7 @@
const UTF8* name;
Typedef* signature;
const UTF8* type;
- std::vector<Attribut*> attributs;
+ std::vector<Attribut*, gc_allocator<Attribut*> > attributs;
Class* classDef;
uint64 ptrOffset;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Fri Apr 11 11:20:48 2008
@@ -202,7 +202,7 @@
}
extern "C" int boot() {
-
+
struct sigaction sa;
sigaction(SIGINT, 0, &sa);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h Fri Apr 11 11:20:48 2008
@@ -265,9 +265,12 @@
static Class* getCallingClassWalker();
static JavaObject* getCallingClassLoader();
static void printBacktrace();
-
+
+#ifdef WITH_TRACER
static llvm::Function* markAndTraceLLVM;
static const llvm::FunctionType* markAndTraceLLVMType;
+#endif
+
static llvm::Constant* constantJavaObjectNull;
static llvm::Constant* constantUTF8Null;
};
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp Fri Apr 11 11:20:48 2008
@@ -28,7 +28,9 @@
using namespace jnjvm;
using namespace llvm;
+#ifdef WITH_TRACER
const llvm::FunctionType* JavaJIT::markAndTraceLLVMType = 0;
+#endif
const llvm::Type* JavaObject::llvmType = 0;
const llvm::Type* JavaArray::llvmType = 0;
@@ -543,8 +545,9 @@
}
-
- // Create markAndTraceLLVM
+
+#ifdef WITH_TRACER
+ // Create markAndTraceLLVM
{
std::vector<const Type*> args;
args.push_back(JavaObject::llvmType);
@@ -553,7 +556,8 @@
GlobalValue::ExternalLinkage,
"_ZNK2gc12markAndTraceEv",
module);
- }
+ }
+#endif
mvm::jit::unprotectTypes();//->unlock();
mvm::jit::protectConstants();//->lock();
constantUTF8Null = Constant::getNullValue(UTF8::llvmType);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp Fri Apr 11 11:20:48 2008
@@ -173,6 +173,10 @@
VirtualTable* JavaJIT::makeVT(Class* cl, bool stat) {
+ VirtualTable * res = malloc(VT_SIZE);
+ memcpy(res, JavaObject::VT, VT_SIZE);
+
+#ifdef WITH_TRACER
const Type* type = stat ? cl->staticType : cl->virtualType;
std::vector<JavaField*> &fields = stat ? cl->staticFields : cl->virtualFields;
@@ -210,8 +214,6 @@
ReturnInst::Create(block);
- VirtualTable * res = malloc(VT_SIZE);
- memcpy(res, JavaObject::VT, VT_SIZE);
void* codePtr = mvm::jit::executionEngine->getPointerToGlobal(func);
((void**)res)[VT_TRACER_OFFSET] = codePtr;
@@ -222,6 +224,7 @@
cl->staticTracer = func;
cl->codeStaticTracer = (mvm::Code*)((unsigned*)codePtr - 1);
}
+#endif
return res;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Fri Apr 11 11:20:48 2008
@@ -26,6 +26,9 @@
using namespace jnjvm;
+#ifdef WITH_TRACER
+llvm::Function* JavaJIT::markAndTraceLLVM = 0;
+#endif
llvm::Function* JavaJIT::getSJLJBufferLLVM = 0;
llvm::Function* JavaJIT::throwExceptionLLVM = 0;
llvm::Function* JavaJIT::getExceptionLLVM = 0;
@@ -35,7 +38,6 @@
llvm::Function* JavaJIT::nullPointerExceptionLLVM = 0;
llvm::Function* JavaJIT::classCastExceptionLLVM = 0;
llvm::Function* JavaJIT::indexOutOfBoundsExceptionLLVM = 0;
-llvm::Function* JavaJIT::markAndTraceLLVM = 0;
llvm::Function* JavaJIT::javaObjectTracerLLVM = 0;
llvm::Function* JavaJIT::virtualLookupLLVM = 0;
llvm::Function* JavaJIT::fieldLookupLLVM = 0;
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Fri Apr 11 11:20:48 2008
@@ -2103,7 +2103,8 @@
void DeleteGlobalRef(JNIEnv* env, jobject globalRef) {
Jnjvm* vm = NativeUtil::myVM(env);
vm->globalRefsLock->lock();
- for (std::vector<JavaObject*>::iterator i = vm->globalRefs.begin(),
+ for (std::vector<JavaObject*, gc_allocator<JavaObject*> >::iterator i =
+ vm->globalRefs.begin(),
e = vm->globalRefs.end(); i!= e; ++i) {
if ((*i) == (JavaObject*)globalRef) {
vm->globalRefs.erase(i);
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Fri Apr 11 11:20:48 2008
@@ -191,7 +191,8 @@
}
void Jnjvm::readAttributs(Class* cl, Reader* reader,
- std::vector<Attribut*>& attr) {
+ std::vector<Attribut*,
+ gc_allocator<Attribut*> >& attr) {
JavaCtpInfo* ctpInfo = cl->ctpInfo;
unsigned short int nba = reader->readU2();
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Fri Apr 11 11:20:48 2008
@@ -186,7 +186,8 @@
void readParents(Class* cl, Reader* reader);
void loadParents(Class* cl);
- void readAttributs(Class* cl, Reader* reader, std::vector<Attribut*> & attr);
+ void readAttributs(Class* cl, Reader* reader,
+ std::vector<Attribut*, gc_allocator<Attribut*> > & attr);
void readFields(Class* cl, Reader* reader);
void readMethods(Class* cl, Reader* reader);
void readClass(Class* cl);
@@ -228,7 +229,7 @@
const char* classpath;
const char* libClasspathEnv;
const char* bootClasspathEnv;
- std::vector<JavaObject*> globalRefs;
+ std::vector<JavaObject*, gc_allocator<JavaObject*> > globalRefs;
mvm::Lock* globalRefsLock;
void setClasspath(char* cp) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Fri Apr 11 11:20:48 2008
@@ -56,7 +56,8 @@
typedef Container (*funcCreate)(Key& V, Jnjvm *vm);
mvm::Lock* lock;
- std::map<Key, Container, Compare> map;
+ std::map<Key, Container, Compare,
+ gc_allocator<std::pair<Key, Container> > > map;
inline Container lookupOrCreate(Key& V, Jnjvm *vm, funcCreate func) {
lock->lock();
@@ -99,7 +100,8 @@
typedef std::multimap<uint32, const UTF8*>::iterator iterator;
mvm::Lock* lock;
- std::multimap<uint32, const UTF8*> map;
+ std::multimap<uint32, const UTF8*, std::less<uint32>,
+ gc_allocator< std::pair<uint32, const UTF8*> > > map;
static VirtualTable* VT;
const UTF8* lookupOrCreateAsciiz(Jnjvm* vm, const char* asciiz);
const UTF8* lookupOrCreateReader(Jnjvm* vm, const uint16* buf, uint32 size);
Modified: vmkit/trunk/lib/JnJVM/VMCore/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Makefile.am?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Makefile.am (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Makefile.am Fri Apr 11 11:20:48 2008
@@ -1,11 +1,6 @@
EXTRA_DIST = OpcodeNames.def
lib_LTLIBRARIES = libJnJVM.la
-THREADDIR=../../Mvm/CommonThread
-ALLOCDIR=../../Mvm/Allocator
-GCDIR=../../Mvm/GCMmap2
-INCLUDEDIRS=-I at srcdir@/$(THREADDIR) -I at srcdir@/$(ALLOCDIR) -I at srcdir@/$(GCDIR)
-
PREFIX=@prefix@
libJnJVM_la_SOURCES = \
@@ -20,4 +15,4 @@
JnjvmModuleProvider.h JnjvmModuleProvider.cpp JavaRuntimeJIT.cpp JavaMetaJIT.cpp JavaJITInitialise.cpp \
LowerArrayLength.cpp ServiceDomain.cpp
-libJnJVM_la_CXXFLAGS =$(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2
+libJnJVM_la_CXXFLAGS =-DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2
Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Fri Apr 11 11:20:48 2008
@@ -116,28 +116,28 @@
name->markAndTrace();
}
-#define TRACE_VECTOR(type,name) { \
- for (std::vector<type>::iterator i = name.begin(), e = name.end(); \
- i!= e; ++i) { \
+#define TRACE_VECTOR(type,alloc,name) { \
+ for (std::vector<type, alloc<type> >::iterator i = name.begin(), \
+ e = name.end(); i!= e; ++i) { \
(*i)->markAndTrace(); }}
void CommonClass::tracer(size_t sz) {
name->markAndTrace();
super->markAndTrace();
superUTF8->markAndTrace();
- TRACE_VECTOR(const UTF8*, interfacesUTF8);
- TRACE_VECTOR(Class*, interfaces);
+ TRACE_VECTOR(const UTF8*, std::allocator, interfacesUTF8);
+ TRACE_VECTOR(Class*, std::allocator, interfaces);
//lockVar->markAndTrace();
//condVar->markAndTrace();
- TRACE_VECTOR(JavaMethod*, virtualMethods);
- TRACE_VECTOR(JavaMethod*, staticMethods);
- TRACE_VECTOR(JavaField*, virtualFields);
- TRACE_VECTOR(JavaField*, staticFields);
+ TRACE_VECTOR(JavaMethod*, std::allocator, virtualMethods);
+ TRACE_VECTOR(JavaMethod*, std::allocator, staticMethods);
+ TRACE_VECTOR(JavaField*, std::allocator, virtualFields);
+ TRACE_VECTOR(JavaField*, std::allocator, staticFields);
classLoader->markAndTrace();
#ifndef MULTIPLE_VM
delegatee->markAndTrace();
#endif
- TRACE_VECTOR(CommonClass*, display);
+ TRACE_VECTOR(CommonClass*, std::allocator, display);
isolate->markAndTrace();
}
@@ -147,8 +147,8 @@
_staticInstance->markAndTrace();
virtualInstance->markAndTrace();
ctpInfo->markAndTrace();
- TRACE_VECTOR(Attribut*, attributs);
- TRACE_VECTOR(Class*, innerClasses);
+ TRACE_VECTOR(Attribut*, gc_allocator, attributs);
+ TRACE_VECTOR(Class*, std::allocator, innerClasses);
outerClass->markAndTrace();
codeStaticTracer->markAndTrace();
codeVirtualTracer->markAndTrace();
@@ -163,8 +163,8 @@
void JavaMethod::tracer(size_t sz) {
signature->markAndTrace();
- TRACE_VECTOR(Attribut*, attributs);
- TRACE_VECTOR(Enveloppe*, caches);
+ TRACE_VECTOR(Attribut*, gc_allocator, attributs);
+ TRACE_VECTOR(Enveloppe*, gc_allocator, caches);
classDef->markAndTrace();
name->markAndTrace();
type->markAndTrace();
@@ -175,7 +175,7 @@
name->markAndTrace();
signature->markAndTrace();
type->markAndTrace();
- TRACE_VECTOR(Attribut*, attributs);
+ TRACE_VECTOR(Attribut*, gc_allocator, attributs);
classDef->markAndTrace();
}
@@ -186,7 +186,7 @@
}
void JavaCond::tracer(size_t sz) {
- TRACE_VECTOR(JavaThread*, threads);
+ TRACE_VECTOR(JavaThread*, std::allocator, threads);
}
void LockObj::tracer(size_t sz) {
@@ -220,7 +220,7 @@
void Signdef::tracer(size_t sz) {
Typedef::tracer(sz);
- TRACE_VECTOR(Typedef*, args);
+ TRACE_VECTOR(Typedef*, std::allocator, args);
ret->markAndTrace();
_staticCallBuf->markAndTrace();
_virtualCallBuf->markAndTrace();
@@ -241,7 +241,7 @@
loadedMethods->markAndTrace();
loadedFields->markAndTrace();
javaTypes->markAndTrace();
- TRACE_VECTOR(JavaObject*, globalRefs);
+ TRACE_VECTOR(JavaObject*, gc_allocator, globalRefs);
//globalRefsLock->markAndTrace();
functions->markAndTrace();
#ifdef MULTIPLE_VM
Modified: vmkit/trunk/lib/Mvm/Allocator/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Allocator/Makefile.am?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Allocator/Makefile.am (original)
+++ vmkit/trunk/lib/Mvm/Allocator/Makefile.am Fri Apr 11 11:20:48 2008
@@ -2,7 +2,7 @@
noinst_PROGRAMS = mainuvm_alloc
libuvm_alloc_a_SOURCES = gcalloc.cpp gcalloc.h gcchunk.cpp gcchunk.h gcerror.cpp gcerror.h gcmapper.cpp gcmapper.h osdep.h
-libuvm_alloc_a_CXXFLAGS = -O2 -W -Wall -Werror -ansi -pedantic -Wno-variadic-macros -Wno-unused-parameter -DSERVICE_VM
+libuvm_alloc_a_CXXFLAGS = -O2 -W -Wall -Werror -ansi -pedantic -Wno-variadic-macros -Wno-unused-parameter
mainuvm_alloc_SOURCES = main.cpp
mainuvm_alloc_CXXFLAGS =
Modified: vmkit/trunk/lib/Mvm/CommandLine.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommandLine.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/CommandLine.cpp (original)
+++ vmkit/trunk/lib/Mvm/CommandLine.cpp Fri Apr 11 11:20:48 2008
@@ -13,7 +13,7 @@
#include <stdlib.h>
#include "CommandLine.h"
-#include "mvm/GC/GC.h"
+#include "MvmGC.h"
#include "mvm/Threads/Thread.h"
using namespace mvm;
Modified: vmkit/trunk/lib/Mvm/CommonThread/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/Makefile.am?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/CommonThread/Makefile.am (original)
+++ vmkit/trunk/lib/Mvm/CommonThread/Makefile.am Fri Apr 11 11:20:48 2008
@@ -1,11 +1,6 @@
noinst_LIBRARIES = libuvm_common_thread.a
-GCDIR = ../GCMmap2
-GCLIBS = $(GCDIR)/libuvm_gc_mmap2.a
-ALLOCDIR = ../Allocator
-ALLOCLIBS = $(ALLOCDIR)/libuvm_alloc.a
-
libuvm_common_thread_a_SOURCES = cterror.h ctthread.cpp cterror.cpp ctlock.cpp
-libuvm_common_thread_a_CXXFLAGS = -frepo -O2 -W -Wall -Werror -ansi -pedantic -Wno-unused-parameter -DSERVICE_VM
+libuvm_common_thread_a_CXXFLAGS = -frepo -O2 -W -Wall -Werror -ansi -pedantic -Wno-unused-parameter
CLEANFILES = *~ *.bak .*.sw?
Modified: vmkit/trunk/lib/Mvm/GCMmap2/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/Makefile.am?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/Makefile.am (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/Makefile.am Fri Apr 11 11:20:48 2008
@@ -5,7 +5,7 @@
ALLOCDIR=../Allocator
INCLUDEDIRS=-I at srcdir@/$(THREADDIR) -I at srcdir@/$(ALLOCDIR)
-LIBTHREAD=$(THREADDIR)/libuvm_ at vvmthreadtype@_thread.a
+LIBTHREAD=$(THREADDIR)/libuvm_common_thread.a
LIBALLOC=$(ALLOCDIR)/libuvm_alloc.a
libuvm_gc_mmap2_a_SOURCES = gc.cpp gccollector.cpp gcinit.cpp gccollector.h
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Fri Apr 11 11:20:48 2008
@@ -15,103 +15,87 @@
using namespace mvm;
-#ifdef MULTIPLE_VM
-#define COLLECTOR ((GCCollector*)(mvm::Thread::get()->GC))->
-#else
-#define COLLECTOR GCCollector::
-#endif
-
typedef void (*memoryError_t)(unsigned int);
memoryError_t GCCollector::internMemoryError;
void gc::markAndTrace() const {
- COLLECTOR markAndTrace((void*)this);
+ GCCollector::markAndTrace((void*)this);
}
size_t gc::objectSize() const {
- return GCCollector::objectSize((gc*)this);
+ return GCCollector::objectSize((gc*)this);
}
void *gc::operator new(size_t sz, VirtualTable *vt) {
- return COLLECTOR gcmalloc(vt, sz);
+ return GCCollector::gcmalloc(vt, sz);
}
void *gc::operator new(size_t sz) {
- return malloc(sz);
+ return malloc(sz);
}
void gc::operator delete(void *) {
- gcfatal(0, "never call directly a destructor.....");
+ gcfatal(0, "never call directly a destructor.....");
}
void *gc::realloc(size_t n) {
- return COLLECTOR gcrealloc(this, n);
+ return GCCollector::gcrealloc(this, n);
}
unsigned int Collector::enable(unsigned int n) {
- return COLLECTOR enable(n);
+ return GCCollector::enable(n);
}
int Collector::isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2,
int a3, int a4, int a5, int a6, int a7) {
- return COLLECTOR isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7);
+ return GCCollector::isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7);
}
void Collector::die_if_sigsegv_occured_during_collection(void *addr) {
- COLLECTOR die_if_sigsegv_occured_during_collection(addr);
+ GCCollector::die_if_sigsegv_occured_during_collection(addr);
}
void Collector::gcStats(size_t &no, size_t &nbb) {
- COLLECTOR gcStats(&no, &nbb);
+ GCCollector::gcStats(&no, &nbb);
}
void Collector::initialise(markerFn marker, void *base_sp) {
-#ifdef HAVE_PTHREAD
- Thread::initialise();
-#endif
-#ifdef MULTIPLE_VM
- GCCollector* GC = new GCCollector();
- GC->initialise(marker);
- GC->inject_my_thread(base_sp);
- mvm::Thread::get()->GC = GC;
-#else
GCCollector::initialise(marker);
GCCollector::inject_my_thread(base_sp);
-#endif
}
void Collector::destroy() {
- COLLECTOR destroy();
+ GCCollector::destroy();
}
void Collector::inject_my_thread(void *base_sp) {
#ifdef HAVE_PTHREAD
- COLLECTOR inject_my_thread(base_sp);
+ GCCollector::inject_my_thread(base_sp);
#endif
}
void Collector::maybeCollect() {
- COLLECTOR maybeCollect();
+ GCCollector::maybeCollect();
}
void Collector::collect(void) {
- COLLECTOR collect();
+ GCCollector::collect();
}
gc *Collector::begOf(const void *obj) {
- return GCCollector::begOf((void*)obj);
+ return (gc*)GCCollector::begOf((void*)obj);
}
int Collector::byteOffset(void *obj) {
- int beg = (intptr_t)GCCollector::begOf(obj);
+ int beg = (intptr_t)GCCollector::begOf(obj);
intptr_t off = (intptr_t)obj;
return (off-beg);
}
-void Collector::applyFunc(void (*func)(gc *o, void *data), void *data) {
- return COLLECTOR applyFunc(func, data);
+void Collector::applyFunc(void (*func)(gcRoot *o, void *data), void *data) {
+ return GCCollector::applyFunc(func, data);
}
int Collector::getMaxMemory(void){
@@ -139,56 +123,57 @@
void Collector::remove_my_thread() {
#ifdef HAVE_PTHREAD
- COLLECTOR remove_thread(COLLECTOR threads->myloc());
+ GCCollector::remove_thread(GCCollector::threads->myloc());
#endif
}
#ifdef HAVE_PTHREAD
void GCCollector::siggc_handler(int) {
- GCThreadCollector *loc = COLLECTOR threads->myloc();
- register unsigned int cm = COLLECTOR current_mark;
- // jmp_buf buf;
-
- // setjmp(buf);
-
- COLLECTOR threads->stackLock();
-
- if(!loc) /* a key is being destroyed */
- COLLECTOR threads->another_mark();
- else if(loc->current_mark() != cm) {
- register unsigned int **cur = (unsigned int **)&cur;
- register unsigned int **max = loc->base_sp();
-
- GCChunkNode *node;
-
- for(; cur<max; cur++) {
- if((node = o2node(*cur)) && (!COLLECTOR isMarked(node))) {
- node->remove();
- node->append(COLLECTOR used_nodes);
- COLLECTOR mark(node);
- }
- }
-
- loc->current_mark(cm);
- COLLECTOR threads->another_mark();
-
- COLLECTOR threads->waitCollection();
- }
- COLLECTOR threads->stackUnlock();
+ GCThreadCollector *loc = GCCollector::threads->myloc();
+ register unsigned int cm = GCCollector::current_mark;
+ // jmp_buf buf;
+
+ // setjmp(buf);
+
+ GCCollector::threads->stackLock();
+
+ if(!loc) /* a key is being destroyed */
+ GCCollector::threads->another_mark();
+ else if(loc->current_mark() != cm) {
+ register unsigned int **cur = (unsigned int **)&cur;
+ register unsigned int **max = loc->base_sp();
+
+ GCChunkNode *node;
+
+ for(; cur<max; cur++) {
+ if((node = o2node(*cur)) && (!GCCollector::isMarked(node))) {
+ node->remove();
+ node->append(GCCollector::used_nodes);
+ GCCollector::mark(node);
+ }
+ }
+
+ loc->current_mark(cm);
+ GCCollector::threads->another_mark();
+
+ GCCollector::threads->waitCollection();
+ }
+ GCCollector::threads->stackUnlock();
}
#endif
void GCThread::waitCollection() {
- unsigned int cm = COLLECTOR current_mark;
+ unsigned int cm = GCCollector::current_mark;
- if(Thread::self() != collector_tid) {
- collectorGo();
- while((COLLECTOR current_mark == cm) &&
- (COLLECTOR status == GCCollector::stat_collect))
- _collectionCond.wait(&_stackLock);
- }
+ if(Thread::self() != collector_tid) {
+ collectorGo();
+ while((GCCollector::current_mark == cm) &&
+ (GCCollector::status == GCCollector::stat_collect))
+ _collectionCond.wait(&_stackLock);
+ }
}
Collector* Collector::allocate() {
return new GCCollector();
}
+
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h Fri Apr 11 11:20:48 2008
@@ -117,7 +117,7 @@
allocator->free(ptr);
}
- static inline gc *begOf(void *p) {
+ static inline void *begOf(void *p) {
GCChunkNode *node = o2node(p);
if(node)
return node->chunk()->_2gc();
@@ -144,7 +144,7 @@
collect();
}
- STATIC inline gc *gcmalloc(VirtualTable *vt, size_t n) {
+ STATIC inline void *gcmalloc(VirtualTable *vt, size_t n) {
lock();
register GCChunkNode *header = allocator->alloc_chunk(n + sizeof(gc_header), 1, current_mark & 1);
@@ -163,7 +163,7 @@
return p->_2gc();
}
- STATIC inline gc *gcrealloc(void *ptr, size_t n) {
+ STATIC inline void *gcrealloc(void *ptr, size_t n) {
lock();
GCPage *desc = GCHash::get(ptr);
@@ -221,7 +221,7 @@
}
}
- STATIC inline void applyFunc(void (*func)(gc *o, void *data), void *data){
+ STATIC inline void applyFunc(void (*func)(gcRoot *o, void *data), void *data){
lock(); /* Make sure no one collects or allocates */
status = stat_collect; /* Forbids collections */
GCChunkNode *cur=used_nodes->next(); /* Get starter */
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h Fri Apr 11 11:20:48 2008
@@ -11,7 +11,6 @@
#define _GC_THREAD_H_
#include "ctcircular.h"
-#include "mvm/GC/GC.h"
#include "mvm/Threads/Cond.h"
#include "mvm/Threads/Key.h"
#include "mvm/Threads/Locks.h"
@@ -22,117 +21,117 @@
namespace mvm {
class GCThreadCollector : public CircularBase {
- void *_base_sp;
- int _cur_mark;
- int _tid;
-
+ void *_base_sp;
+ int _cur_mark;
+ int _tid;
+
public:
- inline GCThreadCollector() {}
- inline GCThreadCollector(GCThreadCollector *pred, int t, void *p, int m) : CircularBase(pred) {
- _base_sp = p;
- _cur_mark = m;
- _tid = t;
- }
-
- /* This function is only called in two cases:
- * 1) When a thread quits, in which case everything is already done.
- * 2) When the collector quits, in which case all memory is freed.
- */
- inline ~GCThreadCollector() {}
-
- inline int tid() { return _tid; }
- inline unsigned int current_mark() { return _cur_mark; }
- inline void current_mark(unsigned int m) { _cur_mark = m; }
- inline unsigned int **base_sp() { return (unsigned int **)_base_sp; }
+ inline GCThreadCollector() {}
+ inline GCThreadCollector(GCThreadCollector *pred, int t, void *p, int m) : CircularBase(pred) {
+ _base_sp = p;
+ _cur_mark = m;
+ _tid = t;
+ }
+
+ /* This function is only called in two cases:
+ * 1) When a thread quits, in which case everything is already done.
+ * 2) When the collector quits, in which case all memory is freed.
+ */
+ inline ~GCThreadCollector() {}
+
+ inline int tid() { return _tid; }
+ inline unsigned int current_mark() { return _cur_mark; }
+ inline void current_mark(unsigned int m) { _cur_mark = m; }
+ inline unsigned int **base_sp() { return (unsigned int **)_base_sp; }
};
class GCLockRecovery : public LockNormal {
- gc_lock_recovery_fct_t _fct;
- int _args[8];
-
+ gc_lock_recovery_fct_t _fct;
+ int _args[8];
+
public:
- inline GCLockRecovery() { _fct = 0; }
+ inline GCLockRecovery() { _fct = 0; }
- int verify_recall(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7);
+ int verify_recall(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7);
- inline void unlock_dont_recovery() {
- if(owner() == Thread::self()) {
- LockNormal::unlock();
- }
- }
-
- inline void unlock() {
- if(_fct) {
- gc_lock_recovery_fct_t tmp = _fct;
- int l[8];
- l[0] = _args[0]; l[1] = _args[1]; l[2] = _args[2]; l[3] = _args[3];
- l[4] = _args[4]; l[5] = _args[5]; l[6] = _args[6]; l[7] = _args[7];
- _fct = 0;
- LockNormal::unlock();
- tmp(l[0], l[1], l[2], l[3], l[4], l[5], l[6], l[7]);
- } else
- LockNormal::unlock();
- }
+ inline void unlock_dont_recovery() {
+ if(owner() == Thread::self()) {
+ LockNormal::unlock();
+ }
+ }
+
+ inline void unlock() {
+ if(_fct) {
+ gc_lock_recovery_fct_t tmp = _fct;
+ int l[8];
+ l[0] = _args[0]; l[1] = _args[1]; l[2] = _args[2]; l[3] = _args[3];
+ l[4] = _args[4]; l[5] = _args[5]; l[6] = _args[6]; l[7] = _args[7];
+ _fct = 0;
+ LockNormal::unlock();
+ tmp(l[0], l[1], l[2], l[3], l[4], l[5], l[6], l[7]);
+ } else
+ LockNormal::unlock();
+ }
};
class GCThread {
- Key<GCThreadCollector> _loc;
- GCThreadCollector base;
- GCLockRecovery _globalLock; /* global lock for gcmalloc */
- LockNormal _stackLock; /* stack lock for synchronization */
- Cond _stackCond; /* condition for unlocking other tasks (write protect) */
- Cond _collectionCond;/* condition for unblocking the collecter */
- unsigned int _nb_threads; /* number of active threads */
- unsigned int _nb_collected; /* number of threads collected */
- int collector_tid; /* don't synchonize this one */
+ Key<GCThreadCollector> _loc;
+ GCThreadCollector base;
+ GCLockRecovery _globalLock; /* global lock for gcmalloc */
+ LockNormal _stackLock; /* stack lock for synchronization */
+ Cond _stackCond; /* condition for unlocking other tasks (write protect) */
+ Cond _collectionCond;/* condition for unblocking the collecter */
+ unsigned int _nb_threads; /* number of active threads */
+ unsigned int _nb_collected; /* number of threads collected */
+ int collector_tid; /* don't synchonize this one */
public:
- inline void lock() { _globalLock.lock(); }
- inline void unlock() { _globalLock.unlock(); }
- inline void unlock_dont_recovery() { _globalLock.unlock_dont_recovery(); }
- inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7) {
- return _globalLock.verify_recall(fct, a0, a1, a2, a3, a4, a5, a6, a7);
- }
-
- inline void stackLock() { _stackLock.lock(); }
- inline void stackUnlock() { _stackLock.unlock(); }
-
- void waitStacks();
- void waitCollection();
- inline void collectionFinished() { _collectionCond.broadcast(); }
- inline void collectorGo() { _stackCond.broadcast(); }
-
- inline void cancel() {
- _nb_collected = _nb_threads; /* all stacks have been collected */
- collectorGo(); /* unblock all threads in stack collection */
- collectionFinished(); /* unblock mutators */
- }
-
- inline GCThreadCollector *myloc() { return _loc.get(); }
-
- inline void another_mark() { _nb_collected++; }
-
- void synchronize();
-
- inline void remove(GCThreadCollector *loc) {
- lock();
- loc->remove();
- _nb_threads--;
- delete loc;
- unlock();
- }
-
- inline void inject(void *sp, int m) {
- GCThreadCollector *me = _loc.get();
- if(me)
- gcfatal("thread %d is already in pool for allocator %p", Thread::self(), this);
- lock(); /* the new should be protected */
- me = new GCThreadCollector(&base, Thread::self(), sp, m);
- _nb_threads++;
- _loc.set(me);
- unlock();
- }
+ inline void lock() { _globalLock.lock(); }
+ inline void unlock() { _globalLock.unlock(); }
+ inline void unlock_dont_recovery() { _globalLock.unlock_dont_recovery(); }
+ inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7) {
+ return _globalLock.verify_recall(fct, a0, a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ inline void stackLock() { _stackLock.lock(); }
+ inline void stackUnlock() { _stackLock.unlock(); }
+
+ void waitStacks();
+ void waitCollection();
+ inline void collectionFinished() { _collectionCond.broadcast(); }
+ inline void collectorGo() { _stackCond.broadcast(); }
+
+ inline void cancel() {
+ _nb_collected = _nb_threads; /* all stacks have been collected */
+ collectorGo(); /* unblock all threads in stack collection */
+ collectionFinished(); /* unblock mutators */
+ }
+
+ inline GCThreadCollector *myloc() { return _loc.get(); }
+
+ inline void another_mark() { _nb_collected++; }
+
+ void synchronize();
+
+ inline void remove(GCThreadCollector *loc) {
+ lock();
+ loc->remove();
+ _nb_threads--;
+ delete loc;
+ unlock();
+ }
+
+ inline void inject(void *sp, int m) {
+ GCThreadCollector *me = _loc.get();
+ if(me)
+ gcfatal("thread %d is already in pool for allocator %p", Thread::self(), this);
+ lock(); /* the new should be protected */
+ me = new GCThreadCollector(&base, Thread::self(), sp, m);
+ _nb_threads++;
+ _loc.set(me);
+ unlock();
+ }
};
}
Modified: vmkit/trunk/lib/Mvm/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Main.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Main.cpp (original)
+++ vmkit/trunk/lib/Mvm/Main.cpp Fri Apr 11 11:20:48 2008
@@ -7,7 +7,7 @@
//
//===----------------------------------------------------------------------===//
-#include "mvm/GC/GC.h"
+#include "MvmGC.h"
#include "mvm/JIT.h"
#include "mvm/PrintBuffer.h"
#include "mvm/Threads/Thread.h"
@@ -45,6 +45,7 @@
" VMKit: a virtual machine launcher\n");
jit::initialise();
Object::initialise();
+ Thread::initialise();
Collector::initialise(Object::markAndTraceRoots, &base);
CommandLine cl;
Modified: vmkit/trunk/lib/Mvm/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Makefile.am?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Makefile.am (original)
+++ vmkit/trunk/lib/Mvm/Makefile.am Fri Apr 11 11:20:48 2008
@@ -3,18 +3,9 @@
bin_PROGRAMS = main
-THREADDIR=CommonThread
-ALLOCDIR=Allocator
-GCDIR=GCMmap2
-INCLUDEDIRS=-I at srcdir@/$(THREADDIR) -I at srcdir@/$(ALLOCDIR) -I at srcdir@/$(GCDIR)
-
-LIBTHREAD=$(THREADDIR)/libuvm_ at vvmthreadtype@_thread.a
-LIBALLOC=$(ALLOCDIR)/libuvm_alloc.a
-LIBGC=$(GCDIR)/libuvm_gc_ at vvmgctype@.a @GC_LIBS@
-LIBSUVM=$(LIBGC) $(LIBALLOC) $(LIBTHREAD)
PREFIX=@prefix@
main_SOURCES = Main.cpp Object.cpp Sigsegv.cpp JIT.cpp CommandLine.cpp CommandLine.h MvmMemoryManager.h MvmMemoryManager.cpp EscapeAnalysis.cpp Disassembler.cpp
-main_CXXFLAGS = $(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -pedantic -Wno-long-long -fno-omit-frame-pointer -O2 -g -DSERVICE_VM
+main_CXXFLAGS = -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -pedantic -Wno-long-long -fno-omit-frame-pointer -O2 -g
main_LDFLAGS=@rdynamic@
-main_LDADD = $(LIBSUVM) @LLVMDYLIB@
+main_LDADD = @LLVMDYLIB@ @GC_LIBS@ @GCTHREAD_LIBS@
Modified: vmkit/trunk/lib/Mvm/MvmMemoryManager.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MvmMemoryManager.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/MvmMemoryManager.cpp (original)
+++ vmkit/trunk/lib/Mvm/MvmMemoryManager.cpp Fri Apr 11 11:20:48 2008
@@ -25,7 +25,7 @@
Method* meth = gc_new(Method)(res, ActualSize);
res->method(meth);
currentMethod = meth;
- return (unsigned char*) (res + 1);
+ return (unsigned char*)((unsigned int*)res + 2);
}
unsigned char *MvmMemoryManager::allocateStub(unsigned StubSize,
@@ -35,7 +35,7 @@
Method* meth = gc_new(Method)(res, StubSize);
res->method(meth);
Object::pushRoot(meth);
- return (unsigned char*) (res + 1);
+ return (unsigned char*)((unsigned int*)res + 2);
}
void MvmMemoryManager::endFunctionBody(const Function *F,
@@ -62,7 +62,7 @@
ExceptionTable *res = (ExceptionTable*)gc::operator new(ActualSize + 4,
ExceptionTable::VT);
currentMethod->exceptionTable(res);
- return (unsigned char*)(res + 1);
+ return (unsigned char*)((unsigned int*)res + 2);
}
void MvmMemoryManager::endExceptionTable(const Function *F,
Modified: vmkit/trunk/lib/Mvm/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Object.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Object.cpp Fri Apr 11 11:20:48 2008
@@ -9,10 +9,10 @@
#include <stdlib.h>
+#include "MvmGC.h"
#include "mvm/Method.h"
#include "mvm/Object.h"
#include "mvm/PrintBuffer.h"
-#include "mvm/GC/GC.h"
#include "mvm/Threads/Key.h"
#include "mvm/Threads/Thread.h"
Modified: vmkit/trunk/lib/Mvm/Sigsegv.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Sigsegv.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Sigsegv.cpp (original)
+++ vmkit/trunk/lib/Mvm/Sigsegv.cpp Fri Apr 11 11:20:48 2008
@@ -8,7 +8,7 @@
//===----------------------------------------------------------------------===//
-#include "mvm/GC/GC.h"
+#include "MvmGC.h"
#include "mvm/Sigsegv.h"
#include <signal.h>
Modified: vmkit/trunk/lib/Mvm/VTOffset.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/VTOffset.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/VTOffset.cpp (original)
+++ vmkit/trunk/lib/Mvm/VTOffset.cpp Fri Apr 11 11:20:48 2008
@@ -12,7 +12,7 @@
#include <signal.h>
#include <stdio.h>
-#include "mvm/GC/GC.h"
+#include "MvmGC.h"
#include "mvm/PrintBuffer.h"
#include "mvm/Threads/Thread.h"
#include "mvm/Sigsegv.h"
Modified: vmkit/trunk/lib/N3/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Main.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/Main.cpp (original)
+++ vmkit/trunk/lib/N3/Main.cpp Fri Apr 11 11:20:48 2008
@@ -7,9 +7,10 @@
//
//===----------------------------------------------------------------------===//
+#include "MvmGC.h"
#include "mvm/JIT.h"
-#include "mvm/GC/GC.h"
#include "mvm/PrintBuffer.h"
+#include "mvm/Threads/Thread.h"
#include "llvm/Support/ManagedStatic.h"
@@ -24,6 +25,7 @@
llvm::llvm_shutdown_obj X;
int base;
+ Thread::initialise();
jit::initialise();
Object::initialise();
Collector::initialise(Object::markAndTraceRoots, &base);
Modified: vmkit/trunk/lib/N3/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Makefile.am?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/Makefile.am (original)
+++ vmkit/trunk/lib/N3/Makefile.am Fri Apr 11 11:20:48 2008
@@ -1,19 +1,10 @@
SUBDIRS = VMCore
bin_PROGRAMS = main
-THREADDIR=../Mvm/CommonThread
-ALLOCDIR=../Mvm/Allocator
-GCDIR=../Mvm/GCMmap2
-INCLUDEDIRS=-I at srcdir@/$(THREADDIR) -I at srcdir@/$(ALLOCDIR) -I at srcdir@/$(GCDIR)
-
-LIBTHREAD=$(THREADDIR)/libuvm_ at vvmthreadtype@_thread.a
-LIBALLOC=$(ALLOCDIR)/libuvm_alloc.a
-LIBGC=$(GCDIR)/libuvm_gc_ at vvmgctype@.a @GC_LIBS@
PREFIX=@prefix@
-LIBSUVM=$(LIBGC) $(LIBALLOC) $(LIBTHREAD)
main_SOURCES = ../Mvm/Object.cpp ../Mvm/Sigsegv.cpp Main.cpp ../Mvm/MvmMemoryManager.cpp ../Mvm/JIT.cpp ../Mvm/EscapeAnalysis.cpp
-main_CXXFLAGS = $(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2 -DSINGLE_VM
-main_LDADD = VMCore/.libs/libN3.a $(LIBSUVM) @LLVMDYLIB@
+main_CXXFLAGS = -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2
+main_LDADD = VMCore/.libs/libN3.a @GC_LIBS@ @GCTHREAD_LIBS@ @LLVMDYLIB@
main_LDFLAGS = @rdynamic@
Modified: vmkit/trunk/lib/N3/VMCore/Assembly.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Assembly.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Assembly.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/Assembly.cpp Fri Apr 11 11:20:48 2008
@@ -189,7 +189,8 @@
return ass;
}
-static void unimplemented(uint32 index, std::vector<Table*>& tables,
+static void unimplemented(uint32 index,
+ std::vector<Table*, gc_allocator<Table*> >& tables,
uint32 heapSizes) {
VMThread::get()->vm->error("Unknown table %x", index);
}
@@ -523,7 +524,8 @@
offset = reader->cursor;
uint32 index = 0;
- for (std::vector<Table*>::iterator i = CLIHeader->tables.begin(),
+ for (std::vector<Table*, gc_allocator<Table*> >::iterator i =
+ CLIHeader->tables.begin(),
e = CLIHeader->tables.end(); i != e; ++i, ++index) {
Table* table = (*i);
if (table->rowsNumber) {
Modified: vmkit/trunk/lib/N3/VMCore/Assembly.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Assembly.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Assembly.h (original)
+++ vmkit/trunk/lib/N3/VMCore/Assembly.h Fri Apr 11 11:20:48 2008
@@ -118,12 +118,13 @@
Stream* usStream;
Stream* blobStream;
Stream* guidStream;
- std::vector<Table*> tables;
+ std::vector<Table*, gc_allocator<Table*> > tables;
void read(Reader* reader, N3* vm);
};
-typedef void (*maskVector_t)(uint32 index, std::vector<Table*>& tables,
+typedef void (*maskVector_t)(uint32 index,
+ std::vector<Table*, gc_allocator<Table*> >& tables,
uint32 heapSizes);
typedef VMCommonClass* (*signatureVector_t)(uint32 op, Assembly* ass,
@@ -562,7 +563,9 @@
#define DEF_TABLE_MASK(name, nb, ...) \
- static void name(uint32 index, std::vector<Table*>& tables, uint32 heapSizes) { \
+ static void name(uint32 index, \
+ std::vector<Table*, gc_allocator<Table*> >& tables, \
+ uint32 heapSizes) { \
Table* table = tables[index]; \
uint32 rowSize = 0; \
uint32 bitmask = 0; \
Modified: vmkit/trunk/lib/N3/VMCore/BackTrace.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/BackTrace.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/BackTrace.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/BackTrace.cpp Fri Apr 11 11:20:48 2008
@@ -37,8 +37,9 @@
while (n < real_size) {
int *begIp = (int*)Collector::begOf(ips[n++]);
if (begIp) {
+ unsigned char* val = (unsigned char*)begIp + sizeof(mvm::Code);
const llvm::GlobalValue * glob =
- mvm::jit::executionEngine->getGlobalValueAtAddress(begIp + 1);
+ mvm::jit::executionEngine->getGlobalValueAtAddress(val);
if (glob) {
if (llvm::isa<llvm::Function>(glob)) {
mvm::Code* c = (mvm::Code*)begIp;
@@ -47,7 +48,8 @@
if (meth)
printf("; 0x%08x in %s\n", (uint32) ips[n - 1], meth->printString());
else
- printf("; 0x%08x in %s\n", (uint32) ips[n - 1], ((llvm::Function*)glob)->getNameStr().c_str());
+ printf("; 0x%08x in %s\n", (uint32) ips[n - 1],
+ ((llvm::Function*)glob)->getNameStr().c_str());
} else VMThread::get()->vm->unknownError("in global variable?");
} else printf("; 0x%08x in stub\n", (uint32) ips[n - 1]);
} else {
@@ -72,8 +74,9 @@
while (n < real_size) {
int *begIp = (int*)Collector::begOf(ips[n++]);
if (begIp) {
+ unsigned char* val = (unsigned char*)begIp + sizeof(mvm::Code);
const llvm::GlobalValue * glob =
- mvm::jit::executionEngine->getGlobalValueAtAddress(begIp + 1);
+ mvm::jit::executionEngine->getGlobalValueAtAddress(val);
if (glob) {
if (llvm::isa<llvm::Function>(glob)) {
mvm::Code* c = (mvm::Code*)begIp;
@@ -101,8 +104,9 @@
while (n < real_size) {
int *begIp = (int*)Collector::begOf(ips[n++]);
if (begIp) {
+ unsigned char* val = (unsigned char*)begIp + sizeof(mvm::Code);
const llvm::GlobalValue * glob =
- mvm::jit::executionEngine->getGlobalValueAtAddress(begIp + 1);
+ mvm::jit::executionEngine->getGlobalValueAtAddress(val);
if (glob) {
if (llvm::isa<llvm::Function>(glob)) {
mvm::Code* c = (mvm::Code*)begIp;
Modified: vmkit/trunk/lib/N3/VMCore/CLIJit.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIJit.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIJit.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIJit.cpp Fri Apr 11 11:20:48 2008
@@ -53,6 +53,7 @@
buf->write("Exception<>");
}
+#ifdef WITH_TRACER
// for structs
static void traceStruct(VMCommonClass* cl, BasicBlock* block, Value* arg) {
for (std::vector<VMField*>::iterator i = cl->virtualFields.begin(),
@@ -115,8 +116,12 @@
}
}
}
+#endif
VirtualTable* CLIJit::makeArrayVT(VMClassArray* cl) {
+ VirtualTable * res = malloc(VT_SIZE);
+ memcpy(res, VMObject::VT, VT_SIZE);
+#ifdef WITH_TRACER
Function* func = Function::Create(markAndTraceLLVMType,
GlobalValue::ExternalLinkage,
"markAndTraceObject",
@@ -194,17 +199,19 @@
}
- VirtualTable * res = malloc(VT_SIZE);
- memcpy(res, VMObject::VT, VT_SIZE);
void* tracer = mvm::jit::executionEngine->getPointerToGlobal(func);
((void**)res)[VT_TRACER_OFFSET] = tracer;
cl->virtualTracer = func;
cl->codeVirtualTracer = (mvm::Code*)((intptr_t)tracer - sizeof(intptr_t));
+#endif
return res;
}
VirtualTable* CLIJit::makeVT(VMClass* cl, bool stat) {
+ VirtualTable * res = malloc(VT_SIZE);
+ memcpy(res, VMObject::VT, VT_SIZE);
+#ifdef WITH_TRACER
const Type* type = stat ? cl->staticType : cl->virtualType;
std::vector<VMField*> &fields = stat ? cl->staticFields : cl->virtualFields;
@@ -226,8 +233,6 @@
traceClass(cl, block, realArg, fields, (cl->super == N3::pValue && !stat));
ReturnInst::Create(block);
- VirtualTable * res = malloc(VT_SIZE);
- memcpy(res, VMObject::VT, VT_SIZE);
void* tracer = mvm::jit::executionEngine->getPointerToGlobal(func);
((void**)res)[VT_TRACER_OFFSET] = tracer;
@@ -238,8 +243,8 @@
cl->staticTracer = func;
cl->codeStaticTracer = (mvm::Code*)((intptr_t)tracer - sizeof(intptr_t));
}
+#endif
return res;
-
}
BasicBlock* CLIJit::createBasicBlock(const char* name) {
@@ -1570,6 +1575,7 @@
PointerType::getUnqual(StructType::get(arrayFields, false));
}
+#ifdef WITH_TRACER
// Create markAndTraceLLVM
{
std::vector<const Type*> args;
@@ -1580,6 +1586,7 @@
"_ZNK2gc12markAndTraceEv",
module);
}
+#endif
// Create vmObjectTracerLLVM
{
Modified: vmkit/trunk/lib/N3/VMCore/CLIJit.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIJit.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIJit.h (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIJit.h Fri Apr 11 11:20:48 2008
@@ -158,8 +158,10 @@
static llvm::Function* compile(VMClass* cl, VMMethod* meth);
+#ifdef WITH_TRACER
static llvm::Function* markAndTraceLLVM;
static const llvm::FunctionType* markAndTraceLLVMType;
+#endif
static llvm::Function* vmObjectTracerLLVM;
static llvm::Function* arrayConsLLVM;
static llvm::Function* arrayMultiConsLLVM;
Modified: vmkit/trunk/lib/N3/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/LockedMap.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/N3/VMCore/LockedMap.h Fri Apr 11 11:20:48 2008
@@ -44,7 +44,8 @@
typedef Container* (*funcCreate)(Key& V, Upcall* ass);
mvm::Lock* lock;
- std::map<Key, Container*, Compare> map;
+ std::map<Key, Container*, Compare,
+ gc_allocator<std::pair<Key, Container*> > > map;
inline Container* lookupOrCreate(Key& V, Upcall* ass, funcCreate func) {
lock->lock();
@@ -203,7 +204,8 @@
typedef std::multimap<uint32, const UTF8*>::iterator iterator;
mvm::Lock* lock;
- std::multimap<uint32, const UTF8*> map;
+ std::multimap<uint32, const UTF8*, std::less<uint32>,
+ gc_allocator<std::pair<uint32, const UTF8*> > > map;
static VirtualTable* VT;
const UTF8* lookupOrCreateAsciiz(const char* asciiz);
const UTF8* lookupOrCreateReader(const uint16* buf, uint32 size);
Modified: vmkit/trunk/lib/N3/VMCore/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Makefile.am?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Makefile.am (original)
+++ vmkit/trunk/lib/N3/VMCore/Makefile.am Fri Apr 11 11:20:48 2008
@@ -1,11 +1,6 @@
EXTRA_DIST = SignatureNames.def OpcodeNames.def
lib_LTLIBRARIES = libN3.la
-THREADDIR=../../Mvm/CommonThread
-ALLOCDIR=../../Mvm/Allocator
-GCDIR=../../Mvm/GCMmap2
-INCLUDEDIRS=-I at srcdir@/$(THREADDIR) -I at srcdir@/$(ALLOCDIR) -I at srcdir@/$(GCDIR)
-
PREFIX=@prefix@
libN3_la_SOURCES = \
@@ -16,4 +11,4 @@
Opcodes.cpp NativeUtil.h NativeUtil.cpp PNetLib.cpp N3ModuleProvider.cpp N3ModuleProvider.h \
PNetLib.h BackTrace.cpp LowerArrayLength.cpp
-libN3_la_CXXFLAGS =$(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -O2 -DSINGLE_VM
+libN3_la_CXXFLAGS =-DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -O2
Modified: vmkit/trunk/lib/N3/VMCore/N3.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3.cpp Fri Apr 11 11:20:48 2008
@@ -117,7 +117,7 @@
} else {
sprintf(buf, "%s%s", cur, asciiz);
}
-
+
res = Reader::openFile(buf);
++idx;
}
Modified: vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Fri Apr 11 11:20:48 2008
@@ -128,8 +128,10 @@
llvm::Function* CLIJit::compareExceptionLLVM;
llvm::Function* CLIJit::arrayLengthLLVM;
+#ifdef WITH_TRACER
llvm::Function* CLIJit::markAndTraceLLVM;
const llvm::FunctionType* CLIJit::markAndTraceLLVMType;
+#endif
llvm::Function* CLIJit::vmObjectTracerLLVM;
llvm::Function* CLIJit::initialiseClassLLVM;
llvm::Function* CLIJit::virtualLookupLLVM;
@@ -251,7 +253,7 @@
const UTF8* mscorlib = vm->asciizConstructUTF8("mscorlib");
Assembly* ass = vm->loadAssembly(mscorlib, "dll");
if (ass == 0)
- VMThread::get()->vm->error("can not find mscorlib.dll. Abort");
+ VMThread::get()->vm->error("can not load mscorlib.dll. Abort");
vm->coreAssembly = ass;
Modified: vmkit/trunk/lib/N3/VMCore/N3ModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3ModuleProvider.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3ModuleProvider.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3ModuleProvider.cpp Fri Apr 11 11:20:48 2008
@@ -11,6 +11,7 @@
#include <llvm/ModuleProvider.h>
#include "mvm/JIT.h"
+#include "mvm/Method.h"
#include "Assembly.h"
#include "CLIJit.h"
@@ -39,7 +40,7 @@
if (res == 0) {
CLIJit::compile(meth->classDef, meth);
void* res = mvm::jit::executionEngine->getPointerToGlobal(meth->methPtr);
- meth->code = (mvm::Code*)((intptr_t)res - sizeof(intptr_t));
+ meth->code = (mvm::Code*)((intptr_t)res - sizeof(mvm::Code));
meth->code->method()->definition(meth);
}
meth->classDef->release();
Modified: vmkit/trunk/lib/N3/VMCore/PNetLib.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/PNetLib.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/PNetLib.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/PNetLib.cpp Fri Apr 11 11:20:48 2008
@@ -678,21 +678,19 @@
#define ASSEMBLY_VALUE(obj) ((Assembly**)obj)[3]
-#if !defined(__GNU__)
-void* memrchr(const void* s, int c, size_t n) {
- unsigned char* m = (unsigned char*) s;
+void* sys_memrchr(const void* s, int c, size_t n) {
+ unsigned char* m = (unsigned char*) s + n;
for (;;) {
if (!(n--)) return NULL;
else if (*m-- == (unsigned char)c) return (void*)(m+1);
}
}
-#endif
extern "C" VMObject* System_Reflection_Assembly_GetType(VMObject* obj, CLIString* str, bool onError, bool ignoreCase) {
Assembly* ass = ASSEMBLY_VALUE(obj);
const UTF8* utf8 = str->value;
char* asciiz = utf8->UTF8ToAsciiz();
- char* index = (char*)memrchr(asciiz, '.', strlen(asciiz));
+ char* index = (char*)sys_memrchr(asciiz, '.', strlen(asciiz));
N3* vm = ass->vm;
index[0] = 0;
@@ -717,9 +715,10 @@
VMCommonClass* type = (VMCommonClass*)((*N3::typeClrType)(Type).PointerVal);
const UTF8* name = str->value;
if (memberTypes == MEMBER_TYPES_PROPERTY) {
- std::vector<Property*> properties = type->properties;
+ std::vector<Property*, gc_allocator<Property*> > properties =
+ type->properties;
Property *res = 0;
- for (std::vector<Property*>::iterator i = properties.begin(),
+ for (std::vector<Property*, gc_allocator<Property*> >::iterator i = properties.begin(),
e = properties.end(); i!= e; ++i) {
if ((*i)->name == name) {
res = *i;
Modified: vmkit/trunk/lib/N3/VMCore/VMClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMClass.h?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMClass.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMClass.h Fri Apr 11 11:20:48 2008
@@ -62,7 +62,7 @@
VMObject* delegatee;
std::vector<VMCommonClass*> display;
Assembly* assembly;
- std::vector<Property*> properties;
+ std::vector<Property*, gc_allocator<Property*> > properties;
llvm::Function* virtualTracer;
llvm::Function* staticTracer;
@@ -196,8 +196,8 @@
VMObject* delegatee;
VMObject* getMethodDelegatee();
- std::vector<Param*> params;
- std::vector<Enveloppe*> caches;
+ std::vector<Param*, gc_allocator<Param*> > params;
+ std::vector<Enveloppe*, gc_allocator<Enveloppe*> > caches;
std::vector<VMCommonClass*> parameters;
VMClass* classDef;
llvm::Function* compiledPtr();
Modified: vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp?rev=49536&r1=49535&r2=49536&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Fri Apr 11 11:20:48 2008
@@ -136,8 +136,8 @@
#undef ARRAYTRACER
-#define TRACE_VECTOR(type,name) { \
- for (std::vector<type>::iterator i = name.begin(), e = name.end(); \
+#define TRACE_VECTOR(type, name, alloc) { \
+ for (std::vector<type, alloc<type> >::iterator i = name.begin(), e = name.end(); \
i!= e; ++i) { \
(*i)->markAndTrace(); }}
@@ -145,20 +145,20 @@
name->markAndTrace();
nameSpace->markAndTrace();
super->markAndTrace();
- TRACE_VECTOR(VMClass*, interfaces);
+ TRACE_VECTOR(VMClass*, interfaces, std::allocator);
//lockVar->markAndTrace();
//condVar->markAndTrace();
- TRACE_VECTOR(VMMethod*, virtualMethods);
- TRACE_VECTOR(VMMethod*, staticMethods);
- TRACE_VECTOR(VMField*, virtualFields);
- TRACE_VECTOR(VMField*, staticFields);
+ TRACE_VECTOR(VMMethod*, virtualMethods, std::allocator);
+ TRACE_VECTOR(VMMethod*, staticMethods, std::allocator);
+ TRACE_VECTOR(VMField*, virtualFields, std::allocator);
+ TRACE_VECTOR(VMField*, staticFields, std::allocator);
delegatee->markAndTrace();
- TRACE_VECTOR(VMCommonClass*, display);
+ TRACE_VECTOR(VMCommonClass*, display, std::allocator);
vm->markAndTrace();
assembly->markAndTrace();
//funcs->markAndTrace();
- TRACE_VECTOR(Property*, properties);
+ TRACE_VECTOR(Property*, properties, gc_allocator);
codeVirtualTracer->markAndTrace();
codeStaticTracer->markAndTrace();
}
@@ -167,7 +167,7 @@
VMCommonClass::tracer(sz);
staticInstance->markAndTrace();
virtualInstance->markAndTrace();
- TRACE_VECTOR(VMClass*, innerClasses);
+ TRACE_VECTOR(VMClass*, innerClasses, std::allocator);
outerClass->markAndTrace();
}
@@ -186,8 +186,8 @@
delegatee->markAndTrace();
//signature->markAndTrace();
classDef->markAndTrace();
- TRACE_VECTOR(Param*, params);
- TRACE_VECTOR(Enveloppe*, caches);
+ TRACE_VECTOR(Param*, params, gc_allocator);
+ TRACE_VECTOR(Enveloppe*, caches, gc_allocator);
name->markAndTrace();
code->markAndTrace();
}
@@ -199,7 +199,7 @@
}
void VMCond::tracer(size_t sz) {
- TRACE_VECTOR(VMThread*, threads);
+ TRACE_VECTOR(VMThread*, threads, std::allocator);
}
void LockObj::tracer(size_t sz) {
@@ -281,7 +281,7 @@
usStream->markAndTrace();
blobStream->markAndTrace();
guidStream->markAndTrace();
- TRACE_VECTOR(Table*, tables);
+ TRACE_VECTOR(Table*, tables, gc_allocator);
}
void CLIString::tracer(size_t sz) {
More information about the llvm-commits
mailing list