[Vm-dev] Cog FreeBSD patches

David Graham dgraham at unthinkable.org
Mon Mar 21 13:50:25 UTC 2011


Hello,

I've noticed a few emails about running Cog on FreeBSD on some of the other mailing lists and was wondering if it would be possible to get a few patches integrated into the main repository?  Sorry if I'm not following protocol for patch submission or style, I couldn't find any guidelines.  I'd be happy to resubmit if this isn't the place.

With the following patches, Cog r2372 will compile and run on FreeBSD (and PCBSD) 8.2 i386.  I've been able to use Squeak, Pharo, and Seaside images.  Here is the configure line:

../../platforms/unix/config/configure CFLAGS="-g -O2 -msse2 -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DCOGMTVM=0 -DNOEXECINFO -DDEBUGVM=0" LIBS=-lpthread --without-npsqueak

Here is the diff.
Index: platforms/unix/plugins/SqueakFFIPrims/ffi-config
===================================================================
--- platforms/unix/plugins/SqueakFFIPrims/ffi-config    (revision 2372)
+++ platforms/unix/plugins/SqueakFFIPrims/ffi-config    (working copy)
@@ -39,6 +39,7 @@
 
 case ${abi} in
     linux)             abi=sysv;;
+    freebsd)           abi=sysv;;
     darwin*)           abi=darwin;;
     *)                 abi=libffi; lib="-lffi";;
 esac
Index: platforms/unix/vm/sqUnixMain.c
===================================================================
--- platforms/unix/vm/sqUnixMain.c      (revision 2372)
+++ platforms/unix/vm/sqUnixMain.c      (working copy)
@@ -60,6 +60,9 @@
 # include <execinfo.h>
 # define BACKTRACE_DEPTH 64
 #endif
+#if __FreeBSD__ 
+# include <sys/ucontext.h>
+#endif
 
 #if defined(__alpha__) && defined(__osf__)
 # include <sys/sysinfo.h>
@@ -777,6 +780,9 @@
 # elif __linux__ && __i386__
                        void *fp = (void *)(uap ? uap->uc_mcontext.gregs[REG_EBP]: 0);
                        void *sp = (void *)(uap ? uap->uc_mcontext.gregs[REG_ESP]: 0);
+# elif __FreeBSD__ && __i386__
+                       void *fp = (void *)(uap ? uap->uc_mcontext.mc_ebp: 0);
+                       void *sp = (void *)(uap ? uap->uc_mcontext.mc_esp: 0);
 # else
 #      error need to implement extracting pc from a ucontext_t on this system
 # endif
Index: platforms/Cross/plugins/SqueakFFIPrims/sqFFIPlugin.c
===================================================================
--- platforms/Cross/plugins/SqueakFFIPrims/sqFFIPlugin.c        (revision 2372)
+++ platforms/Cross/plugins/SqueakFFIPrims/sqFFIPlugin.c        (working copy)
@@ -10,7 +10,7 @@
 *****************************************************************************/
 
 #include <stdio.h>
-#if !WIN32
+#if !WIN32 && !__FreeBSD__
 # include <alloca.h>
 #endif
 #include <string.h>


More information about the Vm-dev mailing list