1 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
7 /* Must match jmp_buf structure layout */
18 * Save stack context for non-local goto
22 /* Get jmp_buf pointer in %edx */
24 /* Save return address */
26 movl %eax, env_retaddr(%edx)
27 /* Save stack pointer */
28 movl %esp, env_stack(%edx)
29 /* Save other registers */
30 movl %ebx, env_ebx(%edx)
31 movl %esi, env_esi(%edx)
32 movl %edi, env_edi(%edx)
33 movl %ebp, env_ebp(%edx)
34 /* Return 0 when returning as setjmp() */
37 .size setjmp, . - setjmp
40 * Non-local jump to a saved stack context
44 /* Get jmp_buf pointer in %edx */
46 /* Get result in %eax */
48 /* Force result to non-zero */
52 1: /* Restore stack pointer */
53 movl env_stack(%edx), %esp
54 /* Restore other registers */
55 movl env_ebx(%edx), %ebx
56 movl env_esi(%edx), %esi
57 movl env_edi(%edx), %edi
58 movl env_ebp(%edx), %ebp
59 /* Replace return address on the new stack */
60 popl %ecx /* discard */
61 pushl env_retaddr(%edx)
62 /* Return to setjmp() caller */
64 .size longjmp, . - longjmp