Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
|
e5ec13217d |
|
@ -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
|
||||
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
macosx freebsd
|
||||
macosx
|
||||
freebsd
|
||||
dragonflybsd
|
||||
|
|
4
build.sh
4
build.sh
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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 }
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1,2 @@
|
|||
include vm/Config.dragonflybsd
|
||||
include vm/Config.x86.32
|
|
@ -0,0 +1,2 @@
|
|||
include vm/Config.dragonflybsd
|
||||
include vm/Config.x86.64
|
|
@ -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)
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -27,6 +27,7 @@
|
|||
#endif
|
||||
#else
|
||||
#include "os-genunix.hpp"
|
||||
#if defined(BSD)
|
||||
#if defined(__FreeBSD__)
|
||||
#define FACTOR_OS_STRING "freebsd"
|
||||
#include "os-freebsd.hpp"
|
||||
|
@ -37,6 +38,17 @@
|
|||
#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"
|
||||
#include "os-linux.hpp"
|
||||
|
|
Loading…
Reference in New Issue