From: Brian Mastenbrook Date: Sun, 2 Dec 2007 17:00:14 +0000 (+0000) Subject: 1.0.12.15: PPC/Darwin fixes X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=02d7495253b9075e4d86275590c3e827c814b596;p=sbcl.git 1.0.12.15: PPC/Darwin fixes * Build fix on Leopard (10.5) thanks to Sidney Markowitz * Finally remove obsolete G5 sigcontext fix as 10.2 is totally old --- diff --git a/src/code/foreign.lisp b/src/code/foreign.lisp index edc559c..fdf3275 100644 --- a/src/code/foreign.lisp +++ b/src/code/foreign.lisp @@ -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) diff --git a/src/runtime/bsd-os.c b/src/runtime/bsd-os.c index c31ea5d..f169720 100644 --- a/src/runtime/bsd-os.c +++ b/src/runtime/bsd-os.c @@ -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 diff --git a/src/runtime/interrupt.c b/src/runtime/interrupt.c index eed61e0..7faea8b 100644 --- a/src/runtime/interrupt.c +++ b/src/runtime/interrupt.c @@ -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 diff --git a/src/runtime/ppc-arch.c b/src/runtime/ppc-arch.c index 11be9fd..5e6b885 100644 --- a/src/runtime/ppc-arch.c +++ b/src/runtime/ppc-arch.c @@ -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 } diff --git a/src/runtime/ppc-darwin-os.c b/src/runtime/ppc-darwin-os.c index dfec5c5..461ae9f 100644 --- a/src/runtime/ppc-darwin-os.c +++ b/src/runtime/ppc-darwin-os.c @@ -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 diff --git a/src/runtime/ppc-darwin-os.h b/src/runtime/ppc-darwin-os.h index 984e932..6d23ee2 100644 --- a/src/runtime/ppc-darwin-os.h +++ b/src/runtime/ppc-darwin-os.h @@ -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 */ diff --git a/src/runtime/x86-64-darwin-os.h b/src/runtime/x86-64-darwin-os.h index a525908..1a4f796 100644 --- a/src/runtime/x86-64-darwin-os.h +++ b/src/runtime/x86-64-darwin-os.h @@ -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 */ diff --git a/src/runtime/x86-darwin-os.h b/src/runtime/x86-darwin-os.h index 4ad51e3..edc3a6c 100644 --- a/src/runtime/x86-darwin-os.h +++ b/src/runtime/x86-darwin-os.h @@ -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 diff --git a/tools-for-build/ldso-stubs.lisp b/tools-for-build/ldso-stubs.lisp index 5e1abdb..ef0c946 100644 --- a/tools-for-build/ldso-stubs.lisp +++ b/tools-for-build/ldso-stubs.lisp @@ -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 @\\ diff --git a/version.lisp-expr b/version.lisp-expr index 7201ff4..83e3ff0 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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"