X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-assem.S;h=f5c6b63037bbf850b9013fd575cab763a3cdfd48;hb=1e9a538c32223df9132c1e7fb2b67a2129c40a8d;hp=a569f241803a602be99a37ade7fc8b8efd87759f;hpb=e365f2f7a9c66d307b48fee70778f4eaa84bdcc0;p=sbcl.git diff --git a/src/runtime/x86-assem.S b/src/runtime/x86-assem.S index a569f24..f5c6b63 100644 --- a/src/runtime/x86-assem.S +++ b/src/runtime/x86-assem.S @@ -141,7 +141,7 @@ GNAME(call_into_lisp_first_time): pushl %ebp # Save old frame pointer. movl %esp,%ebp # Establish new frame. movl %esp,ALIEN_STACK + SYMBOL_VALUE_OFFSET - movl all_threads,%eax + movl GNAME(all_threads),%eax movl THREAD_CONTROL_STACK_START_OFFSET(%eax) ,%esp /* don't think too hard about what happens if we get interrupted * here */ @@ -163,7 +163,7 @@ Lstack: /* Save the NPX state */ fwait # Catch any pending NPX exceptions. subl $108,%esp # Make room for the NPX state. - fnsave (%esp) # resets NPX + fnsave (%esp) # save and reset NPX movl (%esp),%eax # Load NPX control word. andl $0xfffff3ff,%eax # Set rounding mode to nearest. @@ -223,12 +223,12 @@ Ldone: sub $8,%esp # Ensure 3 slots are allocated, one above. mov %ebx,%ebp # Switch to new frame. - /* Indirect the closure. */ call *CLOSURE_FUN_OFFSET(%eax) - /* Multi-value return; blow off any extra values. */ + /* If the function returned multiple values, it will return to + this point. Lose them */ mov %ebx, %esp - /* single value return */ + /* A singled value function returns here */ /* Restore the stack, in case there was a stack change. */ popl %esp # c-sp @@ -672,6 +672,20 @@ GNAME(alloc_16_to_edi): .size GNAME(alloc_16_to_edi),.-GNAME(alloc_16_to_edi) + .align align_4byte,0x90 + .globl GNAME(post_signal_tramp) + .type GNAME(post_signal_tramp),@function +GNAME(post_signal_tramp): + /* this is notionally the second half of a function whose first half + * doesn't exist. This is where call_into_lisp returns when called + * using return_to_lisp_function */ + addl $12,%esp /* clear call_into_lisp args from stack */ + popa /* restore registers */ + popl %ebp + ret + .size GNAME(post_signal_tramp),.-GNAME(post_signal_tramp) + + #ifdef GENCGC_INLINE_ALLOC /* LISP_FEATURE_GENCGC */