X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fruntime%2Fx86-darwin-os.c;h=323e5497127a929d97b1a1aebc2c806fb4d406a2;hb=ed1910efb36f71b5ebe33b5ffffd7195e15644de;hp=fb57da5d0f579dd735086bedd2988f8ec9805198;hpb=182a7b8391d0abea3f08e06c263b1db25edbf526;p=sbcl.git diff --git a/src/runtime/x86-darwin-os.c b/src/runtime/x86-darwin-os.c index fb57da5..323e549 100644 --- a/src/runtime/x86-darwin-os.c +++ b/src/runtime/x86-darwin-os.c @@ -44,10 +44,6 @@ void set_data_desc_addr(data_desc_t* desc, void* addr) #endif -#ifdef LISP_FEATURE_MACH_EXCEPTION_HANDLER -kern_return_t mach_thread_init(mach_port_t thread_exception_port); -#endif - int arch_os_thread_init(struct thread *thread) { #ifdef LISP_FEATURE_SB_THREAD int n; @@ -79,7 +75,7 @@ int arch_os_thread_init(struct thread *thread) { pthread_setspecific(specials,thread); #endif #ifdef LISP_FEATURE_MACH_EXCEPTION_HANDLER - mach_thread_init(THREAD_STRUCT_TO_EXCEPTION_PORT(thread)); + mach_lisp_thread_init(thread); #endif #ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK @@ -274,7 +270,7 @@ void signal_emulation_wrapper(x86_thread_state32_t *thread_state, /* Trap to restore the signal context. */ asm volatile (".long 0xffff0b0f" - : : "a" (thread_state), "b" (float_state)); + : : "a" (thread_state), "c" (float_state)); } /* Convenience wrapper for the above */ @@ -386,7 +382,6 @@ catch_exception_raise(mach_port_t exception_port, exception_data_t code_vector, mach_msg_type_number_t code_count) { - struct thread *th = (struct thread*) exception_port; x86_thread_state32_t thread_state; mach_msg_type_number_t state_count; vm_address_t region_addr; @@ -400,6 +395,10 @@ catch_exception_raise(mach_port_t exception_port, siginfo_t siginfo; kern_return_t ret, dealloc_ret; + struct thread *th; + + FSHOW((stderr,"/entering catch_exception_raise with exception: %d\n", exception)); + th = *(struct thread**)exception_port; /* Get state and info */ state_count = x86_THREAD_STATE32_COUNT; if ((ret = thread_get_state(thread, @@ -478,7 +477,7 @@ catch_exception_raise(mach_port_t exception_port, lose("thread_set_state (x86_THREAD_STATE32) failed %d\n", ret); if ((ret = thread_set_state(thread, x86_FLOAT_STATE32, - (thread_state_t)thread_state.EBX, + (thread_state_t)thread_state.ECX, x86_FLOAT_STATE32_COUNT)) != KERN_SUCCESS) lose("thread_set_state (x86_FLOAT_STATE32) failed %d\n", ret); break;