#endif
.text
- .globl GNAME(foreign_function_call_active)
.globl GNAME(all_threads)
\f
/*
* floats.
*
* This should work for Lisp calls C calls Lisp calls C..
+ *
+ * FIXME & OAOOM: This duplicates call-out in src/compiler/x86/c-call.lisp,
+ * so if you tweak this, change that too!
*/
.text
.align align_16byte,0x90
.globl GNAME(call_into_c)
TYPE(GNAME(call_into_c))
GNAME(call_into_c):
- movl $1,GNAME(foreign_function_call_active)
-
/* Save the return Lisp address in ebx. */
popl %ebx
/* Restore the return value. */
movl %ecx,%eax # maybe return value
- movl $0,GNAME(foreign_function_call_active)
/* Return. */
jmp *%ebx
/* We don't need to restore eax, because the result is in st(0). */
- movl $0,GNAME(foreign_function_call_active)
/* Return. */
jmp *%ebx
xorl %esi,%esi # third arg
/* no longer in function call */
- movl %eax, GNAME(foreign_function_call_active)
-
movl %esp,%ebx # remember current stack
pushl %ebx # Save entry stack on (maybe) new stack.
/* Establish an SEH frame. */
#ifdef LISP_FEATURE_SB_THREAD
/* FIXME: need to save BSP here. */
-#error need to save BSP here, but don't know how yet.
+#error "need to save BSP here, but don't know how yet."
#else
pushl BINDING_STACK_POINTER + SYMBOL_VALUE_OFFSET
#endif