[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