From c2e1d8a6ba7a9a1a0700b6bdf19a3790944eb463 Mon Sep 17 00:00:00 2001
From: rtoy <rtoy>
Date: Mon, 29 Dec 2008 14:40:34 +0000
Subject: [PATCH] Support building and running on OSX 10.4 (Tiger).

lisp/Config.x86_darwin:
o Add -mmacosx-version-min=10.4 so the C code can run on Tiger.

lisp/Darwin.c:
lisp/x86-lispregs.h:
o The mcontext slot names have a prefix of "__" on 10.5, but have no
  prefix on 10.4.  Add #define's to make the source code work on either.
---
 lisp/Config.x86_darwin |  6 +++++-
 lisp/Darwin-os.c       | 29 ++++++++++++++++++++++++++++-
 lisp/x86-lispregs.h    |  8 +++++++-
 3 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/lisp/Config.x86_darwin b/lisp/Config.x86_darwin
index 6d6b91651..bc8e6f362 100644
--- a/lisp/Config.x86_darwin
+++ b/lisp/Config.x86_darwin
@@ -27,6 +27,10 @@ ifdef FEATURE_SSE2
 RUNTIME += -DFEATURE_SSE2
 endif
 
+# Compile code that will run on OSX 10.4 (Tiger)
+MIN_VER = -mmacosx-version-min=10.4
+RUNTIME += $(MIN_VER)
+
 CPPFLAGS = -Di386 -DDARWIN $(RUNTIME)
 CFLAGS = -Wstrict-prototypes -Wall -g3 $(CPPFLAGS) $(INCLUDES)
 ASFLAGS = -g3 $(INCLUDES) $(RUNTIME)
@@ -35,7 +39,7 @@ UNDEFSYMPATTERN = -Xlinker -u -Xlinker &
 ASSEM_SRC = x86-assem.S
 ARCH_SRC = x86-arch.c
 OS_SRC = Darwin-os.c os-common.c e_rem_pio2.c k_rem_pio2.c
-# OS_LINK_FLAGS = -dynamic -export-dynamic
+OS_LINK_FLAGS = $(MIN_VER)
 OS_LIBS =
 
 # This has aliasing problems, so turn off aliasing.
diff --git a/lisp/Darwin-os.c b/lisp/Darwin-os.c
index 737b4bde9..e6111c32a 100644
--- a/lisp/Darwin-os.c
+++ b/lisp/Darwin-os.c
@@ -14,7 +14,7 @@
  * Frobbed for OpenBSD by Pierre R. Mai, 2001.
  * Frobbed for Darwin by Pierre R. Mai, 2003.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Darwin-os.c,v 1.23 2008/12/10 02:39:13 rtoy Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Darwin-os.c,v 1.24 2008/12/29 14:40:34 rtoy Exp $
  *
  */
 
@@ -200,6 +200,33 @@ sc_reg(os_context_t * context, int offset)
 unsigned long *
 os_sigcontext_reg(ucontext_t *scp, int index)
 {
+#if __DARWIN_UNIX03
+  /* Nothing needed for 10.5 */
+#else
+  /* This is for 10.4 */
+#define __ss ss
+#define __eax eax
+#define __ecx ecx
+#define __edx edx
+#define __ebx ebx
+#define __esp esp
+#define __ebp ebp
+#define __esi esi
+#define __edi edi
+#define __eip eip  
+#define __fs fs
+#define __fpu_stmm0 fpu_stmm0
+#define __fpu_stmm1 fpu_stmm1
+#define __fpu_stmm2 fpu_stmm2
+#define __fpu_stmm3 fpu_stmm3
+#define __fpu_stmm4 fpu_stmm4
+#define __fpu_stmm5 fpu_stmm5
+#define __fpu_stmm6 fpu_stmm6
+#define __fpu_stmm7 fpu_stmm7
+#define __fpu_fcw   fpu_fcw
+#define __fpu_fsw   fpu_fsw
+#define __fpu_mxcsr fpu_mxcsr
+#endif
     switch (index) {
     case 0:
 	return (unsigned long *) &scp->uc_mcontext->__ss.__eax;
diff --git a/lisp/x86-lispregs.h b/lisp/x86-lispregs.h
index 09866b600..0e9735e24 100644
--- a/lisp/x86-lispregs.h
+++ b/lisp/x86-lispregs.h
@@ -1,5 +1,5 @@
 /* x86-lispregs.h -*- Mode: C; -*-
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/x86-lispregs.h,v 1.12 2008/01/03 11:41:54 cshapiro Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/x86-lispregs.h,v 1.13 2008/12/29 14:40:34 rtoy Rel $
  */
 
 #ifndef _X86_LISPREGS_H_
@@ -49,7 +49,13 @@
 #define SC_SP(scp) SC_REG(scp, reg_ESP)
 
 #if defined(DARWIN)
+#if __DARWIN_UNIX03
+/* For 10.5 */
 #define SC_EFLAGS(sc) ((sc)->uc_mcontext->__ss.__eflags)
+#else
+/* For 10.4 */
+#define SC_EFLAGS(sc) ((sc)->uc_mcontext->ss.eflags)
+#endif
 #elif defined(__linux__)
 #define SC_EFLAGS(sc) ((sc)->uc_mcontext.gregs[REG_EFL])
 #endif
-- 
GitLab