Compare commits

...

1 Commits

Author SHA1 Message Date
Doug Coleman e5ec13217d dragonflybsd: Initial support. 2019-02-09 20:59:57 +00:00
12 changed files with 179 additions and 14 deletions

View File

@ -141,6 +141,7 @@ help:
@echo "linux-arm"
@echo "freebsd-x86-32"
@echo "freebsd-x86-64"
@echo "dragonflybsd-x86-64"
@echo "macosx-x86-32"
@echo "macosx-x86-64"
@echo "macosx-x86-fat"
@ -161,6 +162,9 @@ freebsd-x86-32:
freebsd-x86-64:
$(MAKE) $(ALL) CONFIG=vm/Config.freebsd.x86.64
dragonflybsd-x86-64:
$(MAKE) $(ALL) CONFIG=vm/Config.dragonflybsd.x86.64
macosx-x86-32:
$(MAKE) $(ALL) macosx.app CONFIG=vm/Config.macosx.x86.32

View File

@ -1 +1,3 @@
macosx freebsd
macosx
freebsd
dragonflybsd

View File

@ -175,6 +175,7 @@ set_cc() {
set_make() {
case $OS in
freebsd) MAKE=gmake ;;
dragonflybsd) MAKE=gmake ;;
*) MAKE=make ;;
esac
if [[ $MAKE = 'gmake' ]] ; then
@ -262,6 +263,7 @@ find_os() {
*linux*) OS=linux;;
*Linux*) OS=linux;;
FreeBSD) OS=freebsd;;
DragonFly) OS=dragonflybsd;;
esac
}
@ -290,7 +292,7 @@ find_num_cores() {
case $uname_s in
CYGWIN_NT-5.2-WOW64 | *CYGWIN_NT* | *CYGWIN* | MINGW32*) NUM_CORES=$NUMBER_OF_PROCESSORS;;
*darwin* | *Darwin* | *linux* | *Linux*) NUM_CORES=$(getconf _NPROCESSORS_ONLN);;
freebsd) NUM_CORES=$(sysctl -n hw.ncpu);;
freebsd | dragonflybsd) NUM_CORES=$(sysctl -n hw.ncpu);;
esac
}

View File

@ -16,10 +16,10 @@ UNION: ppc ppc.32 ppc.64 ;
: cpu ( -- class ) \ cpu get-global ; foldable
SINGLETONS: windows macosx linux freebsd ;
SINGLETONS: windows macosx linux freebsd dragonflybsd ;
UNION: bsd freebsd ;
UNION: unix macosx linux freebsd bsd ;
UNION: bsd freebsd dragonflybsd ;
UNION: unix macosx linux freebsd dragonflybsd bsd ;
: os ( -- class ) \ os get-global ; foldable
@ -51,6 +51,7 @@ CONSTANT: string>os-hash H{
{ "windows" windows }
{ "macosx" macosx }
{ "freebsd" freebsd }
{ "dragonflybsd" dragonflybsd }
{ "linux" linux }
}

4
vm/Config.dragonflybsd Normal file
View File

@ -0,0 +1,4 @@
include vm/Config.unix
PLAF_DLL_OBJS += vm/os-genunix.o vm/os-dragonflybsd.o vm/mvm-unix.o
PLAF_MASTER_HEADERS += vm/os-genunix.hpp vm/os-dragonflybsd.hpp
LIBS = -L/usr/local/lib -lm $(X11_UI_LIBS) -pthread -lc -Wl,--export-dynamic -lpango-1.0 -lpangocairo-1.0 -lcairo -lglib-2.0 -lgobject-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -lgdk_pixbuf-2.0 -lgtkglext-x11-1.0 -latk-1.0 -lgio-2.0 -lgdkglext-x11-1.0 -lGL

View File

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

View File

@ -0,0 +1,2 @@
include vm/Config.dragonflybsd
include vm/Config.x86.64

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

@ -0,0 +1,40 @@
#include <ucontext.h>
#include <signal.h>
#include <sys/signal.h>
#include <machine/ucontext.h>
#include <sys/ucontext.h>
#include <cpu/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_XMM)
{
struct savexmm *xmm = (struct savexmm *)(&ucontext->uc_mcontext.mc_fpregs);
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_XMM)
{
struct savexmm *xmm = (struct savexmm *)(&ucontext->uc_mcontext.mc_fpregs);
xmm->sv_env.en_sw = 0;
xmm->sv_env.en_mxcsr &= 0xffffffc0;
}
}
#define UAP_STACK_POINTER(ucontext) (((struct sigcontext *)ucontext)->sc_rsp)
#define UAP_PROGRAM_COUNTER(ucontext) (((struct sigcontext *)ucontext)->sc_rip)
#define UAP_SET_TOC_POINTER(uap, ptr) (void)0
#define UAP_STACK_POINTER_TYPE long
static const unsigned JIT_FRAME_SIZE = 32;
}

45
vm/os-dragonflybsd.cpp Normal file
View File

@ -0,0 +1,45 @@
#include "master.hpp"
#include <sys/types.h>
#include <sys/sysctl.h>
namespace factor {
char *vm_saved_path;
/* From SBCL */
const char *vm_executable_path()
{
char path[PATH_MAX + 1];
if (getosreldate() >= 600024)
{
/* KERN_PROC_PATHNAME is available */
size_t len = PATH_MAX + 1;
int mib[4];
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PATHNAME;
mib[3] = -1;
if (sysctl(mib, 4, &path, &len, NULL, 0) != 0)
return NULL;
}
else
{
int size;
size = readlink("/proc/curproc/file", path, sizeof(path) - 1);
if (size < 0)
return NULL;
path[size] = '\0';
}
if(strcmp(path, "unknown") == 0)
return NULL;
return safe_strdup(path);
}
}

7
vm/os-dragonflybsd.hpp Normal file
View File

@ -0,0 +1,7 @@
namespace factor {
#define CODE_TO_FUNCTION_POINTER(code) (void)0
#define CODE_TO_FUNCTION_POINTER_CALLBACK(vm, code) (void)0
#define FUNCTION_CODE_POINTER(ptr) ptr
#define FUNCTION_TOC_POINTER(ptr) ptr
}

View File

@ -27,15 +27,27 @@
#endif
#else
#include "os-genunix.hpp"
#if defined(__FreeBSD__)
#define FACTOR_OS_STRING "freebsd"
#include "os-freebsd.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"
#if defined(BSD)
#if defined(__FreeBSD__)
#define FACTOR_OS_STRING "freebsd"
#include "os-freebsd.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(__DragonFly__)
#define FACTOR_OS_STRING "dragonflybsd"
#include "os-dragonflybsd.hpp"
#if defined(FACTOR_X86)
#include "os-dragonflybsd-x86.32.hpp"
#elif defined(FACTOR_AMD64)
#include "os-dragonflybsd-x86.64.hpp"
#else
#error "Unsupported DragonFlyBSD flavor"
#endif
#endif
#elif defined(__linux__)
#define FACTOR_OS_STRING "linux"