vm: Add freebsd32 support for completeness.

We need gmake on freebsd.
freebsd-work
Doug Coleman 2019-02-09 19:39:25 +00:00
parent 5d78ab55be
commit 205018869b
5 changed files with 58 additions and 2 deletions

View File

@ -139,6 +139,7 @@ help:
@echo "linux-ppc-32" @echo "linux-ppc-32"
@echo "linux-ppc-64" @echo "linux-ppc-64"
@echo "linux-arm" @echo "linux-arm"
@echo "freebsd-x86-32"
@echo "freebsd-x86-64" @echo "freebsd-x86-64"
@echo "macosx-x86-32" @echo "macosx-x86-32"
@echo "macosx-x86-64" @echo "macosx-x86-64"
@ -154,6 +155,9 @@ help:
ALL = factor factor-ffi-test factor-lib ALL = factor factor-ffi-test factor-lib
freebsd-x86-32:
$(MAKE) $(ALL) CONFIG=vm/Config.freebsd.x86.32
freebsd-x86-64: freebsd-x86-64:
$(MAKE) $(ALL) CONFIG=vm/Config.freebsd.x86.64 $(MAKE) $(ALL) CONFIG=vm/Config.freebsd.x86.64

View File

@ -700,7 +700,7 @@ install_deps_dnf() {
} }
install_deps_pkg() { 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
} }

2
vm/Config.freebsd.x86.32 Normal file
View File

@ -0,0 +1,2 @@
include vm/Config.freebsd
include vm/Config.x86.32

44
vm/os-freebsd-x86.32.hpp Normal file
View File

@ -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)
}

View File

@ -30,7 +30,13 @@
#if defined(__FreeBSD__) #if defined(__FreeBSD__)
#define FACTOR_OS_STRING "freebsd" #define FACTOR_OS_STRING "freebsd"
#include "os-freebsd.hpp" #include "os-freebsd.hpp"
#if defined(FACTOR_X86)
#include "os-freebsd-x86.32.hpp"
#elif defined(FACTOR_AMD64)
#include "os-freebsd-x86.64.hpp" #include "os-freebsd-x86.64.hpp"
#else
#error "Unsupported FreeBSD flavor"
#endif
#elif defined(__linux__) #elif defined(__linux__)
#define FACTOR_OS_STRING "linux" #define FACTOR_OS_STRING "linux"
#include "os-linux.hpp" #include "os-linux.hpp"