+ /* Do a setjmp just to explicitly spill callee-saved registers, i.e.
+ * the portable equivalent of:
+ * asm("" : : : "%esi", "%edi", "%ebx");
+ * which is needed because otherwise those registers would be trashed
+ * following the stack unwind, and leave us with a likely crash upon
+ * return to call_into_c.
+ *
+ * The returns_twice attribute on invoke_callback should take care
+ * of this already, but does not seem to take effect, at least with
+ * the version of gcc I am using.
+ *
+ * Note: __builtin_setjmp, not setjmp, because only the former has
+ * the desired effect on the immediate call site. */
+ jmp_buf env;
+ __builtin_setjmp(env);
+