1.0.12.15: PPC/Darwin fixes
authorBrian Mastenbrook <bmastenb@cs.indiana.edu>
Sun, 2 Dec 2007 17:00:14 +0000 (17:00 +0000)
committerBrian Mastenbrook <bmastenb@cs.indiana.edu>
Sun, 2 Dec 2007 17:00:14 +0000 (17:00 +0000)
   * Build fix on Leopard (10.5) thanks to Sidney Markowitz
   * Finally remove obsolete G5 sigcontext fix as 10.2 is totally old

src/code/foreign.lisp
src/runtime/bsd-os.c
src/runtime/interrupt.c
src/runtime/ppc-arch.c
src/runtime/ppc-darwin-os.c
src/runtime/ppc-darwin-os.h
src/runtime/x86-64-darwin-os.h
src/runtime/x86-darwin-os.h
tools-for-build/ldso-stubs.lisp
version.lisp-expr

index edc559c..fdf3275 100644 (file)
@@ -35,8 +35,8 @@
     (values
      (or (gethash extern table)
          (gethash (concatenate 'base-string
-                               #!+(and darwin (or x86 x86-64)) "_ldso_stub__"
-                               #!-(and darwin (or x86 x86-64)) "ldso_stub__"
+                               #!+(and darwin (or x86 x86-64 ppc)) "_ldso_stub__"
+                               #!-(and darwin (or x86 x86-64 ppc)) "ldso_stub__"
                                extern) table)))))
 
 (defun find-foreign-symbol-address (name)
index c31ea5d..f169720 100644 (file)
@@ -214,10 +214,6 @@ memory_fault_handler(int signal, siginfo_t *siginfo, void *void_context
             if (!maybe_gc(context)) {
                 interrupt_handle_now(signal, siginfo, context);
             }
-#if defined(LISP_FEATURE_DARWIN)
-            /* Work around G5 bug; fix courtesy gbyers */
-            DARWIN_FIX_CONTEXT(context);
-#endif
 #endif
         }
 }
@@ -272,8 +268,6 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context)
     if (!cheneygc_handle_wp_violation(context, addr))
         if (!handle_guard_page_triggered(context, addr))
             interrupt_handle_now(signal, info, context);
-    /* Work around G5 bug; fix courtesy gbyers */
-    DARWIN_FIX_CONTEXT(context);
 }
 
 void
index eed61e0..7faea8b 100644 (file)
@@ -693,10 +693,6 @@ maybe_now_maybe_later(int signal, siginfo_t *info, void *void_context)
 
     if(!maybe_defer_handler(interrupt_handle_now,data,signal,info,context))
         interrupt_handle_now(signal, info, context);
-
-#ifdef LISP_FEATURE_DARWIN
-    DARWIN_FIX_CONTEXT(context);
-#endif
 }
 
 static void
@@ -723,10 +719,6 @@ low_level_maybe_now_maybe_later(int signal, siginfo_t *info, void *void_context)
     if(!maybe_defer_handler(low_level_interrupt_handle_now,data,
                             signal,info,context))
         low_level_interrupt_handle_now(signal, info, context);
-
-#ifdef LISP_FEATURE_DARWIN
-    DARWIN_FIX_CONTEXT(context);
-#endif
 }
 #endif
 
@@ -813,9 +805,6 @@ interrupt_handle_now_handler(int signal, siginfo_t *info, void *void_context)
     os_restore_fp_control(context);
 #endif
     interrupt_handle_now(signal, info, context);
-#ifdef LISP_FEATURE_DARWIN
-    DARWIN_FIX_CONTEXT(context);
-#endif
 }
 
 /* manipulate the signal context and stack such that when the handler
index 11be9fd..5e6b885 100644 (file)
@@ -446,9 +446,6 @@ sigtrap_handler(int signal, siginfo_t *siginfo, void *void_context)
     if (allocation_trap_p(context)) {
         handle_allocation_trap(context);
         arch_skip_instruction(context);
-#ifdef LISP_FEATURE_DARWIN
-        DARWIN_FIX_CONTEXT(context);
-#endif
         return;
     }
 #endif
@@ -457,25 +454,14 @@ sigtrap_handler(int signal, siginfo_t *siginfo, void *void_context)
         /* twllei reg_ZERO,N will always trap if reg_ZERO = 0 */
         int trap = code & 0x1f;
         handle_trap(context,trap);
-
-#ifdef LISP_FEATURE_DARWIN
-        DARWIN_FIX_CONTEXT(context);
-#endif
         return;
     }
     if (((code >> 26) == 3) && (((code >> 21) & 31) == 24)) {
         interrupt_internal_error(context, 0);
-#ifdef LISP_FEATURE_DARWIN
-        DARWIN_FIX_CONTEXT(context);
-#endif
         return;
     }
 
     interrupt_handle_now(signal, (siginfo_t *)code, context);
-#ifdef LISP_FEATURE_DARWIN
-    /* Work around G5 bug */
-    DARWIN_FIX_CONTEXT(context);
-#endif
 }
 
 
index dfec5c5..461ae9f 100644 (file)
@@ -38,78 +38,78 @@ int arch_os_thread_cleanup(struct thread *thread) {
 os_context_register_t   *
 os_context_register_addr(os_context_t *context, int offset)
 {
-    ppc_saved_state_t *state = &context->uc_mcontext->ss;
+    ppc_ss_struct_t *state = &context->uc_mcontext->PPC_DARWIN_REGIFY(ss);
     switch(offset) {
     case 0:
-        return (os_context_register_t *) &state->r0;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r0);
     case 1:
-        return (os_context_register_t *) &state->r1;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r1);
     case 2:
-        return (os_context_register_t *) &state->r2;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r2);
     case 3:
-        return (os_context_register_t *) &state->r3;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r3);
     case 4:
-        return (os_context_register_t *) &state->r4;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r4);
     case 5:
-        return (os_context_register_t *) &state->r5;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r5);
     case 6:
-        return (os_context_register_t *) &state->r6;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r6);
     case 7:
-        return (os_context_register_t *) &state->r7;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r7);
     case 8:
-        return (os_context_register_t *) &state->r8;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r8);
     case 9:
-        return (os_context_register_t *) &state->r9;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r9);
     case 10:
-        return (os_context_register_t *) &state->r10;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r10);
     case 11:
-        return (os_context_register_t *) &state->r11;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r11);
     case 12:
-        return (os_context_register_t *) &state->r12;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r12);
     case 13:
-        return (os_context_register_t *) &state->r13;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r13);
     case 14:
-        return (os_context_register_t *) &state->r14;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r14);
     case 15:
-        return (os_context_register_t *) &state->r15;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r15);
     case 16:
-        return (os_context_register_t *) &state->r16;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r16);
     case 17:
-        return (os_context_register_t *) &state->r17;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r17);
     case 18:
-        return (os_context_register_t *) &state->r18;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r18);
     case 19:
-        return (os_context_register_t *) &state->r19;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r19);
     case 20:
-        return (os_context_register_t *) &state->r20;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r20);
     case 21:
-        return (os_context_register_t *) &state->r21;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r21);
     case 22:
-        return (os_context_register_t *) &state->r22;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r22);
     case 23:
-        return (os_context_register_t *) &state->r23;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r23);
     case 24:
-        return (os_context_register_t *) &state->r24;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r24);
     case 25:
-        return (os_context_register_t *) &state->r25;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r25);
     case 26:
-        return (os_context_register_t *) &state->r26;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r26);
     case 27:
-        return (os_context_register_t *) &state->r27;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r27);
     case 28:
-        return (os_context_register_t *) &state->r28;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r28);
     case 29:
-        return (os_context_register_t *) &state->r29;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r29);
     case 30:
-        return (os_context_register_t *) &state->r30;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r30);
     case 31:
-        return (os_context_register_t *) &state->r31;
+        return (os_context_register_t *) &state->PPC_DARWIN_REGIFY(r31);
     case 41:
         /* PT_DAR */
-        return (os_context_register_t *) &context->uc_mcontext->es.dar;
+        return (os_context_register_t *) &context->uc_mcontext->PPC_DARWIN_REGIFY(es).PPC_DARWIN_REGIFY(dar);
     case 42:
         /* PT_DSISR */
-        return (os_context_register_t *) &context->uc_mcontext->es.dsisr;
+        return (os_context_register_t *) &context->uc_mcontext->PPC_DARWIN_REGIFY(es).PPC_DARWIN_REGIFY(dsisr);
     default:
         lose("bad offset to os_context_register_addr");
     }
@@ -118,13 +118,13 @@ os_context_register_addr(os_context_t *context, int offset)
 os_context_register_t *
 os_context_lr_addr(os_context_t *context)
 {
-    return (os_context_register_t *) &context->uc_mcontext->ss.lr;
+    return (os_context_register_t *) &context->uc_mcontext->PPC_DARWIN_REGIFY(ss).PPC_DARWIN_REGIFY(lr);
 }
 
 os_context_register_t *
 os_context_pc_addr(os_context_t *context)
 {
-    return &context->uc_mcontext->ss.srr0;
+  return &context->uc_mcontext->PPC_DARWIN_REGIFY(ss).PPC_DARWIN_REGIFY(srr0);
 }
 
 void
index 984e932..6d23ee2 100644 (file)
@@ -7,6 +7,23 @@ static inline os_context_t *arch_os_get_context(void **void_context)
 {
     return (os_context_t *) *void_context;
 }
+/* As of XCode 3.0, the field names for the thread state have changed
+ * and now are prepended with __. Use some #define hackery to deal
+ * with this. MAC_OS_X_VERSION_10_5 seems to be a good test to see if
+ * we need the new style field names.
+ */
+#if MAC_OS_X_VERSION_10_5
+
+#define PPC_DARWIN_REGIFY(foo) __ ## foo
+
+typedef ppc_thread_state_t ppc_ss_struct_t;
+
+#else
+
+#define PPC_DARWIN_REGIFY(foo) foo
+
+typedef ppc_saved_state_t ppc_ss_struct_t;
+
+#endif /* MAC_OS_X_VERSION_10_5 */
 
-#define DARWIN_FIX_CONTEXT(c) (c->uc_mcontext->ss.xer)^=0x80;
 #endif /* _PPC_DARWIN_OS_H */
index a525908..1a4f796 100644 (file)
@@ -15,6 +15,5 @@ static inline os_context_t *arch_os_get_context(void **void_context)
 #else
 #define CONTEXT_ADDR_FROM_STEM(stem) &context->uc_mcontext->ss.stem
 #endif
-#define DARWIN_FIX_CONTEXT(context)
 
 #endif /* _X86_64_DARWIN_OS_H */
index 4ad51e3..edc3a6c 100644 (file)
@@ -16,8 +16,6 @@ static inline os_context_t *arch_os_get_context(void **void_context)
 void set_data_desc_size(data_desc_t* desc, unsigned long size);
 void set_data_desc_addr(data_desc_t* desc, void* addr);
 
-#define DARWIN_FIX_CONTEXT(context)
-
 /* As of XCode 3.0, the field names for the thread state have changed
  * and now are prepended with __. Use some #define hackery to deal
  * with this. MAC_OS_X_VERSION_10_5 seems to be a good test to see if
index 5e1abdb..ef0c946 100644 (file)
@@ -97,8 +97,8 @@ ldso_stub__ ## fct: ;                           \\
 #!+(and darwin ppc) "
 #define LDSO_STUBIFY(fct)                       @\\
 .text                                           @\\
-.globl  ldso_stub___ ## fct                     @\\
-ldso_stub___ ## fct:                            @\\
+.globl  _ldso_stub___ ## fct                     @\\
+_ldso_stub___ ## fct:                            @\\
         b ldso_stub__ ## fct ## stub            @\\
 .symbol_stub ldso_stub__ ## fct ## stub:        @\\
 .indirect_symbol _ ## fct                       @\\
index 7201ff4..83e3ff0 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.12.14"
+"1.0.12.15"