+}
+
+/* this is the first thing that runs in the child (which is why the
+ * silly calling convention). Basically it calls the user's requested
+ * lisp function after doing arch_os_thread_init and whatever other
+ * bookkeeping needs to be done
+ */
+int
+new_thread_trampoline(struct thread *th)
+{
+ int result;
+ init_thread_data scribble;
+
+ FSHOW((stderr,"/creating thread %lu\n", thread_self()));
+ check_deferrables_blocked_or_lose(0);
+#ifndef LISP_FEATURE_SB_SAFEPOINT
+ check_gc_signals_unblocked_or_lose(0);
+#endif
+
+ lispobj function = th->no_tls_value_marker;
+ th->no_tls_value_marker = NO_TLS_VALUE_MARKER_WIDETAG;
+ init_new_thread(th, &scribble);
+ result = funcall0(function);
+ undo_init_new_thread(th, &scribble);
+