Author: wmb Date: 2008-12-30 03:09:26 +0100 (Tue, 30 Dec 2008) New Revision: 1055
Added: cpu/x86/Darwin/ Modified: cpu/x86/build/builder.dic cpu/x86/syscall.fth forth/wrapper/logger.c forth/wrapper/wrapper.c forth/wrapper/zip/util.c forth/wrapper/zip/zipmem.c Log: Added support for building on Mac OSX/Darwin.
Modified: cpu/x86/syscall.fth =================================================================== --- cpu/x86/syscall.fth 2008-12-29 23:50:42 UTC (rev 1054) +++ cpu/x86/syscall.fth 2008-12-30 02:09:26 UTC (rev 1055) @@ -32,6 +32,9 @@ 0 [bx] sp lss then
+ \ Nonce pushes to enforce 16-byte stack args alignment for Darwin + ax push ax push + cx push \ my SP gs push \ my SS ds push \ my DS @@ -66,6 +69,8 @@ bx pop \ my SS cx pop \ my SP
+ ax pop ax pop \ Undo nonce pushes + 1 # 'user flat? test 0= if bx ss mov \ Reload my SS:SP then
Modified: forth/wrapper/logger.c =================================================================== --- forth/wrapper/logger.c 2008-12-29 23:50:42 UTC (rev 1054) +++ forth/wrapper/logger.c 2008-12-30 02:09:26 UTC (rev 1055) @@ -11,6 +11,7 @@ #endif #include <stdio.h> #include <string.h> +#include <stdlib.h> #ifndef USE_STDIO #include <sys/types.h> #include <sys/stat.h> @@ -18,6 +19,8 @@ #include <time.h> #ifdef MAJC #include <sys/unistd.h> +#else +#include <unistd.h> #endif
#ifndef MAXPATHLEN
Modified: forth/wrapper/wrapper.c =================================================================== --- forth/wrapper/wrapper.c 2008-12-29 23:50:42 UTC (rev 1054) +++ forth/wrapper/wrapper.c 2008-12-30 02:09:26 UTC (rev 1055) @@ -9,7 +9,7 @@ 3) At which address will the binary run (relocation)
This C program finesses problems 1 and 2 by assuming that the C -compiler/linker knows how to do those those things. The Forth +compiler/linker knows how to do those things. The Forth interpreter itself is stored in a file whose format is system-independent. The C program mallocs an array, reads the Forth image into that array, and calls the array as a subroutine, passing it the address of another @@ -56,6 +56,16 @@ #include <stdlib.h> #include <string.h>
+/* + * The following #includes and externs fix GCC warnings when compiled with + * -Wimplicit-function-declarations, which I'm doing while trying to get + * this working on Darwin hosts. + */ +#include <ctype.h> +/* zlib externs */ +extern int inflate(); +extern int zip_memory(); + #ifdef __linux__ char *host_os = "Linux"; #define SYS5 1 @@ -91,6 +101,11 @@ #define START_OFFSET 0x10 #endif
+#if defined(__APPLE__) +char *host_os = "Darwin"; +#define BSD 1 +#endif + #ifdef MIPS char *host_cpu = "mips"; #define START_OFFSET 8 @@ -200,7 +215,6 @@
#ifdef __unix__ # include <sys/mman.h> -# include <sys/mman.h> # include <limits.h> /* for PAGESIZE */ # ifndef PAGESIZE # define PAGESIZE 4096 @@ -305,13 +319,19 @@ INTERNAL void error(char *, char*);
#else + INTERNAL int getnum(char *); INTERNAL void error(); #endif
+/* externs from logger.c */ extern char *rootname(); extern char *basename(); +extern void log_output(); +extern void log_input(); +extern void log_command_line(); +extern void log_env();
-#ifndef LinuxPOWERPC +#if !defined(LinuxPOWERPC) && !defined(__APPLE__) extern int read(), write(); #endif
Modified: forth/wrapper/zip/util.c =================================================================== --- forth/wrapper/zip/util.c 2008-12-29 23:50:42 UTC (rev 1054) +++ forth/wrapper/zip/util.c 2008-12-30 02:09:26 UTC (rev 1055) @@ -13,6 +13,7 @@ #include "tailor.h" #include "gzip.h"
+extern int write_mem(); /* found in zipmem.c */ extern ulg crc_32_tab[]; /* crc table, defined below */
/* ===========================================================================
Modified: forth/wrapper/zip/zipmem.c =================================================================== --- forth/wrapper/zip/zipmem.c 2008-12-29 23:50:42 UTC (rev 1054) +++ forth/wrapper/zip/zipmem.c 2008-12-30 02:09:26 UTC (rev 1055) @@ -66,6 +66,7 @@ local void do_exit OF((int exitcode)); int zip_memory OF((void *inbuf, int insize, void *outbuf, int outsize)); + int simple_zip OF((void));
local int read_mem OF((int fd, void *buf, size_t size));
openfirmware@openfirmware.info