[Openmcl-cvs-notifications] r13207 - in /trunk/source/lisp-kernel: lisptypes.h ppc-exceptions.c ppc-exceptions.h

rme at clozure.com rme at clozure.com
Mon Nov 16 20:55:48 UTC 2009


Author: rme
Date: Mon Nov 16 20:55:48 2009
New Revision: 13207

Log:
Changes to make Darwin/ppc lisp kernels build with 10.5 SDK.
This involves using the "__"-prefixed member names for
thread state structs, and providing compatibility #defines on
10.4 systems.

Modified:
    trunk/source/lisp-kernel/lisptypes.h
    trunk/source/lisp-kernel/ppc-exceptions.c
    trunk/source/lisp-kernel/ppc-exceptions.h

Modified: trunk/source/lisp-kernel/lisptypes.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/lisptypes.h (original)
+++ trunk/source/lisp-kernel/lisptypes.h Mon Nov 16 20:55:48 2009
@@ -85,6 +85,33 @@
 #include <AvailabilityMacros.h>
 =

 #ifdef PPC
+#if MAC_OS_X_VERSION_MIN_REQUIRED <=3D MAC_OS_X_VERSION_10_4
+#define __ss ss
+#define __es es
+#define __fs fs
+
+#define __srr0 srr0
+#define __srr1 srr1
+#define __r0 r0
+#define __r1 r1
+#define __r3 r3
+#define __r4 r4
+#define __r5 r5
+#define __r6 r6
+#define __r13 r13
+#define __cr cr
+#define __xer xer
+#define __lr lr
+#define __ctr ctr
+
+#define __dar dar
+#define __dsisr dsisr
+#define __exception exception
+
+#define __fpregs fpregs
+#define __fpscr fpscr
+#endif
+
 #if WORD_SIZE =3D=3D 64
 #ifdef _STRUCT_UCONTEXT64
 typedef _STRUCT_UCONTEXT64 ExceptionInformation;

Modified: trunk/source/lisp-kernel/ppc-exceptions.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/ppc-exceptions.c (original)
+++ trunk/source/lisp-kernel/ppc-exceptions.c Mon Nov 16 20:55:48 2009
@@ -2472,7 +2472,7 @@
   /* Set the thread's FP state from the pseudosigcontext */
   kret =3D thread_set_state(thread,
                           PPC_FLOAT_STATE,
-                          (thread_state_t)&(mc->fs),
+                          (thread_state_t)&(mc->__fs),
                           PPC_FLOAT_STATE_COUNT);
 =

   MACH_CHECK_ERROR("setting thread FP state", kret);
@@ -2481,12 +2481,12 @@
 #ifdef PPC64
   kret =3D thread_set_state(thread,
                           PPC_THREAD_STATE64,
-                          (thread_state_t)&(mc->ss),
+                          (thread_state_t)&(mc->__ss),
                           PPC_THREAD_STATE64_COUNT);
 #else
   kret =3D thread_set_state(thread, =

                           MACHINE_THREAD_STATE,
-                          (thread_state_t)&(mc->ss),
+                          (thread_state_t)&(mc->__ss),
                           MACHINE_THREAD_STATE_COUNT);
 #endif
   MACH_CHECK_ERROR("setting thread state", kret);
@@ -2558,7 +2558,7 @@
     get_tcr(true);
     Bug(NULL, "Exception thread can't obtain thread state, Mach result =3D=
 %d", result);
   }
-  stackp =3D ts.r1;
+  stackp =3D ts.__r1;
   backlink =3D stackp;
   stackp =3D TRUNC_DOWN(stackp, C_REDZONE_LEN, C_STK_ALIGN);
   stackp -=3D sizeof(*pseudosigcontext);
@@ -2566,12 +2566,12 @@
 =

   stackp =3D TRUNC_DOWN(stackp, sizeof(*mc), C_STK_ALIGN);
   mc =3D (MCONTEXT_T) ptr_from_lispobj(stackp);
-  memmove(&(mc->ss),&ts,sizeof(ts));
+  memmove(&(mc->__ss),&ts,sizeof(ts));
 =

   thread_state_count =3D PPC_FLOAT_STATE_COUNT;
   thread_get_state(thread,
 		   PPC_FLOAT_STATE,
-		   (thread_state_t)&(mc->fs),
+		   (thread_state_t)&(mc->__fs),
 		   &thread_state_count);
 =

 =

@@ -2586,7 +2586,7 @@
 #else
 		   PPC_EXCEPTION_STATE,
 #endif
-		   (thread_state_t)&(mc->es),
+		   (thread_state_t)&(mc->__es),
 		   &thread_state_count);
 =

 =

@@ -2649,18 +2649,18 @@
      args) when the thread's resumed.
   */
 =

-  ts.srr0 =3D (natural) handler_address;
-  ts.srr1 =3D (int) xpMSR(pseudosigcontext) & ~MSR_FE0_FE1_MASK;
-  ts.r1 =3D stackp;
-  ts.r3 =3D signum;
-  ts.r4 =3D (natural)pseudosigcontext;
-  ts.r5 =3D (natural)tcr;
-  ts.r6 =3D (natural)old_valence;
-  ts.lr =3D (natural)pseudo_sigreturn;
+  ts.__srr0 =3D (natural) handler_address;
+  ts.__srr1 =3D (int) xpMSR(pseudosigcontext) & ~MSR_FE0_FE1_MASK;
+  ts.__r1 =3D stackp;
+  ts.__r3 =3D signum;
+  ts.__r4 =3D (natural)pseudosigcontext;
+  ts.__r5 =3D (natural)tcr;
+  ts.__r6 =3D (natural)old_valence;
+  ts.__lr =3D (natural)pseudo_sigreturn;
 =

 =

 #ifdef PPC64
-  ts.r13 =3D xpGPR(pseudosigcontext,13);
+  ts.__r13 =3D xpGPR(pseudosigcontext,13);
   thread_set_state(thread,
                    PPC_THREAD_STATE64,
                    (thread_state_t)&ts,
@@ -2709,9 +2709,9 @@
 		   (thread_state_t)&ts,
 		   &thread_state_count);
   if (enabled) {
-    ts.srr1 |=3D MSR_FE0_FE1_MASK;
+    ts.__srr1 |=3D MSR_FE0_FE1_MASK;
   } else {
-    ts.srr1 &=3D ~MSR_FE0_FE1_MASK;
+    ts.__srr1 &=3D ~MSR_FE0_FE1_MASK;
   }
   /* =

      Hack-o-rama warning (isn't it about time for such a warning?):
@@ -2729,14 +2729,14 @@
      just adjust ts.srr0 to skip over the UUO.
   */
   {
-    lisp_frame *tos =3D (lisp_frame *)ts.r1,
+    lisp_frame *tos =3D (lisp_frame *)ts.__r1,
       *next_frame =3D tos->backlink;
     =

     if (tos =3D=3D (next_frame -1)) {
-      ts.srr0 =3D tos->savelr;
-      ts.r1 =3D (LispObj) next_frame;
+      ts.__srr0 =3D tos->savelr;
+      ts.__r1 =3D (LispObj) next_frame;
     } else {
-      ts.srr0 +=3D 4;
+      ts.__srr0 +=3D 4;
     }
   }
   thread_set_state(thread, =


Modified: trunk/source/lisp-kernel/ppc-exceptions.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/ppc-exceptions.h (original)
+++ trunk/source/lisp-kernel/ppc-exceptions.h Mon Nov 16 20:55:48 2009
@@ -69,21 +69,21 @@
 #endif
 =

 #ifdef DARWIN
-#define xpGPRvector(x) (&(UC_MCONTEXT(x)->ss.r0))
+#define xpGPRvector(x) (&(UC_MCONTEXT(x)->__ss.__r0))
 #define xpGPR(x,gprno) ((xpGPRvector(x))[gprno])
 #define set_xpGPR(x,gpr,new) xpGPR((x),(gpr)) =3D (UInt32)(new)
-#define xpPC(x) (*((pc*) &(UC_MCONTEXT(x)->ss.srr0)))
+#define xpPC(x) (*((pc*) &(UC_MCONTEXT(x)->__ss.__srr0)))
 #define set_xpPC(x,new) (xpPC(x) =3D (pc)(new))
-#define xpLR(x) (*((pc*)(&(UC_MCONTEXT(x)->ss.lr))))
-#define xpCTR(x) (*(pc*)(&(UC_MCONTEXT(x)->ss.ctr)))
-#define xpXER(x) (UC_MCONTEXT(x)->ss.xer)
-#define xpCCR(x) (UC_MCONTEXT(x)->ss.cr)
-#define xpMSR(x) (UC_MCONTEXT(x)->ss.srr1)
-#define xpDSISR(x) (UC_MCONTEXT(x)->es.dsisr)
-#define xpDAR(x) (UC_MCONTEXT(x)->es.dar)
-#define xpTRAP(x) (UC_MCONTEXT(x)->es.exception)
-#define xpFPSCR(x) (UC_MCONTEXT(x)->fs.fpscr)
-#define xpFPRvector(x) (UC_MCONTEXT(x)->fs.fpregs)
+#define xpLR(x) (*((pc*)(&(UC_MCONTEXT(x)->__ss.__lr))))
+#define xpCTR(x) (*(pc*)(&(UC_MCONTEXT(x)->__ss.__ctr)))
+#define xpXER(x) (UC_MCONTEXT(x)->__ss.__xer)
+#define xpCCR(x) (UC_MCONTEXT(x)->__ss.__cr)
+#define xpMSR(x) (UC_MCONTEXT(x)->__ss.__srr1)
+#define xpDSISR(x) (UC_MCONTEXT(x)->__es.__dsisr)
+#define xpDAR(x) (UC_MCONTEXT(x)->__es.__dar)
+#define xpTRAP(x) (UC_MCONTEXT(x)->__es.__exception)
+#define xpFPSCR(x) (UC_MCONTEXT(x)->__fs.__fpscr)
+#define xpFPRvector(x) (UC_MCONTEXT(x)->__fs.__fpregs)
 #define xpFPR(x,fprno) (xpFPRvector(x)[fprno])
 /* There's a bug in some versions of Darwin on G5 processors: FP context
    isn't restored correctly on exit from a signal handler if the integer
@@ -127,7 +127,7 @@
 #ifdef PPC64
 #define DarwinSigReturn(x)
 #else
-#define DarwinSigReturn(x) (UC_MCONTEXT(x)->ss.xer)^=3D0x80
+#define DarwinSigReturn(x) (UC_MCONTEXT(x)->__ss.__xer)^=3D0x80
 #endif
 #define SIGRETURN(context) DarwinSigReturn(context)
 #endif



More information about the Openmcl-cvs-notifications mailing list