diff --git a/devices/posixfs.c b/devices/posixfs.c index a3acbc0..00c3720 100644 --- a/devices/posixfs.c +++ b/devices/posixfs.c @@ -55,7 +55,7 @@ Cell* posixfs_open(Cell* cpath) { printf("[posixfs] trying to read file of len %d…\r\n",len); Cell* res = alloc_num_bytes(len); - int read_len = fread(res->addr, len, 1, f); + int read_len = fread(res->addr, 1, len, f); // TODO: close? _file_cell = res; return res; diff --git a/sledge/alloc.c b/sledge/alloc.c index 70c3f60..91cd198 100644 --- a/sledge/alloc.c +++ b/sledge/alloc.c @@ -1,5 +1,5 @@ #include "alloc.h" -#include +#include #include #include "stream.h" diff --git a/sledge/build_x64.sh b/sledge/build_x64.sh index 5cc499b..1e0a98d 100755 --- a/sledge/build_x64.sh +++ b/sledge/build_x64.sh @@ -1,2 +1,8 @@ -gcc -g -o sledge --std=gnu99 -I. sledge.c reader.c writer.c alloc.c strmap.c stream.c ../devices/sdl2.c ../devices/posixfs.c -lm -lSDL2 -DCPU_X64 -DDEV_SDL -DDEV_POSIXFS +#!/bin/sh + +if [ `uname` = "Darwin" ] ; then + CFLAGS="${CFLAGS} -I/opt/local/include -L/opt/local/lib" +fi + +cc -g -o sledge --std=gnu99 -I. ${CFLAGS} sledge.c reader.c writer.c alloc.c strmap.c stream.c ../devices/sdl2.c ../devices/posixfs.c -lm -lSDL2 -DCPU_X64 -DDEV_SDL -DDEV_POSIXFS diff --git a/sledge/compiler_x64_hosted.c b/sledge/compiler_x64_hosted.c index 1ba3a79..51db77f 100644 --- a/sledge/compiler_x64_hosted.c +++ b/sledge/compiler_x64_hosted.c @@ -1,3 +1,7 @@ +#if defined(__APPLE__) && defined(__MACH__) +#define MAP_ANONYMOUS MAP_ANON +#endif + //#define DEBUG Cell* execute_jitted(void* binary) { @@ -34,7 +38,11 @@ int compile_for_platform(Cell* expr, Cell** res) { // prefix with arm-none-eabi- on ARM -mlittle-endian system("as /tmp/jit_out.s -o /tmp/jit_out.o"); +#if defined(__APPLE__) && defined(__MACH__) + system("gobjcopy /tmp/jit_out.o -O binary /tmp/jit_out.bin"); +#else system("objcopy /tmp/jit_out.o -O binary /tmp/jit_out.bin"); +#endif FILE* binary_f = fopen("/tmp/jit_out.bin","r"); diff --git a/sledge/jit_x64.c b/sledge/jit_x64.c index 37ba023..b10ad1c 100644 --- a/sledge/jit_x64.c +++ b/sledge/jit_x64.c @@ -85,10 +85,12 @@ void jit_str_stack(int sreg, int offset) { } void jit_inc_stack(int offset) { + if (offset == 0) return; fprintf(jit_out, "addq $%d, %%rsp\n", offset); } void jit_dec_stack(int offset) { + if (offset == 0) return; fprintf(jit_out, "subq $%d, %%rsp\n", offset); } @@ -167,7 +169,13 @@ void jit_divr(int dreg, int sreg) { void jit_call(void* func, char* note) { fprintf(jit_out, "mov $%p, %%rax\n", func); +#if defined(__APPLE__) && defined(__MACH__) + fprintf(jit_out, "subq $8, %%rsp\n"); +#endif fprintf(jit_out, "callq *%%rax # %s\n", note); +#if defined(__APPLE__) && defined(__MACH__) + fprintf(jit_out, "addq $8, %%rsp\n"); +#endif } void jit_callr(int reg) { diff --git a/sledge/minilisp.h b/sledge/minilisp.h index 813a8d8..efcf69e 100644 --- a/sledge/minilisp.h +++ b/sledge/minilisp.h @@ -5,6 +5,7 @@ #include "strmap.h" +#ifndef BLAND #define KNRM "\x1B[0m" #define KRED "\x1B[31m" #define KGRN "\x1B[32m" @@ -13,6 +14,16 @@ #define KMAG "\x1B[35m" #define KCYN "\x1B[36m" #define KWHT "\x1B[37m" +#else +#define KNRM "" +#define KRED "" +#define KGRN "" +#define KYEL "" +#define KBLU "" +#define KMAG "" +#define KCYN "" +#define KWHT "" +#endif #define TAG_FREED 0 #define TAG_INT 1