]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: Add freebsd32 support for completeness.
authorDoug Coleman <doug.coleman@gmail.com>
Sat, 9 Feb 2019 19:39:25 +0000 (19:39 +0000)
committerDoug Coleman <doug.coleman@gmail.com>
Sat, 9 Feb 2019 19:40:54 +0000 (19:40 +0000)
We need gmake on freebsd.

GNUmakefile
build.sh
vm/Config.freebsd.x86.32 [new file with mode: 0644]
vm/os-freebsd-x86.32.hpp [new file with mode: 0644]
vm/platform.hpp

index 5c734220c576a572b879f184fb7dc978a1de8bda..53a1f0b8b5c09eead07c2cfb823079a8f72912f4 100644 (file)
@@ -139,6 +139,7 @@ help:
        @echo "linux-ppc-32"
        @echo "linux-ppc-64"
        @echo "linux-arm"
+       @echo "freebsd-x86-32"
        @echo "freebsd-x86-64"
        @echo "macosx-x86-32"
        @echo "macosx-x86-64"
@@ -154,6 +155,9 @@ help:
 
 ALL = factor factor-ffi-test factor-lib
 
+freebsd-x86-32:
+       $(MAKE) $(ALL) CONFIG=vm/Config.freebsd.x86.32
+
 freebsd-x86-64:
        $(MAKE) $(ALL) CONFIG=vm/Config.freebsd.x86.64
 
index 84d8b22aa4eb4ebfa8bc9f308a125748b41452d7..7d99f7026bbcd57f58319b84266ac1c40d5ef762 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -700,7 +700,7 @@ install_deps_dnf() {
 }
 
 install_deps_pkg() {
-    sudo pkg install --yes git gcc rlwrap ripgrep curl gmake x11-toolkits/gtk30 x11-toolkits/gtkglext pango cairo
+    sudo pkg install --yes git gmake gcc rlwrap ripgrep curl gmake x11-toolkits/gtk30 x11-toolkits/gtkglext pango cairo vim
 }
 
 
diff --git a/vm/Config.freebsd.x86.32 b/vm/Config.freebsd.x86.32
new file mode 100644 (file)
index 0000000..969ba1c
--- /dev/null
@@ -0,0 +1,2 @@
+include vm/Config.freebsd
+include vm/Config.x86.32
diff --git a/vm/os-freebsd-x86.32.hpp b/vm/os-freebsd-x86.32.hpp
new file mode 100644 (file)
index 0000000..664da1e
--- /dev/null
@@ -0,0 +1,44 @@
+#include <ucontext.h>
+#include <machine/npx.h>
+
+namespace factor
+{
+
+inline static unsigned int uap_fpu_status(void *uap)
+{
+       ucontext_t *ucontext = (ucontext_t *)uap;
+       if (ucontext->uc_mcontext.mc_fpformat == _MC_FPFMT_387)
+       {
+               struct save87 *x87 = (struct save87 *)(&ucontext->uc_mcontext.mc_fpstate);
+               return x87->sv_env.en_sw;
+       }
+       else if (ucontext->uc_mcontext.mc_fpformat == _MC_FPFMT_XMM)
+       {
+               struct savexmm *xmm = (struct savexmm *)(&ucontext->uc_mcontext.mc_fpstate);
+               return xmm->sv_env.en_sw | xmm->sv_env.en_mxcsr;
+       }
+       else
+               return 0;
+}
+
+inline static void uap_clear_fpu_status(void *uap)
+{
+       ucontext_t *ucontext = (ucontext_t *)uap;
+       if (ucontext->uc_mcontext.mc_fpformat == _MC_FPFMT_387)
+       {
+               struct save87 *x87 = (struct save87 *)(&ucontext->uc_mcontext.mc_fpstate);
+               x87->sv_env.en_sw = 0;
+       }
+       else if (ucontext->uc_mcontext.mc_fpformat == _MC_FPFMT_XMM)
+       {
+               struct savexmm *xmm = (struct savexmm *)(&ucontext->uc_mcontext.mc_fpstate);
+               xmm->sv_env.en_sw = 0;
+               xmm->sv_env.en_mxcsr &= 0xffffffc0;
+       }
+}
+
+
+#define UAP_STACK_POINTER(ucontext) (((ucontext_t *)ucontext)->uc_mcontext.mc_esp)
+#define UAP_PROGRAM_COUNTER(ucontext) (((ucontext_t *)ucontext)->uc_mcontext.mc_eip)
+
+}
index 8c0ec7887c578ab78707a9e9a85a9f6baf46bcb0..c72b7b6334474d1778f3d267d2c1659c209c1758 100644 (file)
     #if defined(__FreeBSD__)
        #define FACTOR_OS_STRING "freebsd"
        #include "os-freebsd.hpp"
-       #include "os-freebsd-x86.64.hpp"
+        #if defined(FACTOR_X86)
+           #include "os-freebsd-x86.32.hpp"
+        #elif defined(FACTOR_AMD64)
+           #include "os-freebsd-x86.64.hpp"
+        #else
+            #error "Unsupported FreeBSD flavor"
+        #endif
     #elif defined(__linux__)
       #define FACTOR_OS_STRING "linux"
       #include "os-linux.hpp"